simulation button will go yellow while sim is running.Clicking a yellow simulate button will kill simulation.
This commit is contained in:
parent
f531422761
commit
98def78164
|
|
@ -149,11 +149,31 @@ int set_modify(int mod)
|
|||
xctx->modified = mod;
|
||||
}
|
||||
if(mod == 1 || (mod == 0 && xctx->prev_set_modify) || mod == -2) {
|
||||
tclvareval(xctx->top_path, ".menubar.netlist configure -bg $simulate_bg", NULL);
|
||||
tclvareval(xctx->top_path, ".menubar.simulate configure -bg $simulate_bg", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_netlist $simulate_bg", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_simulate $simulate_bg", NULL);
|
||||
}
|
||||
if(has_x) {
|
||||
char s[256];
|
||||
tclvareval(xctx->top_path, ".menubar.netlist configure -bg $simulate_bg", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_netlist $simulate_bg", NULL);
|
||||
my_snprintf(s, S(s), "tctx::%s_simulate_id", xctx->current_win_path);
|
||||
if(tclgetvar(s)) {
|
||||
tclvareval(xctx->top_path, ".menubar.simulate configure -bg yellow", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_simulate yellow", NULL);
|
||||
} else {
|
||||
tclvareval(xctx->top_path, ".menubar.simulate configure -bg $simulate_bg", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_simulate $simulate_bg", NULL);
|
||||
}
|
||||
}
|
||||
if(sch_waves_loaded() >= 0) {
|
||||
if(has_x) {
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_waves LightGreen", NULL);
|
||||
tclvareval(xctx->top_path, ".menubar.waves configure -bg LightGreen", NULL);
|
||||
}
|
||||
} else {
|
||||
if(has_x) {
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_waves $simulate_bg", NULL);
|
||||
tclvareval(xctx->top_path, ".menubar.waves configure -bg $simulate_bg", NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* clear floater caches */
|
||||
if(mod == 1 || mod == -2) {
|
||||
|
|
|
|||
|
|
@ -2387,12 +2387,16 @@ int rstate; /* (reduced state, without ShiftMask) */
|
|||
dbg(1, "callback(): -------------\n");
|
||||
}
|
||||
if(err) {
|
||||
tclvareval(xctx->top_path, ".menubar.netlist configure -bg red", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_netlist red", NULL);
|
||||
if(has_x) {
|
||||
tclvareval(xctx->top_path, ".menubar.netlist configure -bg red", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_netlist red", NULL);
|
||||
}
|
||||
|
||||
} else {
|
||||
tclvareval(xctx->top_path, ".menubar.netlist configure -bg LightGreen", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_netlist LightGreen", NULL);
|
||||
if(has_x) {
|
||||
tclvareval(xctx->top_path, ".menubar.netlist configure -bg LightGreen", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_netlist LightGreen", NULL);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -2418,11 +2422,15 @@ int rstate; /* (reduced state, without ShiftMask) */
|
|||
dbg(1, "callback(): -------------\n");
|
||||
}
|
||||
if(err) {
|
||||
tclvareval(xctx->top_path, ".menubar.netlist configure -bg red", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_netlist red", NULL);
|
||||
if(has_x) {
|
||||
tclvareval(xctx->top_path, ".menubar.netlist configure -bg red", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_netlist red", NULL);
|
||||
}
|
||||
} else {
|
||||
tclvareval(xctx->top_path, ".menubar.netlist configure -bg LightGreen", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_netlist LightGreen", NULL);
|
||||
if(has_x) {
|
||||
tclvareval(xctx->top_path, ".menubar.netlist configure -bg LightGreen", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_netlist LightGreen", NULL);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
|
|||
15
src/save.c
15
src/save.c
|
|
@ -700,6 +700,12 @@ void free_rawfile(Raw **rawptr, int dr)
|
|||
if(raw->schname) my_free(_ALLOC_ID_, &raw->schname);
|
||||
if(raw->table.table) int_hash_free(&raw->table);
|
||||
my_free(_ALLOC_ID_, rawptr);
|
||||
|
||||
if(has_x) {
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_waves $simulate_bg", NULL);
|
||||
tclvareval(xctx->top_path, ".menubar.waves configure -bg $simulate_bg", NULL);
|
||||
}
|
||||
|
||||
if(dr) draw();
|
||||
}
|
||||
|
||||
|
|
@ -810,6 +816,15 @@ int raw_read(const char *f, Raw **rawptr, const char *type)
|
|||
dbg(0, "raw_read(): no useful data found\n");
|
||||
}
|
||||
fclose(fd);
|
||||
if(has_x) {
|
||||
if(sch_waves_loaded() >= 0) {
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_waves LightGreen", NULL);
|
||||
tclvareval(xctx->top_path, ".menubar.waves configure -bg LightGreen", NULL);
|
||||
} else {
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_waves $simulate_bg", NULL);
|
||||
tclvareval(xctx->top_path, ".menubar.waves configure -bg $simulate_bg", NULL);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
dbg(0, "raw_read(): failed to open file %s for reading\n", f);
|
||||
|
|
|
|||
|
|
@ -2709,11 +2709,15 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
}
|
||||
}
|
||||
if(err) {
|
||||
tclvareval(xctx->top_path, ".menubar.netlist configure -bg red", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_netlist red", NULL);
|
||||
if(has_x) {
|
||||
tclvareval(xctx->top_path, ".menubar.netlist configure -bg red", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_netlist red", NULL);
|
||||
}
|
||||
} else {
|
||||
tclvareval(xctx->top_path, ".menubar.netlist configure -bg LightGreen", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_netlist LightGreen", NULL);
|
||||
if(has_x) {
|
||||
tclvareval(xctx->top_path, ".menubar.netlist configure -bg LightGreen", NULL);
|
||||
tclvareval("set tctx::", xctx->current_win_path, "_netlist LightGreen", NULL);
|
||||
}
|
||||
}
|
||||
tclsetvar("show_infowindow_after_netlist", saveshow);
|
||||
my_free(_ALLOC_ID_, &saveshow);
|
||||
|
|
|
|||
150
src/xschem.tcl
150
src/xschem.tcl
|
|
@ -270,6 +270,7 @@ proc execute_fileevent {id} {
|
|||
if {[info exists execute(callback,$id)] && $execute(callback,$id) ne {}} {
|
||||
eval uplevel #0 [list $execute(callback,$id)]
|
||||
}
|
||||
unset tctx::[xschem get current_win_path]_simulate_id
|
||||
catch {unset execute(callback,$id)}
|
||||
set execute(cmd,last) $execute(cmd,$id)
|
||||
set execute(data,last) $execute(data,$id)
|
||||
|
|
@ -358,22 +359,28 @@ proc execute {status args} {
|
|||
# kill selected sub-processes by looking up their command strings
|
||||
# into all running sub-processes, killing the matching ones
|
||||
# with the supplied 'sig'.
|
||||
proc kill_running_cmds {lb sig} {
|
||||
proc kill_running_cmds {{lb {}} sig} {
|
||||
global execute
|
||||
set selected [$lb curselection]
|
||||
foreach idx $selected {
|
||||
set cmd1 [$lb get $idx]
|
||||
foreach {id pid cmd2} [get_running_cmds] {
|
||||
# puts "$cmd1\n$cmd2 \n$pid"
|
||||
if { $cmd1 eq $cmd2 } {
|
||||
exec kill $sig $pid
|
||||
break
|
||||
if { [regexp {^[0-9]+$} $lb] } {
|
||||
set id $lb
|
||||
set pid [pid $execute(pipe,$id)]
|
||||
exec kill $sig $pid
|
||||
} else {
|
||||
set selected [$lb curselection]
|
||||
foreach idx $selected {
|
||||
set cmd1 [$lb get $idx]
|
||||
foreach {id pid cmd2} [get_running_cmds] {
|
||||
# puts "$cmd1\n$cmd2 \n$pid"
|
||||
if { $cmd1 eq $cmd2 } {
|
||||
exec kill $sig $pid
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
after 250 insert_running_cmds $lb
|
||||
}
|
||||
# apply a delay, after a kill command process does not disappear
|
||||
# immediately.
|
||||
after 250 insert_running_cmds $lb
|
||||
}
|
||||
|
||||
# refresh list of running commands in dialog box
|
||||
|
|
@ -1221,29 +1228,34 @@ proc set_sim_defaults {{reset {}}} {
|
|||
set_ne sim(spice,default) 0
|
||||
|
||||
### spice wave view
|
||||
set_ne sim(spicewave,0,cmd) {gaw "$n.raw" }
|
||||
set sim(spicewave,0,name) {Gaw viewer}
|
||||
set_ne sim(spicewave,0,cmd) {}
|
||||
set sim(spicewave,0,name) {Xschem internal waves}
|
||||
set_ne sim(spicewave,0,fg) 0
|
||||
set_ne sim(spicewave,0,st) 0
|
||||
|
||||
set_ne sim(spicewave,1,cmd) {$terminal -e ngspice}
|
||||
set sim(spicewave,1,name) {Ngpice Viewer}
|
||||
set_ne sim(spicewave,1,cmd) {gaw "$n.raw" }
|
||||
set sim(spicewave,1,name) {Gaw viewer}
|
||||
set_ne sim(spicewave,1,fg) 0
|
||||
set_ne sim(spicewave,1,st) 0
|
||||
|
||||
set_ne sim(spicewave,2,cmd) {rawtovcd -v 1.5 "$n.raw" > "$n.vcd" && gtkwave "$n.vcd" "$n.sav" 2>/dev/null}
|
||||
set sim(spicewave,2,name) {Rawtovcd}
|
||||
|
||||
set_ne sim(spicewave,2,cmd) {$terminal -e ngspice}
|
||||
set sim(spicewave,2,name) {Ngpice Viewer}
|
||||
set_ne sim(spicewave,2,fg) 0
|
||||
set_ne sim(spicewave,2,st) 0
|
||||
|
||||
# A server communicating with bespice wave was set up in the function setup_tcp_bespice().
|
||||
# This server is listening on port $bespice_listen_port.
|
||||
set_ne sim(spicewave,3,cmd) {$env(HOME)/analog_flavor_eval/bin/bspwave --socket localhost $bespice_listen_port "$n.raw" }
|
||||
set sim(spicewave,3,name) {Bespice wave}
|
||||
set_ne sim(spicewave,3,cmd) {rawtovcd -v 1.5 "$n.raw" > "$n.vcd" && gtkwave "$n.vcd" "$n.sav" 2>/dev/null}
|
||||
set sim(spicewave,3,name) {Rawtovcd}
|
||||
set_ne sim(spicewave,3,fg) 0
|
||||
set_ne sim(spicewave,3,st) 0
|
||||
|
||||
# A server communicating with bespice wave was set up in the function setup_tcp_bespice().
|
||||
# This server is listening on port $bespice_listen_port.
|
||||
set_ne sim(spicewave,4,cmd) {$env(HOME)/analog_flavor_eval/bin/bspwave --socket localhost $bespice_listen_port "$n.raw" }
|
||||
set sim(spicewave,4,name) {Bespice wave}
|
||||
set_ne sim(spicewave,4,fg) 0
|
||||
set_ne sim(spicewave,4,st) 0
|
||||
# number of configured spice wave viewers, and default one
|
||||
set_ne sim(spicewave,n) 4
|
||||
set_ne sim(spicewave,n) 5
|
||||
set_ne sim(spicewave,default) 0
|
||||
|
||||
### verilog
|
||||
|
|
@ -1344,15 +1356,29 @@ proc simconf {} {
|
|||
pack ${scrollframe}.center.$tool.l -fill y -side left
|
||||
pack ${scrollframe}.center.$tool.r -fill both -expand yes
|
||||
for {set i 0} { $i < $sim($tool,n)} {incr i} {
|
||||
frame ${scrollframe}.center.$tool.r.$i
|
||||
pack ${scrollframe}.center.$tool.r.$i -fill x -expand yes
|
||||
entry ${scrollframe}.center.$tool.r.$i.lab -textvariable sim($tool,$i,name) -width 18 -bg $bg($toggle)
|
||||
radiobutton ${scrollframe}.center.$tool.r.$i.radio -bg $bg($toggle) \
|
||||
-variable sim($tool,default) -value $i
|
||||
text ${scrollframe}.center.$tool.r.$i.cmd -width 20 -height 3 -wrap none -bg $bg($toggle)
|
||||
${scrollframe}.center.$tool.r.$i.cmd insert 1.0 $sim($tool,$i,cmd)
|
||||
checkbutton ${scrollframe}.center.$tool.r.$i.fg -text Fg -variable sim($tool,$i,fg) -bg $bg($toggle)
|
||||
checkbutton ${scrollframe}.center.$tool.r.$i.st -text Status -variable sim($tool,$i,st) -bg $bg($toggle)
|
||||
if {$tool eq {spicewave} && $i == 0} {
|
||||
frame ${scrollframe}.center.$tool.r.$i
|
||||
pack ${scrollframe}.center.$tool.r.$i -fill x -expand yes
|
||||
entry ${scrollframe}.center.$tool.r.$i.lab -textvariable sim($tool,$i,name) -width 18 -bg $bg($toggle)
|
||||
radiobutton ${scrollframe}.center.$tool.r.$i.radio -bg $bg($toggle) \
|
||||
-variable sim($tool,default) -value $i
|
||||
text ${scrollframe}.center.$tool.r.$i.cmd -width 20 -height 3 -state disabled -wrap none -bg $bg($toggle)
|
||||
${scrollframe}.center.$tool.r.$i.cmd insert 1.0 {}
|
||||
checkbutton ${scrollframe}.center.$tool.r.$i.fg -text Fg -variable sim($tool,$i,fg) \
|
||||
-state disabled -bg $bg($toggle)
|
||||
checkbutton ${scrollframe}.center.$tool.r.$i.st -text Status -variable sim($tool,$i,st) \
|
||||
-state disabled -bg $bg($toggle)
|
||||
} else {
|
||||
frame ${scrollframe}.center.$tool.r.$i
|
||||
pack ${scrollframe}.center.$tool.r.$i -fill x -expand yes
|
||||
entry ${scrollframe}.center.$tool.r.$i.lab -textvariable sim($tool,$i,name) -width 18 -bg $bg($toggle)
|
||||
radiobutton ${scrollframe}.center.$tool.r.$i.radio -bg $bg($toggle) \
|
||||
-variable sim($tool,default) -value $i
|
||||
text ${scrollframe}.center.$tool.r.$i.cmd -width 20 -height 3 -wrap none -bg $bg($toggle)
|
||||
${scrollframe}.center.$tool.r.$i.cmd insert 1.0 $sim($tool,$i,cmd)
|
||||
checkbutton ${scrollframe}.center.$tool.r.$i.fg -text Fg -variable sim($tool,$i,fg) -bg $bg($toggle)
|
||||
checkbutton ${scrollframe}.center.$tool.r.$i.st -text Status -variable sim($tool,$i,st) -bg $bg($toggle)
|
||||
}
|
||||
|
||||
pack ${scrollframe}.center.$tool.r.$i.lab -side left -fill y
|
||||
pack ${scrollframe}.center.$tool.r.$i.radio -side left -fill y
|
||||
|
|
@ -1680,10 +1706,15 @@ proc sim_cmd {cmd} {
|
|||
|
||||
# wrapper to proc simulate, if called from button.
|
||||
proc simulate_from_button {{callback {}}} {
|
||||
|
||||
set simvar tctx::[xschem get current_win_path]_simulate
|
||||
if {![info exists $simvar] || [set $simvar] ne {yellow}} {
|
||||
simulate $callback
|
||||
} elseif {[info exists $simvar] && [set $simvar] eq {yellow}} {
|
||||
set simulate_id tctx::[xschem get current_win_path]_simulate_id
|
||||
if { [info exists $simulate_id] } {
|
||||
set id [set $simulate_id]
|
||||
kill_running_cmds $id -15
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1697,7 +1728,6 @@ proc simulate {{callback {}}} {
|
|||
global netlist_dir terminal sim env
|
||||
global execute XSCHEM_SHAREDIR has_x OS
|
||||
|
||||
set button_path [xschem get top_path].menubar.simulate
|
||||
simuldir
|
||||
set_sim_defaults
|
||||
set netlist_type [xschem get netlist_type]
|
||||
|
|
@ -1733,8 +1763,11 @@ proc simulate {{callback {}}} {
|
|||
set cmd [subst -nobackslashes $sim($tool,$def,cmd)]
|
||||
set save [pwd]
|
||||
cd $netlist_dir
|
||||
$button_path configure -bg yellow
|
||||
set tctx::[xschem get current_win_path]_simulate yellow
|
||||
if {[info exists has_x]} {
|
||||
set button_path [xschem get top_path].menubar.simulate
|
||||
$button_path configure -bg yellow
|
||||
set tctx::[xschem get current_win_path]_simulate yellow
|
||||
}
|
||||
if {$OS == "Windows"} {
|
||||
# $cmd cannot be surrounded by {} as exec will change forward slash to backward slash
|
||||
set_simulate_button list [xschem get top_path] [xschem get current_win_path]
|
||||
|
|
@ -1759,6 +1792,7 @@ proc simulate {{callback {}}} {
|
|||
"
|
||||
# puts $cmd
|
||||
set id [eval $fg $st $cmd]
|
||||
if {[info exists has_x]} {set tctx::[xschem get current_win_path]_simulate_id $id}
|
||||
puts "Simulation started: execution ID: $id"
|
||||
}
|
||||
cd $save
|
||||
|
|
@ -1857,7 +1891,7 @@ proc waves {} {
|
|||
## $d : netlist directory
|
||||
|
||||
global netlist_dir terminal sim XSCHEM_SHAREDIR has_x
|
||||
global bespice_listen_port env
|
||||
global bespice_listen_port env simulate_bg
|
||||
|
||||
simuldir
|
||||
set netlist_type [xschem get netlist_type]
|
||||
|
|
@ -1894,10 +1928,18 @@ proc waves {} {
|
|||
set fg {execute}
|
||||
}
|
||||
set save [pwd]
|
||||
cd $netlist_dir
|
||||
set cmd [subst -nobackslashes $sim($tool,$def,cmd)]
|
||||
eval $fg $st $cmd
|
||||
cd $save
|
||||
if {$def eq {0}} {
|
||||
if { [xschem raw_query loaded] != -1} {
|
||||
xschem raw_clear
|
||||
} else {
|
||||
load_raw
|
||||
}
|
||||
} else {
|
||||
cd $netlist_dir
|
||||
set cmd [subst -nobackslashes $sim($tool,$def,cmd)]
|
||||
eval $fg $st $cmd
|
||||
cd $save
|
||||
}
|
||||
}
|
||||
}
|
||||
# ============================================================
|
||||
|
|
@ -6327,14 +6369,15 @@ proc housekeeping_ctx {} {
|
|||
xschem set hide_symbols $hide_symbols
|
||||
xschem set draw_window $draw_window
|
||||
xschem case_insensitive $case_insensitive
|
||||
set_sim_netlist_buttons
|
||||
set_sim_netlist_waves_buttons
|
||||
.statusbar.7 configure -text $netlist_type
|
||||
}
|
||||
|
||||
# callback that resets simulate button color at end of simulation
|
||||
proc set_simulate_button {top_path winpath} {
|
||||
global simulate_bg execute
|
||||
global simulate_bg execute has_x
|
||||
|
||||
if {![info exists has_x]} return
|
||||
set current_win [xschem get current_win_path]
|
||||
set simvar tctx::${winpath}_simulate
|
||||
set sim_button $top_path.menubar.simulate
|
||||
|
|
@ -6359,9 +6402,10 @@ proc set_simulate_button {top_path winpath} {
|
|||
|
||||
|
||||
# set simulate and netlist buttons on context change
|
||||
proc set_sim_netlist_buttons {} {
|
||||
global simulate_bg execute
|
||||
proc set_sim_netlist_waves_buttons {} {
|
||||
global simulate_bg execute has_x
|
||||
|
||||
if {![info exists has_x]} {return}
|
||||
set win_path [xschem get current_win_path]
|
||||
set top_path [xschem get top_path]
|
||||
|
||||
|
|
@ -6369,6 +6413,8 @@ proc set_sim_netlist_buttons {} {
|
|||
set sim_var tctx::${win_path}_simulate
|
||||
set netlist_button $top_path.menubar.netlist
|
||||
set sim_button $top_path.menubar.simulate
|
||||
set waves_var tctx::${win_path}_waves
|
||||
set waves_button $top_path.menubar.waves
|
||||
if {![info exists $netlist_var] || [set $netlist_var] eq $simulate_bg} {
|
||||
$netlist_button configure -bg $simulate_bg
|
||||
} else {
|
||||
|
|
@ -6380,6 +6426,12 @@ proc set_sim_netlist_buttons {} {
|
|||
} else {
|
||||
$sim_button configure -bg [set $sim_var]
|
||||
}
|
||||
|
||||
if {![info exists $waves_var] || [set $waves_var] eq $simulate_bg} {
|
||||
$waves_button configure -bg $simulate_bg
|
||||
} else {
|
||||
$waves_button configure -bg [set $waves_var]
|
||||
}
|
||||
}
|
||||
|
||||
# these two routines are workarounds for broken remote desktop connection tools
|
||||
|
|
@ -6539,20 +6591,20 @@ proc switch_undo {} {
|
|||
}
|
||||
|
||||
proc load_raw {} {
|
||||
global netlist_dir
|
||||
global netlist_dir has_x
|
||||
|
||||
set types {
|
||||
{{Raw Files} {.raw} }
|
||||
{{All Files} * }
|
||||
}
|
||||
|
||||
|
||||
set filename $netlist_dir/[file tail [file rootname [xschem get schname]]].raw
|
||||
if { [xschem raw_query loaded] != -1} { ;# unload existing raw file(s)
|
||||
xschem raw_clear
|
||||
}
|
||||
if {[info exists has_x]} {
|
||||
set filename [tk_getOpenFile -title "Select file" -multiple 0 -initialdir $netlist_dir \
|
||||
-initialfile [file tail $filename] -filetypes $types]
|
||||
}
|
||||
if {[file exists $filename]} {
|
||||
xschem raw_read $filename
|
||||
}
|
||||
|
|
@ -7120,10 +7172,10 @@ tclcommand=\"xschem raw_read \$netlist_dir/[file tail [file rootname [xschem get
|
|||
}
|
||||
$topwin.menubar.simulation.menu.graph add command -label "Annotate Operating Point into schematic" \
|
||||
-command {set show_hidden_texts 1; xschem annotate_op}
|
||||
$topwin.menubar.simulation.menu.graph add command -label {Load spice .raw file} -command {
|
||||
$topwin.menubar.simulation.menu.graph add command -label {Load Spice .raw file} -command {
|
||||
load_raw
|
||||
}
|
||||
$topwin.menubar.simulation.menu.graph add command -label {Unload spice .raw file} -command {
|
||||
$topwin.menubar.simulation.menu.graph add command -label {Unload Spice .raw file} -command {
|
||||
xschem raw_clear
|
||||
}
|
||||
$topwin.menubar.simulation.menu.graph add checkbutton -label "Live annotate probes with 'b' cursor" \
|
||||
|
|
|
|||
Loading…
Reference in New Issue