diff options
Diffstat (limited to 'Windows/spice/examples/tclspice/tcl-testbench4/vspicechart.tcl')
-rw-r--r-- | Windows/spice/examples/tclspice/tcl-testbench4/vspicechart.tcl | 250 |
1 files changed, 250 insertions, 0 deletions
diff --git a/Windows/spice/examples/tclspice/tcl-testbench4/vspicechart.tcl b/Windows/spice/examples/tclspice/tcl-testbench4/vspicechart.tcl new file mode 100644 index 00000000..810c2e74 --- /dev/null +++ b/Windows/spice/examples/tclspice/tcl-testbench4/vspicechart.tcl @@ -0,0 +1,250 @@ +############ spice chart program ########### +############ programmer: stephan thiel ########### +############ thiel@mikro.ee.tu-berlin.de ########### +############ (c) 2008 Berlin, Germany ########### +############ Don't trust any version ########### +############ before 1.0 ########### + + +package require BLT +load "../../../src/.libs/libspice.so" + +source selectfromlist.tcl +source bltGraph.tcl + +namespace import blt::* + +wm title . "vspicechart 0.01" +wm geometry . 800x450+40+40 +pack propagate . false + +set globals(colors) { red green blue orange yellow white gray lightblue pink darkblue \ + lightred lightgray darkgray darkblue darkgreen darkred violet salmon \ + gray100 gold SeaGreen RoyalBlue RosyBrown orchid MintCream magenta LimeGreen \ + gray33 DeepSkyBlue DarkGoldenrod chocolate gray77 aquamarine brown coral \ + DarkOliveGreen DarkOrange DarkSlateGray gray99 HotPink IndianRed LemonChiffon \ + LightSteelBlue PaleGreen peru sienna seashell SpringGreen tomato wheat WhiteSmoke} + + +proc replacechar { str pat pat1} { + set erg "" + for { set i 0 } { $i < [string length $str] } {incr i 1 } { + if { [ string index $str $i ] == $pat } { + append erg $pat1 + } else { + append erg [string index $str $i ] + } + } + return $erg +} + + +proc realtostr { r } { + set b [ expr abs($r) ] + set mul 1e-18 + set prefix a + if { $b > 9.9999999999e-16 } { + set mul 1e15 + set prefix f + } + if { $b > 9.9999999999e-13 } { + set mul 1e12 + set prefix p + } + if { $b > 9.9999999999e-10 } { + set mul 1e9 + set prefix n + } + if { $b > 9.9999999999e-7 } { + set mul 1e6 + set prefix u + } + if { $b > 9.9999999999e-4 } { + set mul 1e3 + set prefix m + } + + if { $b > 0.999999999999999 } { + set mul 1 + set prefix "" + } + + if { $b > 999 } { + set mul 1e-3 + set prefix K + } + + if { $b > 9.999999999e5 } { + set mul 1e-6 + set prefix MEG + } + if { $b > 9.9999999999e8 } { + set mul 1e-9 + set prefix G + } + if { $b > 9.99999999999e11 } { + set mul 1e-12 + set prefix T + } + set str [ format "%1.8g$prefix" [expr $r*$mul] ] + if { $str=="0a" } { set str "0" } + return $str +} + +proc realtostr1 { elem r } { + scan $r "%f" erg + return [ realtostr $erg ] +} + +set globals(signals) {}; + +proc readconfigfile { } { + global globals + global const + if { [file exists $globals(CONFIGFILE)] } { + set fid [open $globals(CONFIGFILE) r] + while { ![eof $fid] } { + gets $fid tempstring + if { [string first "PACK-PATH=" $tempstring]==0 } { + scan $tempstring "PACK-PATH=%s" globals(PACK-PATH) + } + if { [string first "SIMULATOR=" $tempstring]==0 } { + scan $tempstring "SIMULATOR=%s" globals(SIMULATOR) + } + } + close $fid + } else { + set globals(PACK-PATH) "" + set globals(SIMULATOR) "INTERNAL" + } +} + +proc select_vector { } { + global globals + set thissignals [spice::spice_data] + set signals {} + foreach sig $thissignals { + if { [lindex $sig 0] != "time" } { + lappend signals [lindex $sig 0] + } + } + set selectedsignal [selectionwindow::selectfromlist .select "Select Signal" $signals ] + if { ( [string trim $selectedsignal] != "") && ([lsearch -exact $globals(signals) $selectedsignal] == -1) } { + eval "$globals(LSELECTEDSIGNALS) insert end $selectedsignal" + vector create [replacechar $selectedsignal "\#" "_"] + } +} + + +proc start_new_sel { } { + global globals + + set elemlist [ eval "$globals(chart0) element show" ] + for { set j 0 } {$j < [llength $elemlist] } {incr j 1} { + $globals(chart0) element delete [lindex $elemlist $j ] + } + + set i 0 + foreach sig $globals(signals) { + set nsig [replacechar $sig "\#" "_"] + vector create $nsig + spice::spicetoblt $sig $nsig + + $globals(chart0) element create $sig -color [lindex $globals(colors) $i] -xdata stime -ydata $nsig -symbol none + incr i 1 + } +} + + +proc delete_selected { } { + global globals + set elem [$globals(LSELECTEDSIGNALS) curselection] + if { $elem != "" } { + $globals(LSELECTEDSIGNALS) delete $elem + } +} + + + +set filename [ lindex $argv 0] + +if { [file exists $filename ] } { + spice::source $filename + spice::bg run + +after 1000 + + + +frame .f1 +pack .f1 -side left -expand true -fill both + +listbox .f1.blistbox -listvariable globals(signals) +pack .f1.blistbox -side top -fill both -expand true + +set globals(LSELECTEDSIGNALS) .f1.blistbox + + +button .f1.baddvec -text "Select Vector" -command "select_vector" +pack .f1.baddvec -side top -fill x -expand true + +button .f1.bdelvec -text "Delete Vector" -command "delete_selected" +pack .f1.bdelvec -side top -fill x -expand true + +button .f1.bstartsel -text "Start with new selection" -command start_new_sel +pack .f1.bstartsel -side top -fill x -expand true + + +button .f1.simstop -text "Simulation Stop" -command "spice::stop" +pack .f1.simstop -side top -fill x -expand true + +button .f1.simresume -text "Simulation Resume" -command "spice::bg resume" +pack .f1.simresume -side top -fill x -expand true + + +button .f1.bexit -text "Exit" -command "exit" +pack .f1.bexit -side top -fill x -expand true + + +frame .f2 +pack .f2 -side left -expand true -fill both + +stripchart .f2.chart +pack .f2.chart -side top -fill both -expand true +.f2.chart axis configure x -title "Time in s" + + +.f2.chart grid configure -hide no +Blt_ZoomStack .f2.chart +Blt_Crosshairs .f2.chart +Blt_ClosestPoint .f2.chart +Blt_PrintKey .f2.chart +Blt_ActiveLegend .f2.chart +.f2.chart crosshairs configure -color lightblue + +.f2.chart axis configure x -command realtostr1 +.f2.chart axis configure y -command realtostr1 + +set globals(chart0) .f2.chart + + + + vector create stime + + + proc bltupdate {} { + global globals + + spice::spicetoblt time stime + foreach sig $globals(signals) { + set nsig [replacechar $sig "\#" "_"] + spice::spicetoblt $sig $nsig + } + + after 100 bltupdate + } + bltupdate + +} else { + exit; +} |