allow button1 in addition to button2 for panning / zooming waveforms, add menu commands to insert graph, display/hide empty graphs, load raw file

This commit is contained in:
Stefan Frederik 2021-12-26 04:09:55 +01:00
parent 8fb4c9ee55
commit 37575e9404
9 changed files with 173 additions and 143 deletions

View File

@ -1251,7 +1251,7 @@ void change_to_unix_fn(char* fn)
/* selected: 0 -> all, 1 -> selected, 2 -> hilighted */
void calc_drawing_bbox(xRect *boundbox, int selected)
{
xRect tmp;
xRect rect;
int c, i;
int count=0;
#if HAS_CAIRO==1
@ -1264,16 +1264,19 @@ void calc_drawing_bbox(xRect *boundbox, int selected)
boundbox->y2=100;
if(selected != 2) for(c=0;c<cadlayers;c++)
{
const char *tmp = tclgetvar("hide_empty_graphs");
int hide_graphs = (tmp && tmp[0] == '1') ? 1 : 0;
int waves = schematic_waves_loaded();
for(i=0;i<xctx->lines[c];i++)
{
if(selected == 1 && !xctx->line[c][i].sel) continue;
tmp.x1=xctx->line[c][i].x1;
tmp.x2=xctx->line[c][i].x2;
tmp.y1=xctx->line[c][i].y1;
tmp.y2=xctx->line[c][i].y2;
rect.x1=xctx->line[c][i].x1;
rect.x2=xctx->line[c][i].x2;
rect.y1=xctx->line[c][i].y1;
rect.y2=xctx->line[c][i].y2;
count++;
updatebbox(count,boundbox,&tmp);
updatebbox(count,boundbox,&rect);
}
for(i=0;i<xctx->polygons[c];i++)
@ -1289,32 +1292,32 @@ void calc_drawing_bbox(xRect *boundbox, int selected)
if(k==0 || xctx->poly[c][i].x[k] > x2) x2 = xctx->poly[c][i].x[k];
if(k==0 || xctx->poly[c][i].y[k] > y2) y2 = xctx->poly[c][i].y[k];
}
tmp.x1=x1;tmp.y1=y1;tmp.x2=x2;tmp.y2=y2;
updatebbox(count,boundbox,&tmp);
rect.x1=x1;rect.y1=y1;rect.x2=x2;rect.y2=y2;
updatebbox(count,boundbox,&rect);
}
for(i=0;i<xctx->arcs[c];i++)
{
if(selected == 1 && !xctx->arc[c][i].sel) continue;
arc_bbox(xctx->arc[c][i].x, xctx->arc[c][i].y, xctx->arc[c][i].r, xctx->arc[c][i].a, xctx->arc[c][i].b,
&tmp.x1, &tmp.y1, &tmp.x2, &tmp.y2);
&rect.x1, &rect.y1, &rect.x2, &rect.y2);
count++;
updatebbox(count,boundbox,&tmp);
updatebbox(count,boundbox,&rect);
}
for(i=0;i<xctx->rects[c];i++)
{
if(selected == 1 && !xctx->rect[c][i].sel) continue;
/* skip graph objects if no datafile loaded */
if(c == 2 && xctx->rect[c][i].flags == 1) {
if(!waves) continue;
if(c == GRIDLAYER && xctx->rect[c][i].flags == 1) {
if(hide_graphs && !waves) continue;
}
tmp.x1=xctx->rect[c][i].x1;
tmp.x2=xctx->rect[c][i].x2;
tmp.y1=xctx->rect[c][i].y1;
tmp.y2=xctx->rect[c][i].y2;
rect.x1=xctx->rect[c][i].x1;
rect.x2=xctx->rect[c][i].x2;
rect.y1=xctx->rect[c][i].y1;
rect.y2=xctx->rect[c][i].y2;
count++;
updatebbox(count,boundbox,&tmp);
updatebbox(count,boundbox,&rect);
}
}
if(selected == 2 && xctx->hilight_nets) prepare_netlist_structs(0);
@ -1339,12 +1342,12 @@ void calc_drawing_bbox(xRect *boundbox, int selected)
if(xctx->wire[i].y1 < xctx->wire[i].y2) { y1 = xctx->wire[i].y1-ov; y2 = xctx->wire[i].y2+ov; }
else { y1 = xctx->wire[i].y1+ov; y2 = xctx->wire[i].y2-ov; }
}
tmp.x1 = xctx->wire[i].x1-ov;
tmp.x2 = xctx->wire[i].x2+ov;
tmp.y1 = y1;
tmp.y2 = y2;
rect.x1 = xctx->wire[i].x1-ov;
rect.x2 = xctx->wire[i].x2+ov;
rect.y1 = y1;
rect.y2 = y2;
count++;
updatebbox(count,boundbox,&tmp);
updatebbox(count,boundbox,&rect);
}
if(has_x && selected != 2) for(i=0;i<xctx->texts;i++)
{
@ -1357,9 +1360,9 @@ void calc_drawing_bbox(xRect *boundbox, int selected)
xctx->text[i].yscale,xctx->text[i].rot, xctx->text[i].flip,
xctx->text[i].hcenter, xctx->text[i].vcenter,
xctx->text[i].x0, xctx->text[i].y0,
&tmp.x1,&tmp.y1, &tmp.x2,&tmp.y2, &no_of_lines, &longest_line) ) {
&rect.x1,&rect.y1, &rect.x2,&rect.y2, &no_of_lines, &longest_line) ) {
count++;
updatebbox(count,boundbox,&tmp);
updatebbox(count,boundbox,&rect);
}
#if HAS_CAIRO==1
if(customfont) cairo_restore(xctx->cairo_ctx);
@ -1388,12 +1391,12 @@ void calc_drawing_bbox(xRect *boundbox, int selected)
/* cpu hog 20171206 */
/* symbol_bbox(i, &xctx->inst[i].x1, &xctx->inst[i].y1, &xctx->inst[i].x2, &xctx->inst[i].y2); */
tmp.x1=xctx->inst[i].x1;
tmp.y1=xctx->inst[i].y1;
tmp.x2=xctx->inst[i].x2;
tmp.y2=xctx->inst[i].y2;
rect.x1=xctx->inst[i].x1;
rect.y1=xctx->inst[i].y1;
rect.x2=xctx->inst[i].x2;
rect.y2=xctx->inst[i].y2;
count++;
updatebbox(count,boundbox,&tmp);
updatebbox(count,boundbox,&rect);
}
}

