subckt.c, devmodtranslate(), rewrite using bxx_ facility

This commit is contained in:
rlar 2016-11-14 18:10:46 +01:00
parent 4d69002144
commit 6b78ed4367
1 changed files with 74 additions and 69 deletions

View File

@ -1637,11 +1637,17 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
{
int found;
struct bxx_buffer buffer;
bxx_init(&buffer);
for (; s; s = s->li_next) {
char *buffer, *t, c, *name, *next_name;
char *t, c, *name, *next_name;
wordlist *wlsub;
bxx_rewind(&buffer);
t = s->li_line;
#ifdef TRACE
@ -1654,8 +1660,6 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
if (isupper_c(c))
c = tolower_c(c);
buffer = TMALLOC(char, strlen(t) + strlen(subname) + 4);
switch (c) {
#ifdef XSPICE
@ -1674,7 +1678,7 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
/* first do refdes. */
name = gettok(&t); /* get refdes */
(void) sprintf(buffer, "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
/* now do remainder of line. */
@ -1690,7 +1694,7 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
} else {
/* next_name holds something. Write name into the buffer and continue. */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
}
} /* while */
@ -1703,9 +1707,9 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
wlsub = wl_find(name, orig_modnames);
if (!wlsub)
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
else
(void) sprintf(buffer + strlen(buffer), "%s:%s ", subname, name);
bxx_printf(&buffer, "%s:%s ", subname, name);
tfree(name);
@ -1714,9 +1718,9 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
printf("In devmodtranslate, translated codemodel line= %s\n", buffer);
#endif
(void) strcat(buffer, t);
bxx_put_cstring(&buffer, t);
tfree(s->li_line);
s->li_line = buffer;
s->li_line = copy(bxx_buffer(&buffer));
break;
#endif /* XSPICE */
@ -1725,13 +1729,13 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
case 'c':
case 'l':
name = gettok(&t); /* get refdes */
(void) sprintf(buffer, "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* get first netname */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* get second netname */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
if (*t) { /* if there is a model, process it. . . . */
@ -1739,9 +1743,9 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
wlsub = wl_find(name, orig_modnames);
if (!wlsub)
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
else
(void) sprintf(buffer + strlen(buffer), "%s:%s ", subname, name);
bxx_printf(&buffer, "%s:%s ", subname, name);
tfree(name);
}
@ -1750,40 +1754,40 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
wlsub = wl_find(name, orig_modnames);
if (!wlsub)
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
else
(void) sprintf(buffer + strlen(buffer), "%s:%s ", subname, name);
bxx_printf(&buffer, "%s:%s ", subname, name);
tfree(name);
}
(void) strcat(buffer, t);
bxx_put_cstring(&buffer, t);
tfree(s->li_line);
s->li_line = buffer;
s->li_line = copy(bxx_buffer(&buffer));
break;
case 'd':
name = gettok(&t); /* get refdes */
(void) sprintf(buffer, "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* get first attached netname */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* get second attached netname */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok(&t);
wlsub = wl_find(name, orig_modnames);
if (!wlsub)
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
else
(void) sprintf(buffer + strlen(buffer), "%s:%s ", subname, name);
bxx_printf(&buffer, "%s:%s ", subname, name);
tfree(name);
(void) strcat(buffer, t);
bxx_put_cstring(&buffer, t);
tfree(s->li_line);
s->li_line = buffer;
s->li_line = copy(bxx_buffer(&buffer));
break;
case 'u': /* urc transmissionline */
@ -1792,30 +1796,30 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
case 'j': /* jfet */
case 'z': /* hfet, mesa */
name = gettok(&t);
(void) sprintf(buffer, "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok(&t);
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok(&t);
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok(&t);
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok(&t);
wlsub = wl_find(name, orig_modnames);
if (!wlsub)
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
else
(void) sprintf(buffer + strlen(buffer), "%s:%s ", subname, name);
bxx_printf(&buffer, "%s:%s ", subname, name);
tfree(name);
(void) strcat(buffer, t);
bxx_put_cstring(&buffer, t);
tfree(s->li_line);
s->li_line = buffer;
s->li_line = copy(bxx_buffer(&buffer));
break;
/* 4 terminal devices */
@ -1827,51 +1831,51 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
which occur in real Analog Devices SPICE models.
*/
name = gettok(&t); /* get refdes */
(void) sprintf(buffer, "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* get first attached netname */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* get second attached netname */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* get third attached netname */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* get fourth attached netname */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok(&t);
wlsub = wl_find(name, orig_modnames);
if (!wlsub)
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
else
(void) sprintf(buffer + strlen(buffer), "%s:%s ", subname, name);
bxx_printf(&buffer, "%s:%s ", subname, name);
(void) strcat(buffer, t);
bxx_put_cstring(&buffer, t);
tfree(s->li_line);
s->li_line = buffer;
s->li_line = copy(bxx_buffer(&buffer));
tfree(name);
break;
/* 4-7 terminal mos devices */
case 'm':
name = gettok(&t); /* get refdes */
(void) sprintf(buffer, "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* get first attached netname */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* get second attached netname */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* get third attached netname */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* get fourth attached netname */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok(&t);
@ -1884,7 +1888,7 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
break;
}
if (!found) { /* name was not a model - was a netname */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok(&t);
if (name == NULL) {
@ -1895,29 +1899,29 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
} /* while */
if (!found)
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
else
(void) sprintf(buffer + strlen(buffer), "%s:%s ", subname, name);
bxx_printf(&buffer, "%s:%s ", subname, name);
(void) strcat(buffer, t);
bxx_put_cstring(&buffer, t);
tfree(s->li_line);
s->li_line = buffer;
s->li_line = copy(bxx_buffer(&buffer));
tfree(name);
break;
/* 3-5 terminal bjt devices */
case 'q':
name = gettok(&t); /* get refdes */
(void) sprintf(buffer, "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* get first attached netname */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* get second attached netname */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* get third attached netname */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok_node(&t); /* this can be either a model name or a node name. */
@ -1925,7 +1929,7 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
if (!wlsub)
if (*t) { /* There is another token - perhaps a model */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok(&t);
wlsub = wl_find(name, orig_modnames);
@ -1934,7 +1938,7 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
#ifdef ADMS
if (!wlsub)
if (*t) { /* There is another token - perhaps a model */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
name = gettok(&t);
wlsub = wl_find(name, orig_modnames);
@ -1942,21 +1946,21 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
#endif
if (!wlsub) /* Fallback w/o subckt name before */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
else
(void) sprintf(buffer + strlen(buffer), "%s:%s ", subname, name);
bxx_printf(&buffer, "%s:%s ", subname, name);
tfree(name);
(void) strcat(buffer, t);
bxx_put_cstring(&buffer, t);
tfree(s->li_line);
s->li_line = buffer;
s->li_line = copy(bxx_buffer(&buffer));
break;
/* 4-18 terminal devices */
case 'p': /* cpl */
name = gettok(&t); /* get refdes */
(void) sprintf(buffer, "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
/* now do remainder of line. */
@ -1970,7 +1974,7 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
break;
} else {
/* next_name holds something. Write name into the buffer and continue. */
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
tfree(name);
}
} /* while */
@ -1978,22 +1982,23 @@ devmodtranslate(struct line *s, char *subname, wordlist * const orig_modnames)
wlsub = wl_find(name, orig_modnames);
if (!wlsub)
(void) sprintf(buffer + strlen(buffer), "%s ", name);
bxx_printf(&buffer, "%s ", name);
else
(void) sprintf(buffer + strlen(buffer), "%s:%s ", subname, name);
bxx_printf(&buffer, "%s:%s ", subname, name);
tfree(name);
(void) strcat(buffer, t);
bxx_put_cstring(&buffer, t);
tfree(s->li_line);
s->li_line = buffer;
s->li_line = copy(bxx_buffer(&buffer));
break;
default:
tfree(buffer);
break;
}
}
bxx_free(&buffer);
}