update xschem go_back command (pas integer notitle to go_back() function; simplify wrap handling vs sweep variable in draw_graph(), graph_fullyzoom(), calc_custom_data_yrange(), find_closest_wave()
This commit is contained in:
parent
6682965dba
commit
c4ebc92aa2
|
|
@ -877,7 +877,7 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
|
|||
Return various global variables used in the program </pre>
|
||||
<li><kbd> go_back [notitle]</kbd></li><pre>
|
||||
Go up one level (pop) in hierarchy
|
||||
if string 'notitle' is given do not update window title (slow) </pre>
|
||||
if integer 'notitle' given pass it to the go_back() function (1=do not update window title) </pre>
|
||||
<li><kbd> grabscreen</kbd></li><pre>
|
||||
grab root window </pre>
|
||||
<li><kbd> hash_file file [skip_path_lines]</kbd></li><pre>
|
||||
|
|
|
|||
26
src/draw.c
26
src/draw.c
|
|
@ -2423,7 +2423,6 @@ int graph_fullyzoom(xRect *r, Graph_ctx *gr, int graph_dataset)
|
|||
end = (gr->gx1 <= gr->gx2) ? gr->gx2 : gr->gx1;
|
||||
|
||||
while( (ntok = my_strtok_r(nptr, "\n", "\"", 4, &saven)) ) {
|
||||
int allow_wrap = 1;
|
||||
char *nd = NULL;
|
||||
char str_extra_idx[30];
|
||||
|
||||
|
|
@ -2466,7 +2465,6 @@ int graph_fullyzoom(xRect *r, Graph_ctx *gr, int graph_dataset)
|
|||
if(raw && raw->sim_type && !strcmp(raw->sim_type, "op") && raw->datasets > 1 && raw->npoints[0] == 1) {
|
||||
save_datasets = raw->datasets;
|
||||
raw->datasets = 1;
|
||||
allow_wrap = 0;
|
||||
save_npoints = raw->npoints[0];
|
||||
raw->npoints[0] = raw->allpoints;
|
||||
}
|
||||
|
|
@ -2514,13 +2512,12 @@ int graph_fullyzoom(xRect *r, Graph_ctx *gr, int graph_dataset)
|
|||
double xx, xx0 = 0.0; /* gcc gives false warnings if xx0 not initialized here */
|
||||
int cnt=0, wrap;
|
||||
register SPICE_DATA *gv = raw->values[sweep_idx];
|
||||
SPICE_DATA *gv0 = raw->values[0]; /* spice sweep variable, used to determine wrap arounds */
|
||||
ofs_end = ofs + raw->npoints[dset];
|
||||
for(p = ofs ; p < ofs_end; p++) {
|
||||
if(gr->logx) xx = mylog10(gv[p]);
|
||||
else xx = gv[p];
|
||||
if(p == ofs) xx0 = gv0[p];
|
||||
wrap = allow_wrap && (cnt > 1 && gv0[p] == xx0);
|
||||
if(p == ofs) xx0 = gv[p];
|
||||
wrap = (cnt > 1 && gv[p] == xx0);
|
||||
if(wrap) {
|
||||
sweepvar_wrap++;
|
||||
cnt = 0;
|
||||
|
|
@ -3450,7 +3447,6 @@ int calc_custom_data_yrange(int sweep_idx, const char *express, Graph_ctx *gr)
|
|||
for(dset = 0 ; dset < raw->datasets; dset++) {
|
||||
int cnt=0, wrap;
|
||||
register SPICE_DATA *gv = raw->values[sweep_idx];
|
||||
SPICE_DATA *gv0 = raw->values[0]; /* spice sweep variable, used to determine wrap arounds */
|
||||
ofs_end = ofs + raw->npoints[dset];
|
||||
first = -1;
|
||||
last = ofs;
|
||||
|
|
@ -3460,8 +3456,8 @@ int calc_custom_data_yrange(int sweep_idx, const char *express, Graph_ctx *gr)
|
|||
else
|
||||
xx = gv[p];
|
||||
|
||||
if(p == ofs) xx0 = gv0[p];
|
||||
wrap = ( cnt > 1 && gv0[p] == xx0);
|
||||
if(p == ofs) xx0 = gv[p];
|
||||
wrap = ( cnt > 1 && gv[p] == xx0);
|
||||
if(first != -1) { /* there is something to plot ... */
|
||||
if(xx > end || xx < start || /* ... and we ran out of graph area ... */
|
||||
wrap) { /* ... or sweep variable changed direction */
|
||||
|
|
@ -3586,7 +3582,6 @@ int find_closest_wave(int i, Graph_ctx *gr)
|
|||
double prev_x = 0.0;
|
||||
int cnt=0, wrap;
|
||||
register SPICE_DATA *gvx = raw->values[sweep_idx];
|
||||
SPICE_DATA *gv0 = raw->values[0];
|
||||
register SPICE_DATA *gvy;
|
||||
ofs_end = ofs + raw->npoints[dset];
|
||||
if(expression) plot_raw_custom_data(sweep_idx, ofs, ofs_end - 1, express, NULL);
|
||||
|
|
@ -3600,10 +3595,10 @@ int find_closest_wave(int i, Graph_ctx *gr)
|
|||
for(p = ofs ; p < ofs_end; p++) {
|
||||
if(gr->logx) xx = mylog10(gvx[p]);
|
||||
else xx = gvx[p];
|
||||
if(p == ofs) xx0 = gv0[p];
|
||||
if(p == ofs) xx0 = gvx[p];
|
||||
if(gr->logy) yy = mylog10(gvy[p]);
|
||||
else yy = gvy[p];
|
||||
wrap = (cnt > 1 && gv0[p] == xx0);
|
||||
wrap = (cnt > 1 && gvx[p] == xx0);
|
||||
if(first != -1) {
|
||||
if(xx > end || xx < start || wrap) {
|
||||
dbg(1, "find_closest_wave(): last=%d\n", last);
|
||||
|
|
@ -3762,7 +3757,6 @@ void draw_graph(int i, const int flags, Graph_ctx *gr, void *ct)
|
|||
/* process each node given in "node" attribute, get also associated color/sweep var if any*/
|
||||
while( (ntok = my_strtok_r(nptr, "\n", "\"", 4, &saven)) ) {
|
||||
int valid_rawfile = 1;
|
||||
int allow_wrap = 1;
|
||||
char *nd = NULL;
|
||||
char str_extra_idx[30];
|
||||
|
||||
|
|
@ -3821,7 +3815,6 @@ void draw_graph(int i, const int flags, Graph_ctx *gr, void *ct)
|
|||
&& xctx->raw->datasets > 1 && xctx->raw->npoints[0] == 1) {
|
||||
save_datasets = xctx->raw->datasets;
|
||||
xctx->raw->datasets = 1;
|
||||
allow_wrap = 0;
|
||||
save_npoints = xctx->raw->npoints[0];
|
||||
xctx->raw->npoints[0] = xctx->raw->allpoints;
|
||||
}
|
||||
|
|
@ -3902,7 +3895,6 @@ void draw_graph(int i, const int flags, Graph_ctx *gr, void *ct)
|
|||
double prev_x;
|
||||
int cnt=0, wrap;
|
||||
register SPICE_DATA *gv = xctx->raw->values[sweep_idx];
|
||||
SPICE_DATA *gv0 = xctx->raw->values[0]; /* spice sweep variable, used to determine wrap arounds */
|
||||
|
||||
ofs_end = ofs + xctx->raw->npoints[dset];
|
||||
first = -1;
|
||||
|
|
@ -3919,8 +3911,8 @@ void draw_graph(int i, const int flags, Graph_ctx *gr, void *ct)
|
|||
else xx = gv[p];
|
||||
|
||||
xxprevious = xxfollowing = xx;
|
||||
if(p == ofs) xx0 = gv0[p];
|
||||
wrap = allow_wrap && (cnt > 1 && gv0[p] == xx0);
|
||||
if(p == ofs) xx0 = gv[p];
|
||||
wrap = cnt > 1 && gv[p] == xx0;
|
||||
#if 1 /* plot one point before start and one point after end so
|
||||
* waves will extend to whole graph area even if there are few points
|
||||
* but NOT if we are about to wrap (missing 1st/last point in 2-var dc sweeps) */
|
||||
|
|
@ -3929,7 +3921,7 @@ void draw_graph(int i, const int flags, Graph_ctx *gr, void *ct)
|
|||
else xxprevious = gv[p - 1];
|
||||
}
|
||||
/* .................<-- next point will not wrap. */
|
||||
if(p < ofs_end - 1 && gv0[p + 1] != xx0) {
|
||||
if(p < ofs_end - 1 && gv[p + 1] != xx0) {
|
||||
if(gr->logx) xxfollowing = mylog10(gv[p + 1]);
|
||||
else xxfollowing = gv[p + 1];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2079,13 +2079,13 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
|
||||
/* go_back [notitle]
|
||||
* Go up one level (pop) in hierarchy
|
||||
* if string 'notitle' is given do not update window title (slow) */
|
||||
* if integer 'notitle' given pass it to the go_back() function (1=do not update window title) */
|
||||
else if(!strcmp(argv[1], "go_back"))
|
||||
{
|
||||
int set_title = 1;
|
||||
if(!xctx) {Tcl_SetResult(interp, not_avail, TCL_STATIC); return TCL_ERROR;}
|
||||
if(argc > 2 && !strcmp(argv[2], "notitle")) {
|
||||
set_title = 0;
|
||||
if(argc > 2 ) {
|
||||
set_title = atoi(argv[2]);
|
||||
}
|
||||
if((xctx->semaphore == 0)) go_back(1, set_title);
|
||||
Tcl_ResetResult(interp);
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ proc hier_traversal {fd {level 0} only_subckts} {
|
|||
if {$descended} {
|
||||
incr level
|
||||
set dp [hier_traversal $fd $level $only_subckts]
|
||||
xschem go_back notitle
|
||||
xschem go_back 1
|
||||
incr level -1
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue