Restore default (delete simrc file) button in simulation configuration dialog

This commit is contained in:
Stefan Frederik 2021-11-27 03:37:36 +01:00
parent 551bbcec0c
commit 965d2f3ec1
1 changed files with 61 additions and 38 deletions

View File

@ -432,32 +432,33 @@ proc sim_is_xyce {} {
} }
proc set_sim_defaults {} { proc set_sim_defaults {{reset {}}} {
### spice
global sim terminal USER_CONF_DIR has_x bespice_listen_port env OS global sim terminal USER_CONF_DIR has_x bespice_listen_port env OS
if {$reset eq {reset} } { file delete ${USER_CONF_DIR}/simrc }
set failure 0 if { $reset eq {} } {
if { [info exists has_x] && [winfo exists .sim] } { set failure 0
foreach tool $sim(tool_list) { if { [info exists has_x] && [winfo exists .sim] } {
for {set i 0} {$i < $sim($tool,n)} { incr i} { foreach tool $sim(tool_list) {
set sim($tool,$i,cmd) [.sim.topf.f.scrl.center.$tool.r.$i.cmd get 1.0 {end - 1 chars}] for {set i 0} {$i < $sim($tool,n)} { incr i} {
} set sim($tool,$i,cmd) [.sim.topf.f.scrl.center.$tool.r.$i.cmd get 1.0 {end - 1 chars}]
}
}
if { ![info exists sim] } {
if { [file exists ${USER_CONF_DIR}/simrc] } {
# get conf from simrc
if { [catch {source ${USER_CONF_DIR}/simrc} err]} {
puts "Problems opening simrc file: $err"
if {[info exists has_x]} {
tk_messageBox -message "Problems opening simrc file: $err" -icon warning \
-parent [xschem get topwindow] -type ok
} }
set failure 1
} }
} }
} if { ![info exists sim] } {
if {![info exists sim] || $failure} { if { [file exists ${USER_CONF_DIR}/simrc] } {
# get conf from simrc
if { [catch {source ${USER_CONF_DIR}/simrc} err]} {
puts "Problems opening simrc file: $err"
if {[info exists has_x]} {
tk_messageBox -message "Problems opening simrc file: $err" -icon warning \
-parent [xschem get topwindow] -type ok
}
set failure 1
}
}
}
}
if {( $reset eq {reset} ) || ![info exists sim] || $failure} {
if {[info exists sim]} {unset sim} if {[info exists sim]} {unset sim}
# no simrc, set a reasonable default # no simrc, set a reasonable default
set sim(tool_list) {spice spicewave verilog verilogwave vhdl vhdlwave} set sim(tool_list) {spice spicewave verilog verilogwave vhdl vhdlwave}
@ -466,17 +467,18 @@ proc set_sim_defaults {} {
} else { } else {
set_ne sim(spice,0,cmd) {$terminal -e 'ngspice -i "$N" -a || sh'} set_ne sim(spice,0,cmd) {$terminal -e 'ngspice -i "$N" -a || sh'}
} }
set_ne sim(spice,0,name) {Ngspice} # can not use set_ne as variables bound to entry widgets always exist if widget exists
set sim(spice,0,name) {Ngspice}
set_ne sim(spice,0,fg) 0 set_ne sim(spice,0,fg) 0
set_ne sim(spice,0,st) 0 set_ne sim(spice,0,st) 0
set_ne sim(spice,1,cmd) {ngspice -b -r "$n.raw" -o "$n.out" "$N"} set_ne sim(spice,1,cmd) {ngspice -b -r "$n.raw" -o "$n.out" "$N"}
set_ne sim(spice,1,name) {Ngspice batch} set sim(spice,1,name) {Ngspice batch}
set_ne sim(spice,1,fg) 0 set_ne sim(spice,1,fg) 0
set_ne sim(spice,1,st) 1 set_ne sim(spice,1,st) 1
set_ne sim(spice,2,cmd) {Xyce "$N" -r "$n.raw"} set_ne sim(spice,2,cmd) {Xyce "$N" -r "$n.raw"}
set_ne sim(spice,2,name) {Xyce batch} set sim(spice,2,name) {Xyce batch}
set_ne sim(spice,2,fg) 0 set_ne sim(spice,2,fg) 0
set_ne sim(spice,2,st) 1 set_ne sim(spice,2,st) 1
@ -486,22 +488,22 @@ proc set_sim_defaults {} {
### spice wave view ### spice wave view
set_ne sim(spicewave,0,cmd) {gaw "$n.raw" } set_ne sim(spicewave,0,cmd) {gaw "$n.raw" }
set_ne sim(spicewave,0,name) {Gaw viewer} set sim(spicewave,0,name) {Gaw viewer}
set_ne sim(spicewave,0,fg) 0 set_ne sim(spicewave,0,fg) 0
set_ne sim(spicewave,0,st) 0 set_ne sim(spicewave,0,st) 0
set_ne sim(spicewave,1,cmd) {$terminal -e ngspice} set_ne sim(spicewave,1,cmd) {$terminal -e ngspice}
set_ne sim(spicewave,1,name) {Ngpice Viewer} set sim(spicewave,1,name) {Ngpice Viewer}
set_ne sim(spicewave,1,fg) 0 set_ne sim(spicewave,1,fg) 0
set_ne sim(spicewave,1,st) 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_ne sim(spicewave,2,cmd) {rawtovcd -v 1.5 "$n.raw" > "$n.vcd" && gtkwave "$n.vcd" "$n.sav" 2>/dev/null}
set_ne sim(spicewave,2,name) {Rawtovcd} set sim(spicewave,2,name) {Rawtovcd}
set_ne sim(spicewave,2,fg) 0 set_ne sim(spicewave,2,fg) 0
set_ne sim(spicewave,2,st) 0 set_ne sim(spicewave,2,st) 0
set_ne sim(spicewave,3,cmd) {$env(HOME)/analog_flavor_eval/bin/bspwave --socket localhost $bespice_listen_port "$n.raw" } set_ne sim(spicewave,3,cmd) {$env(HOME)/analog_flavor_eval/bin/bspwave --socket localhost $bespice_listen_port "$n.raw" }
set_ne sim(spicewave,3,name) {Bespice wave} set sim(spicewave,3,name) {Bespice wave}
set_ne sim(spicewave,3,fg) 0 set_ne sim(spicewave,3,fg) 0
set_ne sim(spicewave,3,st) 0 set_ne sim(spicewave,3,st) 0
# number of configured spice wave viewers, and default one # number of configured spice wave viewers, and default one
@ -510,7 +512,7 @@ proc set_sim_defaults {} {
### verilog ### verilog
set_ne sim(verilog,0,cmd) {iverilog -o .verilog_object -g2012 "$N" && vvp .verilog_object} set_ne sim(verilog,0,cmd) {iverilog -o .verilog_object -g2012 "$N" && vvp .verilog_object}
set_ne sim(verilog,0,name) {Icarus verilog} set sim(verilog,0,name) {Icarus verilog}
set_ne sim(verilog,0,fg) 0 set_ne sim(verilog,0,fg) 0
set_ne sim(verilog,0,st) 1 set_ne sim(verilog,0,st) 1
# number of configured verilog simulators, and default one # number of configured verilog simulators, and default one
@ -519,7 +521,7 @@ proc set_sim_defaults {} {
### verilog wave view ### verilog wave view
set_ne sim(verilogwave,0,cmd) {gtkwave dumpfile.vcd "$N.sav" 2>/dev/null} set_ne sim(verilogwave,0,cmd) {gtkwave dumpfile.vcd "$N.sav" 2>/dev/null}
set_ne sim(verilogwave,0,name) {Gtkwave} set sim(verilogwave,0,name) {Gtkwave}
set_ne sim(verilogwave,0,fg) 0 set_ne sim(verilogwave,0,fg) 0
set_ne sim(verilogwave,0,st) 0 set_ne sim(verilogwave,0,st) 0
# number of configured verilog wave viewers, and default one # number of configured verilog wave viewers, and default one
@ -528,7 +530,7 @@ proc set_sim_defaults {} {
### vhdl ### vhdl
set_ne sim(vhdl,0,cmd) {ghdl -c --ieee=synopsys -fexplicit "$N" -r "$s" --wave="$n.ghw"} set_ne sim(vhdl,0,cmd) {ghdl -c --ieee=synopsys -fexplicit "$N" -r "$s" --wave="$n.ghw"}
set_ne sim(vhdl,0,name) {Ghdl} set sim(vhdl,0,name) {Ghdl}
set_ne sim(vhdl,0,fg) 0 set_ne sim(vhdl,0,fg) 0
set_ne sim(vhdl,0,st) 1 set_ne sim(vhdl,0,st) 1
# number of configured vhdl simulators, and default one # number of configured vhdl simulators, and default one
@ -537,7 +539,7 @@ proc set_sim_defaults {} {
### vhdl wave view ### vhdl wave view
set_ne sim(vhdlwave,0,cmd) {gtkwave "$n.ghw" "$N.sav" 2>/dev/null} set_ne sim(vhdlwave,0,cmd) {gtkwave "$n.ghw" "$N.sav" 2>/dev/null}
set_ne sim(vhdlwave,0,name) {Gtkwave} set sim(vhdlwave,0,name) {Gtkwave}
set_ne sim(vhdlwave,0,fg) 0 set_ne sim(vhdlwave,0,fg) 0
set_ne sim(vhdlwave,0,st) 0 set_ne sim(vhdlwave,0,st) 0
# number of configured vhdl wave viewers, and default one # number of configured vhdl wave viewers, and default one
@ -546,6 +548,22 @@ proc set_sim_defaults {} {
} }
} }
proc simconf_reset {} {
global sim
set answer [tk_messageBox -message "Warning: delete simulation configuration file and reset to default?" \
-icon warning -parent .sim -type okcancel]
if { $answer eq {ok}} {
set_sim_defaults reset
foreach tool $sim(tool_list) {
for {set i 0} { $i < $sim($tool,n)} {incr i} {
.sim.topf.f.scrl.center.$tool.r.$i.cmd delete 1.0 end
.sim.topf.f.scrl.center.$tool.r.$i.cmd insert 1.0 $sim($tool,$i,cmd)
}
}
}
}
proc simconf_yview { args } { proc simconf_yview { args } {
global simconf_vpos global simconf_vpos
# puts "simconf_yview: $args" # puts "simconf_yview: $args"
@ -644,18 +662,18 @@ XSCHEM before sending commands to the shell:
If for a given tool there are multiple rows then the radiobutton If for a given tool there are multiple rows then the radiobutton
tells which one will be called by xschem. tells which one will be called by xschem.
Variables should be used with the usual substitution character $: $n, $N, etc. Variables should be used with the usual substitution character $: $n, $N, etc.
Foreground checkbutton tells xschem to wait for child process to finish. Foreground (Fg) checkbutton tells xschem to wait for child process to finish.
Status checkbutton tells xschem to report a status dialog (stdout, stderr, Status checkbutton tells xschem to report a status dialog (stdout, stderr,
exit status) when process finishes. exit status) when process finishes.
Any changes made in the command or tool name entries will be saved in Any changes made in the command or tool name entries will be saved in
~/.xschem/simrc when 'Accept and Save Configuration' button is pressed. ~/.xschem/simrc when 'Accept and Save Configuration' button is pressed.
If 'Accept and Close' is pressed then the changes are kept in memory If 'Accept and Close' is pressed then the changes are kept in memory
without writing to a file. If xschem is restarted changes will be lost. without writing to a file, if xschem is restarted changes will be lost.
If no ~/.xschem/simrc is present then a bare minumum skeleton setup is presented. If no ~/.xschem/simrc is present then a minimal default setup is presented.
To reset to default just delete the ~/.xschem/simrc file manually. To reset to default just delete the ~/.xschem/simrc file manually.
} ro } ro
} }
button .sim.bottom.ok -text {Accept and Save Configuration} -command { button .sim.bottom.ok -text {Save Configuration to file} -command {
foreach tool $sim(tool_list) { foreach tool $sim(tool_list) {
for {set i 0} { $i < $sim($tool,n)} {incr i} { for {set i 0} { $i < $sim($tool,n)} {incr i} {
set sim($tool,$i,cmd) [.sim.topf.f.scrl.center.$tool.r.$i.cmd get 1.0 {end - 1 chars}] set sim($tool,$i,cmd) [.sim.topf.f.scrl.center.$tool.r.$i.cmd get 1.0 {end - 1 chars}]
@ -666,6 +684,10 @@ To reset to default just delete the ~/.xschem/simrc file manually.
save_sim_defaults ${USER_CONF_DIR}/simrc save_sim_defaults ${USER_CONF_DIR}/simrc
# puts "saving simrc" # puts "saving simrc"
} }
button .sim.bottom.reset -text {Reset to default} -command {
simconf_reset
}
button .sim.bottom.close -text {Accept and Close} -command { button .sim.bottom.close -text {Accept and Close} -command {
set_sim_defaults set_sim_defaults
destroy .sim destroy .sim
@ -690,6 +712,7 @@ To reset to default just delete the ~/.xschem/simrc file manually.
#} #}
pack .sim.bottom.ok -side right -anchor e pack .sim.bottom.ok -side right -anchor e
pack .sim.bottom.close -side right pack .sim.bottom.close -side right
pack .sim.bottom.reset -side right
pack .sim.topf -fill both -expand yes pack .sim.topf -fill both -expand yes
pack .sim.bottom -fill x pack .sim.bottom -fill x
if { [info exists simconf_default_geometry]} { if { [info exists simconf_default_geometry]} {