graphs: add xmag and ymag entry boxes for custom magnification factor for x/y axis labels, fix current_dirname handling when netlisting hierarchical http(s) designs. The goal is to allow netlisting remote designs seamlessly
This commit is contained in:
parent
616364106f
commit
c2e5c61b35
|
|
@ -1544,6 +1544,7 @@ void get_sch_from_sym(char *filename, xSymbol *sym, int inst)
|
||||||
if(is_from_web(xctx->current_dirname)) {
|
if(is_from_web(xctx->current_dirname)) {
|
||||||
web_url = 1;
|
web_url = 1;
|
||||||
}
|
}
|
||||||
|
dbg(1, "get_sch_from_sym(): current_dirname= %s\n", xctx->current_dirname);
|
||||||
dbg(1, "get_sch_from_sym(): symbol %s inst=%d web_url=%d\n", sym->name, inst, web_url);
|
dbg(1, "get_sch_from_sym(): symbol %s inst=%d web_url=%d\n", sym->name, inst, web_url);
|
||||||
if(inst >= 0) my_strdup(_ALLOC_ID_, &str_tmp, get_tok_value(xctx->inst[inst].prop_ptr, "schematic", 2));
|
if(inst >= 0) my_strdup(_ALLOC_ID_, &str_tmp, get_tok_value(xctx->inst[inst].prop_ptr, "schematic", 2));
|
||||||
if(!str_tmp) my_strdup2(_ALLOC_ID_, &str_tmp, get_tok_value(sym->prop_ptr, "schematic", 2));
|
if(!str_tmp) my_strdup2(_ALLOC_ID_, &str_tmp, get_tok_value(sym->prop_ptr, "schematic", 2));
|
||||||
|
|
|
||||||
|
|
@ -2328,6 +2328,7 @@ void setup_graph_data(int i, int skip, Graph_ctx *gr)
|
||||||
|
|
||||||
dbg(1, "setup_graph_data: i=%d\n", i);
|
dbg(1, "setup_graph_data: i=%d\n", i);
|
||||||
/* default values */
|
/* default values */
|
||||||
|
gr->magx = gr->magy = 1.0;
|
||||||
gr->divx = gr->divy = 5;
|
gr->divx = gr->divy = 5;
|
||||||
gr->subdivx = gr->subdivy = 0;
|
gr->subdivx = gr->subdivy = 0;
|
||||||
gr->logx = gr->logy = 0;
|
gr->logx = gr->logy = 0;
|
||||||
|
|
@ -2390,6 +2391,10 @@ void setup_graph_data(int i, int skip, Graph_ctx *gr)
|
||||||
gr->unity_suffix = val[0];
|
gr->unity_suffix = val[0];
|
||||||
gr->unity = get_unit(val);
|
gr->unity = get_unit(val);
|
||||||
}
|
}
|
||||||
|
val = get_tok_value(r->prop_ptr,"xlabmag",0);
|
||||||
|
if(val[0]) gr->magx = atof(val);
|
||||||
|
val = get_tok_value(r->prop_ptr,"ylabmag",0);
|
||||||
|
if(val[0]) gr->magy = atof(val);
|
||||||
val = get_tok_value(r->prop_ptr,"subdivx",0);
|
val = get_tok_value(r->prop_ptr,"subdivx",0);
|
||||||
if(val[0]) gr->subdivx = atoi(val);
|
if(val[0]) gr->subdivx = atoi(val);
|
||||||
val = get_tok_value(r->prop_ptr,"subdivy",0);
|
val = get_tok_value(r->prop_ptr,"subdivy",0);
|
||||||
|
|
@ -2461,10 +2466,12 @@ void setup_graph_data(int i, int skip, Graph_ctx *gr)
|
||||||
if(tmp < gr->txtsizey) gr->txtsizey = tmp;
|
if(tmp < gr->txtsizey) gr->txtsizey = tmp;
|
||||||
tmp = gr->marginy * 0.02;
|
tmp = gr->marginy * 0.02;
|
||||||
if(tmp < gr->txtsizey) gr->txtsizey = tmp;
|
if(tmp < gr->txtsizey) gr->txtsizey = tmp;
|
||||||
|
gr->txtsizey *= gr->magy;
|
||||||
|
|
||||||
gr->txtsizex = gr->w / gr->divx * 0.0033;
|
gr->txtsizex = gr->w / gr->divx * 0.0033;
|
||||||
tmp = gr->marginy * 0.0063;
|
tmp = gr->marginy * 0.0063;
|
||||||
if(tmp < gr->txtsizex) gr->txtsizex = tmp;
|
if(tmp < gr->txtsizex) gr->txtsizex = tmp;
|
||||||
|
gr->txtsizex *= gr->magx;
|
||||||
|
|
||||||
/* cache coefficients for faster graph --> xschem coord transformations */
|
/* cache coefficients for faster graph --> xschem coord transformations */
|
||||||
gr->cx = gr->w / gr->gw;
|
gr->cx = gr->w / gr->gw;
|
||||||
|
|
|
||||||
|
|
@ -189,6 +189,8 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
||||||
"x2=10e-6\n"
|
"x2=10e-6\n"
|
||||||
"divx=5\n"
|
"divx=5\n"
|
||||||
"subdivx=1\n"
|
"subdivx=1\n"
|
||||||
|
"xlabmag=1.0\n"
|
||||||
|
"ylabmag=1.0\n"
|
||||||
"node=\"\"\n"
|
"node=\"\"\n"
|
||||||
"color=\"\"\n"
|
"color=\"\"\n"
|
||||||
"dataset=-1\n"
|
"dataset=-1\n"
|
||||||
|
|
|
||||||
|
|
@ -387,6 +387,10 @@ int global_spice_netlist(int global) /* netlister driver */
|
||||||
if(global)
|
if(global)
|
||||||
{
|
{
|
||||||
int saved_hilight_nets = xctx->hilight_nets;
|
int saved_hilight_nets = xctx->hilight_nets;
|
||||||
|
int web_url = is_from_web(xctx->current_dirname);
|
||||||
|
char *current_dirname_save = NULL;
|
||||||
|
|
||||||
|
my_strdup2(_ALLOC_ID_, ¤t_dirname_save, xctx->current_dirname);
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
remove_symbols(); /* 20161205 ensure all unused symbols purged before descending hierarchy */
|
remove_symbols(); /* 20161205 ensure all unused symbols purged before descending hierarchy */
|
||||||
/* reload data without popping undo stack, this populates embedded symbols if any */
|
/* reload data without popping undo stack, this populates embedded symbols if any */
|
||||||
|
|
@ -407,8 +411,10 @@ int global_spice_netlist(int global) /* netlister driver */
|
||||||
my_strdup(_ALLOC_ID_, &abs_path, abs_sym_path(xctx->sym[i].name, ""));
|
my_strdup(_ALLOC_ID_, &abs_path, abs_sym_path(xctx->sym[i].name, ""));
|
||||||
if(strcmp(xctx->sym[i].type,"subcircuit")==0 && check_lib(1, abs_path))
|
if(strcmp(xctx->sym[i].type,"subcircuit")==0 && check_lib(1, abs_path))
|
||||||
{
|
{
|
||||||
|
if(!web_url) {
|
||||||
tclvareval("get_directory [list ", xctx->sch[xctx->currsch - 1], "]", NULL);
|
tclvareval("get_directory [list ", xctx->sch[xctx->currsch - 1], "]", NULL);
|
||||||
my_strncpy(xctx->current_dirname, tclresult(), S(xctx->current_dirname));
|
my_strncpy(xctx->current_dirname, tclresult(), S(xctx->current_dirname));
|
||||||
|
}
|
||||||
/* xctx->sym can be SCH or SYM, use hash to avoid writing duplicate subckt */
|
/* xctx->sym can be SCH or SYM, use hash to avoid writing duplicate subckt */
|
||||||
my_strdup(_ALLOC_ID_, &subckt_name, get_cell(xctx->sym[i].name, 0));
|
my_strdup(_ALLOC_ID_, &subckt_name, get_cell(xctx->sym[i].name, 0));
|
||||||
dbg(1, "global_spice_netlist(): subckt_name=%s\n", subckt_name);
|
dbg(1, "global_spice_netlist(): subckt_name=%s\n", subckt_name);
|
||||||
|
|
@ -434,14 +440,19 @@ int global_spice_netlist(int global) /* netlister driver */
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
dbg(1, "global_spice_netlist(): invoking pop_undo(0, 0)\n");
|
dbg(1, "global_spice_netlist(): invoking pop_undo(0, 0)\n");
|
||||||
xctx->pop_undo(4, 0);
|
xctx->pop_undo(4, 0);
|
||||||
|
if(web_url) {
|
||||||
|
my_strncpy(xctx->current_dirname, current_dirname_save, S(xctx->current_dirname));
|
||||||
|
} else {
|
||||||
tclvareval("get_directory [list ", xctx->sch[xctx->currsch], "]", NULL);
|
tclvareval("get_directory [list ", xctx->sch[xctx->currsch], "]", NULL);
|
||||||
my_strncpy(xctx->current_dirname, tclresult(), S(xctx->current_dirname));
|
my_strncpy(xctx->current_dirname, tclresult(), S(xctx->current_dirname));
|
||||||
|
}
|
||||||
my_strncpy(xctx->current_name, rel_sym_path(xctx->sch[xctx->currsch]), S(xctx->current_name));
|
my_strncpy(xctx->current_name, rel_sym_path(xctx->sch[xctx->currsch]), S(xctx->current_name));
|
||||||
dbg(1, "spice_netlist(): invoke prepare_netlist_structs for %s\n", xctx->current_name);
|
dbg(1, "spice_netlist(): invoke prepare_netlist_structs for %s\n", xctx->current_name);
|
||||||
err |= prepare_netlist_structs(1); /* so 'lab=...' attributes for unnamed nets are set */
|
err |= prepare_netlist_structs(1); /* so 'lab=...' attributes for unnamed nets are set */
|
||||||
/* symbol vs schematic pin check, we do it here since now we have ALL symbols loaded */
|
/* symbol vs schematic pin check, we do it here since now we have ALL symbols loaded */
|
||||||
err |= sym_vs_sch_pins();
|
err |= sym_vs_sch_pins();
|
||||||
if(!xctx->hilight_nets) xctx->hilight_nets = saved_hilight_nets;
|
if(!xctx->hilight_nets) xctx->hilight_nets = saved_hilight_nets;
|
||||||
|
my_free(_ALLOC_ID_, ¤t_dirname_save);
|
||||||
}
|
}
|
||||||
/* restore hilight flags from errors found analyzing top level before descending hierarchy */
|
/* restore hilight flags from errors found analyzing top level before descending hierarchy */
|
||||||
for(i=0;i<xctx->instances; ++i) if(!xctx->inst[i].color) xctx->inst[i].color = stored_flags[i];
|
for(i=0;i<xctx->instances; ++i) if(!xctx->inst[i].color) xctx->inst[i].color = stored_flags[i];
|
||||||
|
|
|
||||||
|
|
@ -189,6 +189,9 @@ int global_tedax_netlist(int global) /* netlister driver */
|
||||||
if(global) /* was if(global) ... 20180901 no hierarchical tEDAx netlist for now */
|
if(global) /* was if(global) ... 20180901 no hierarchical tEDAx netlist for now */
|
||||||
{
|
{
|
||||||
int saved_hilight_nets = xctx->hilight_nets;
|
int saved_hilight_nets = xctx->hilight_nets;
|
||||||
|
int web_url = is_from_web(xctx->current_dirname);
|
||||||
|
char *current_dirname_save = NULL;
|
||||||
|
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
remove_symbols(); /* 20161205 ensure all unused symbols purged before descending hierarchy */
|
remove_symbols(); /* 20161205 ensure all unused symbols purged before descending hierarchy */
|
||||||
/* reload data without popping undo stack, this populates embedded symbols if any */
|
/* reload data without popping undo stack, this populates embedded symbols if any */
|
||||||
|
|
@ -208,8 +211,10 @@ int global_tedax_netlist(int global) /* netlister driver */
|
||||||
my_strdup2(_ALLOC_ID_, &abs_path, abs_sym_path(tcl_hook2(xctx->sym[i].name), ""));
|
my_strdup2(_ALLOC_ID_, &abs_path, abs_sym_path(tcl_hook2(xctx->sym[i].name), ""));
|
||||||
if(strcmp(xctx->sym[i].type,"subcircuit")==0 && check_lib(1, abs_path))
|
if(strcmp(xctx->sym[i].type,"subcircuit")==0 && check_lib(1, abs_path))
|
||||||
{
|
{
|
||||||
|
if(!web_url) {
|
||||||
tclvareval("get_directory [list ", xctx->sch[xctx->currsch - 1], "]", NULL);
|
tclvareval("get_directory [list ", xctx->sch[xctx->currsch - 1], "]", NULL);
|
||||||
my_strncpy(xctx->current_dirname, tclresult(), S(xctx->current_dirname));
|
my_strncpy(xctx->current_dirname, tclresult(), S(xctx->current_dirname));
|
||||||
|
}
|
||||||
/* xctx->sym can be SCH or SYM, use hash to avoid writing duplicate subckt */
|
/* xctx->sym can be SCH or SYM, use hash to avoid writing duplicate subckt */
|
||||||
my_strdup(_ALLOC_ID_, &subckt_name, get_cell(xctx->sym[i].name, 0));
|
my_strdup(_ALLOC_ID_, &subckt_name, get_cell(xctx->sym[i].name, 0));
|
||||||
if (str_hash_lookup(&subckt_table, subckt_name, "", XLOOKUP)==NULL)
|
if (str_hash_lookup(&subckt_table, subckt_name, "", XLOOKUP)==NULL)
|
||||||
|
|
@ -229,14 +234,19 @@ int global_tedax_netlist(int global) /* netlister driver */
|
||||||
xctx->currsch--;
|
xctx->currsch--;
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
xctx->pop_undo(4, 0);
|
xctx->pop_undo(4, 0);
|
||||||
|
if(web_url) {
|
||||||
|
my_strncpy(xctx->current_dirname, current_dirname_save, S(xctx->current_dirname));
|
||||||
|
} else {
|
||||||
tclvareval("get_directory [list ", xctx->sch[xctx->currsch], "]", NULL);
|
tclvareval("get_directory [list ", xctx->sch[xctx->currsch], "]", NULL);
|
||||||
my_strncpy(xctx->current_dirname, tclresult(), S(xctx->current_dirname));
|
my_strncpy(xctx->current_dirname, tclresult(), S(xctx->current_dirname));
|
||||||
|
}
|
||||||
my_strncpy(xctx->current_name, rel_sym_path(xctx->sch[xctx->currsch]), S(xctx->current_name));
|
my_strncpy(xctx->current_name, rel_sym_path(xctx->sch[xctx->currsch]), S(xctx->current_name));
|
||||||
err |= prepare_netlist_structs(1); /* so 'lab=...' attributes for unnamed nets are set */
|
err |= prepare_netlist_structs(1); /* so 'lab=...' attributes for unnamed nets are set */
|
||||||
|
|
||||||
/* symbol vs schematic pin check, we do it here since now we have ALL symbols loaded */
|
/* symbol vs schematic pin check, we do it here since now we have ALL symbols loaded */
|
||||||
err |= sym_vs_sch_pins();
|
err |= sym_vs_sch_pins();
|
||||||
if(!xctx->hilight_nets) xctx->hilight_nets = saved_hilight_nets;
|
if(!xctx->hilight_nets) xctx->hilight_nets = saved_hilight_nets;
|
||||||
|
my_free(_ALLOC_ID_, ¤t_dirname_save);
|
||||||
}
|
}
|
||||||
/* restore hilight flags from errors found analyzing top level before descending hierarchy */
|
/* restore hilight flags from errors found analyzing top level before descending hierarchy */
|
||||||
for(i=0;i<xctx->instances; ++i) if(!xctx->inst[i].color) xctx->inst[i].color = stored_flags[i];
|
for(i=0;i<xctx->instances; ++i) if(!xctx->inst[i].color) xctx->inst[i].color = stored_flags[i];
|
||||||
|
|
|
||||||
|
|
@ -328,6 +328,9 @@ int global_verilog_netlist(int global) /* netlister driver */
|
||||||
if(global)
|
if(global)
|
||||||
{
|
{
|
||||||
int saved_hilight_nets = xctx->hilight_nets;
|
int saved_hilight_nets = xctx->hilight_nets;
|
||||||
|
int web_url = is_from_web(xctx->current_dirname);
|
||||||
|
char *current_dirname_save = NULL;
|
||||||
|
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
remove_symbols(); /* 20161205 ensure all unused symbols purged before descending hierarchy */
|
remove_symbols(); /* 20161205 ensure all unused symbols purged before descending hierarchy */
|
||||||
/* reload data without popping undo stack, this populates embedded symbols if any */
|
/* reload data without popping undo stack, this populates embedded symbols if any */
|
||||||
|
|
@ -347,8 +350,10 @@ int global_verilog_netlist(int global) /* netlister driver */
|
||||||
if(!xctx->sym[i].type) continue;
|
if(!xctx->sym[i].type) continue;
|
||||||
my_strdup2(_ALLOC_ID_, &abs_path, abs_sym_path(tcl_hook2(xctx->sym[i].name), ""));
|
my_strdup2(_ALLOC_ID_, &abs_path, abs_sym_path(tcl_hook2(xctx->sym[i].name), ""));
|
||||||
if(strcmp(xctx->sym[i].type,"subcircuit")==0 && check_lib(1, abs_path)) {
|
if(strcmp(xctx->sym[i].type,"subcircuit")==0 && check_lib(1, abs_path)) {
|
||||||
|
if(!web_url) {
|
||||||
tclvareval("get_directory [list ", xctx->sch[xctx->currsch - 1], "]", NULL);
|
tclvareval("get_directory [list ", xctx->sch[xctx->currsch - 1], "]", NULL);
|
||||||
my_strncpy(xctx->current_dirname, tclresult(), S(xctx->current_dirname));
|
my_strncpy(xctx->current_dirname, tclresult(), S(xctx->current_dirname));
|
||||||
|
}
|
||||||
/* xctx->sym can be SCH or SYM, use hash to avoid writing duplicate subckt */
|
/* xctx->sym can be SCH or SYM, use hash to avoid writing duplicate subckt */
|
||||||
my_strdup(_ALLOC_ID_, &subckt_name, get_cell(xctx->sym[i].name, 0));
|
my_strdup(_ALLOC_ID_, &subckt_name, get_cell(xctx->sym[i].name, 0));
|
||||||
if (str_hash_lookup(&subckt_table, subckt_name, "", XLOOKUP)==NULL)
|
if (str_hash_lookup(&subckt_table, subckt_name, "", XLOOKUP)==NULL)
|
||||||
|
|
@ -372,13 +377,18 @@ int global_verilog_netlist(int global) /* netlister driver */
|
||||||
xctx->currsch--;
|
xctx->currsch--;
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
xctx->pop_undo(4, 0);
|
xctx->pop_undo(4, 0);
|
||||||
|
if(web_url) {
|
||||||
|
my_strncpy(xctx->current_dirname, current_dirname_save, S(xctx->current_dirname));
|
||||||
|
} else {
|
||||||
tclvareval("get_directory [list ", xctx->sch[xctx->currsch], "]", NULL);
|
tclvareval("get_directory [list ", xctx->sch[xctx->currsch], "]", NULL);
|
||||||
my_strncpy(xctx->current_dirname, tclresult(), S(xctx->current_dirname));
|
my_strncpy(xctx->current_dirname, tclresult(), S(xctx->current_dirname));
|
||||||
|
}
|
||||||
my_strncpy(xctx->current_name, rel_sym_path(xctx->sch[xctx->currsch]), S(xctx->current_name));
|
my_strncpy(xctx->current_name, rel_sym_path(xctx->sch[xctx->currsch]), S(xctx->current_name));
|
||||||
err |= prepare_netlist_structs(1); /* so 'lab=...' attributes for unnamed nets are set */
|
err |= prepare_netlist_structs(1); /* so 'lab=...' attributes for unnamed nets are set */
|
||||||
/* symbol vs schematic pin check, we do it here since now we have ALL symbols loaded */
|
/* symbol vs schematic pin check, we do it here since now we have ALL symbols loaded */
|
||||||
err |= sym_vs_sch_pins();
|
err |= sym_vs_sch_pins();
|
||||||
if(!xctx->hilight_nets) xctx->hilight_nets = saved_hilight_nets;
|
if(!xctx->hilight_nets) xctx->hilight_nets = saved_hilight_nets;
|
||||||
|
my_free(_ALLOC_ID_, ¤t_dirname_save);
|
||||||
}
|
}
|
||||||
/* restore hilight flags from errors found analyzing top level before descending hierarchy */
|
/* restore hilight flags from errors found analyzing top level before descending hierarchy */
|
||||||
for(i=0;i<xctx->instances; ++i) if(!xctx->inst[i].color) xctx->inst[i].color = stored_flags[i];
|
for(i=0;i<xctx->instances; ++i) if(!xctx->inst[i].color) xctx->inst[i].color = stored_flags[i];
|
||||||
|
|
|
||||||
|
|
@ -414,6 +414,9 @@ int global_vhdl_netlist(int global) /* netlister driver */
|
||||||
if(global)
|
if(global)
|
||||||
{
|
{
|
||||||
int saved_hilight_nets = xctx->hilight_nets;
|
int saved_hilight_nets = xctx->hilight_nets;
|
||||||
|
int web_url = is_from_web(xctx->current_dirname);
|
||||||
|
char *current_dirname_save = NULL;
|
||||||
|
|
||||||
str_hash_init(&subckt_table, HASHSIZE);
|
str_hash_init(&subckt_table, HASHSIZE);
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
remove_symbols(); /* 20161205 ensure all unused symbols purged before descending hierarchy */
|
remove_symbols(); /* 20161205 ensure all unused symbols purged before descending hierarchy */
|
||||||
|
|
@ -435,8 +438,10 @@ int global_vhdl_netlist(int global) /* netlister driver */
|
||||||
my_strdup(_ALLOC_ID_, &abs_path, abs_sym_path(xctx->sym[i].name, ""));
|
my_strdup(_ALLOC_ID_, &abs_path, abs_sym_path(xctx->sym[i].name, ""));
|
||||||
if(strcmp(xctx->sym[i].type,"subcircuit")==0 && check_lib(1, abs_path))
|
if(strcmp(xctx->sym[i].type,"subcircuit")==0 && check_lib(1, abs_path))
|
||||||
{
|
{
|
||||||
|
if(!web_url) {
|
||||||
tclvareval("get_directory [list ", xctx->sch[xctx->currsch - 1], "]", NULL);
|
tclvareval("get_directory [list ", xctx->sch[xctx->currsch - 1], "]", NULL);
|
||||||
my_strncpy(xctx->current_dirname, tclresult(), S(xctx->current_dirname));
|
my_strncpy(xctx->current_dirname, tclresult(), S(xctx->current_dirname));
|
||||||
|
}
|
||||||
/* xctx->sym can be SCH or SYM, use hash to avoid writing duplicate subckt */
|
/* xctx->sym can be SCH or SYM, use hash to avoid writing duplicate subckt */
|
||||||
my_strdup(_ALLOC_ID_, &subckt_name, get_cell(xctx->sym[i].name, 0));
|
my_strdup(_ALLOC_ID_, &subckt_name, get_cell(xctx->sym[i].name, 0));
|
||||||
if (str_hash_lookup(&subckt_table, subckt_name, "", XLOOKUP)==NULL)
|
if (str_hash_lookup(&subckt_table, subckt_name, "", XLOOKUP)==NULL)
|
||||||
|
|
@ -460,13 +465,18 @@ int global_vhdl_netlist(int global) /* netlister driver */
|
||||||
xctx->currsch--;
|
xctx->currsch--;
|
||||||
unselect_all(1);
|
unselect_all(1);
|
||||||
xctx->pop_undo(4, 0);
|
xctx->pop_undo(4, 0);
|
||||||
|
if(web_url) {
|
||||||
|
my_strncpy(xctx->current_dirname, current_dirname_save, S(xctx->current_dirname));
|
||||||
|
} else {
|
||||||
tclvareval("get_directory [list ", xctx->sch[xctx->currsch], "]", NULL);
|
tclvareval("get_directory [list ", xctx->sch[xctx->currsch], "]", NULL);
|
||||||
my_strncpy(xctx->current_dirname, tclresult(), S(xctx->current_dirname));
|
my_strncpy(xctx->current_dirname, tclresult(), S(xctx->current_dirname));
|
||||||
|
}
|
||||||
my_strncpy(xctx->current_name, rel_sym_path(xctx->sch[xctx->currsch]), S(xctx->current_name));
|
my_strncpy(xctx->current_name, rel_sym_path(xctx->sch[xctx->currsch]), S(xctx->current_name));
|
||||||
err |= prepare_netlist_structs(1); /* so 'lab=...' attributes for unnamed nets are set */
|
err |= prepare_netlist_structs(1); /* so 'lab=...' attributes for unnamed nets are set */
|
||||||
/* symbol vs schematic pin check, we do it here since now we have ALL symbols loaded */
|
/* symbol vs schematic pin check, we do it here since now we have ALL symbols loaded */
|
||||||
err |= sym_vs_sch_pins();
|
err |= sym_vs_sch_pins();
|
||||||
if(!xctx->hilight_nets) xctx->hilight_nets = saved_hilight_nets;
|
if(!xctx->hilight_nets) xctx->hilight_nets = saved_hilight_nets;
|
||||||
|
my_free(_ALLOC_ID_, ¤t_dirname_save);
|
||||||
}
|
}
|
||||||
/* restore hilight flags from errors found analyzing top level before descending hierarchy */
|
/* restore hilight flags from errors found analyzing top level before descending hierarchy */
|
||||||
for(i=0;i<xctx->instances; ++i) if(!xctx->inst[i].color) xctx->inst[i].color = stored_flags[i];
|
for(i=0;i<xctx->instances; ++i) if(!xctx->inst[i].color) xctx->inst[i].color = stored_flags[i];
|
||||||
|
|
|
||||||
10
src/xschem.h
10
src/xschem.h
|
|
@ -785,12 +785,10 @@ typedef struct {
|
||||||
/* direct graph->screen transform */
|
/* direct graph->screen transform */
|
||||||
double scx, sdx, scy, sdy;
|
double scx, sdx, scy, sdy;
|
||||||
double dscy, dsdy;
|
double dscy, dsdy;
|
||||||
int divx;
|
int divx, divy;
|
||||||
int divy;
|
int subdivx, subdivy;
|
||||||
int subdivx;
|
double magx, magy;
|
||||||
int subdivy;
|
double unitx, unity;
|
||||||
double unitx;
|
|
||||||
double unity;
|
|
||||||
int unitx_suffix; /* 'n' or 'u' or 'M' or 'k' ... */
|
int unitx_suffix; /* 'n' or 'u' or 'M' or 'k' ... */
|
||||||
int unity_suffix;
|
int unity_suffix;
|
||||||
double txtsizelab, digtxtsizelab, txtsizey, txtsizex;
|
double txtsizelab, digtxtsizelab, txtsizey, txtsizex;
|
||||||
|
|
|
||||||
|
|
@ -2006,8 +2006,8 @@ proc graph_edit_properties {n} {
|
||||||
update_graph_node [string trim [.graphdialog.center.right.text1 get 1.0 {end - 1 chars}] " \n"]
|
update_graph_node [string trim [.graphdialog.center.right.text1 get 1.0 {end - 1 chars}] " \n"]
|
||||||
xschem setprop rect 2 $graph_selected x1 [.graphdialog.top3.xmin get] fast
|
xschem setprop rect 2 $graph_selected x1 [.graphdialog.top3.xmin get] fast
|
||||||
xschem setprop rect 2 $graph_selected x2 [.graphdialog.top3.xmax get] fast
|
xschem setprop rect 2 $graph_selected x2 [.graphdialog.top3.xmax get] fast
|
||||||
xschem setprop rect 2 $graph_selected y1 [.graphdialog.top3.min get] fast
|
xschem setprop rect 2 $graph_selected y1 [.graphdialog.top3.ymin get] fast
|
||||||
xschem setprop rect 2 $graph_selected y2 [.graphdialog.top3.max get] fast
|
xschem setprop rect 2 $graph_selected y2 [.graphdialog.top3.ymax get] fast
|
||||||
|
|
||||||
if {$graph_unlocked} {
|
if {$graph_unlocked} {
|
||||||
xschem setprop rect 2 $graph_selected flags {graph,unlocked} fast
|
xschem setprop rect 2 $graph_selected flags {graph,unlocked} fast
|
||||||
|
|
@ -2029,8 +2029,8 @@ proc graph_edit_properties {n} {
|
||||||
update_graph_node [string trim [.graphdialog.center.right.text1 get 1.0 {end - 1 chars}] " \n"]
|
update_graph_node [string trim [.graphdialog.center.right.text1 get 1.0 {end - 1 chars}] " \n"]
|
||||||
xschem setprop rect 2 $graph_selected x1 [.graphdialog.top3.xmin get] fast
|
xschem setprop rect 2 $graph_selected x1 [.graphdialog.top3.xmin get] fast
|
||||||
xschem setprop rect 2 $graph_selected x2 [.graphdialog.top3.xmax get] fast
|
xschem setprop rect 2 $graph_selected x2 [.graphdialog.top3.xmax get] fast
|
||||||
xschem setprop rect 2 $graph_selected y1 [.graphdialog.top3.min get] fast
|
xschem setprop rect 2 $graph_selected y1 [.graphdialog.top3.ymin get] fast
|
||||||
xschem setprop rect 2 $graph_selected y2 [.graphdialog.top3.max get] fast
|
xschem setprop rect 2 $graph_selected y2 [.graphdialog.top3.ymax get] fast
|
||||||
if {$graph_unlocked} {
|
if {$graph_unlocked} {
|
||||||
xschem setprop rect 2 $graph_selected flags {graph,unlocked} fast
|
xschem setprop rect 2 $graph_selected flags {graph,unlocked} fast
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -2182,20 +2182,35 @@ proc graph_edit_properties {n} {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
label .graphdialog.top3.labmin -text { Y min:}
|
label .graphdialog.top3.ylabmin -text { Y min:}
|
||||||
entry .graphdialog.top3.min -width 7
|
entry .graphdialog.top3.ymin -width 7
|
||||||
bind .graphdialog.top3.min <KeyRelease> {
|
bind .graphdialog.top3.ymin <KeyRelease> {
|
||||||
xschem setprop rect 2 $graph_selected y1 [.graphdialog.top3.min get]
|
xschem setprop rect 2 $graph_selected y1 [.graphdialog.top3.ymin get]
|
||||||
xschem draw_graph $graph_selected
|
xschem draw_graph $graph_selected
|
||||||
}
|
}
|
||||||
|
|
||||||
label .graphdialog.top3.labmax -text { Y max:}
|
label .graphdialog.top3.ylabmax -text { Y max:}
|
||||||
entry .graphdialog.top3.max -width 7
|
entry .graphdialog.top3.ymax -width 7
|
||||||
bind .graphdialog.top3.max <KeyRelease> {
|
bind .graphdialog.top3.ymax <KeyRelease> {
|
||||||
xschem setprop rect 2 $graph_selected y2 [.graphdialog.top3.max get]
|
xschem setprop rect 2 $graph_selected y2 [.graphdialog.top3.ymax get]
|
||||||
xschem draw_graph $graph_selected
|
xschem draw_graph $graph_selected
|
||||||
}
|
}
|
||||||
|
|
||||||
|
label .graphdialog.top3.xlabmag -text { X/Y lab mag:}
|
||||||
|
entry .graphdialog.top3.xmag -width 4
|
||||||
|
bind .graphdialog.top3.xmag <KeyRelease> {
|
||||||
|
xschem setprop rect 2 $graph_selected xlabmag [.graphdialog.top3.xmag get]
|
||||||
|
xschem draw_graph $graph_selected
|
||||||
|
}
|
||||||
|
|
||||||
|
label .graphdialog.top3.ylabmag -text { }
|
||||||
|
entry .graphdialog.top3.ymag -width 4
|
||||||
|
bind .graphdialog.top3.ymag <KeyRelease> {
|
||||||
|
xschem setprop rect 2 $graph_selected ylabmag [.graphdialog.top3.ymag get]
|
||||||
|
xschem draw_graph $graph_selected
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
button .graphdialog.top.clear -text Clear -padx 2 -command {
|
button .graphdialog.top.clear -text Clear -padx 2 -command {
|
||||||
.graphdialog.top.search delete 0 end
|
.graphdialog.top.search delete 0 end
|
||||||
fill_graph_listbox
|
fill_graph_listbox
|
||||||
|
|
@ -2209,10 +2224,12 @@ proc graph_edit_properties {n} {
|
||||||
pack .graphdialog.top.rainbow -side left
|
pack .graphdialog.top.rainbow -side left
|
||||||
pack .graphdialog.top.lw -side left
|
pack .graphdialog.top.lw -side left
|
||||||
pack .graphdialog.top.lwe -side left
|
pack .graphdialog.top.lwe -side left
|
||||||
.graphdialog.top3.min insert 0 [xschem getprop rect 2 $graph_selected y1]
|
.graphdialog.top3.ymin insert 0 [xschem getprop rect 2 $graph_selected y1]
|
||||||
.graphdialog.top3.max insert 0 [xschem getprop rect 2 $graph_selected y2]
|
.graphdialog.top3.ymax insert 0 [xschem getprop rect 2 $graph_selected y2]
|
||||||
.graphdialog.top3.xmin insert 0 [xschem getprop rect 2 $graph_selected x1]
|
.graphdialog.top3.xmin insert 0 [xschem getprop rect 2 $graph_selected x1]
|
||||||
.graphdialog.top3.xmax insert 0 [xschem getprop rect 2 $graph_selected x2]
|
.graphdialog.top3.xmax insert 0 [xschem getprop rect 2 $graph_selected x2]
|
||||||
|
.graphdialog.top3.xmag insert 0 [xschem getprop rect 2 $graph_selected xlabmag]
|
||||||
|
.graphdialog.top3.ymag insert 0 [xschem getprop rect 2 $graph_selected ylabmag]
|
||||||
|
|
||||||
# top3 frame
|
# top3 frame
|
||||||
set graph_rainbow [xschem getprop rect 2 $graph_selected rainbow]
|
set graph_rainbow [xschem getprop rect 2 $graph_selected rainbow]
|
||||||
|
|
@ -2221,7 +2238,7 @@ proc graph_edit_properties {n} {
|
||||||
if { $graph_rainbow eq {} } { set graph_rainbow 0 }
|
if { $graph_rainbow eq {} } { set graph_rainbow 0 }
|
||||||
if { $graph_logx eq {} } { set graph_logx 0 }
|
if { $graph_logx eq {} } { set graph_logx 0 }
|
||||||
if { $graph_logy eq {} } { set graph_logy 0 }
|
if { $graph_logy eq {} } { set graph_logy 0 }
|
||||||
checkbutton .graphdialog.top3.logx -padx 2 -text {Log X scale} -variable graph_logx \
|
checkbutton .graphdialog.top3.logx -padx 2 -text {Log X} -variable graph_logx \
|
||||||
-command {
|
-command {
|
||||||
if { [xschem get schname] eq $graph_schname } {
|
if { [xschem get schname] eq $graph_schname } {
|
||||||
xschem setprop rect 2 $graph_selected logx $graph_logx fast
|
xschem setprop rect 2 $graph_selected logx $graph_logx fast
|
||||||
|
|
@ -2238,7 +2255,7 @@ proc graph_edit_properties {n} {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
checkbutton .graphdialog.top3.logy -text {Log Y scale} -variable graph_logy \
|
checkbutton .graphdialog.top3.logy -text {Log Y} -variable graph_logy \
|
||||||
-command {
|
-command {
|
||||||
if { [xschem get schname] eq $graph_schname } {
|
if { [xschem get schname] eq $graph_schname } {
|
||||||
xschem setprop rect 2 $graph_selected logy $graph_logy fast
|
xschem setprop rect 2 $graph_selected logy $graph_logy fast
|
||||||
|
|
@ -2256,7 +2273,8 @@ proc graph_edit_properties {n} {
|
||||||
}
|
}
|
||||||
pack .graphdialog.top3.logx .graphdialog.top3.logy -side left
|
pack .graphdialog.top3.logx .graphdialog.top3.logy -side left
|
||||||
pack .graphdialog.top3.xlabmin .graphdialog.top3.xmin .graphdialog.top3.xlabmax .graphdialog.top3.xmax -side left
|
pack .graphdialog.top3.xlabmin .graphdialog.top3.xmin .graphdialog.top3.xlabmax .graphdialog.top3.xmax -side left
|
||||||
pack .graphdialog.top3.labmin .graphdialog.top3.min .graphdialog.top3.labmax .graphdialog.top3.max -side left
|
pack .graphdialog.top3.ylabmin .graphdialog.top3.ymin .graphdialog.top3.ylabmax .graphdialog.top3.ymax -side left
|
||||||
|
pack .graphdialog.top3.xlabmag .graphdialog.top3.xmag .graphdialog.top3.ylabmag .graphdialog.top3.ymag -side left
|
||||||
# binding
|
# binding
|
||||||
bind .graphdialog.top.search <KeyRelease> {
|
bind .graphdialog.top.search <KeyRelease> {
|
||||||
fill_graph_listbox
|
fill_graph_listbox
|
||||||
|
|
@ -3651,7 +3669,7 @@ proc tclpropeval {s instname symname} {
|
||||||
regsub {\)([ \t\n]*)$} $s {\1} s
|
regsub {\)([ \t\n]*)$} $s {\1} s
|
||||||
# puts "tclpropeval: $s $instname $symname"
|
# puts "tclpropeval: $s $instname $symname"
|
||||||
if { [catch {subst $s} res] } {
|
if { [catch {subst $s} res] } {
|
||||||
# puts $res
|
# puts stderr $res
|
||||||
set res ?\n
|
set res ?\n
|
||||||
}
|
}
|
||||||
return $res
|
return $res
|
||||||
|
|
@ -4592,6 +4610,7 @@ proc get_directory {f} {
|
||||||
# fetch a remote url into ${XSCHEM_TMP_DIR}/xschem_web
|
# fetch a remote url into ${XSCHEM_TMP_DIR}/xschem_web
|
||||||
proc download_url {url} {
|
proc download_url {url} {
|
||||||
global XSCHEM_TMP_DIR download_url_helper OS
|
global XSCHEM_TMP_DIR download_url_helper OS
|
||||||
|
# puts "download_url: $url"
|
||||||
if {![file exists ${XSCHEM_TMP_DIR}/xschem_web]} {
|
if {![file exists ${XSCHEM_TMP_DIR}/xschem_web]} {
|
||||||
file mkdir ${XSCHEM_TMP_DIR}/xschem_web
|
file mkdir ${XSCHEM_TMP_DIR}/xschem_web
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue