inpcom.c: correct replacement of vccs, vcvs in E, G-sources
search for 'par(' instead of 'par'
This commit is contained in:
parent
01ed0ac5d9
commit
e69f50270d
|
|
@ -89,6 +89,7 @@ static void inp_fix_gnd_name(struct line *deck);
|
|||
static void inp_chk_for_multi_in_vcvs(struct line *deck, int *line_number);
|
||||
static void inp_add_control_section(struct line *deck, int *line_number);
|
||||
static char *get_quoted_token(char *string, char **token);
|
||||
static void replace_token(char *string, char *token, int where, int total);
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
Read the entire input file and return a pointer to the first line of
|
||||
|
|
@ -4262,12 +4263,7 @@ inp_compat(struct line *deck)
|
|||
if (*curr_line == 'e') {
|
||||
/* Exxx n1 n2 VCVS n3 n4 gain --> Exxx n1 n2 n3 n4 gain
|
||||
remove vcvs */
|
||||
if ((str_ptr = strstr(curr_line, "vcvs")) != NULL) {
|
||||
*str_ptr = ' ';
|
||||
*(str_ptr + 1) = ' ';
|
||||
*(str_ptr + 2) = ' ';
|
||||
*(str_ptr + 3) = ' ';
|
||||
}
|
||||
replace_token(curr_line, "vcvs", 4, 7);
|
||||
|
||||
/* Exxx n1 n2 value={equation}
|
||||
-->
|
||||
|
|
@ -4459,12 +4455,7 @@ inp_compat(struct line *deck)
|
|||
} else if (*curr_line == 'g') {
|
||||
/* Gxxx n1 n2 VCCS n3 n4 tr --> Gxxx n1 n2 n3 n4 tr
|
||||
remove vccs */
|
||||
if ((str_ptr = strstr(curr_line, "vccs")) != NULL) {
|
||||
*str_ptr = ' ';
|
||||
*(str_ptr + 1) = ' ';
|
||||
*(str_ptr + 2) = ' ';
|
||||
*(str_ptr + 3) = ' ';
|
||||
}
|
||||
replace_token(curr_line, "vccs", 4, 7);
|
||||
|
||||
/* Gxxx n1 n2 value={equation}
|
||||
-->
|
||||
|
|
@ -5031,13 +5022,14 @@ inp_compat(struct line *deck)
|
|||
|
||||
* ----------------------------------------------------------------- */
|
||||
if (ciprefix(".meas", curr_line)) {
|
||||
if (strstr(curr_line, "par") == NULL)
|
||||
if (strstr(curr_line, "par(") == NULL)
|
||||
continue;
|
||||
cut_line = curr_line;
|
||||
// search for 'par'
|
||||
while ((str_ptr = strstr(cut_line, "par")) != NULL) {
|
||||
// search for 'par('
|
||||
while ((str_ptr = strstr(cut_line, "par(")) != NULL) {
|
||||
if (pai > 99) {
|
||||
fprintf(stderr, "ERROR: No more than 99 'par' per input file\n");
|
||||
fprintf(stderr, "ERROR: More than 99 function calls to par()\n");
|
||||
fprintf(stderr, " Limited to 99 per input file\n");
|
||||
controlled_exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
|
@ -5150,13 +5142,14 @@ inp_compat(struct line *deck)
|
|||
(ciprefix(".print", curr_line)) ||
|
||||
(ciprefix(".plot", curr_line)))
|
||||
{
|
||||
if (strstr(curr_line, "par") == NULL)
|
||||
if (strstr(curr_line, "par(") == NULL)
|
||||
continue;
|
||||
cut_line = curr_line;
|
||||
// search for 'par'
|
||||
while ((str_ptr = strstr(cut_line, "par")) != NULL) {
|
||||
// search for 'par('
|
||||
while ((str_ptr = strstr(cut_line, "par(")) != NULL) {
|
||||
if (pai > 99) {
|
||||
fprintf(stderr, "ERROR: No more than 99 'par' per input file!\n");
|
||||
fprintf(stderr, "ERROR: More than 99 function calls to par()\n");
|
||||
fprintf(stderr, " Limited to 99 per input file\n");
|
||||
controlled_exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
|
@ -5234,7 +5227,7 @@ inp_compat(struct line *deck)
|
|||
// nothing to replace
|
||||
else
|
||||
cut_line = str_ptr + 1;
|
||||
} // while 'par'
|
||||
} // while 'par('
|
||||
// no replacement done, go to next line
|
||||
if (pai == paui)
|
||||
continue;
|
||||
|
|
@ -5272,6 +5265,39 @@ inp_compat(struct line *deck)
|
|||
}
|
||||
}
|
||||
|
||||
/* replace a token (length 4 char) in string by spaces, if it is found
|
||||
at the correct position and the total number of tokens is o.k. */
|
||||
static void
|
||||
replace_token(char *string, char *token, int wherereplace, int total)
|
||||
{
|
||||
char *nexttoken;
|
||||
int count = 0, i;
|
||||
char *actstring = string;
|
||||
|
||||
/* token to be replaced not in string */
|
||||
if (strstr(string, token) == NULL)
|
||||
return;
|
||||
|
||||
/* get total number of tokens */
|
||||
while (*actstring) {
|
||||
nexttoken = gettok(&actstring);
|
||||
count++;
|
||||
}
|
||||
/* If total number of tokens correct */
|
||||
if (count == total) {
|
||||
actstring = string;
|
||||
for (i = 1; i < wherereplace; i++)
|
||||
nexttoken = gettok(&actstring);
|
||||
/* If token to be replaced at right position */
|
||||
if (ciprefix(token, actstring)) {
|
||||
*actstring = ' ';
|
||||
*(actstring + 1) = ' ';
|
||||
*(actstring + 2) = ' ';
|
||||
*(actstring + 3) = ' ';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* lines for B sources: no parsing in numparam code, just replacement of parameters.
|
||||
Parsing done in B source parser.
|
||||
|
|
|
|||
Loading…
Reference in New Issue