Add error checking when parsing the .dc or dc commands.
This commit is contained in:
parent
005aad92d7
commit
99ed8ceb66
|
|
@ -288,8 +288,8 @@ dot_dc(char *line, CKTcircuit *ckt, INPtables *tab, struct card *current,
|
|||
|
||||
NG_IGNORE(gnode);
|
||||
|
||||
/* .dc SRC1NAME Vstart1 Vstop1 Vinc1 [SRC2NAME Vstart2 */
|
||||
/* Vstop2 Vinc2 */
|
||||
/* .dc SRC1NAME Vstart1 Vstop1 Vinc1 [SRC2NAME Vstart2 Vstop2 Vinc2]
|
||||
Return 1 upon error because of bad syntax (missing tokens).*/
|
||||
which = ft_find_analysis("DC");
|
||||
if (which == -1) {
|
||||
LITERR("DC transfer curve analysis unsupported\n");
|
||||
|
|
@ -297,23 +297,37 @@ dot_dc(char *line, CKTcircuit *ckt, INPtables *tab, struct card *current,
|
|||
}
|
||||
IFC(newAnalysis, (ckt, which, "DC transfer characteristic", &foo, task));
|
||||
INPgetTok(&line, &name, 1);
|
||||
if (*name == '\0')
|
||||
return 1;
|
||||
INPinsert(&name, tab);
|
||||
ptemp.uValue = name;
|
||||
GCA(INPapName, (ckt, which, foo, "name1", &ptemp));
|
||||
if (*line == '\0')
|
||||
return 1;
|
||||
parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vstart1 */
|
||||
GCA(INPapName, (ckt, which, foo, "start1", parm));
|
||||
if (*line == '\0')
|
||||
return 1;
|
||||
parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vstop1 */
|
||||
GCA(INPapName, (ckt, which, foo, "stop1", parm));
|
||||
if (*line == '\0')
|
||||
return 1;
|
||||
parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vinc1 */
|
||||
GCA(INPapName, (ckt, which, foo, "step1", parm));
|
||||
if (*line) {
|
||||
INPgetTok(&line, &name, 1);
|
||||
if (*line == '\0')
|
||||
return 1;
|
||||
INPinsert(&name, tab);
|
||||
ptemp.uValue = name;
|
||||
GCA(INPapName, (ckt, which, foo, "name2", &ptemp));
|
||||
parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vstart2 */
|
||||
if (*line == '\0')
|
||||
return 1;
|
||||
GCA(INPapName, (ckt, which, foo, "start2", parm));
|
||||
parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vstop2 */
|
||||
if (*line == '\0')
|
||||
return 1;
|
||||
GCA(INPapName, (ckt, which, foo, "stop2", parm));
|
||||
parm = INPgetValue(ckt, &line, IF_REAL, tab); /* vinc2 */
|
||||
GCA(INPapName, (ckt, which, foo, "step2", parm));
|
||||
|
|
@ -861,6 +875,9 @@ INP2dot(CKTcircuit *ckt, INPtables *tab, struct card *current, TSKtask *task, CK
|
|||
goto quit;
|
||||
} else if ((strcmp(token, ".dc") == 0)) {
|
||||
rtn = dot_dc(line, ckt, tab, current, task, gnode, foo);
|
||||
if (rtn == 1) {
|
||||
current->error = copy("Bad syntax! ");
|
||||
}
|
||||
goto quit;
|
||||
} else if ((strcmp(token, ".tf") == 0)) {
|
||||
rtn = dot_tf(line, ckt, tab, current, task, gnode, foo);
|
||||
|
|
|
|||
Loading…
Reference in New Issue