ngspice/src/frontend/com_set.c

57 lines
1.3 KiB
C

#include "ngspice/ngspice.h"
#include "ngspice/bool.h"
#include "ngspice/wordlist.h"
#include "variable.h"
#include "com_set.h"
/* The set command. Syntax is set [opt ...] [opt = val ...]. Val may
* be a string, an int, a float, or a list of the form (elt1 elt2
* ...). */
void
com_set(wordlist *wl)
{
struct variable *vars, *oldvar;
if (wl == NULL) {
cp_vprint();
return;
}
vars = cp_setparse(wl);
/* This is sort of a hassle... */
while (vars) {
void *s;
switch (vars->va_type) {
case CP_BOOL:
s = &vars->va_bool;
break;
case CP_NUM:
s = &vars->va_num;
break;
case CP_REAL:
s = &vars->va_real;
break;
case CP_STRING:
s = vars->va_string;
break;
case CP_LIST:
s = vars->va_vlist;
break;
default:
s = NULL;
}
cp_vset(vars->va_name, vars->va_type, s);
oldvar = vars;
vars = vars->va_next;
/* va: avoid memory leak: free oldvar carefully */
tfree(oldvar->va_name);
if (oldvar->va_type == CP_STRING)
tfree(oldvar->va_string); /* copied in cp_vset */
/* don't free oldvar->va_list! This structure is used furthermore! */
tfree(oldvar);
}
}