fix status bar info correctly swicthing when focusing multiple xschem child windows; multiple schematic window handling within one xschem instance is now working
This commit is contained in:
parent
ad05513838
commit
bd626427fd
|
|
@ -66,6 +66,7 @@ Options:
|
|||
--netlist_filename <file>
|
||||
-t --tedax Set netlist type to tEDAx.
|
||||
-s --spice Set netlist type to SPICE.
|
||||
-y --symbol Set netlist type to SYMBOL (used when drawing symbols)
|
||||
-x --no_x Don't use X (only command mode).
|
||||
-z --rainbow Use a raibow-looking layer color table.
|
||||
-W --waves Show simulation waveforms.
|
||||
|
|
|
|||
|
|
@ -294,19 +294,19 @@ void new_window(const char *cell, int symbol)
|
|||
/* child of child */
|
||||
if(!cell || !cell[0]) {
|
||||
if(!symbol)
|
||||
execl(xschem_executable,xschem_executable,"-b", "--tcl",
|
||||
"set netlist_type spice; set XSCHEM_START_WINDOW {}", NULL);
|
||||
execl(xschem_executable,xschem_executable, "-b", "-s", "--tcl",
|
||||
"set XSCHEM_START_WINDOW {}", NULL);
|
||||
else
|
||||
execl(xschem_executable,xschem_executable,"-b", "--tcl",
|
||||
"set netlist_type symbol; set XSCHEM_START_WINDOW {}", NULL);
|
||||
execl(xschem_executable,xschem_executable, "-b", "-y", "--tcl",
|
||||
"set XSCHEM_START_WINDOW {}", NULL);
|
||||
}
|
||||
else if(!symbol) {
|
||||
my_strncpy(f, cell, S(f));
|
||||
execl(xschem_executable,xschem_executable,"-b", "--tcl", "set netlist_type spice", f, NULL);
|
||||
execl(xschem_executable,xschem_executable, "-b", "-s", f, NULL);
|
||||
}
|
||||
else {
|
||||
my_strncpy(f, cell, S(f));
|
||||
execl(xschem_executable,xschem_executable,"-b", "--tcl", "set netlist_type symbol", f, NULL);
|
||||
execl(xschem_executable,xschem_executable, "-b", "-y", f, NULL);
|
||||
}
|
||||
} else {
|
||||
/* error */
|
||||
|
|
|
|||
|
|
@ -173,6 +173,14 @@ int callback(const char *winpath, int event, int mx, int my, KeySym key,
|
|||
}
|
||||
#endif
|
||||
|
||||
Tcl_VarEval(interp, xctx->top_path, ".statusbar.7 configure -text $netlist_type", NULL);
|
||||
Tcl_VarEval(interp, xctx->top_path, ".statusbar.3 delete 0 end;",
|
||||
xctx->top_path, ".statusbar.3 insert 0 $cadsnap",
|
||||
NULL);
|
||||
Tcl_VarEval(interp, xctx->top_path, ".statusbar.5 delete 0 end;",
|
||||
xctx->top_path, ".statusbar.5 insert 0 $cadgrid",
|
||||
NULL);
|
||||
|
||||
#if 0
|
||||
/* exclude Motion and Expose events */
|
||||
if(event!=6 /* && event!=12 */) dbg(0, "callback(): event=%d, winpath=%s, old_winpath=%s, semaphore=%d\n",
|
||||
|
|
@ -773,7 +781,7 @@ int callback(const char *winpath, int event, int mx, int my, KeySym key,
|
|||
if(key=='V' && state == ShiftMask) /* toggle spice/vhdl netlist */
|
||||
{
|
||||
xctx->netlist_type++; if(xctx->netlist_type==6) xctx->netlist_type=1;
|
||||
override_netlist_type(-1);
|
||||
set_tcl_netlist_type();
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ char old_winpath[PATH_MAX] = ".drw";
|
|||
/* ---------------------------------------------------------- */
|
||||
/* Cmdline options (used at xinit, and then not used anymore) */
|
||||
/* ---------------------------------------------------------- */
|
||||
int cli_opt_netlist_type = -1;
|
||||
int cli_opt_netlist_type = 0;
|
||||
char cli_opt_plotfile[PATH_MAX] = "";
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -522,6 +522,16 @@ void wirecheck(int k) /* recursive routine */
|
|||
}
|
||||
}
|
||||
|
||||
void set_tcl_netlist_type(void)
|
||||
{
|
||||
if(xctx->netlist_type == CAD_SPICE_NETLIST) tclsetvar("netlist_type", "spice");
|
||||
else if(xctx->netlist_type == CAD_VERILOG_NETLIST) tclsetvar("netlist_type", "verilog");
|
||||
else if(xctx->netlist_type == CAD_VHDL_NETLIST) tclsetvar("netlist_type", "vhdl");
|
||||
else if(xctx->netlist_type == CAD_TEDAX_NETLIST) tclsetvar("netlist_type", "tedax");
|
||||
else if(xctx->netlist_type == CAD_SYMBOL_ATTRS) tclsetvar("netlist_type", "symbol");
|
||||
else tclsetvar("netlist_type", "unknown");
|
||||
}
|
||||
|
||||
/* what==0 -> initialize */
|
||||
/* what==1 -> get new node name, net## */
|
||||
/* what==2 -> update multiplicity */
|
||||
|
|
@ -603,23 +613,6 @@ int record_global_node(int what, FILE *fp, char *node)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* set xctx->netlist_type tcl var to specified format, if -1 is given restore to default */
|
||||
void override_netlist_type(int type)
|
||||
{
|
||||
if (type == CAD_VHDL_NETLIST) tclsetvar("netlist_type","vhdl");
|
||||
else if(type == CAD_VERILOG_NETLIST) tclsetvar("netlist_type","verilog");
|
||||
else if(type == CAD_TEDAX_NETLIST) tclsetvar("netlist_type","tedax");
|
||||
else if(type == CAD_SYMBOL_ATTRS) tclsetvar("netlist_type","symbol");
|
||||
else if(type == CAD_SPICE_NETLIST) tclsetvar("netlist_type","spice");
|
||||
else {
|
||||
if (xctx->netlist_type == CAD_VHDL_NETLIST) tclsetvar("netlist_type","vhdl");
|
||||
else if(xctx->netlist_type == CAD_VERILOG_NETLIST) tclsetvar("netlist_type","verilog");
|
||||
else if(xctx->netlist_type == CAD_TEDAX_NETLIST) tclsetvar("netlist_type","tedax");
|
||||
else if(xctx->netlist_type == CAD_SYMBOL_ATTRS) tclsetvar("netlist_type","symbol");
|
||||
else if(xctx->netlist_type == CAD_SPICE_NETLIST) tclsetvar("netlist_type","spice");
|
||||
}
|
||||
}
|
||||
|
||||
void prepare_netlist_structs(int for_netlist)
|
||||
{
|
||||
xRect *rct;
|
||||
|
|
|
|||
|
|
@ -112,6 +112,10 @@ void check_opt(char *opt, char *optval, int type)
|
|||
dbg(1, "process_options(): set netlist type to spice\n");
|
||||
cli_opt_netlist_type=CAD_SPICE_NETLIST;
|
||||
|
||||
} else if( (type == SHORT && *opt == 'y') || (type == LONG && !strcmp("symbol", opt)) ) {
|
||||
dbg(1, "process_options(): set netlist type to symbol\n");
|
||||
cli_opt_netlist_type=CAD_SYMBOL_ATTRS;
|
||||
|
||||
} else if( (type == SHORT && *opt == 'V') || (type == LONG && !strcmp("vhdl", opt)) ) {
|
||||
dbg(1, "process_options(): set netlist type to vhdl\n");
|
||||
cli_opt_netlist_type=CAD_VHDL_NETLIST;
|
||||
|
|
|
|||
|
|
@ -1080,12 +1080,12 @@ void load_schematic(int load_symbols, const char *filename, int reset_undo) /* 2
|
|||
if(!strcmp(tclresult(), "SYMBOL")) {
|
||||
save_netlist_type = xctx->netlist_type;
|
||||
xctx->netlist_type = CAD_SYMBOL_ATTRS;
|
||||
set_tcl_netlist_type();
|
||||
loaded_symbol = 1;
|
||||
tclsetvar("netlist_type","symbol");
|
||||
} else {
|
||||
if(loaded_symbol) {
|
||||
xctx->netlist_type = save_netlist_type;
|
||||
override_netlist_type(-1);
|
||||
set_tcl_netlist_type();
|
||||
}
|
||||
loaded_symbol = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
clear_drawing();
|
||||
if(argc>=3 && !strcmp(argv[2],"SYMBOL")) {
|
||||
xctx->netlist_type = CAD_SYMBOL_ATTRS;
|
||||
tclsetvar("netlist_type","symbol");
|
||||
set_tcl_netlist_type();
|
||||
for(i=0;;i++) {
|
||||
if(i == 0) my_snprintf(name, S(name), "%s.sym", "untitled");
|
||||
else my_snprintf(name, S(name), "%s-%d.sym", "untitled", i);
|
||||
|
|
@ -214,7 +214,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
my_strncpy(xctx->current_name, name, S(xctx->current_name));
|
||||
} else {
|
||||
xctx->netlist_type = CAD_SPICE_NETLIST;
|
||||
tclsetvar("netlist_type","spice");
|
||||
set_tcl_netlist_type();
|
||||
for(i=0;;i++) {
|
||||
if(i == 0) my_snprintf(name, S(name), "%s.sch", "untitled");
|
||||
else my_snprintf(name, S(name), "%s-%d.sch", "untitled", i);
|
||||
|
|
@ -477,12 +477,12 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
* ********** xschem get subcommands
|
||||
*/
|
||||
|
||||
if(!strcmp(argv[1],"get") && !strcmp(argv[2],"schname") && argc >= 3)
|
||||
if(argc >= 3 && !strcmp(argv[1],"get") && !strcmp(argv[2],"schname"))
|
||||
{
|
||||
/* allows to retrieve name of n-th parent schematic */
|
||||
int x;
|
||||
cmd_found = 1;
|
||||
if(argc == 4) x = atoi(argv[3]);
|
||||
if(argc >= 4) x = atoi(argv[3]);
|
||||
else x = xctx->currsch;
|
||||
if(x<0 && xctx->currsch+x>=0) {
|
||||
Tcl_SetResult(interp, xctx->sch[xctx->currsch+x], TCL_VOLATILE);
|
||||
|
|
@ -490,7 +490,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
Tcl_SetResult(interp, xctx->sch[x], TCL_VOLATILE);
|
||||
}
|
||||
}
|
||||
else if(!strcmp(argv[1],"get") && !strcmp(argv[2],"sch_path") && argc >= 3)
|
||||
else if( argc >= 3 && !strcmp(argv[1],"get") && !strcmp(argv[2],"sch_path"))
|
||||
{
|
||||
int x;
|
||||
cmd_found = 1;
|
||||
|
|
@ -593,6 +593,27 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
else if(!strcmp(argv[2],"netlist_name")) {
|
||||
Tcl_SetResult(interp, xctx->netlist_name, TCL_VOLATILE);
|
||||
}
|
||||
else if(!strcmp(argv[2],"netlist_type"))
|
||||
{
|
||||
if(xctx->netlist_type == CAD_SPICE_NETLIST) {
|
||||
Tcl_SetResult(interp, "spice", TCL_STATIC);
|
||||
}
|
||||
else if(xctx->netlist_type == CAD_VHDL_NETLIST) {
|
||||
Tcl_SetResult(interp, "vhdl", TCL_STATIC);
|
||||
}
|
||||
else if(xctx->netlist_type == CAD_VERILOG_NETLIST) {
|
||||
Tcl_SetResult(interp, "verilog", TCL_STATIC);
|
||||
}
|
||||
else if(xctx->netlist_type == CAD_TEDAX_NETLIST) {
|
||||
Tcl_SetResult(interp, "tedax", TCL_STATIC);
|
||||
}
|
||||
else if(xctx->netlist_type == CAD_SYMBOL_ATTRS) {
|
||||
Tcl_SetResult(interp, "symbol", TCL_STATIC);
|
||||
}
|
||||
else {
|
||||
Tcl_SetResult(interp, "unknown", TCL_STATIC);
|
||||
}
|
||||
}
|
||||
else if(!strcmp(argv[2],"no_draw")) {
|
||||
if( xctx->no_draw != 0 )
|
||||
Tcl_SetResult(interp, "1",TCL_STATIC);
|
||||
|
|
@ -1469,29 +1490,6 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
}
|
||||
}
|
||||
|
||||
else if(!strcmp(argv[1],"netlist_type"))
|
||||
{
|
||||
cmd_found = 1;
|
||||
if(argc > 2) {
|
||||
if(!strcmp(argv[2],"vhdl")) {
|
||||
xctx->netlist_type=CAD_VHDL_NETLIST;
|
||||
}
|
||||
else if(!strcmp(argv[2],"verilog")) {
|
||||
xctx->netlist_type=CAD_VERILOG_NETLIST;
|
||||
}
|
||||
else if(!strcmp(argv[2],"tedax")) {
|
||||
xctx->netlist_type=CAD_TEDAX_NETLIST;
|
||||
}
|
||||
else if(!strcmp(argv[2],"symbol")) {
|
||||
xctx->netlist_type=CAD_SYMBOL_ATTRS;
|
||||
}
|
||||
else if(!strcmp(argv[2],"spice")){
|
||||
xctx->netlist_type=CAD_SPICE_NETLIST;
|
||||
}
|
||||
override_netlist_type(-1); /* set tcl netlist_type variable */
|
||||
}
|
||||
}
|
||||
|
||||
else if(!strcmp(argv[1],"new_schematic"))
|
||||
{
|
||||
cmd_found = 1;
|
||||
|
|
@ -2127,6 +2125,34 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
else if(!strcmp(argv[2],"netlist_name")) {
|
||||
my_strncpy(xctx->netlist_name, argv[3], S(xctx->netlist_name));
|
||||
}
|
||||
else if(!strcmp(argv[2],"netlist_type"))
|
||||
{
|
||||
if(argc > 3) {
|
||||
if(!strcmp(argv[3],"spice")){
|
||||
xctx->netlist_type=CAD_SPICE_NETLIST;
|
||||
tclsetvar("netlist_type", "spice");
|
||||
}
|
||||
else if(!strcmp(argv[3],"vhdl")) {
|
||||
xctx->netlist_type=CAD_VHDL_NETLIST;
|
||||
tclsetvar("netlist_type", "vhdl");
|
||||
}
|
||||
else if(!strcmp(argv[3],"verilog")) {
|
||||
xctx->netlist_type=CAD_VERILOG_NETLIST;
|
||||
tclsetvar("netlist_type", "verilog");
|
||||
}
|
||||
else if(!strcmp(argv[3],"tedax")) {
|
||||
xctx->netlist_type=CAD_TEDAX_NETLIST;
|
||||
tclsetvar("netlist_type", "tedax");
|
||||
}
|
||||
else if(!strcmp(argv[3],"symbol")) {
|
||||
xctx->netlist_type=CAD_SYMBOL_ATTRS;
|
||||
tclsetvar("netlist_type", "symbol");
|
||||
}
|
||||
else {
|
||||
tclsetvar("netlist_type", "unknown");
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(!strcmp(argv[2],"no_draw")) {
|
||||
int s = atoi(argv[3]);
|
||||
xctx->no_draw=s;
|
||||
|
|
|
|||
|
|
@ -253,11 +253,16 @@ void global_spice_netlist(int global) /* netlister driver */
|
|||
|
||||
|
||||
if(split_f) {
|
||||
int save;
|
||||
fclose(fd);
|
||||
my_snprintf(tcl_cmd_netlist, S(tcl_cmd_netlist), "netlist {%s} noshow {%s}", netl_filename, cellname);
|
||||
override_netlist_type(CAD_SPICE_NETLIST);
|
||||
save = xctx->netlist_type;
|
||||
xctx->netlist_type = CAD_SPICE_NETLIST;
|
||||
set_tcl_netlist_type();
|
||||
tcleval(tcl_cmd_netlist);
|
||||
override_netlist_type(-1); /* restore to xctx->netlist_type default */
|
||||
xctx->netlist_type = save;
|
||||
set_tcl_netlist_type();
|
||||
|
||||
if(debug_var==0) xunlink(netl_filename);
|
||||
}
|
||||
|
||||
|
|
@ -475,11 +480,15 @@ void spice_block_netlist(FILE *fd, int i)
|
|||
}
|
||||
fprintf(fd, ".ends\n\n");
|
||||
if(split_f) {
|
||||
int save;
|
||||
fclose(fd);
|
||||
my_snprintf(tcl_cmd_netlist, S(tcl_cmd_netlist), "netlist {%s} noshow {%s}", netl_filename, cellname);
|
||||
override_netlist_type(CAD_SPICE_NETLIST);
|
||||
save = xctx->netlist_type;
|
||||
xctx->netlist_type = CAD_SPICE_NETLIST;
|
||||
set_tcl_netlist_type();
|
||||
tcleval(tcl_cmd_netlist);
|
||||
override_netlist_type(-1); /* restore to xctx->netlist_type default */
|
||||
xctx->netlist_type = save;
|
||||
set_tcl_netlist_type();
|
||||
if(debug_var==0) xunlink(netl_filename);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -265,11 +265,15 @@ void global_verilog_netlist(int global) /* netlister driver */
|
|||
fprintf(fd, "endmodule\n");
|
||||
|
||||
if(split_f) {
|
||||
int save;
|
||||
fclose(fd);
|
||||
my_snprintf(tcl_cmd_netlist, S(tcl_cmd_netlist), "netlist {%s} noshow {%s}", netl_filename, cellname);
|
||||
override_netlist_type(CAD_VERILOG_NETLIST);
|
||||
save = xctx->netlist_type;
|
||||
xctx->netlist_type = CAD_VERILOG_NETLIST;
|
||||
set_tcl_netlist_type();
|
||||
tcleval(tcl_cmd_netlist);
|
||||
override_netlist_type(-1); /* restore to xctx->netlist_type default */
|
||||
xctx->netlist_type = save;
|
||||
set_tcl_netlist_type();
|
||||
if(debug_var==0) xunlink(netl_filename);
|
||||
}
|
||||
|
||||
|
|
@ -496,11 +500,15 @@ void verilog_block_netlist(FILE *fd, int i)
|
|||
fprintf(fd,"---- end user architecture code\n");
|
||||
fprintf(fd, "endmodule\n");
|
||||
if(split_f) {
|
||||
int save;
|
||||
fclose(fd);
|
||||
my_snprintf(tcl_cmd_netlist, S(tcl_cmd_netlist), "netlist {%s} noshow {%s}", netl_filename, cellname);
|
||||
override_netlist_type(CAD_VERILOG_NETLIST);
|
||||
save = xctx->netlist_type;
|
||||
xctx->netlist_type = CAD_VERILOG_NETLIST;
|
||||
set_tcl_netlist_type();
|
||||
tcleval(tcl_cmd_netlist);
|
||||
override_netlist_type(-1); /* restore to xctx->netlist_type default */
|
||||
xctx->netlist_type = save;
|
||||
set_tcl_netlist_type();
|
||||
if(debug_var==0) xunlink(netl_filename);
|
||||
}
|
||||
my_free(1079, &dir_tmp);
|
||||
|
|
|
|||
|
|
@ -319,11 +319,15 @@ void global_vhdl_netlist(int global) /* netlister driver */
|
|||
fprintf(fd, "end arch_%s ;\n\n", skip_dir( xctx->sch[xctx->currsch]) );
|
||||
|
||||
if(split_f) {
|
||||
int save;
|
||||
fclose(fd);
|
||||
my_snprintf(tcl_cmd_netlist, S(tcl_cmd_netlist), "netlist {%s} noshow {%s}", netl_filename, cellname);
|
||||
override_netlist_type(CAD_VHDL_NETLIST);
|
||||
save = xctx->netlist_type;
|
||||
xctx->netlist_type = CAD_VHDL_NETLIST;
|
||||
set_tcl_netlist_type();
|
||||
tcleval(tcl_cmd_netlist);
|
||||
override_netlist_type(-1); /* restore to netlist_dir default */
|
||||
xctx->netlist_type = save;
|
||||
set_tcl_netlist_type();
|
||||
if(debug_var==0) xunlink(netl_filename);
|
||||
}
|
||||
xctx->netlist_count++;
|
||||
|
|
@ -611,11 +615,15 @@ void vhdl_block_netlist(FILE *fd, int i)
|
|||
if(xctx->schvhdlprop && xctx->schvhdlprop[0]) fprintf(fd, "%s\n", xctx->schvhdlprop);
|
||||
fprintf(fd, "end arch_%s ;\n\n", skip_dir(xctx->sym[i].name) ); /* skip_dir( xctx->sch[xctx->currsch]) ); */
|
||||
if(split_f) {
|
||||
int save;
|
||||
fclose(fd);
|
||||
my_snprintf(tcl_cmd_netlist, S(tcl_cmd_netlist), "netlist {%s} noshow {%s}", netl_filename, cellname);
|
||||
override_netlist_type(CAD_VHDL_NETLIST);
|
||||
save = xctx->netlist_type;
|
||||
xctx->netlist_type = CAD_VHDL_NETLIST;
|
||||
set_tcl_netlist_type();
|
||||
tcleval(tcl_cmd_netlist);
|
||||
override_netlist_type(-1); /* restore to netlist_dir default */
|
||||
xctx->netlist_type = save;
|
||||
set_tcl_netlist_type();
|
||||
if(debug_var==0) xunlink(netl_filename);
|
||||
}
|
||||
xctx->netlist_count++;
|
||||
|
|
|
|||
32
src/xinit.c
32
src/xinit.c
|
|
@ -389,19 +389,6 @@ void free_gc()
|
|||
}
|
||||
}
|
||||
|
||||
void get_netlist_type_from_tcl(void)
|
||||
{
|
||||
if(xctx->netlist_type==-1) {
|
||||
if(!strcmp(tclgetvar("netlist_type"),"vhdl") ) xctx->netlist_type=CAD_VHDL_NETLIST;
|
||||
else if(!strcmp(tclgetvar("netlist_type"),"verilog") ) xctx->netlist_type=CAD_VERILOG_NETLIST;
|
||||
else if(!strcmp(tclgetvar("netlist_type"),"tedax") ) xctx->netlist_type=CAD_TEDAX_NETLIST;
|
||||
else if(!strcmp(tclgetvar("netlist_type"),"symbol") ) xctx->netlist_type=CAD_SYMBOL_ATTRS;
|
||||
else xctx->netlist_type=CAD_SPICE_NETLIST;
|
||||
} else {
|
||||
override_netlist_type(-1); /* set tcl netlist_type */
|
||||
}
|
||||
}
|
||||
|
||||
void alloc_xschem_data(const char *top_path)
|
||||
{
|
||||
int i, j;
|
||||
|
|
@ -572,7 +559,7 @@ void alloc_xschem_data(const char *top_path)
|
|||
xctx->n_active_layers = 0;
|
||||
xctx->active_layer=my_calloc(563, cadlayers, sizeof(int));
|
||||
xctx->hide_symbols = 0;
|
||||
xctx->netlist_type = -1;
|
||||
xctx->netlist_type = CAD_SPICE_NETLIST;
|
||||
xctx->top_path = NULL;
|
||||
my_strdup2(1296, &xctx->top_path, top_path);
|
||||
xctx->fill_type=my_calloc(640, cadlayers, sizeof(int));
|
||||
|
|
@ -804,7 +791,6 @@ void preview_window(const char *what, const char *tk_win_path, const char *filen
|
|||
my_strdup(117, ¤t_file, filename);
|
||||
xctx = NULL; /* reset for preview */
|
||||
alloc_xschem_data(""); /* alloc data into xctx */
|
||||
get_netlist_type_from_tcl();
|
||||
init_pixdata(); /* populate xctx->fill_type array that is used in create_gc() to set fill styles */
|
||||
preview_xctx = xctx;
|
||||
preview_xctx->window = pre_window;
|
||||
|
|
@ -1479,10 +1465,18 @@ int Tcl_AppInit(Tcl_Interp *inter)
|
|||
xctx->draw_window=atoi(tclgetvar("draw_window"));
|
||||
|
||||
/* set global variables fetching data from tcl code */
|
||||
xctx->netlist_type = cli_opt_netlist_type;
|
||||
|
||||
get_netlist_type_from_tcl();
|
||||
|
||||
if(cli_opt_netlist_type) {
|
||||
xctx->netlist_type = cli_opt_netlist_type;
|
||||
set_tcl_netlist_type();
|
||||
} else {
|
||||
const char *n;
|
||||
n = tclgetvar("netlist_type");
|
||||
if(!strcmp(n, "spice")) xctx->netlist_type = CAD_SPICE_NETLIST;
|
||||
else if(!strcmp(n, "vhdl")) xctx->netlist_type = CAD_VHDL_NETLIST;
|
||||
else if(!strcmp(n, "verilog")) xctx->netlist_type = CAD_VERILOG_NETLIST;
|
||||
else if(!strcmp(n, "tedax")) xctx->netlist_type = CAD_TEDAX_NETLIST;
|
||||
else if(!strcmp(n, "symbol")) xctx->netlist_type = CAD_SYMBOL_ATTRS;
|
||||
}
|
||||
init_pixdata();/* populate xctx->fill_type array that is used in create_gc() to set fill styles */
|
||||
init_color_array(0.0, 0.0);
|
||||
my_snprintf(tmp, S(tmp), "%d",debug_var);
|
||||
|
|
|
|||
|
|
@ -1139,7 +1139,7 @@ extern void select_connected_wires(int stop_at_junction);
|
|||
extern void draw_hilight_net(int on_window);
|
||||
extern void display_hilights(char **str);
|
||||
extern void redraw_hilights(int clear);
|
||||
extern void override_netlist_type(int type);
|
||||
extern void set_tcl_netlist_type(void);
|
||||
extern void prepare_netlist_structs(int for_netlist);
|
||||
extern void create_simdata(void);
|
||||
extern void free_simdata(void);
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ Options:
|
|||
-N <file> Set name (only name, not path) of top level netlist file.
|
||||
-t --tedax Set netlist type to tEDAx.
|
||||
-s --spice Set netlist type to SPICE.
|
||||
-y --symbol Set netlist type to SYMBOL (used when drawing symbols)
|
||||
-x --no_x Don't use X (only command mode).
|
||||
-z --rainbow Use a raibow-looking layer color table.
|
||||
-W --waves Show simulation waveforms.
|
||||
|
|
|
|||
|
|
@ -131,9 +131,10 @@ proc execute {status args} {
|
|||
|
||||
proc netlist {source_file show netlist_file} {
|
||||
global XSCHEM_SHAREDIR flat_netlist hspice_netlist netlist_dir
|
||||
global verilog_2001 netlist_type debug_var
|
||||
global verilog_2001 debug_var
|
||||
|
||||
simuldir
|
||||
set netlist_type [xschem get netlist_type]
|
||||
if {$debug_var <= -1} { puts "netlist: source_file=$source_file, netlist_type=$netlist_type" }
|
||||
if {$netlist_type eq {spice}} {
|
||||
if { $hspice_netlist == 1 } {
|
||||
|
|
@ -309,11 +310,11 @@ proc edit_file {filename} {
|
|||
##
|
||||
## Other global vars:
|
||||
## netlist_dir
|
||||
## netlist_type
|
||||
## computerfarm
|
||||
## terminal
|
||||
## netlist_type can be obtained with [xschem get netlist_type]
|
||||
proc save_sim_defaults {f} {
|
||||
global sim netlist_dir netlist_type computerfarm terminal
|
||||
global sim netlist_dir computerfarm terminal
|
||||
|
||||
set a [catch {open $f w} fd]
|
||||
if { $a } {
|
||||
|
|
@ -877,11 +878,12 @@ proc simulate {{callback {}}} {
|
|||
## $S : schematic name full path (/home/schippes/.xschem/xschem_library/opamp.sch)
|
||||
## $d : netlist directory
|
||||
|
||||
global netlist_dir netlist_type computerfarm terminal sim
|
||||
global netlist_dir computerfarm terminal sim
|
||||
global execute_callback XSCHEM_SHAREDIR has_x OS
|
||||
|
||||
simuldir
|
||||
set_sim_defaults
|
||||
set netlist_type [xschem get netlist_type]
|
||||
if { [select_netlist_dir 0] ne {}} {
|
||||
set d ${netlist_dir}
|
||||
set tool $netlist_type
|
||||
|
|
@ -1001,10 +1003,11 @@ proc waves {} {
|
|||
## $S : schematic name full path (/home/schippes/.xschem/xschem_library/opamp.sch)
|
||||
## $d : netlist directory
|
||||
|
||||
global netlist_dir netlist_type computerfarm terminal sim XSCHEM_SHAREDIR has_x
|
||||
global netlist_dir computerfarm terminal sim XSCHEM_SHAREDIR has_x
|
||||
global bespice_listen_port env
|
||||
|
||||
simuldir
|
||||
set netlist_type [xschem get netlist_type]
|
||||
set_sim_defaults
|
||||
if { [select_netlist_dir 0] ne {}} {
|
||||
set d ${netlist_dir}
|
||||
|
|
@ -1038,7 +1041,7 @@ proc waves {} {
|
|||
# ============================================================
|
||||
|
||||
proc utile_translate {schname} {
|
||||
global netlist_dir netlist_type debug_var XSCHEM_SHAREDIR
|
||||
global netlist_dir debug_var XSCHEM_SHAREDIR
|
||||
global utile_gui_path utile_cmd_path
|
||||
|
||||
simuldir
|
||||
|
|
@ -1048,7 +1051,7 @@ proc utile_translate {schname} {
|
|||
}
|
||||
|
||||
proc utile_gui {schname} {
|
||||
global netlist_dir netlist_type debug_var XSCHEM_SHAREDIR
|
||||
global netlist_dir debug_var XSCHEM_SHAREDIR
|
||||
global utile_gui_path utile_cmd_path
|
||||
|
||||
simuldir
|
||||
|
|
@ -1058,7 +1061,7 @@ proc utile_gui {schname} {
|
|||
}
|
||||
|
||||
proc utile_edit {schname} {
|
||||
global netlist_dir netlist_type debug_var editor XSCHEM_SHAREDIR
|
||||
global netlist_dir debug_var editor XSCHEM_SHAREDIR
|
||||
global utile_gui_path utile_cmd_path
|
||||
|
||||
simuldir
|
||||
|
|
@ -1068,7 +1071,7 @@ proc utile_edit {schname} {
|
|||
}
|
||||
|
||||
proc get_shell { curpath } {
|
||||
global netlist_dir netlist_type debug_var
|
||||
global netlist_dir debug_var
|
||||
global terminal
|
||||
|
||||
simuldir
|
||||
|
|
@ -1076,10 +1079,11 @@ proc get_shell { curpath } {
|
|||
}
|
||||
|
||||
proc edit_netlist {schname } {
|
||||
global netlist_dir netlist_type debug_var
|
||||
global netlist_dir debug_var
|
||||
global editor terminal OS
|
||||
|
||||
simuldir
|
||||
set netlist_type [xschem get netlist_type]
|
||||
set tmpname [file rootname "$schname"]
|
||||
|
||||
if { [regexp vim $editor] } { set ftype "-c \":set filetype=$netlist_type\"" } else { set ftype {} }
|
||||
|
|
@ -2176,7 +2180,9 @@ proc tclpropeval {s instname symname} {
|
|||
|
||||
# this hook is called in translate() if whole string is contained in a tcleval(...) construct
|
||||
proc tclpropeval2 {s} {
|
||||
global debug_var env netlist_type path
|
||||
global debug_var env path
|
||||
|
||||
set netlist_type [xschem get netlist_type]
|
||||
# puts "tclpropeval2: s=|$s|"
|
||||
if {$debug_var <=-1} {puts "tclpropeval2: $s"}
|
||||
set path [string range [xschem get sch_path] 1 end]
|
||||
|
|
@ -2296,9 +2302,10 @@ proc ask_save { {ask {save file?}} } {
|
|||
|
||||
|
||||
proc edit_vi_prop {txtlabel} {
|
||||
global XSCHEM_TMP_DIR retval symbol prev_symbol rcode debug_var netlist_type editor
|
||||
global XSCHEM_TMP_DIR retval symbol prev_symbol rcode debug_var editor
|
||||
global user_wants_copy_cell
|
||||
|
||||
set netlist_dir [xschem get netlist_type]
|
||||
set user_wants_copy_cell 0
|
||||
set rcode {}
|
||||
set filename .xschem_edit_file.[pid]
|
||||
|
|
@ -2324,9 +2331,10 @@ proc edit_vi_prop {txtlabel} {
|
|||
}
|
||||
|
||||
proc edit_vi_netlist_prop {txtlabel} {
|
||||
global XSCHEM_TMP_DIR retval rcode debug_var netlist_type editor
|
||||
global XSCHEM_TMP_DIR retval rcode debug_var editor
|
||||
global user_wants_copy_cell
|
||||
|
||||
set netlist_type [xschem get netlist_type]
|
||||
set user_wants_copy_cell 0
|
||||
set filename .xschem_edit_file.[pid]
|
||||
if ![string compare $netlist_type "vhdl"] { set suffix vhd } else { set suffix v }
|
||||
|
|
@ -3543,8 +3551,8 @@ set tctx::global_list {
|
|||
incr_hilight infowindow_text INITIALINSTDIR INITIALLOADDIR INITIALPROPDIR INITIALTEXTDIR
|
||||
input_line_cmd input_line_data launcher_default_program light_colors line_width local_netlist_dir
|
||||
myload_d myload_default_geometry myload_dir1 myload_dir2 myload_dirs2 myload_files1 myload_files2 myload_index1
|
||||
myload_retval myload_sash_pos myload_sel myload_type myload_yview netlist_dir netlist_show netlist_type
|
||||
no_change_attrs noprint_libs old_selected_tok
|
||||
myload_retval myload_sash_pos myload_sel myload_type myload_yview netlist_dir netlist_show
|
||||
netlist_type no_change_attrs noprint_libs old_selected_tok
|
||||
only_probes path pathlist persistent_command preserve_unchanged_attrs prev_symbol ps_colors rainbow_colors
|
||||
rcode recentfile replace_key retval retval_orig rotated_text search_exact search_found search_select
|
||||
search_value selected_tok show_infowindow show_pin_net_names simconf_default_geometry simconf_vpos
|
||||
|
|
@ -3715,7 +3723,7 @@ proc build_widgets { {topwin {} } } {
|
|||
global draw_grid big_grid_points sym_txt change_lw incr_hilight symbol_width
|
||||
global cadgrid draw_window show_pin_net_names toolbar_visible hide_symbols
|
||||
global disable_unique_names persistent_command autotrim_wires en_hilight_conn_inst
|
||||
global local_netlist_dir editor netlist_dir spiceprefix initial_geometry simulate_bg
|
||||
global local_netlist_dir editor netlist_type netlist_dir spiceprefix initial_geometry simulate_bg
|
||||
frame $topwin.menubar -relief raised -bd 2
|
||||
toolbar_toolbar $topwin
|
||||
menubutton $topwin.menubar.file -text "File" -menu $topwin.menubar.file.menu -padx 3 -pady 0
|
||||
|
|
@ -3859,19 +3867,19 @@ proc build_widgets { {topwin {} } } {
|
|||
$topwin.menubar.option.menu add separator
|
||||
$topwin.menubar.option.menu add radiobutton -label "Spice netlist" -variable netlist_type -value spice \
|
||||
-accelerator {Shift+V} \
|
||||
-command "xschem netlist_type spice"
|
||||
-command "xschem set netlist_type spice"
|
||||
$topwin.menubar.option.menu add radiobutton -label "VHDL netlist" -variable netlist_type -value vhdl \
|
||||
-accelerator {Shift+V} \
|
||||
-command "xschem netlist_type vhdl"
|
||||
-command "xschem set netlist_type vhdl"
|
||||
$topwin.menubar.option.menu add radiobutton -label "Verilog netlist" -variable netlist_type -value verilog \
|
||||
-accelerator {Shift+V} \
|
||||
-command "xschem netlist_type verilog"
|
||||
-command "xschem set netlist_type verilog"
|
||||
$topwin.menubar.option.menu add radiobutton -label "tEDAx netlist" -variable netlist_type -value tedax \
|
||||
-accelerator {Shift+V} \
|
||||
-command "xschem netlist_type tedax"
|
||||
-command "xschem set netlist_type tedax"
|
||||
$topwin.menubar.option.menu add radiobutton -label "Symbol global attrs" -variable netlist_type -value symbol \
|
||||
-accelerator {Shift+V} \
|
||||
-command "xschem netlist_type symbol"
|
||||
-command "xschem set netlist_type symbol"
|
||||
$topwin.menubar.edit.menu add command -label "Undo" -command "xschem undo; xschem redraw" -accelerator U
|
||||
toolbar_create EditUndo "xschem undo; xschem redraw" "Undo" $topwin
|
||||
$topwin.menubar.edit.menu add command -label "Redo" -command "xschem redo; xschem redraw" -accelerator {Shift+U}
|
||||
|
|
@ -4166,14 +4174,14 @@ proc build_widgets { {topwin {} } } {
|
|||
frame $topwin.statusbar
|
||||
label $topwin.statusbar.1 -text "STATUS BAR 1"
|
||||
label $topwin.statusbar.2 -text "SNAP:"
|
||||
entry $topwin.statusbar.3 -textvariable cadsnap -relief sunken -bg white \
|
||||
entry $topwin.statusbar.3 -relief sunken -bg white \
|
||||
-width 10 -foreground black -takefocus 0
|
||||
label $topwin.statusbar.4 -text "GRID:"
|
||||
entry $topwin.statusbar.5 -textvariable cadgrid -relief sunken -bg white \
|
||||
entry $topwin.statusbar.5 -relief sunken -bg white \
|
||||
-width 10 -foreground black -takefocus 0
|
||||
label $topwin.statusbar.6 -text "NETLIST MODE:"
|
||||
entry $topwin.statusbar.7 -textvariable netlist_type -relief sunken -bg white \
|
||||
-width 8 -state disabled -disabledforeground black
|
||||
label $topwin.statusbar.7 -relief sunken -bg white \
|
||||
-width 8
|
||||
label $topwin.statusbar.8 -activebackground red -text {}
|
||||
}
|
||||
|
||||
|
|
@ -4364,6 +4372,9 @@ set_ne globfilter {*}
|
|||
## list of tcl procedures to load at end of xschem.tcl
|
||||
set_ne tcl_files {}
|
||||
set_ne netlist_dir "$USER_CONF_DIR/simulations"
|
||||
# this global exists only for netlist_type radiobuttons, don't use, use [xschem] subcommand to get/set values
|
||||
# it is also used in xschemrc to set initial netlist type.
|
||||
set_ne netlist_type spice
|
||||
set_ne local_netlist_dir 0 ;# if set use <sch_dir>/simulation for netlist and sims
|
||||
set_ne bus_replacement_char {} ;# use {<>} to replace [] with <> in bussed signals
|
||||
set_ne hspice_netlist 1
|
||||
|
|
@ -4372,7 +4383,6 @@ set_ne spiceprefix 1
|
|||
set_ne verilog_2001 1
|
||||
set_ne split_files 0
|
||||
set_ne flat_netlist 0
|
||||
set_ne netlist_type spice
|
||||
set_ne netlist_show 0
|
||||
set_ne color_ps 1
|
||||
set_ne transparent_svg 0
|
||||
|
|
|
|||
Loading…
Reference in New Issue