diff --git a/doc/xschem_man/developer_info.html b/doc/xschem_man/developer_info.html
index b0d5f73f..d211b8b9 100644
--- a/doc/xschem_man/developer_info.html
+++ b/doc/xschem_man/developer_info.html
@@ -504,6 +504,22 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1053,7 +1069,8 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
xschem raw_query list: get list of saved simulation variables
xschem raw_query vars: get number of simulation variables
xschem raw_query datasets: get number of datasets (simulation runs)
- xschem raw_query value node n: return n-th value of 'node' in raw file
+ xschem raw_query value node n [dataset]: return n-th value of 'node' in raw file
+ If n is egiven as empty string {} return value at cursor b, dataset not used in this case
xschem raw_query loaded: return hierarchy level
where raw file was loaded or -1 if no raw loaded
xschem raw_query rawfile: return raw filename
@@ -1415,20 +1432,6 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/scheduler.c b/src/scheduler.c
index 95f7f6e8..d6d6003f 100644
--- a/src/scheduler.c
+++ b/src/scheduler.c
@@ -3248,7 +3248,8 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
* xschem raw_query list: get list of saved simulation variables
* xschem raw_query vars: get number of simulation variables
* xschem raw_query datasets: get number of datasets (simulation runs)
- * xschem raw_query value node n: return n-th value of 'node' in raw file
+ * xschem raw_query value node n [dataset]: return n-th value of 'node' in raw file
+ * If n is egiven as empty string {} return value at cursor b, dataset not used in this case
* xschem raw_query loaded: return hierarchy level
* where raw file was loaded or -1 if no raw loaded
* xschem raw_query rawfile: return raw filename
@@ -3271,22 +3272,20 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
/* xschem rawfile_query value v(ldcp) 123 */
if(argc > 4 && !strcmp(argv[2], "value")) {
int dataset = -1;
- int point = atoi(argv[4]);
+ int point = argv[4][0] ? atoi(argv[4]) : -1;
const char *node = argv[3];
int idx = -1;
if(argc > 5) dataset = atoi(argv[5]);
- if((dataset >= 0 && point >= 0 && point < raw->npoints[dataset]) ||
- (point >= 0 && point < raw->allpoints)) {
- if(isonlydigit(node)) {
- int i = atoi(node);
- if(i >= 0 && i < raw->nvars) {
- idx = i;
- }
- } else {
- idx = get_raw_index(node);
- }
- if(idx >= 0) {
- double val = get_raw_value(dataset, idx, point);
+ idx = get_raw_index(node);
+ if(idx >= 0) {
+ double val;
+ if( (dataset >=0 && point >= 0 && point < raw->npoints[dataset]) ||
+ (dataset == -1 && point >= 0 && point < raw->allpoints)
+ ) {
+ val = get_raw_value(dataset, idx, point);
+ Tcl_SetResult(interp, dtoa(val), TCL_VOLATILE);
+ } else if(xctx->raw->cursor_b_val) {
+ val = xctx->raw->cursor_b_val[idx];
Tcl_SetResult(interp, dtoa(val), TCL_VOLATILE);
}
}
diff --git a/src/xschem.tcl b/src/xschem.tcl
index 774bf75a..6348dc24 100644
--- a/src/xschem.tcl
+++ b/src/xschem.tcl
@@ -608,8 +608,9 @@ proc from_eng {i} {
}
## convert number to engineering form
-proc to_eng {i} {
+proc to_eng {args} {
set suffix {}
+ set i [expr [join $args]]
set absi [expr {abs($i)}]
if {$absi == 0.0} { set mult 1 ; set suffix {}
@@ -1916,6 +1917,10 @@ proc waves {{type {}}} {
global netlist_dir terminal sim XSCHEM_SHAREDIR has_x
global bespice_listen_port env simulate_bg execute
+ if {$type ne {external} } {
+ load_raw $type
+ return
+ }
set netlist_type [xschem get netlist_type]
set_sim_defaults
if { [set_netlist_dir 0] ne {}} {
@@ -1936,7 +1941,7 @@ proc waves {{type {}}} {
set N ${n}.${tool}
}
set tool ${tool}wave
- if { ![info exists sim($tool,default)] } {
+ if {![info exists sim($tool,default)] } {
if { [info exists has_x] } {alert_ "Warning: viewer for $tool is not configured"}
puts "Warning: viewer for $tool is not configured"
return
@@ -1949,23 +1954,18 @@ proc waves {{type {}}} {
} else {
set fg {execute}
}
+ set cmd [subst -nobackslashes $sim($tool,$def,cmd)]
- if {$type ne {external} } {
- load_raw $type
- } else {
- set cmd [subst -nobackslashes $sim($tool,$def,cmd)]
+ set save [pwd]
+ cd $netlist_dir
+ set id [eval execute $st $cmd]
+ cd $save
- set save [pwd]
- cd $netlist_dir
- set id [eval execute $st $cmd]
- cd $save
-
- if {$fg eq {execute_wait}} {
- if {$id >= 0} {
- xschem set semaphore [expr {[xschem get semaphore] +1}]
- vwait execute(pipe,$id)
- xschem set semaphore [expr {[xschem get semaphore] -1}]
- }
+ if {$fg eq {execute_wait}} {
+ if {$id >= 0} {
+ xschem set semaphore [expr {[xschem get semaphore] +1}]
+ vwait execute(pipe,$id)
+ xschem set semaphore [expr {[xschem get semaphore] -1}]
}
}
}
diff --git a/xschem_library/ngspice/pv_ngspice.sch b/xschem_library/ngspice/pv_ngspice.sch
index 702a1d14..b9b9f5d8 100644
--- a/xschem_library/ngspice/pv_ngspice.sch
+++ b/xschem_library/ngspice/pv_ngspice.sch
@@ -24,7 +24,7 @@ K {}
V {}
S {}
E {}
-B 2 860 -550 1360 -160 {flags=graph
+B 2 920 -580 1420 -190 {flags=graph
y1 = -0.115954
y2 = 11.9983
divy = 4
@@ -40,7 +40,7 @@ dataset=-1
color=4
node=i(vload)}
-B 2 860 -790 1360 -550 {flags=graph
+B 2 920 -820 1420 -580 {flags=graph
y1 = -34.3253
y2 = 449.01
divy = 4
@@ -54,96 +54,64 @@ divx=8
dataset=-1
color=4
node="\\"power; i(vload) v(plus) *\\""}
-B 2 860 -1040 1360 -800 {flags=graph
-y1 = -0.208022
-y2 = 0.916906
-divy = 4
-subdivy=1
-x1=0
-x2=48
-divx=8
- unitx=1
-
-
-dataset=-1
-color="4 15"
-node="a
-b"}
-B 2 860 -1290 1360 -1050 {flags=graph
-y1 = -10.063
-y2 = 4.38019
-divy = 8
-subdivy=0
-x1=0
-x2=48
-divx=8
- unitx=1
-
-
-dataset=-1
-
-color=15
-node=i(@d1[id])
-logy=1
-subdivx=0}
T {position the mouse close to one of the curves
and press 't' to display only that curve.
This allows you to annotate the active
-waveform in the schematic.} 480 -370 0 0 0.3 0.3 {}
-T {tcleval(SUN=[expr \{[xschem getprop rect 2 0 dataset] == -1 ? \{N/A\} : ([xschem getprop rect 2 0 dataset] + 1)*20\}]%)} 710 -460 0 0 0.4 0.4 {name=xxxx}
-T {@name} 485 -686.25 2 1 0.2 0.2 {
+waveform in the schematic.} 710 -150 0 0 0.3 0.3 {}
+T {tcleval(SUN=[expr \{[xschem getprop rect 2 0 dataset] == -1 ? \{N/A\} : ([xschem getprop rect 2 0 dataset] + 1)*20\}]%)} 720 -540 0 0 0.4 0.4 {name=xxxx}
+T {@name} 495 -766.25 2 1 0.2 0.2 {
name=Rs}
-T {@value} 495 -646.25 2 0 0.2 0.2 {
+T {@value} 505 -726.25 2 0 0.2 0.2 {
name=Rs}
-T {m=@m} 485 -701.25 2 1 0.2 0.2 {
+T {m=@m} 495 -781.25 2 1 0.2 0.2 {
name=Rs}
-T {@spice_get_current} 406.25 -657.5 1 0 0.2 0.2 {layer=15
+T {@spice_get_current} 416.25 -737.5 1 0 0.2 0.2 {layer=15
name=Rs}
-N 630 -480 630 -420 {
+N 640 -560 640 -500 {
lab=minus}
-N 630 -800 630 -780 {
+N 640 -880 640 -860 {
lab=plus}
-N 200 -670 200 -650 {
+N 210 -750 210 -730 {
lab=A}
-N 160 -670 200 -670 {
+N 170 -750 210 -750 {
lab=A}
-N 590 -610 590 -570 {
+N 600 -690 600 -650 {
lab=0}
-N 590 -670 590 -650 {
+N 600 -750 600 -730 {
lab=B}
-N 530 -670 530 -650 {
+N 540 -750 540 -730 {
lab=B}
-N 630 -600 630 -540 {
+N 640 -680 640 -620 {
lab=im}
-N 630 -720 630 -660 {
+N 640 -800 640 -740 {
lab=ip}
-N 100 -670 100 -650 {
+N 110 -750 110 -730 {
lab=#net1}
-N 100 -570 590 -570 {
+N 110 -650 600 -650 {
lab=0}
-N 70 -570 100 -570 {
+N 80 -650 110 -650 {
lab=0}
-N 100 -590 100 -570 {
+N 110 -670 110 -650 {
lab=0}
-N 200 -590 200 -570 {
+N 210 -670 210 -650 {
lab=0}
-N 330 -590 330 -570 {
+N 340 -670 340 -650 {
lab=0}
-N 530 -590 530 -570 {
+N 540 -670 540 -650 {
lab=0}
-N 330 -670 330 -650 {
+N 340 -750 340 -730 {
lab=#net2}
-N 330 -670 360 -670 {
+N 340 -750 370 -750 {
lab=#net2}
-N 200 -670 270 -670 {
+N 210 -750 280 -750 {
lab=A}
-N 420 -670 430 -670 {
+N 430 -750 440 -750 {
lab=#net3}
-N 520 -670 590 -670 {
+N 530 -750 600 -750 {
lab=B}
-N 490 -670 520 -670 {
+N 500 -750 530 -750 {
lab=B}
-C {code_shown.sym} 40 -400 0 0 {name=CONTROL_400w_voc_43
+C {code_shown.sym} 360 -420 0 0 {name=CONTROL_400w_voc_43
spice_ignore=false
only_toplevel=true
value=".param isc=11.5
@@ -162,12 +130,12 @@ write pv_ngspice.raw
quit
.endc
"}
-C {iopin.sym} 630 -420 2 1 {name=p2 lab=minus}
+C {iopin.sym} 640 -500 2 1 {name=p2 lab=minus}
C {title.sym} 160 -40 0 0 {name=l1 author="Stefan Schippers" net_name=true}
-C {ipin.sym} 90 -760 2 1 {name=p2 lab=fade}
-C {ammeter.sym} 130 -670 3 0 {name=Vf}
-C {iopin.sym} 630 -800 2 1 {name=p1 lab=plus}
-C {launcher.sym} 930 -140 0 0 {name=h3
+C {ipin.sym} 100 -840 2 1 {name=p2 lab=fade}
+C {ammeter.sym} 140 -750 3 0 {name=Vf}
+C {iopin.sym} 640 -880 2 1 {name=p1 lab=plus}
+C {launcher.sym} 1250 -160 0 0 {name=h3
descr="Netlist, Simulate, Reload waves"
tclcommand="
if \{![info exists sim]\} \{set_sim_defaults\}
@@ -180,7 +148,7 @@ xschem simulate
xschem raw_read $netlist_dir/[file tail [file rootname [xschem get current_name]]].raw
"
}
-C {launcher.sym} 930 -100 0 0 {name=h1
+C {launcher.sym} 1250 -120 0 0 {name=h1
descr="Load embedded waves"
tclcommand="xschem raw_read_from_attr"
spice_data="
@@ -1092,39 +1060,39 @@ AAAAAAAAACCo+3TfgJ3BIKj7dN+AncEgqPt034CdwRIAAAAAgEdAAAAAAAAAAAAAAAAAAAAAABIAAAAA
AAAAAAAAAEYzMzMzs0dARjMzMzOzR0AAAAAAAAAAAGBdUguLJqbBYF1SC4smpsFgXVILiyamweDMzMzMzEdAAAAAAAAAAAAAAAAAAAAAAODMzMzMzEdA4MzMzMzMR0AA
AAAAAAAAAACASGFmXanBAIBIYWZdqcEAgEhhZl2pwXpmZmZm5kdAAAAAAAAAAAAAAAAAAAAAAHpmZmZm5kdAemZmZmbmR0AAAAAAAAAAAEBcFH2pC63BQFwUfakLrcFA
XBR9qQutwRQAAAAAAEhAAAAAAAAAAAAAAAAAAAAAABQAAAAAAEhAFAAAAAAASEAAAAAAAAAAAICJiQpUobDBgImJClShsMGAiYkKVKGwwQ=="}
-C {launcher.sym} 1300 -90 0 0 {name=h2
+C {launcher.sym} 1250 -70 0 0 {name=h2
descr="Reload waves"
tclcommand="
xschem raw_read $netlist_dir/[file tail [file rootname [xschem get current_name]]].raw
"
}
-C {ammeter.sym} 630 -510 2 0 {name=Vm savecurrent=true}
-C {ammeter.sym} 630 -750 2 0 {name=Vp savecurrent=true}
-C {diode.sym} 200 -620 0 0 {name=D1 model=DPANEL area='area'
+C {ammeter.sym} 640 -590 2 0 {name=Vm savecurrent=true}
+C {ammeter.sym} 640 -830 2 0 {name=Vp savecurrent=true}
+C {diode.sym} 210 -700 0 0 {name=D1 model=DPANEL area='area'
device_model=".model DPANEL D IS=1n N=1"}
-C {res.sym} 330 -620 0 0 {name=Rp
+C {res.sym} 340 -700 0 0 {name=Rp
value='rp'
footprint=1206
device=resistor
m=1}
-C {res.sym} 460 -670 1 0 {name=Rs
+C {res.sym} 470 -750 1 0 {name=Rs
value='rs'
footprint=1206
device=resistor
m=1
hide_texts=true}
-C {lab_pin.sym} 70 -570 2 1 {name=l2 sig_type=std_logic lab=0}
-C {cccs.sym} 530 -620 2 0 {name=F1 vnam=e1 value=1}
-C {vcvs.sym} 630 -630 0 0 {name=E1 value="'n'"}
-C {lab_wire.sym} 250 -670 0 0 {name=p3 sig_type=std_logic lab=A}
-C {lab_wire.sym} 550 -670 0 0 {name=p4 sig_type=std_logic lab=B}
-C {ammeter.sym} 120 -760 3 0 {name=Vf1}
-C {lab_pin.sym} 150 -760 0 1 {name=p5 sig_type=std_logic lab=F}
-C {bsource.sym} 100 -620 2 0 {name=B1 VAR=I FUNC="v(f) * isc"}
-C {ammeter.sym} 300 -670 3 0 {name=Vr}
-C {ammeter.sym} 390 -670 3 0 {name=Vm1 savecurrent=true}
-C {code_shown.sym} -320 -390 0 0 {name=CONTROL_100w_voc_22
+C {lab_pin.sym} 80 -650 2 1 {name=l2 sig_type=std_logic lab=0}
+C {cccs.sym} 540 -700 2 0 {name=F1 vnam=e1 value=1}
+C {vcvs.sym} 640 -710 0 0 {name=E1 value="'n'"}
+C {lab_wire.sym} 260 -750 0 0 {name=p3 sig_type=std_logic lab=A}
+C {lab_wire.sym} 560 -750 0 0 {name=p4 sig_type=std_logic lab=B}
+C {ammeter.sym} 130 -840 3 0 {name=Vf1}
+C {lab_pin.sym} 160 -840 0 1 {name=p5 sig_type=std_logic lab=F}
+C {bsource.sym} 110 -700 2 0 {name=B1 VAR=I FUNC="v(f) * isc"}
+C {ammeter.sym} 310 -750 3 0 {name=Vr}
+C {ammeter.sym} 400 -750 3 0 {name=Vm1 savecurrent=true}
+C {code_shown.sym} 0 -410 0 0 {name=CONTROL_100w_voc_22
spice_ignore=true
only_toplevel=true
value=".param isc=6
@@ -1143,5 +1111,5 @@ write pv_ngspice.raw
quit
.endc
"}
-C {lab_wire.sym} 630 -690 0 0 {name=p6 sig_type=std_logic lab=ip}
-C {lab_wire.sym} 630 -560 0 0 {name=p7 sig_type=std_logic lab=im}
+C {lab_wire.sym} 640 -770 0 0 {name=p6 sig_type=std_logic lab=ip}
+C {lab_wire.sym} 640 -640 0 0 {name=p7 sig_type=std_logic lab=im}