added @spice_get_voltage(net) recognize in translate() for voltage value update inside LCC schematics

This commit is contained in:
Stefan Frederik 2022-10-15 10:08:58 +02:00
parent adf477fbcc
commit 56b63df2fc
1 changed files with 52 additions and 1 deletions

View File

@ -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;