diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c index 404d02fa1..984e8d467 100644 --- a/src/frontend/inpcom.c +++ b/src/frontend/inpcom.c @@ -6337,6 +6337,47 @@ inp_meas_current(struct card *deck) } } +/* replace the E source TABLE function by a B source pwl + (used by ST OpAmps and comparators). + E_RO_3 VB_3 VB_4 VALUE={ TABLE( V(VCCP,VCCN), 2 , 35 , 3.3 , 15 , 5 , 10 )*I(VreadIo)} + will become + BE_RO_3_1 TABLE_NEW_1 0 v = pwl( V(VCCP,VCCN), 2 , 35 , 3.3 , 15 , 5 , 10 ) + E_RO_3 VB_3 VB_4 VALUE={ V(TABLE_NEW_1)*I(VreadIo)} +*/ +static void +replace_table(struct card *startcard) +{ + struct card *card; + static int numb = 0; + for (card = startcard; card; card = card->nextcard) { + char *cut_line = card->line; + if (*cut_line == 'e') { + char *valp = strstr(cut_line, "value={"); + if (valp) { + char *ftablebeg = strstr(cut_line, "table("); + while (ftablebeg) { + /* get the beginning of the line */ + char *begline = copy_substring(cut_line, ftablebeg); + /* get the table function */ + char *tabfun = gettok_char(&ftablebeg, ')', TRUE, TRUE); + /* the new e line */ + char *neweline = tprintf("%s v(table_new_%d)%s", begline, numb, ftablebeg); + char *newbline = tprintf("btable_new_%d table_new_%d 0 v=pwl%s", numb, numb, tabfun+5); + numb++; + tfree(tabfun); + tfree(begline); + tfree(card->line); + card->line = cut_line = neweline; + insert_new_line(card, newbline, 0, 0); + /* read next TABLE function in cut_line */ + ftablebeg = strstr(cut_line, "table("); + } + continue; + } + } + } +} + /* in out von cntl_on voff cntl_off @@ -6388,6 +6429,9 @@ pspice_compat(struct card *oldcard) struct card *card, *newcard, *nextcard; int skip_control = 0; + /* replace TABLE function in E source */ + replace_table(oldcard); + /* add predefined params TEMP, VT, GMIN to beginning of deck */ char *new_str = copy(".param temp = 'temper - 273.15'"); newcard = insert_new_line(NULL, new_str, 1, 0);