diff --git a/src/frontend/subckt.c b/src/frontend/subckt.c index 1aaf2bede..94cf5e34e 100644 --- a/src/frontend/subckt.c +++ b/src/frontend/subckt.c @@ -1996,11 +1996,8 @@ devmodtranslate(struct card *s, char *subname, wordlist * const orig_modnames) s->line = copy(bxx_buffer(&buffer)); break; - /* 2 or 3 (temp) terminals for diode d, 2 or more for OSDI devices */ + /* 2 or 3 (temp) terminals for diode d */ case 'd': -#ifdef OSDI - case 'n': -#endif name = gettok(&t); /* get refdes */ bxx_printf(&buffer, "%s ", name); tfree(name); @@ -2039,8 +2036,48 @@ devmodtranslate(struct card *s, char *subname, wordlist * const orig_modnames) s->line = copy(bxx_buffer(&buffer)); break; +#ifdef OSDI + /* 1 or more terinals for OSDI devices*/ + case 'n': + name = gettok(&t); /* get refdes */ + bxx_printf(&buffer, "%s ", name); + tfree(name); + name = gettok_node(&t); /* get first attached netname */ + bxx_printf(&buffer, "%s ", name); + tfree(name); + name = gettok_node(&t); /* this can be either a model name or a node name. */ + if (name == NULL) { + name = copy(""); /* allow 'tfree' */ + } + else { + for (;;) { + wlsub = wl_find(name, orig_modnames); + if (wlsub) { + break; + } + else { + bxx_printf(&buffer, "%s ", name); + tfree(name); + name = gettok(&t); + if (name == NULL) { /* No token anymore - leave */ + name = copy(""); /* allow 'tfree' */ + break; + } + } + } /* while */ + } + + translate_mod_name(&buffer, name, subname, orig_modnames); + + tfree(name); + bxx_putc(&buffer, ' '); + bxx_put_cstring(&buffer, t); + tfree(s->line); + s->line = copy(bxx_buffer(&buffer)); + break; +#endif + /* 3 terminal devices */ case 'u': /* urc transmissionline */ - /* 3 terminal devices */ case 'w': /* current controlled switch */ case 'j': /* jfet */ case 'z': /* hfet, mesa */ diff --git a/src/spicelib/parser/inp2n.c b/src/spicelib/parser/inp2n.c index e76e41c8d..f02c33bf9 100644 --- a/src/spicelib/parser/inp2n.c +++ b/src/spicelib/parser/inp2n.c @@ -46,7 +46,8 @@ void INP2N(CKTcircuit *ckt, INPtables *tab, struct card *current) { char *token; INPgetNetTok(&line, &token, 1); - if (i >= 2) { + /* We have single terminal Verilog-A modules */ + if (i >= 1) { txfree(INPgetMod(ckt, token, &thismodel, tab)); /* /1* check if using model binning -- pass in line since need 'l' and 'w' *1/ */