diff --git a/src/frontend/subckt.c b/src/frontend/subckt.c index 793be2b37..24f4ea62a 100644 --- a/src/frontend/subckt.c +++ b/src/frontend/subckt.c @@ -1176,7 +1176,31 @@ translate(struct card *deck, char *formal, char *actual, char *scname, const cha switch (dev_type) { case '.': - if (ciprefix(".ic", s) || ciprefix(".nodeset", s) || ciprefix(".save", s)) { + if (ciprefix(".save", s)) { + while ((paren_ptr = strchr(s, '(')) != NULL) { + bool curr = FALSE; + if (ciprefix(" i(", paren_ptr - 2)) + curr = TRUE; + + name = paren_ptr + 1; + + if ((paren_ptr = strchr(name, ')')) == NULL) { + fprintf(cp_err, "Error: missing closing ')' for .save statement %s\n", c->line); + goto quit; + } + + bxx_put_substring(&buffer, s, name); + if (curr) + translate_inst_name(&buffer, scname, name, paren_ptr); + else + translate_node_name(&buffer, scname, name, paren_ptr); + + s = paren_ptr; + } + bxx_put_cstring(&buffer, s); /* rest of line */ + break; + } + else if (ciprefix(".ic", s) || ciprefix(".nodeset", s)) { while ((paren_ptr = strchr(s, '(')) != NULL) { name = paren_ptr + 1;