From 7d59ad2db7060d9d162190c53dffa4beae73af25 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Sun, 24 Nov 2024 14:34:59 +0100 Subject: [PATCH] Create extra name derived from node name, but with / replaced by _, to become part of the new voltage source name: avoid names which are not parsed correctly by the B source equation parser. --- src/frontend/inpc_probe.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/frontend/inpc_probe.c b/src/frontend/inpc_probe.c index 5642420b9..5004e1452 100644 --- a/src/frontend/inpc_probe.c +++ b/src/frontend/inpc_probe.c @@ -1376,13 +1376,21 @@ static int setallvsources(struct card *tmpcard, NGHASHPTR instances, char *instn } char* begstr = copy_substring(tmpcard->line, instline); char* strnode1 = gettok(&instline); - char* newnode = tprintf("probe_int_%s_%s_%d", strnode1, instname, nodenum); + + /* node name becomes part of a new v-source name, don't allow / in node name (aka /VT). + Replace by _ (_VT). + Otherwise the B source function parser fails with i() not found. */ + char* strnode1name = copy(strnode1); + if (strnode1name[0] == '/') + strnode1name[0] = '_'; + char* newnode = tprintf("probe_int_%s_%s_%d", strnode1name, instname, nodenum); char nodenumstr[3]; char *nodename1 = get_terminal_name(instname, itoa10(nodenum, nodenumstr), instances); if (!nodename1) { tfree(begstr); tfree(strnode1); + tfree(strnode1name); ds_free(&BVrefline); ds_free(&Bpowerline); ds_free(&Bpowersave); @@ -1391,7 +1399,7 @@ static int setallvsources(struct card *tmpcard, NGHASHPTR instances, char *instn newline = tprintf("%s %s %s", begstr, newnode, instline); - char* vline = tprintf("vcurr_%s:probe_int_%s:%s_%s %s %s 0", instname, nodename1, nodenumstr, strnode1, strnode1, newnode); + char* vline = tprintf("vcurr_%s:probe_int_%s:%s_%s %s %s 0", instname, nodename1, nodenumstr, strnode1name, strnode1, newnode); tfree(tmpcard->line); tmpcard->line = newline; @@ -1423,7 +1431,7 @@ static int setallvsources(struct card *tmpcard, NGHASHPTR instances, char *instn cadd(&Bpowerline, ':'); sadd(&Bpowerline, nodenumstr); cadd(&Bpowerline, '_'); - sadd(&Bpowerline, strnode1); + sadd(&Bpowerline, strnode1name); cadd(&Bpowerline, ')'); allsaves = wl_cons(copy(ds_get_buf(&Bpowersave)), allsaves); @@ -1431,6 +1439,7 @@ static int setallvsources(struct card *tmpcard, NGHASHPTR instances, char *instn tfree(begstr); tfree(strnode1); + tfree(strnode1name); tfree(newnode); tfree(nodename1); }