View File

@ -215,7 +215,7 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
cy = (y1 - y2) / (wy2 - wy1);
dbg(1, "%g %g %g %g - %d %d\n", wx1, wy1, wx2, wy2, divx, divy);
}
if(event == MotionNotify && (state & Button2Mask)) {
if(event == MotionNotify && (state & (Button2Mask | Button1Mask))) {
double delta;
if(xctx->mousex_snap < W_X(wx1)) {
delta = (wy2 - wy1) / divy;
@ -269,9 +269,9 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
xx1 = wx1 - delta * delta_threshold;
xx2 = wx2 - delta * delta_threshold;
my_snprintf(s, S(s), "%g", xx1);
my_strdup(1395, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "x1", s));
my_strdup(1428, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "x1", s));
my_snprintf(s, S(s), "%g", xx2);
my_strdup(1396, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "x2", s));
my_strdup(1429, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "x2", s));
}
need_redraw = 1;
}
@ -327,16 +327,16 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
delta = (wy2 - wy1);
yy2 = wy2 - delta * 0.1;
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1418, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "y2", s));
my_strdup(1439, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "y2", s));
} else {
delta = (wx2 - wx1) / divx;
delta_threshold = 1.0;
xx1 = wx1 + delta * delta_threshold;
xx2 = wx2 + delta * delta_threshold;
my_snprintf(s, S(s), "%g", xx1);
my_strdup(1397, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "x1", s));
my_strdup(1430, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "x1", s));
my_snprintf(s, S(s), "%g", xx2);
my_strdup(1398, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "x2", s));
my_strdup(1431, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "x2", s));
}
need_redraw = 1;
}
@ -346,12 +346,12 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
delta = (wy2 - wy1);
yy2 = wy2 + delta * 0.1;
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1419, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "y2", s));
my_strdup(1432, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "y2", s));
} else {
delta = (wx2 - wx1);
xx2 = wx2 + delta * 0.1;
my_snprintf(s, S(s), "%g", xx2);
my_strdup(1399, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "x2", s));
my_strdup(1433, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "x2", s));
}
need_redraw = 1;
}
@ -364,9 +364,9 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
yy1 = wy1 - delta * delta_threshold;
yy2 = wy2 - delta * delta_threshold;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1420, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "y1", s));
my_strdup(1434, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1421, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "y2", s));
my_strdup(1435, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "y2", s));
} else {
delta = (wx2 - wx1);
xx2 = wx2 + delta * 0.1;
@ -386,7 +386,7 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
delta = (wx2 - wx1);
xx2 = wx2 - delta * 0.1;
my_snprintf(s, S(s), "%g", xx2);
my_strdup(1400, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "x2", s));
my_strdup(1436, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "x2", s));
}
need_redraw = 1;
}
@ -399,9 +399,9 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
yy1 = wy1 + delta * delta_threshold;
yy2 = wy2 + delta * delta_threshold;
my_snprintf(s, S(s), "%g", yy1);
my_strdup(1416, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "y1", s));
my_strdup(1437, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "y1", s));
my_snprintf(s, S(s), "%g", yy2);
my_strdup(1417, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "y2", s));
my_strdup(1438, &xctx->rect[c][n].prop_ptr, subst_token(xctx->rect[c][n].prop_ptr, "y2", s));
} else {
delta = (wx2 - wx1);
xx2 = wx2 - delta * 0.1;
@ -451,13 +451,13 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
need_redraw = 1;
}
}
else if(event == ButtonPress && button == Button2) {
else if(event == ButtonPress && (button == Button2 || button == Button1)) {
xctx->mx_double_save = xctx->mousex_snap;
xctx->my_double_save = xctx->mousey_snap;
}
}
if(need_redraw) draw_graph(c, n, 3); /* draw data in each graph box */
if(need_redraw) draw_graph(c, n, 1); /* draw data in each graph box */
}
draw_selection(xctx->gc[SELLAYER], 0);

