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

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

View File

@ -1676,11 +1676,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
@ -1693,8 +1699,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
@ -1713,7 +1717,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. */
@ -1729,7 +1733,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 */
@ -1742,9 +1746,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);
@ -1753,9 +1757,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 */
@ -1764,13 +1768,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. . . . */
@ -1778,9 +1782,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);
}
@ -1789,40 +1793,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 */
@ -1831,30 +1835,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 */
@ -1866,51 +1870,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);
@ -1923,7 +1927,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) {
@ -1934,29 +1938,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. */
@ -1964,7 +1968,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);
@ -1973,7 +1977,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);
@ -1981,21 +1985,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. */
@ -2009,7 +2013,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 */
@ -2017,22 +2021,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);
}