From bab59844ff0d6769765f1922067dc2953461b7af Mon Sep 17 00:00:00 2001 From: rlar Date: Sat, 19 Nov 2016 12:44:35 +0100 Subject: [PATCH] subckt.c, emphasize instance_name translation When translating an instance_name in a subcircuit instance 'xfoo' undconditionally express the exception for 'x' instances, which is: x42 --> xsub.x42 but for all others the first char (the devtype) is prepended r42 --> r.xsub.r42 --- src/frontend/subckt.c | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/frontend/subckt.c b/src/frontend/subckt.c index a9a68443e..d1a96caf0 100644 --- a/src/frontend/subckt.c +++ b/src/frontend/subckt.c @@ -878,7 +878,7 @@ translate(struct line *deck, char *formal, char *actual, char *scname, const cha { struct line *c; struct bxx_buffer buffer; - char *next_name, dev_type, *name, *s, *t, ch, *nametofree, *paren_ptr; + char *next_name, dev_type, *name, *s, *t, *nametofree, *paren_ptr; int nnodes, i, dim; int rtn = 0; @@ -960,7 +960,10 @@ translate(struct line *deck, char *formal, char *actual, char *scname, const cha name = MIFgettok(&s); bxx_rewind(&buffer); - bxx_printf(&buffer, "%c.%s.%s", name[0], scname, name); + if (name[0] != 'x') + bxx_printf(&buffer, "%c.%s.%s", name[0], scname, name); + else + bxx_printf(&buffer, "%s.%s", scname, name); bxx_putc(&buffer, ' '); @@ -1056,9 +1059,11 @@ translate(struct line *deck, char *formal, char *actual, char *scname, const cha /* Here's where we translate the refdes to e.g. F:subcircuitname:57 * and stick the translated name into buffer. */ - ch = *name; /* ch identifies the type of component */ bxx_rewind(&buffer); - bxx_printf(&buffer, "%c.%s.%s", ch, scname, name); + if (name[0] != 'x') + bxx_printf(&buffer, "%c.%s.%s", name[0], scname, name); + else + bxx_printf(&buffer, "%s.%s", scname, name); tfree(t); bxx_putc(&buffer, ' '); @@ -1149,9 +1154,10 @@ translate(struct line *deck, char *formal, char *actual, char *scname, const cha printf("In translate, found type f or h\n"); #endif - ch = *name; /* ch is the first char of the token. */ - - bxx_printf(&buffer, "%c.%s.%s", ch, scname, name); + if (name[0] != 'x') + bxx_printf(&buffer, "%c.%s.%s", name[0], scname, name); + else + bxx_printf(&buffer, "%s.%s", scname, name); /* From Vsense and Urefdes creates V.Urefdes.sense */ } else { /* Handle netname */ @@ -1197,12 +1203,11 @@ translate(struct line *deck, char *formal, char *actual, char *scname, const cha /* Here's where we translate the refdes to e.g. R:subcircuitname:57 * and stick the translated name into buffer. */ - ch = *name; bxx_rewind(&buffer); - if (ch != 'x') - bxx_printf(&buffer, "%c.%s.%s", ch, scname, name); + if (name[0] != 'x') + bxx_printf(&buffer, "%c.%s.%s", name[0], scname, name); else bxx_printf(&buffer, "%s.%s", scname, name); @@ -1244,10 +1249,9 @@ translate(struct line *deck, char *formal, char *actual, char *scname, const cha fprintf(cp_err, "Error: too few devs: %s\n", c->li_line); goto quit; } - ch = *name; - if (ch != 'x') - bxx_printf(&buffer, "%c.%s.%s", ch, scname, name); + if (name[0] != 'x') + bxx_printf(&buffer, "%c.%s.%s", name[0], scname, name); else bxx_printf(&buffer, "%s.%s", scname, name); @@ -1358,8 +1362,10 @@ finishLine(struct bxx_buffer *t, char *src, char *scname) /* * i(instance_name) --> i(instance_name[0].subckt.instance_name) */ - bxx_putc(t, buf[0]); - bxx_putc(t, '.'); + if (buf[0] != 'x') { + bxx_putc(t, buf[0]); + bxx_putc(t, '.'); + } bxx_put_cstring(t, scname); bxx_putc(t, '.'); bxx_put_substring(t, buf, buf_end);