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 )
|
else if(strcmp(token,"@spice_get_diff_voltage")==0 )
|
||||||
{
|
{
|
||||||
int start_level; /* hierarchy level where waves were loaded */
|
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);
|
memcpy(result + result_pos, tmp_sym_name, tmp + 1);
|
||||||
result_pos += tmp;
|
result_pos += tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c == '@') s--;
|
if (c == '@') s--;
|
||||||
else result[result_pos++] = (char)c;
|
else result[result_pos++] = (char)c;
|
||||||
state = TOK_BEGIN;
|
state = TOK_BEGIN;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue