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
This commit is contained in:
rlar 2016-11-19 12:44:35 +01:00
parent e3b3cc502a
commit bab59844ff
1 changed files with 21 additions and 15 deletions

View File

@ -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);