if_getstat(), rewrite
This commit is contained in:
parent
fc2dd436fe
commit
31b455afd4
|
|
@ -1276,51 +1276,59 @@ if_tranparams(struct circ *ci, double *start, double *stop, double *step)
|
||||||
struct variable *
|
struct variable *
|
||||||
if_getstat(CKTcircuit *ckt, char *name)
|
if_getstat(CKTcircuit *ckt, char *name)
|
||||||
{
|
{
|
||||||
int i;
|
int options_idx, i;
|
||||||
struct variable *v, *vars;
|
IFanalysis *options;
|
||||||
IFvalue parm;
|
IFvalue parm;
|
||||||
int which = -1;
|
|
||||||
|
|
||||||
which = ft_find_analysis("options");
|
options_idx = ft_find_analysis("options");
|
||||||
|
|
||||||
if (which == -1) {
|
if (options_idx == -1) {
|
||||||
fprintf(cp_err, "Warning: statistics unsupported\n");
|
fprintf(cp_err, "Warning: statistics unsupported\n");
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
options = ft_sim->analyses[options_idx];
|
||||||
|
|
||||||
if (name) {
|
if (name) {
|
||||||
i = ft_find_analysis_parm(which, name);
|
|
||||||
|
i = ft_find_analysis_parm(options_idx, name);
|
||||||
|
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
if (ft_sim->askAnalysisQuest (ckt, &(ft_curckt->ci_curTask->taskOptions),
|
|
||||||
ft_sim->analyses[which]->analysisParms[i].id, &parm,
|
if (ft_sim->askAnalysisQuest (ckt,
|
||||||
|
&(ft_curckt->ci_curTask->taskOptions),
|
||||||
|
options->analysisParms[i].id, &parm,
|
||||||
NULL) == -1)
|
NULL) == -1)
|
||||||
{
|
{
|
||||||
fprintf(cp_err, "if_getstat: Internal Error: can't get %s\n", name);
|
fprintf(cp_err, "if_getstat: Internal Error: can't get %s\n", name);
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
return (parmtovar(&parm, &(ft_sim->analyses[which]->analysisParms[i])));
|
|
||||||
|
return (parmtovar(&parm, &(options->analysisParms[i])));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
for (i = 0, vars = v = NULL; i < ft_sim->analyses[which]->numParms; i++) {
|
|
||||||
if (!(ft_sim->analyses[which]->analysisParms[i].dataType & IF_ASK))
|
struct variable *vars = NULL, **v = &vars;
|
||||||
|
|
||||||
|
for (i = 0; i < options->numParms; i++) {
|
||||||
|
|
||||||
|
if (!(options->analysisParms[i].dataType & IF_ASK))
|
||||||
continue;
|
continue;
|
||||||
if (ft_sim->askAnalysisQuest (ckt, &(ft_curckt->ci_curTask->taskOptions),
|
|
||||||
ft_sim->analyses[which]->analysisParms[i].id,
|
if (ft_sim->askAnalysisQuest (ckt,
|
||||||
&parm, NULL) == -1) {
|
&(ft_curckt->ci_curTask->taskOptions),
|
||||||
fprintf(cp_err,
|
options->analysisParms[i].id, &parm,
|
||||||
"if_getstat: Internal Error: can't get %s\n",
|
NULL) == -1)
|
||||||
name);
|
{
|
||||||
|
fprintf(cp_err, "if_getstat: Internal Error: can't get %s\n", name);
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
if (v) {
|
|
||||||
v->va_next =
|
*v = parmtovar(&parm, &(options->analysisParms[i]));
|
||||||
parmtovar(&parm, &(ft_sim->analyses[which]->analysisParms[i]));
|
v = &((*v)->va_next);
|
||||||
v = v->va_next;
|
|
||||||
} else {
|
|
||||||
vars = v =
|
|
||||||
parmtovar(&parm, &(ft_sim->analyses[which]->analysisParms[i]));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (vars);
|
return (vars);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue