57 lines
1.3 KiB
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);
|
|
}
|
|
}
|