From e90b3e711bb8f6366e6f2eb959ecc50559d525a1 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Wed, 20 Oct 2021 13:56:43 +0200 Subject: [PATCH] F.-request 85: save currents in subcircuits Separate handling .ic/.nodeset and .save . Add i(Vxx) to address translation. Vxx#branch is not supported. --- src/frontend/subckt.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) 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;