added @spice_get_voltage(net) recognize in translate() for voltage value update inside LCC schematics
This commit is contained in:
parent
adf477fbcc
commit
56b63df2fc
53
src/token.c
53
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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue