/***********
* $Id: vars.c,v 1.4 2001/05/30 15:45:19 harbourn Exp $
* Runtime variable handeling module for fatback
***********/
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include "vars.h"
#include "util.h"
/* This is a symbol table containing all the global variables used by the
* program. These can be accessed by the user via the "set" command */
fbvar_t vars[] =
{
{"verbose", FB_BOOL, {0}},
{"sectsize", FB_INT, {0}},
{"prompt", FB_STRING, {0}},
{"showall", FB_BOOL, {0}},
{"deleted_prefix", FB_STRING, {0}},
{NULL, 0, {0}}
};
/*
* Change a value of a variable in the vars[] array.
*/
int set_fbvar(char *varname, ...)
{
int i, found = 0;
va_list arg_list;
va_start(arg_list, varname);
for (i = 0; !found && vars[i].name; i++) {
if (strcmp(vars[i].name, varname) == 0) {
unsigned int iarg;
char *sarg;
found++;
switch (vars[i].type) {
case FB_BOOL:
sarg = va_arg(arg_list, char *);
if (strcmp(sarg, "on") == 0)
vars[i].val.bval = 1;
else if (strcmp(sarg, "off") == 0)
vars[i].val.bval = 0;
break;
case FB_INT:
iarg = va_arg(arg_list, unsigned int);
vars[i].val.ival = iarg;
break;
case FB_STRING:
sarg = va_arg(arg_list, char *);
vars[i].val.sval = strdup(sarg);
break;
}
}
}
va_end(arg_list);
return found ? 0 : 1;
}
/*
* Get the value of a variable in the vars[] array.
* This currently returns a copy of the structure, this should be changed.
*/
fbvar_t *get_fbvar(char *varname)
{
int i;
fbvar_t *retval = NULL;
for (i = 0; !retval && vars[i].name; i++)
if (strcmp(vars[i].name, varname) == 0) {
retval = emalloc(sizeof *retval);
memcpy(retval, &vars[i], sizeof *retval);
}
return retval;
}
syntax highlighted by Code2HTML, v. 0.9.1