replace & with && and | with || and *# with * #

This commit is contained in:
Holger Vogt 2018-05-18 15:15:38 +02:00
parent ae9cc17aff
commit 13ca544d15
1 changed files with 66 additions and 0 deletions

View File

@ -6342,6 +6342,7 @@ static struct card *
pspice_compat(struct card *oldcard)
{
struct card *card, *newcard, *nextcard;
int skip_control = 0;
/* add predefined params TEMP, VT, GMIN to beginning of deck */
char *new_str = copy(".param temp = 'temper - 273.15'");
@ -6377,5 +6378,70 @@ pspice_compat(struct card *oldcard)
nextcard = insert_new_line(nextcard, new_str, 1, 0);
}
}
/* replace & with && and | with || and *# with * # */
for (card = newcard; card; card = card->nextcard) {
char *t;
char *cut_line = card->line;
/* we don't have command lines in a PSPICE model */
if (ciprefix("*#", cut_line)) {
char *tmpstr = tprintf("* #%s", cut_line + 2);
tfree(card->line);
card->line = tmpstr;
continue;
}
if (*cut_line == '*')
continue;
/* exclude any command inside .control ... .endc */
if (ciprefix(".control", cut_line)) {
skip_control++;
continue;
}
else if (ciprefix(".endc", cut_line)) {
skip_control--;
continue;
}
else if (skip_control > 0) {
continue;
}
if ((t = strstr(card->line, "&")) != NULL) {
while (t && (t[1] != '&')) {
char *tt = NULL;
char *tn = copy(t + 1);/*skip |*/
char *strbeg = copy_substring(card->line, t);
tfree(card->line);
card->line = tprintf("%s&&%s", strbeg, tn);
tfree(strbeg);
tfree(tn);
t = card->line;
while ((t = strstr(t, "&&")) != NULL)
tt = t = t + 2;
if (!tt)
break;
else
t = strstr(tt, "&");
}
}
if ((t = strstr(card->line, "|")) != NULL) {
while (t && (t[1] != '|')) {
char *tt = NULL;
char *tn = copy(t + 1);/*skip |*/
char *strbeg = copy_substring(card->line, t);
tfree(card->line);
card->line = tprintf("%s||%s", strbeg, tn);
tfree(strbeg);
tfree(tn);
t = card->line;
while ((t = strstr(t, "||")) != NULL)
tt = t = t + 2;
if (!tt)
break;
else
t = strstr(tt, "|");
}
}
}
return newcard;
}