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 *
|
||||
if_getstat(CKTcircuit *ckt, char *name)
|
||||
{
|
||||
int i;
|
||||
struct variable *v, *vars;
|
||||
IFvalue parm;
|
||||
int which = -1;
|
||||
int options_idx, i;
|
||||
IFanalysis *options;
|
||||
IFvalue parm;
|
||||
|
||||
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");
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
options = ft_sim->analyses[options_idx];
|
||||
|
||||
if (name) {
|
||||
i = ft_find_analysis_parm(which, name);
|
||||
|
||||
i = ft_find_analysis_parm(options_idx, name);
|
||||
|
||||
if (i < 0)
|
||||
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)
|
||||
{
|
||||
fprintf(cp_err, "if_getstat: Internal Error: can't get %s\n", name);
|
||||
return (NULL);
|
||||
}
|
||||
return (parmtovar(&parm, &(ft_sim->analyses[which]->analysisParms[i])));
|
||||
|
||||
return (parmtovar(&parm, &(options->analysisParms[i])));
|
||||
|
||||
} 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;
|
||||
if (ft_sim->askAnalysisQuest (ckt, &(ft_curckt->ci_curTask->taskOptions),
|
||||
ft_sim->analyses[which]->analysisParms[i].id,
|
||||
&parm, NULL) == -1) {
|
||||
fprintf(cp_err,
|
||||
"if_getstat: Internal Error: can't get %s\n",
|
||||
name);
|
||||
|
||||
if (ft_sim->askAnalysisQuest (ckt,
|
||||
&(ft_curckt->ci_curTask->taskOptions),
|
||||
options->analysisParms[i].id, &parm,
|
||||
NULL) == -1)
|
||||
{
|
||||
fprintf(cp_err, "if_getstat: Internal Error: can't get %s\n", name);
|
||||
return (NULL);
|
||||
}
|
||||
if (v) {
|
||||
v->va_next =
|
||||
parmtovar(&parm, &(ft_sim->analyses[which]->analysisParms[i]));
|
||||
v = v->va_next;
|
||||
} else {
|
||||
vars = v =
|
||||
parmtovar(&parm, &(ft_sim->analyses[which]->analysisParms[i]));
|
||||
}
|
||||
|
||||
*v = parmtovar(&parm, &(options->analysisParms[i]));
|
||||
v = &((*v)->va_next);
|
||||
}
|
||||
|
||||
return (vars);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue