From 56b63df2fc45af60ecf863a6840b60c5fe661008 Mon Sep 17 00:00:00 2001 From: Stefan Frederik Date: Sat, 15 Oct 2022 10:08:58 +0200 Subject: [PATCH] added @spice_get_voltage(net) recognize in translate() for voltage value update inside LCC schematics --- src/token.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/src/token.c b/src/token.c index 831650db..e64db28d 100644 --- a/src/token.c +++ b/src/token.c @@ -3045,6 +3045,58 @@ const char *translate(int inst, const char* s) } } } + else if(strncmp(token,"@spice_get_voltage(", 19)==0 ) + { + int start_level; /* hierarchy level where waves were loaded */ + dbg(1, "--> %s\n", token); + if((start_level = sch_waves_loaded()) >= 0 && xctx->graph_annotate_p>=0) { + char *fqnet = NULL; + const char *path = xctx->sch_path[xctx->currsch] + 1; + char *net = NULL; + size_t len; + int idx; + double val; + const char *valstr; + tmp = strlen(token) + 1; + if(path) { + int skip = 0; + /* skip path components that are above the level where raw file was loaded */ + while(*path && skip < start_level) { + if(*path == '.') skip++; + path++; + } + net = my_malloc(1571, tmp); + sscanf(token + 19, "%[^)]", net); + strtolower(net); + len = strlen(path) + strlen(net) + 1; + dbg(1, "net=%s\n", net); + fqnet = my_malloc(1548, len); + my_snprintf(fqnet, len, "%s%s", path, net); + strtolower(fqnet); + dbg(1, "translate(): fqnet=%s start_level=%d\n", fqnet, start_level); + idx = get_raw_index(fqnet); + if(idx >= 0) { + val = xctx->graph_values[idx][xctx->graph_annotate_p]; + } + if(idx < 0) { + valstr = ""; + xctx->tok_size = 0; + len = 0; + } else { + valstr = dtoa_eng(val); + len = xctx->tok_size; + } + if(len) { + STR_ALLOC(&result, len + result_pos, &size); + memcpy(result+result_pos, valstr, len+1); + result_pos += len; + } + dbg(1, "inst %d, net=%s, fqnet=%s idx=%d valstr=%s\n", inst, net, fqnet, idx, valstr); + my_free(1549, &fqnet); + my_free(1570, &net); + } + } + } else if(strcmp(token,"@spice_get_diff_voltage")==0 ) { int start_level; /* hierarchy level where waves were loaded */ @@ -3363,7 +3415,6 @@ const char *translate2(Lcc *lcc, int level, char* s) memcpy(result + result_pos, tmp_sym_name, tmp + 1); result_pos += tmp; } - if (c == '@') s--; else result[result_pos++] = (char)c; state = TOK_BEGIN;