inpcom.c: repeated call to inp_fix_ternary_operator_str

in inp_fix_ternary_operator, only lines beginning with .
selected, comments updated
This commit is contained in:
h_vogt 2013-10-03 15:16:08 +02:00 committed by rlar
parent 4a20c45db2
commit 0d1666da29
1 changed files with 13 additions and 16 deletions

View File

@ -1968,6 +1968,11 @@ inp_fix_ternary_operator_str(char *line, bool all)
}
/* a>b?c:b ---> ternary_fcn(a>b, c, d)
for .func, .param, and .meas lines.
ternary functions for r, l, and c lines are handled in inp_compat(),
ternary functions in B-source are handled by the B-source parser */
static void
inp_fix_ternary_operator(struct line *card)
{
@ -1977,25 +1982,17 @@ inp_fix_ternary_operator(struct line *card)
char *line = card->li_line;
if (*line == '*')
if (*line != '.')
continue;
/* exclude replacement of ternary function between .control and .endc */
if (ciprefix(".control", line))
found_control = TRUE;
if (ciprefix(".endc", line))
found_control = FALSE;
if (found_control)
continue;
/* ternary operator for B source done elsewhere */
if (*line == 'B' || *line == 'b')
continue;
/* .param, .func, and .meas lines handled here (2nd argument FALSE) */
if (strchr(line, '?') && strchr(line, ':'))
/* .param, .func, and .meas lines handled here (2nd argument FALSE).
The while loop cares for two or more ternary functions at top level,
nesting is taken care of by recursive action inside of
inp_fix_ternary_operator_str */
while (strchr(line, '?') && strchr(line, ':')) {
card->li_line = inp_fix_ternary_operator_str(line, FALSE);
line = card->li_line;
}
}
}