View File

@ -1651,6 +1651,7 @@ int read_rawfile(const char *f)
dbg(0, "read_rawfile(): failed to open file %s for reading\n", f);
return 0;
}
int get_raw_index(const char *node)
{
struct int_hashentry *entry;
@ -1817,7 +1818,7 @@ void draw_graph(int c, int i, int flags)
char tmpstr[200];
char *saven, *savec, *saves, *nptr, *cptr, *sptr, *ntok, *ctok, *stok;
int wcnt = 0;
int dataset = -1;
int dataset = -1;
/* container (embedding rectangle) coordinates */
rx1 = r->x1;
ry1 = r->y1;
@ -1882,9 +1883,7 @@ void draw_graph(int c, int i, int flags)
txtsizelab = marginy / 100;
/* background */
if((flags & 2) ) {
filledrect(0, NOW, rx1, ry1, rx2, ry2);
}
filledrect(0, NOW, rx1, ry1, rx2, ry2);
/* graph bounding box */
drawrect(c, NOW, rx1, ry1, rx2, ry2, 2);
@ -1939,7 +1938,7 @@ void draw_graph(int c, int i, int flags)
* swap order of wy1 and wy2 since grap y orientation is opposite to xorg orientation */
if(wx1 <= 0 && wx2 >= 0) drawline(2, ADD, W_X(0), W_Y(wy2), W_X(0), W_Y(wy1), 0);
drawline(2, END, 0.0, 0.0, 0.0, 0.0, 0);
/* if simulation data is loaded and matches schematic draw data */
/* get data to plot */
my_strdup2(1389, &node, get_tok_value(r->prop_ptr,"node",0));
my_strdup2(1390, &color, get_tok_value(r->prop_ptr,"color",0));
my_strdup2(1407, &sweep, get_tok_value(r->prop_ptr,"sweep",0));
@ -1960,8 +1959,8 @@ void draw_graph(int c, int i, int flags)
}
/* draw sweep variable(s) on x-axis */
if(wcnt == 0 || (stok && stok[0])) {
if(unitx != 1.0) my_snprintf(tmpstr, S(tmpstr), "%s[%c]", xctx->names[sweep_idx], unitx_suffix);
else my_snprintf(tmpstr, S(tmpstr), "%s", xctx->names[sweep_idx]);
if(unitx != 1.0) my_snprintf(tmpstr, S(tmpstr), "%s[%c]", stok ? stok : "" , unitx_suffix);
else my_snprintf(tmpstr, S(tmpstr), "%s", stok ? stok : "");
draw_string(wave_color, NOW, tmpstr, 2, 1, 0, 0,
rx1 + 2 + rw/n_nodes * wcnt, ry2-1, txtsizelab, txtsizelab);
}
@ -1972,7 +1971,7 @@ void draw_graph(int c, int i, int flags)
/* clipping everything outside graph area */
/* quickly find index number of ntok variable to be plotted */
entry = int_hash_lookup(xctx->raw_table, ntok, 0, XLOOKUP);
if(entry) {
if(xctx->values && entry) {
int p, dset, ofs;
int poly_npoints;
int v;
@ -2059,15 +2058,18 @@ void draw_graph(int c, int i, int flags)
* 1: do final XCopyArea (copy 2nd buffer areas to screen)
* If draw_waves() is called from draw() no need to do XCopyArea, as draw() does it already.
* This makes drawing faster and removes a 'tearing' effect when moving around.
* 2: do not draw background (when called from draw() this is already done)
*/
void draw_waves(int flags)
{
int c, i;
int c, i, sch_loaded, hide_graphs;
int bbox_set = 0;
const char *tmp;
int save_bbx1, save_bby1, save_bbx2, save_bby2;
/* save bbox data, since draw_waves() is called from draw() which may be called after a bbox(SET) */
if(schematic_waves_loaded()) {
sch_loaded = schematic_waves_loaded();
tmp = tclgetvar("hide_empty_graphs");
hide_graphs = (tmp && tmp[0] == '1') ? 1 : 0;
if(sch_loaded || !hide_graphs) {
if(xctx->sem) {
bbox_set = 1;
save_bbx1 = xctx->bbx1;
@ -2082,7 +2084,7 @@ void draw_waves(int flags)
cairo_select_font_face(xctx->cairo_ctx, "Sans-Serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
cairo_select_font_face(xctx->cairo_save_ctx, "Sans-Serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
#endif
c = 2; /* only rectangles on layer 2 (GRID) can embed graphs */
c = GRIDLAYER; /* only rectangles on layer 2 (GRID) can embed graphs */
if(xctx->draw_single_layer==-1 || c == xctx->draw_single_layer) {
if(xctx->enable_layer[c]) for(i = 0; i < xctx->rects[c]; i++) {
xRect *r = &xctx->rect[c][i];
@ -2155,7 +2157,7 @@ void draw(void)
}
if(xctx->enable_layer[c]) for(i=0;i<xctx->rects[c];i++) {
xRect *r = &xctx->rect[c][i];
if(c != 2 || r->flags != 1 ) {
if(c != GRIDLAYER || r->flags != 1 ) {
drawrect(c, ADD, r->x1, r->y1, r->x2, r->y2, r->dash);
filledrect(c, ADD, r->x1, r->y1, r->x2, r->y2);
}

View File

@ -298,7 +298,34 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
xctx->ui_state |= START_SYMPIN;
Tcl_ResetResult(interp);
}
if(!strcmp(argv[1],"add_graph"))
{
cmd_found = 1;
unselect_all();
storeobject(-1, xctx->mousex_snap-400, xctx->mousey_snap-200, xctx->mousex_snap+400, xctx->mousey_snap+200,
xRECT, GRIDLAYER, SELECTED,
"flags=1\n"
"y1=0\n"
"y2=5\n"
"divy=4\n"
"subdivy=1\n"
"x1=0\n"
"x2=10e-6\n"
"divx=8\n"
"subdivx=1\n"
"node=\"v(a) v(b) v(c)\"\n"
"color=\"7 8 10 11 12 13 14 15 16 17\"\n"
"dataset=0\n"
"unitx=u\n"
);
xctx->need_reb_sel_arr=1;
rebuild_selected_array();
move_objects(START,0,0,0);
xctx->ui_state |= START_SYMPIN;
Tcl_ResetResult(interp);
}
else if(!strcmp(argv[1],"align"))
{
cmd_found = 1;
@ -1936,6 +1963,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
if(!strcmp(argv[1], "raw_clear"))
{
cmd_found = 1;
tclsetvar("rawfile_loaded", "0");
free_rawfile();
Tcl_ResetResult(interp);
}
@ -1947,7 +1975,9 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
int dataset = 0;
cmd_found = 1;
Tcl_ResetResult(interp);
if(xctx->values) {
if(argc > 2 && !strcmp(argv[2], "loaded")) {
Tcl_AppendResult(interp, schematic_waves_loaded() ? "1" : "0", NULL);
} else if(xctx->values) {
if(argc > 5) dataset = atoi(argv[5]);
if(argc > 4) {
/* xschem rawfile_query value v(ldcp) 123 */
@ -2005,6 +2035,8 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
} else if(argc > 2) {
free_rawfile();
read_rawfile(argv[2]);
if(schematic_waves_loaded()) tclsetvar("rawfile_loaded", "1");
else tclsetvar("rawfile_loaded", "0");
}
Tcl_ResetResult(interp);
}

View File

@ -679,7 +679,7 @@ typedef struct {
/* bbox */
int bbx1, bbx2, bby1, bby2;
int savew, saveh, savex1, savex2, savey1, savey2;
int sem;
int sem; /* set to 1 if a clipping bbox is set (void bbox() ) */
XRectangle savexrect;
/* new_prop_string */
char prefix;

View File

@ -20,7 +20,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
### INUTILE integration
### INUTILE integration (spice stimuli generator from a higher level description language)
proc inutile_line {txtlabel} {
global retval
toplevel .inutile_line -class Dialog
@ -3805,15 +3805,16 @@ set tctx::global_list {
dark_colorscheme dim_bg dim_value disable_unique_names do_all_inst draw_grid draw_window
edit_prop_pos edit_prop_size editprop_sympath edit_symbol_prop_new_sel enable_dim_bg enable_stretch
en_hilight_conn_inst filetmp
flat_netlist fullscreen gaw_fd gaw_tcp_address globfilter hide_symbols hsize hspice_netlist
flat_netlist fullscreen gaw_fd gaw_tcp_address globfilter hide_empty_graphs hide_symbols hsize hspice_netlist
incr_hilight infowindow_text INITIALINSTDIR INITIALLOADDIR INITIALPROPDIR INITIALTEXTDIR
input_line_cmd input_line_data launcher_default_program light_colors line_width local_netlist_dir
myload_d myload_default_geometry myload_dir1 myload_dir2 myload_dirs2 myload_files1 myload_files2 myload_index1
myload_retval myload_sash_pos myload_sel myload_type myload_yview netlist_dir netlist_show
netlist_type no_change_attrs noprint_libs old_selected_tok
only_probes path pathlist persistent_command preserve_unchanged_attrs prev_symbol ps_colors rainbow_colors
rcode recentfile replace_key retval retval_orig rotated_text search_exact search_found search_select
search_value selected_tok show_infowindow show_pin_net_names simconf_default_geometry simconf_vpos
rawfile_loaded rcode recentfile replace_key retval retval_orig rotated_text search_exact
search_found search_select search_value selected_tok show_infowindow show_pin_net_names
simconf_default_geometry simconf_vpos
spiceprefix split_files svg_colors svg_font_name symbol symbol_width sym_txt tclcmd_txt
text_line_default_geometry textwindow_fileid textwindow_filename textwindow_w tmp_bus_char
toolbar_horiz toolbar_visible top_subckt transparent_svg undo_type
@ -4443,6 +4444,13 @@ proc build_widgets { {topwin {} } } {
-command {edit_netlist [file tail [xschem get schname]]}
$topwin.menubar.simulation.menu add command -label {Send highlighted nets to viewer} \
-command {xschem create_plot_cmd} -accelerator Shift+J
$topwin.menubar.simulation.menu add checkbutton -label "Hide graphs if no spice data loaded" \
-variable hide_empty_graphs -command {xschem redraw}
$topwin.menubar.simulation.menu add checkbutton -variable rawfile_loaded \
-label {Load/Unload ngspice .raw file} -command {
xschem raw_read $netlist_dir/[file tail [file rootname [xschem get current_name]]].raw
}
$topwin.menubar.simulation.menu add command -label {Add waveform graph} -command {xschem add_graph}
$topwin.menubar.simulation.menu add separator
$topwin.menubar.simulation.menu add checkbutton -label "LVS netlist: Top level is a .subckt" -variable top_subckt
$topwin.menubar.simulation.menu add checkbutton -label "Use 'spiceprefix' attribute" -variable spiceprefix \
@ -4701,6 +4709,7 @@ set_ne local_netlist_dir 0 ;# if set use <sch_dir>/simulation for netlist and si
set_ne bus_replacement_char {} ;# use {<>} to replace [] with <> in bussed signals
set_ne hspice_netlist 1
set_ne top_subckt 0
set_ne hide_empty_graphs 0 ;# if set to 1 waveform boxes will be hidden if no raw file loaded
set_ne spiceprefix 1
set_ne verilog_2001 1
set_ne split_files 0
@ -4766,10 +4775,6 @@ set_ne show_pin_net_names 0
# gaw tcp {host port}
set_ne gaw_tcp_address {localhost 2020}
## utile
set_ne utile_gui_path "${XSCHEM_SHAREDIR}/utile/utile3"
set_ne utile_cmd_path "${XSCHEM_SHAREDIR}/utile/utile"
## cairo stuff 20171112
set_ne cairo_font_scale 1.0
set_ne nocairo_font_xscale .85
@ -4857,7 +4862,8 @@ if {$OS == "Windows"} {
} else {
set filetmp [pwd]/.tmp2
}
# /20111106
set rawfile_loaded 0
# flag bound to a checkbutton in symbol editprop form
# if set cell is copied when renaming it

View File

@ -18,7 +18,8 @@
## move schematic and redraw in a loop.
proc draw_test {{filelist {-}}} {
global show_pin_net_names
global show_pin_net_names hide_empty_graphs
set hide_empty_graphs 1
set show_pin_net_names 1
foreach f $filelist {
if { $f ne {-}} {

View File

@ -8,28 +8,34 @@ B 2 580 -140 1200 -30 {flags=1
y1 = 0
y2 = 2
divy = 2
x1=1.4e-07
x2=1.8e-07
x1=1.11978e-07
x2=2.09815e-07
divx=8
node="v(ldcp) v(xctrl.ldcp_ref) v(xctrl.ldprechref)"
comm="example of using tcl to replace the path
with $path variable automatically"
node="tcleval(v($\{path\}ldcp_ref) v($\{path\}ldprechref))"
color=12\\ 5\\ 13}
B 2 580 -230 1200 -140 {flags=1
y1 = 0
y2 = 2
divy = 2
x1=1.4e-07
x2=1.8e-07
x1=1.36438e-07
x2=2.34275e-07
divx=8
node="v(ldcp) v(xctrl.ldcpb)"
comm="example of using tcl to replace the path
with $path variable automatically"
node="tcleval(v($\{path\}ldcp_ref) v($\{path\}ldcpb))"
color=12\\ 5\\ 8}
B 2 580 -320 1200 -230 {flags=1
y1 = 0
y2 = 2
divy = 2
x1=1.4e-07
x2=1.8e-07
x1=1.11978e-07
x2=2.09815e-07
divx=8
node="v(ldcp) v(xctrl.ldouti) v(xctrl.ldoutib)"
comm="example of using tcl to replace the path
with $path variable automatically"
node="tcleval(v($\{path\}ldcp_ref) v($\{path\}ldouti) v($\{path\}ldoutib))"
color=12\\ 5\\ 8}
N 370 -560 510 -560 {lab=LDCPB}
N 250 -650 260 -650 {lab=LDCPB}

View File

@ -27,135 +27,115 @@ L 8 1150 -160 1180 -160 {}
L 8 1180 -160 1180 -120 {}
L 8 1180 -120 1300 -120 {}
L 8 820 -120 950 -120 {}
B 2 1860 -1180 3010 -1100 {flags=1
B 2 1860 -890 3010 -810 {flags=1
y1 = 0
y2 = 1
divy = 1
x1=1.18117e-07
x2=2.27926e-07 divx=10
x1=1.25369e-07
x2=2.02265e-07 divx=10
node="
v(ldbl[0]) v(ldbl[16]) v(ldbl[32])
v(ldbl[1]) v(ldbl[17]) v(ldbl[33])
v(ldbl[2]) v(ldbl[18]) v(ldbl[34])
"
color="8 9 10 11 12 13 14 15 16 17 18" unitx=n}
B 2 1860 -1090 3010 -1010 {flags=1
B 2 1860 -810 3010 -730 {flags=1
y1 = 0
y2 = 1.5
divy = 1
x1=1.18117e-07
x2=2.27926e-07 divx=10
x1=1.25369e-07
x2=2.02265e-07 divx=10
node="
v(ldl1x[0]) v(ldl1x[1]) v(ldl1x[2]) v(ldl1x[3])
"
color="6 7 8 9 10 11 12 13" unitx=n}
B 2 1860 -1000 3010 -920 {flags=1
y1 = 0
y2 = 1.5
divy = 1
x1=1.18117e-07
x2=2.27926e-07 divx=10
node="v(lda[3])"
color=12 unitx=n subdivy=2}
B 2 1860 -1490 3010 -1280 {flags=1
B 2 1860 -1180 3010 -970 {flags=1
y1 = 0
y2 = 2
divy = 4
x1=1.18117e-07
x2=2.27926e-07 divx=10
x1=1.25369e-07
x2=2.02265e-07 divx=10
node="v(ldcp) v(ldyms[4]) v(ldyms[5]) v(ldyms[6]) v(ldyms[7])"
color=6\\ 12\\ 13\\ 14\\ 15 unitx=n}
B 2 1860 -910 3010 -830 {flags=1
y1 = 0
y2 = 1.5
subdivy=2
divy = 1
x1=1.18117e-07
x2=2.27926e-07 divx=10
node="v(ldl1x[0])"
color=4 unitx=n}
B 2 1860 -730 3010 -650 {flags=1
B 2 1860 -490 3010 -410 {flags=1
y1 = 0
y2 = 1.6
divy = 1
x1=1.18117e-07
x2=2.27926e-07 divx=10
x1=1.25369e-07
x2=2.02265e-07 divx=10
node="v(ldprech)"
color=4 unitx=n subdivy=2}
B 2 1860 -640 3010 -560 {flags=1
B 2 1860 -410 3010 -330 {flags=1
y1 = 0
y2 = 1.5
divy = 1
x1=1.18117e-07
x2=2.27926e-07 divx=10
x1=1.25369e-07
x2=2.02265e-07 divx=10
node="v(lden) v(ldcp)"
color=12\\ 18 unitx=n subdivy=2}
B 2 1860 -550 3010 -470 {flags=1
B 2 1860 -730 3010 -570 {flags=1
y1 = 0
y2 = 1.6
divy = 1
x1=1.18117e-07
x2=2.27926e-07 divx=10
y2 = 1.5
divy = 3
subdivy=1
subdivx = 1
x1=1.25369e-07
x2=2.02265e-07 divx=10
node="
v(ldcp)
v(ldwl[0]) v(ldwl[1]) v(ldwl[2]) v(ldwl[3])
v(ldwl[4]) v(ldwl[5]) v(ldwl[6]) v(ldwl[8])
v(ldwl[7])"
color=12\\ 15\\ 16\\ 17\\ 18\\ 19\\ 11\\ 7\\ 4 unitx=n subdivy=2}
B 2 1860 -460 3010 -380 {flags=1
color="12 15 16 17 18 19 11 7 4 8"
unitx=n
}
B 2 1860 -330 3010 -250 {flags=1
y1 = 0
y2 = 1
divy = 1
x1=1.18117e-07
x2=2.27926e-07 divx=10
x1=1.25369e-07
x2=2.02265e-07 divx=10
node="v(ldymsref)"
color=3 unitx=n subdivy=4}
B 2 1860 -370 3010 -290 {flags=1
B 2 1860 -250 3010 -170 {flags=1
y1 = 0
y2 = 1.5
divy = 1
x1=1.18117e-07
x2=2.27926e-07 divx=10
node="v(ldoe)"
color=4 unitx=n subdivy=2}
B 2 1860 -280 3010 -200 {flags=1
y1 = 0
y2 = 1.5
divy = 1
x1=1.18117e-07
x2=2.27926e-07 divx=10
x1=1.25369e-07
x2=2.02265e-07 divx=10
node="v(lden)"
color=4 unitx=n subdivy=2}
B 2 1860 -190 3010 -110 {flags=1
B 2 1860 -170 3010 -90 {flags=1
y1 = 0
y2 = 1.5
divy = 1
x1=1.18117e-07
x2=2.27926e-07 divx=10
x1=1.25369e-07
x2=2.02265e-07 divx=10
node="v(lden) v(ldprech)"
color=12\\ 16 unitx=n subdivy=2}
B 2 1860 -100 3010 -20 {flags=1
B 2 1860 -90 3010 -10 {flags=1
y1 = 0
y2 = 1.5
divy = 1
x1=1.18117e-07
x2=2.27926e-07 divx=10
x1=1.25369e-07
x2=2.02265e-07 divx=10
node="v(lden) v(ldcp)"
color=12\\ 5 unitx=n subdivy=2}
B 2 1860 -820 3010 -740 {flags=1
B 2 1860 -570 3010 -490 {flags=1
y1 = 0
y2 = 1.6
divy = 1
subdivy=2
x1=1.18117e-07
x2=2.27926e-07 divx=10
x1=1.25369e-07
x2=2.02265e-07 divx=10
node="v(ldl1x[1])"
color=4 unitx=n}
B 2 1860 -1270 3010 -1190 {flags=1
B 2 1860 -970 3010 -890 {flags=1
y1 = 0
y2 = 1.5
divy = 1
x1=1.18117e-07
x2=2.27926e-07 divx=10
x1=1.25369e-07
x2=2.02265e-07 divx=10
node="v(lden) v(ldprech)"
color=4\\ 6 unitx=n}
B 7 950 -250 980 -80 {}