diff --git a/src/actions.c b/src/actions.c index f8cbaf52..56fd84fb 100644 --- a/src/actions.c +++ b/src/actions.c @@ -461,10 +461,14 @@ void ask_new_file(void) if(check_loaded(f, win_path)) { char msg[PATH_MAX + 100]; - my_snprintf(msg, S(msg), "alert_ {xschem load: %s already open: %s}", f, win_path); - if(has_x) tcleval(msg); + my_snprintf(msg, S(msg), + "tk_messageBox -type okcancel -icon warning -parent [xschem get topwindow] " + "-message {Warning: %s already open.}", f); + if(has_x) { + tcleval(msg); + if(strcmp(tclresult(), "ok")) skip = 1; + } else dbg(0, "ask_new_file: %s already open: %s\n", f, win_path); - skip = 1; } if(!skip) { dbg(1, "ask_new_file(): load file: %s\n", f); diff --git a/src/callback.c b/src/callback.c index 04789de4..41969cb2 100644 --- a/src/callback.c +++ b/src/callback.c @@ -1719,22 +1719,30 @@ int callback(const char *winpath, int event, int mx, int my, KeySym key, char *tool_name = NULL; char str[200]; + + if(xctx->semaphore >= 2) break; + + tcleval("winfo exists .graphdialog"); + if(tclresult()[0] == '1') tool = XSCHEM_GRAPH; + tcleval("info exists sim"); if(tclresult()[0] == '1') exists = 1; xctx->enable_drill = 0; if(exists) { - tool = atol(tclgetvar("sim(spicewave,default)")); - my_snprintf(str, S(str), "sim(spicewave,%d,name)", tool); - my_strdup(1271, &tool_name, tclgetvar(str)); - dbg(1,"callback(): tool_name=%s\n", tool_name); - if(strstr(tool_name, "Gaw")) tool=GAW; - else if(strstr(tool_name, "Bespice")) tool=BESPICE; - if(tool) { - hilight_net(tool); - redraw_hilights(0); + if(!tool) { + tool = atol(tclgetvar("sim(spicewave,default)")); + my_snprintf(str, S(str), "sim(spicewave,%d,name)", tool); + my_strdup(1271, &tool_name, tclgetvar(str)); + dbg(1,"callback(): tool_name=%s\n", tool_name); + if(strstr(tool_name, "Gaw")) tool=GAW; + else if(strstr(tool_name, "Bespice")) tool=BESPICE; + my_free(1272, &tool_name); } - my_free(1272, &tool_name); + } + if(tool) { + hilight_net(tool); + redraw_hilights(0); } Tcl_ResetResult(interp); break; @@ -2156,6 +2164,16 @@ int callback(const char *winpath, int event, int mx, int my, KeySym key, xctx->my_double_save=xctx->mousey_snap; break; } + + /* + * if(button == Button3 && tclgetvar("graph_selected")[0] && xctx->semaphore >=2 ) + * { + * sel = select_object(xctx->mousex, xctx->mousey, SELECTED, 0); + * if(sel) send_net_to_graph(1); + * + * } + * else + */ if(button == Button3 && state == ControlMask && xctx->semaphore <2) { sel = select_object(xctx->mousex, xctx->mousey, SELECTED, 0); diff --git a/src/draw.c b/src/draw.c index 20d75910..83e19720 100644 --- a/src/draw.c +++ b/src/draw.c @@ -1940,9 +1940,7 @@ void setup_graph_data(int i, const int flags, int skip, Graph_ctx *gr) /* plot single dataset */ val = get_tok_value(r->prop_ptr,"dataset",0); if(val[0]) gr->dataset = atoi(val); - gr->gh = gr->gy2 - gr->gy1; - /* set margins */ tmp = gr->rw * 0.14; gr->marginx = tmp < 30 ? 30 : tmp; @@ -1964,9 +1962,9 @@ void setup_graph_data(int i, const int flags, int skip, Graph_ctx *gr) tmp = gr->w * 0.00044; if(tmp < gr->txtsizelab) gr->txtsizelab = tmp; if(flags & 2) - gr->digtxtsizelab = 0.300 * fabs( gr->gh / gr->posh); + gr->digtxtsizelab = 0.001300 * fabs( gr->h / gr->posh ); else - gr->digtxtsizelab = 0.400 * fabs( gr->gh / gr->posh); + gr->digtxtsizelab = 0.001600 * fabs( gr->h / gr->posh ); /* x axis, y axis text sizes */ gr->txtsizey = gr->h / gr->divy * 0.009; @@ -2090,28 +2088,36 @@ static void draw_graph_variables(int wcnt, int wave_color, int n_nodes, int swee yt = s1 * (double)(n_nodes - wcnt) * gr->gh - (gr->gy1 - gr->gh * 0.1) * s2; if(yt <= gr->ypos2 && yt >= gr->ypos1) { + #if HAS_CAIRO == 1 if(gr->hilight_wave[0] == gr->i && gr->hilight_wave[1] == wcnt) { cairo_select_font_face(xctx->cairo_ctx, "Sans-Serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_select_font_face(xctx->cairo_save_ctx, "Sans-Serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); } + #endif draw_string(wave_color, NOW, tmpstr, 2, 0, 0, 0, xt, DW_Y(yt), gr->digtxtsizelab, gr->digtxtsizelab); + #if HAS_CAIRO == 1 if(gr->hilight_wave[0] == gr->i && gr->hilight_wave[1] == wcnt) { 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 } } else { + #if HAS_CAIRO == 1 if(gr->hilight_wave[0] == gr->i && gr->hilight_wave[1] == wcnt) { cairo_select_font_face(xctx->cairo_ctx, "Sans-Serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_select_font_face(xctx->cairo_save_ctx, "Sans-Serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); } + #endif draw_string(wave_color, NOW, tmpstr, 0, 0, 0, 0, gr->rx1 + 2 + gr->rw / n_nodes * wcnt, gr->ry1, gr->txtsizelab, gr->txtsizelab); + #if HAS_CAIRO == 1 if(gr->hilight_wave[0] == gr->i && gr->hilight_wave[1] == wcnt) { 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 } bbox(END, 0.0, 0.0, 0.0, 0.0); } diff --git a/src/hilight.c b/src/hilight.c index 720e19f1..01b5f39e 100644 --- a/src/hilight.c +++ b/src/hilight.c @@ -902,6 +902,35 @@ static void send_net_to_bespice(int simtype, const char *node) } } +static void send_net_to_graph(char **s, int simtype, const char *node) +{ + int c, k, tok_mult; + Node_hashentry *node_entry; + const char *expanded_tok; + const char *tok; + char ss[1024]; + if(!node || !node[0]) return; + tok = node; + node_entry = bus_node_hash_lookup(tok, "", XLOOKUP, 0, "", "", "", ""); + if(tok[0] == '#') tok++; + if(node_entry && (node_entry->d.port == 0 || !strcmp(xctx->sch_path[xctx->currsch], ".") )) { + char *t=NULL, *p=NULL; + c = get_color(xctx->hilight_color); + expanded_tok = expandlabel(tok, &tok_mult); + for(k=1; k<=tok_mult; k++) { + my_strdup(1498, &t, find_nth(expanded_tok, ',', k)); + my_strdup2(1499, &p, xctx->sch_path[xctx->currsch]+1); + if(simtype == 0 ) { /* spice */ + dbg(1, "%s%s color=%d\n", strtolower(p), strtolower(t), c); + my_snprintf(ss, S(ss), "%s%s %d ", strtolower(p), strtolower(t), c); + my_strcat(1502, s, ss); + } + } + my_free(1500, &p); + my_free(1501, &t); + } +} + static void send_net_to_gaw(int simtype, const char *node) { int c, k, tok_mult; @@ -1546,7 +1575,7 @@ void hilight_net(int viewer) char *type; int sim_is_xyce; int incr_hi; - + char *s = NULL; incr_hi = tclgetboolvar("incr_hilight"); prepare_netlist_structs(0); dbg(1, "hilight_net(): entering\n"); @@ -1559,8 +1588,10 @@ void hilight_net(int viewer) case WIRE: /* sets xctx->hilight_nets=1 */ if(!bus_hilight_hash_lookup(xctx->wire[n].node, xctx->hilight_color, XINSERT_NOREPLACE)) { - if(viewer == GAW) send_net_to_gaw(sim_is_xyce, xctx->wire[n].node); - if(viewer == BESPICE) send_net_to_bespice(sim_is_xyce, xctx->wire[n].node); + if(viewer == XSCHEM_GRAPH) { + send_net_to_graph(&s, sim_is_xyce, xctx->wire[n].node); + } else if(viewer == GAW) send_net_to_gaw(sim_is_xyce, xctx->wire[n].node); + else if(viewer == BESPICE) send_net_to_bespice(sim_is_xyce, xctx->wire[n].node); if(incr_hi) incr_hilight_color(); } break; @@ -1569,8 +1600,11 @@ void hilight_net(int viewer) if( type && xctx->inst[n].node && IS_LABEL_SH_OR_PIN(type) ) { /* instance must have a pin! */ /* sets xctx->hilight_nets=1 */ if(!bus_hilight_hash_lookup(xctx->inst[n].node[0], xctx->hilight_color, XINSERT_NOREPLACE)) { - if(viewer == GAW) send_net_to_gaw(sim_is_xyce, xctx->inst[n].node[0]); - if(viewer == BESPICE) send_net_to_bespice(sim_is_xyce, xctx->inst[n].node[0]); + if(viewer == XSCHEM_GRAPH) { + send_net_to_graph(&s, sim_is_xyce, xctx->inst[n].node[0]); + } + else if(viewer == GAW) send_net_to_gaw(sim_is_xyce, xctx->inst[n].node[0]); + else if(viewer == BESPICE) send_net_to_bespice(sim_is_xyce, xctx->inst[n].node[0]); if(incr_hi) incr_hilight_color(); } } else { @@ -1578,8 +1612,9 @@ void hilight_net(int viewer) xctx->hilight_nets=1; xctx->inst[n].color = xctx->hilight_color; if(type && (!strcmp(type, "current_probe") || !strcmp(type, "vsource")) ) { - if(viewer == GAW) send_current_to_gaw(sim_is_xyce, xctx->inst[n].instname); - if(viewer == BESPICE) send_current_to_bespice(sim_is_xyce, xctx->inst[n].instname); + if(viewer == XSCHEM_GRAPH) ; /* <<<<, */ + else if(viewer == GAW) send_current_to_gaw(sim_is_xyce, xctx->inst[n].instname); + else if(viewer == BESPICE) send_current_to_bespice(sim_is_xyce, xctx->inst[n].instname); } if(incr_hi) incr_hilight_color(); } @@ -1588,6 +1623,10 @@ void hilight_net(int viewer) break; } } + if( viewer == XSCHEM_GRAPH && s) { + tclvareval("graph_add_nodes_from_list {", s, "}", NULL); + my_free(1504, &s); + } if(!incr_hi) incr_hilight_color(); if(xctx->hilight_nets) propagate_hilights(1, 0, XINSERT_NOREPLACE); tcleval("if { [info exists gaw_fd] } {close $gaw_fd; unset gaw_fd}\n"); diff --git a/src/scheduler.c b/src/scheduler.c index 0e136fa6..f6cdf34f 100644 --- a/src/scheduler.c +++ b/src/scheduler.c @@ -306,17 +306,18 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg xRECT, GRIDLAYER, SELECTED, "flags=graph\n" "y1=0\n" - "y2=5\n" + "y2=2\n" "ypos1=0\n" - "ypos2=5\n" - "divy=4\n" + "ypos2=2\n" + "divy=5\n" "subdivy=1\n" + "unity=1\n" "x1=0\n" "x2=10e-6\n" - "divx=8\n" + "divx=5\n" "subdivx=1\n" - "node=\"v(a) v(b) v(c)\"\n" - "color=\"7 8 10 11 12 13 14 15 16 17\"\n" + "node=\"\"\n" + "color=\"\"\n" "dataset=0\n" "unitx=u\n" ); @@ -1621,10 +1622,14 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg my_strncpy(f, abs_sym_path(argv[2], ""), S(f)); if(f[0] && check_loaded(f, win_path)) { char msg[PATH_MAX + 100]; - my_snprintf(msg, S(msg), "alert_ {xschem load: %s already open: %s}", f, win_path); - if(has_x) tcleval(msg); + my_snprintf(msg, S(msg), + "tk_messageBox -type okcancel -icon warning -parent [xschem get topwindow] " + "-message {Warning: %s already open.}", f); + if(has_x) { + tcleval(msg); + if(strcmp(tclresult(), "ok")) skip = 1; + } else dbg(0, "xschem load: %s already open: %s\n", f, win_path); - skip = 1; } if(!skip) { clear_all_hilights(); @@ -2590,11 +2595,11 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg { /* 0 1 2 3 4 5 6 * xschem setprop instance R4 value [30k] [fast] */ - int inst, fast=0; cmd_found = 1; if(argc > 2 && !strcmp(argv[2], "instance")) { + int inst, fast=0; if(argc >= 7) { if(!strcmp(argv[6], "fast")) { fast = 1; @@ -2657,6 +2662,8 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg } else if(argc > 5 && !strcmp(argv[2], "rect")) { /* 0 1 2 3 4 5 6 7 * xschem setprop rect c n token value [fast] */ + int change_done = 0; + int fast = 0; xRect *r; int c = atoi(argv[3]); int n = atoi(argv[4]); @@ -2671,22 +2678,40 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg fast = 1; argc = 7; } + if(!strcmp(argv[7], "fastundo")) { + fast = 3; + argc = 7; + } } else if(argc >= 7) { if(!strcmp(argv[6], "fast")) { fast = 1; argc = 6; } + if(!strcmp(argv[6], "fastundo")) { + fast = 3; + argc = 6; + } } if(!fast) { bbox(START,0.0,0.0,0.0,0.0); - xctx->push_undo(); } - set_modify(1); - if(argc > 6) - my_strdup(1486, &r->prop_ptr, subst_token(r->prop_ptr, argv[5], argv[6])); - else - my_strdup(1478, &r->prop_ptr, subst_token(r->prop_ptr, argv[5], NULL)); /* delete attr */ + if(argc > 6) { + /* verify if there is some difference */ + if(strcmp(argv[6], get_tok_value(r->prop_ptr, argv[5], 0))) { + change_done = 1; + if(fast == 3 || fast == 0) xctx->push_undo(); + my_strdup2(1486, &r->prop_ptr, subst_token(r->prop_ptr, argv[5], argv[6])); + } + } else { + get_tok_value(r->prop_ptr, argv[5], 0); + if(xctx->get_tok_size) { + change_done = 1; + if(fast == 3 || fast == 0) xctx->push_undo(); + my_strdup2(1478, &r->prop_ptr, subst_token(r->prop_ptr, argv[5], NULL)); /* delete attr */ + } + } + if(change_done) set_modify(1); set_rect_flags(r); /* set cached .flags bitmask from on attributes */ if(!fast) { bbox(ADD, r->x1, r->y1, r->x2, r->y2); diff --git a/src/xinit.c b/src/xinit.c index e1968a71..f20d25c3 100644 --- a/src/xinit.c +++ b/src/xinit.c @@ -960,9 +960,11 @@ int check_loaded(const char *f, char *win_path) int found = 0; for(i = 0; i < MAX_NEW_WINDOWS; i++) { ctx = save_xctx[i]; + dbg(1, "window_count=%d i=%d\n", window_count, i); /* if only one schematic it is not yet saved in save_xctx */ if(window_count == 0 && i == 0) ctx = xctx; if(ctx) { + dbg(1, "%s <--> %s\n", ctx->sch[ctx->currsch], f); if(!strcmp(ctx->sch[ctx->currsch], f)) { dbg(1, "check_loaded(): f=%s, sch=%s\n", f, ctx->sch[ctx->currsch]); found = 1; @@ -971,6 +973,7 @@ int check_loaded(const char *f, char *win_path) } } } + dbg(1, "check_loaded: return %d\n", found); return found; } @@ -1048,15 +1051,21 @@ static void create_new_window(int *window_count, const char *fname) char toppath[WINDOW_PATH_SIZE]; int i, n; - dbg(1, "new_schematic() create\n"); - if(*window_count && fname && fname[0] && check_loaded(fname, toppath)) { + dbg(1, "new_schematic() create: fname=%s *window_count = %d\n", fname, *window_count); + + if(/* *window_count && */ fname && fname[0] && check_loaded(fname, toppath)) { char msg[PATH_MAX+100]; - my_snprintf(msg, S(msg), "alert_ {create_new_window: %s already open: %s}", fname, toppath); - if(has_x) + my_snprintf(msg, S(msg), + "tk_messageBox -type okcancel -icon warning -parent [xschem get topwindow] " + "-message {Warning: %s already open.}", fname); + if(has_x) { tcleval(msg); - else + if(strcmp(tclresult(), "ok")) return; + } + else { dbg(0, "create_new_window: %s already open: %s\n", fname, toppath); - return; + return; + } } if(*window_count == 0) { for(i = 0; i < MAX_NEW_WINDOWS; i++) { @@ -1124,15 +1133,23 @@ static void create_new_tab(int *window_count, const char *fname) char win_path[WINDOW_PATH_SIZE]; dbg(1, "new_schematic() new_tab, creating...\n"); - if(*window_count && fname && fname[0] && check_loaded(fname, open_path)) { + if(/* *window_count && */ fname && fname[0] && check_loaded(fname, open_path)) { char msg[PATH_MAX+100]; - my_snprintf(msg, S(msg), "alert_ {create_new_tab: %s already open: %s}", fname, open_path); - if(has_x) + my_snprintf(msg, S(msg), + "tk_messageBox -type okcancel -icon warning -parent [xschem get topwindow] " + "-message {Warning: %s already open.}", fname); + if(has_x) { tcleval(msg); - else + if(strcmp(tclresult(), "ok")) { + switch_tab(window_count, open_path); + return; + } + } + else { dbg(0, "create_new_tab: %s already open: %s\n", fname, open_path); - switch_tab(window_count, open_path); - return; + switch_tab(window_count, open_path); + return; + } } if(*window_count == 0) { for(i = 0; i < MAX_NEW_WINDOWS; i++) { diff --git a/src/xschem.h b/src/xschem.h index 6e1c08fe..bd84000c 100644 --- a/src/xschem.h +++ b/src/xschem.h @@ -219,6 +219,7 @@ extern char win_temp_dir[PATH_MAX]; #define NGSPICE 1 #define GAW 2 #define BESPICE 3 +#define XSCHEM_GRAPH 4 /* some useful primes */ /* 109, 163, 251, 367, 557, 823, 1237, 1861, 2777, 4177, 6247, 9371, 14057 */ diff --git a/src/xschem.tcl b/src/xschem.tcl index 339adfb5..542c9885 100644 --- a/src/xschem.tcl +++ b/src/xschem.tcl @@ -1285,9 +1285,13 @@ proc waves {} { # ============================================================ + + # allow change color (via graph_change_wave_color) of double clicked wave proc graph_edit_wave {n n_wave} { global graph_sel_color graph_selected colors graph_sel_wave + global graph_schname + set graph_schname [xschem get schname] set_ne graph_sel_color 4 set graph_selected $n set graph_sel_wave $n_wave @@ -1302,48 +1306,115 @@ proc graph_edit_wave {n n_wave} { } set col [lrange $col 0 [expr {$i - 1}]] set graph_sel_color [lindex $col $graph_sel_wave] - xschem setprop rect 2 $graph_selected color $col fast + xschem setprop rect 2 $graph_selected color $col fastundo xschem draw_graph $graph_selected # puts "graph: $graph_selected , wave: $n_wave, n_nodes: $n_nodes" # puts " node: $node, col: $col" # puts "------" - toplevel .dialog - frame .dialog.f - button .dialog.ok -text OK -command {destroy .dialog} - button .dialog.cancel -text Cancel -command {destroy .dialog} + toplevel .graphdialog + frame .graphdialog.f + button .graphdialog.ok -text OK -command {destroy .graphdialog} + button .graphdialog.cancel -text Cancel -command {destroy .graphdialog} for {set i 4} {$i < 22} {incr i} { - radiobutton .dialog.f.r$i -value $i -bg [lindex $colors $i] \ + radiobutton .graphdialog.f.r$i -value $i -bg [lindex $colors $i] \ -variable graph_sel_color -command {graph_change_wave_color $graph_sel_wave } - pack .dialog.f.r$i -side left -fill both -expand yes + pack .graphdialog.f.r$i -side left -fill both -expand yes } - grid .dialog.f - -sticky nsew - grid .dialog.ok .dialog.cancel -sticky ew - grid rowconfig .dialog 0 -weight 1 - grid column .dialog 0 -weight 1 - grid column .dialog 1 -weight 1 - tkwait window .dialog + grid .graphdialog.f - -sticky nsew + grid .graphdialog.ok .graphdialog.cancel -sticky ew + grid rowconfig .graphdialog 0 -weight 1 + grid column .graphdialog 0 -weight 1 + grid column .graphdialog 1 -weight 1 + tkwait window .graphdialog + set graph_schname {} } -# add nodes from left listbox -proc graph_add_nodes {} { - global graph_bus - set sel_idx [.dialog.center.left.list1 curselection] + +# get selected text from a text widget: +# +# .graphdialog.center.right.text1 get \ +# [.graphdialog.center.right.text1 index sel.first] \ +# [.graphdialog.center.right.text1 index sel.last] +# +# +# + + +# add nodes from provided list of {node color} .... +proc graph_add_nodes_from_list {nodelist} { + global graph_bus graph_selected graph_schname set sel {} if {$graph_bus} { set sep , } else { set sep \n } - foreach i $sel_idx { - if {$sel ne {}} {append sel $sep} - append sel [.dialog.center.left.list1 get $i] + set current_node_list [.graphdialog.center.right.text1 get 1.0 {end - 1 chars}] + set col [xschem getprop rect 2 $graph_selected color] + if {[string length $current_node_list] > 0 && ![regexp "\n$" $current_node_list]} { + .graphdialog.center.right.text1 insert end \n } + set change_done 0 + set first 0 + foreach {i c} $nodelist { + if {$sel ne {}} {append sel $sep} + if {!$first || !$graph_bus } { + regsub {\[.*} $i {} busname + lappend col $c + } + append sel $i + set change_done 1 + set first 1 + } + if {$change_done && $graph_bus} { + set sel "[string toupper $busname],${sel}\n" + } else { + set sel "${sel}\n" + } + if {$change_done} { + .graphdialog.center.right.text1 insert end $sel + if { [xschem get schname] eq $graph_schname } { + set node [string trim [.graphdialog.center.right.text1 get 1.0 {end - 1 chars}] " \n"] + xschem setprop rect 2 $graph_selected color $col fastundo + graph_update_nodelist + xschem setprop rect 2 $graph_selected node $node fast + xschem draw_graph $graph_selected + } + } +} + +# add nodes from left listbox +proc graph_add_nodes {} { + global graph_bus + set sel_idx [.graphdialog.center.left.list1 curselection] + set sel {} if {$graph_bus} { + set sep , + } else { + set sep \n + } + set current_node_list [.graphdialog.center.right.text1 get 1.0 {end - 1 chars}] + if {[string length $current_node_list] > 0 && ![regexp "\n$" $current_node_list]} { + .graphdialog.center.right.text1 insert end \n + } + set change_done 0 + foreach i $sel_idx { + set c [.graphdialog.center.left.list1 get $i] + set c [regsub -all {([][])} $c {\\\1}] + if { ![regexp "(^|\[ \t\n\])${c}($|\[ \t\n\])" $current_node_list]} { + if {$sel ne {}} {append sel $sep} + append sel [.graphdialog.center.left.list1 get $i] + set change_done 1 + } + } + if {$change_done && $graph_bus} { set sel "BUS_NAME,${sel}\n" } else { set sel "${sel}\n" } - .dialog.center.right.text1 insert {insert lineend + 1 char} $sel + if {$change_done} { + .graphdialog.center.right.text1 insert {insert lineend + 1 char} $sel + } } proc graph_get_signal_list {siglist pattern } { @@ -1367,70 +1438,87 @@ proc graph_get_signal_list {siglist pattern } { # OR # change color attribute of wave given as parameter, redraw graph proc graph_change_wave_color {{wave {}}} { - global graph_sel_color graph_selected + global graph_sel_color graph_selected graph_schname + + if { [xschem get schname] ne $graph_schname } return # get tag the cursor is on: if { $wave eq {}} { - set tag [.dialog.center.right.text1 tag names insert] + set tag [.graphdialog.center.right.text1 tag names insert] if { [regexp {^t} $tag]} { set index [string range $tag 1 end] set col [xschem getprop rect 2 $graph_selected color] set col [lreplace $col $index $index $graph_sel_color] - xschem setprop rect 2 $graph_selected color $col fast + xschem setprop rect 2 $graph_selected color $col fastundo graph_update_nodelist + xschem draw_graph $graph_selected } # wave to change provided as parameter } else { set col [xschem getprop rect 2 $graph_selected color] set col [lreplace $col $wave $wave $graph_sel_color] - xschem setprop rect 2 $graph_selected color $col fast + xschem setprop rect 2 $graph_selected color $col fastundo xschem draw_graph $graph_selected } } # tag nodes in text widget with assigned colors -# redraw graph -proc graph_update_nodelist {{nosave {}}} { - global graph_selected colors graph_sel_color - set nodelist [.dialog.center.right.text1 get 1.0 end] +proc graph_update_nodelist {} { + global graph_selected colors graph_sel_color graph_schname + if { [xschem get schname] ne $graph_schname } return # delete old tags - eval .dialog.center.right.text1 tag delete [ .dialog.center.right.text1 tag names] + eval .graphdialog.center.right.text1 tag delete [ .graphdialog.center.right.text1 tag names] # tagging nodes in text widget: set col [xschem getprop rect 2 $graph_selected color] set col [string trim $col " \n"] - set tt [.dialog.center.right.text1 search -all -nolinestop -regexp -count cc {[^ \n]+} 1.0] + set tt [.graphdialog.center.right.text1 search -all -nolinestop -regexp -count cc {[^ \n]+} 1.0] set n 0 if { [info exists cc] && ($tt ne {}) } { foreach t $tt c $cc { set col_idx [lindex $col $n] + # add missing colors if {$col_idx eq {}} { set col_idx $graph_sel_color lappend col $graph_sel_color } set b [lindex $colors $col_idx] - .dialog.center.right.text1 tag add t$n $t "$t + $c chars" - .dialog.center.right.text1 tag configure t$n -background $b - if { $col_idx == 8 || $col_idx == 9 || $col_idx == 16 || $col_idx == 19} { - .dialog.center.right.text1 tag configure t$n -foreground black} + .graphdialog.center.right.text1 tag add t$n $t "$t + $c chars" + .graphdialog.center.right.text1 tag configure t$n -background $b incr n } + # remove excess colors set col [lrange $col 0 [expr {$n - 1}]] - if {$nosave ne {nosave}} {xschem setprop rect 2 $graph_selected color $col fast} + if { [llength $col] != [llength [.graphdialog.center.right.text1 get 1.0 {end - 1 chars}]] } { + puts "PROBLEMS: colors and nodes of different length" + } + } else { + set col {} } - xschem draw_graph $graph_selected + xschem setprop rect 2 $graph_selected color $col fastundo } proc fill_graph_listbox {} { - set retval [.dialog.top.search get] + set retval [.graphdialog.top.search get] set retval [graph_get_signal_list [xschem raw_query list] $retval] - .dialog.center.left.list1 delete 0 end - eval .dialog.center.left.list1 insert 0 $retval + .graphdialog.center.left.list1 delete 0 end + eval .graphdialog.center.left.list1 insert 0 $retval } proc graph_edit_properties {n} { global graph_bus graph_sort graph_digital graph_selected colors graph_sel_color - global graph_unlocked + global graph_unlocked graph_schname graph_unitx graph_unity + global graph_divx graph_divy graph_subdivx graph_subdivy + + set geom {} + if { [winfo exists .graphdialog]} { + set geom [winfo geometry .graphdialog] + } + catch {destroy .graphdialog} + toplevel .graphdialog -width 1 -height 1 + update idletasks + if {$geom ne {}} { wm geometry .graphdialog $geom} set graph_selected $n + set graph_schname [xschem get schname] set_ne graph_sel_color 4 set_ne graph_bus 0 set_ne graph_sort 0 @@ -1442,157 +1530,259 @@ proc graph_edit_properties {n} { set graph_unlocked 0 } - toplevel .dialog - frame .dialog.top - panedwindow .dialog.center -orient horiz - frame .dialog.bottom - frame .dialog.center.left - frame .dialog.center.right - .dialog.center add .dialog.center.left .dialog.center.right - pack .dialog.top -side top -fill x - pack .dialog.center -side top -fill both -expand yes - pack .dialog.bottom -side top -fill x + frame .graphdialog.top + # another row of buttons + frame .graphdialog.top2 + panedwindow .graphdialog.center -orient horiz + frame .graphdialog.bottom + frame .graphdialog.center.left + frame .graphdialog.center.right + .graphdialog.center add .graphdialog.center.left .graphdialog.center.right + pack .graphdialog.top -side top -fill x + pack .graphdialog.top2 -side top -fill x + pack .graphdialog.center -side top -fill both -expand yes + pack .graphdialog.bottom -side top -fill x # center-left frame - label .dialog.center.left.lab1 -text {Signal list} - button .dialog.center.left.add -text Add -command { + label .graphdialog.center.left.lab1 -text {Signal list} + button .graphdialog.center.left.add -text Add -command { graph_add_nodes; graph_update_nodelist } - listbox .dialog.center.left.list1 -width 20 -height 10 -selectmode extended \ - -yscrollcommand {.dialog.center.left.yscroll set} \ - -xscrollcommand {.dialog.center.left.xscroll set} - scrollbar .dialog.center.left.yscroll -command {.dialog.center.left.list1 yview} - scrollbar .dialog.center.left.xscroll -orient horiz -command {.dialog.center.left.list1 xview} - grid .dialog.center.left.lab1 .dialog.center.left.add - grid .dialog.center.left.list1 - .dialog.center.left.yscroll -sticky nsew - grid .dialog.center.left.xscroll - -sticky nsew - grid rowconfig .dialog.center.left 0 -weight 0 - grid rowconfig .dialog.center.left 1 -weight 1 -minsize 100 - grid columnconfig .dialog.center.left 0 -weight 1 - grid columnconfig .dialog.center.left 1 -weight 1 + listbox .graphdialog.center.left.list1 -width 20 -height 10 -selectmode extended \ + -yscrollcommand {.graphdialog.center.left.yscroll set} \ + -xscrollcommand {.graphdialog.center.left.xscroll set} + scrollbar .graphdialog.center.left.yscroll -command {.graphdialog.center.left.list1 yview} + scrollbar .graphdialog.center.left.xscroll -orient horiz -command {.graphdialog.center.left.list1 xview} + grid .graphdialog.center.left.lab1 .graphdialog.center.left.add + grid .graphdialog.center.left.list1 - .graphdialog.center.left.yscroll -sticky nsew + grid .graphdialog.center.left.xscroll - -sticky nsew + grid rowconfig .graphdialog.center.left 0 -weight 0 + grid rowconfig .graphdialog.center.left 1 -weight 1 -minsize 100 + grid columnconfig .graphdialog.center.left 0 -weight 1 + grid columnconfig .graphdialog.center.left 1 -weight 1 # center right frame - label .dialog.center.right.lab1 -text {Signals in graph} - checkbutton .dialog.center.right.unlocked -text {Unlocked X axis} -variable graph_unlocked - text .dialog.center.right.text1 -wrap none -width 50 -height 10 -bg grey50 -fg white -insertbackground grey40 \ - -yscrollcommand {.dialog.center.right.yscroll set} \ - -xscrollcommand {.dialog.center.right.xscroll set} - scrollbar .dialog.center.right.yscroll -command {.dialog.center.right.text1 yview} - scrollbar .dialog.center.right.xscroll -orient horiz -command {.dialog.center.right.text1 xview} + label .graphdialog.center.right.lab1 -text {Signals in graph} + checkbutton .graphdialog.center.right.unlocked -text {Unlocked X axis} -variable graph_unlocked + text .graphdialog.center.right.text1 -wrap none -width 50 -height 10 -bg grey70 -fg black \ + -insertbackground grey40 -exportselection 0 \ + -yscrollcommand {.graphdialog.center.right.yscroll set} \ + -xscrollcommand {.graphdialog.center.right.xscroll set} + scrollbar .graphdialog.center.right.yscroll -command {.graphdialog.center.right.text1 yview} + scrollbar .graphdialog.center.right.xscroll -orient horiz -command {.graphdialog.center.right.text1 xview} - grid .dialog.center.right.lab1 .dialog.center.right.unlocked - grid .dialog.center.right.text1 - .dialog.center.right.yscroll -sticky nsew - grid .dialog.center.right.xscroll - -sticky nsew - grid rowconfig .dialog.center.right 0 -weight 0 - grid rowconfig .dialog.center.right 1 -weight 1 -minsize 100 - grid columnconfig .dialog.center.right 0 -weight 1 - grid columnconfig .dialog.center.right 1 -weight 1 + grid .graphdialog.center.right.lab1 .graphdialog.center.right.unlocked + grid .graphdialog.center.right.text1 - .graphdialog.center.right.yscroll -sticky nsew + grid .graphdialog.center.right.xscroll - -sticky nsew + grid rowconfig .graphdialog.center.right 0 -weight 0 + grid rowconfig .graphdialog.center.right 1 -weight 1 -minsize 100 + grid columnconfig .graphdialog.center.right 0 -weight 1 + grid columnconfig .graphdialog.center.right 1 -weight 1 # bottom frame - button .dialog.bottom.cancel -text Cancel -command { - destroy .dialog + button .graphdialog.bottom.cancel -text Cancel -command { + destroy .graphdialog + set graph_selected {} + set graph_schname {} } - button .dialog.bottom.ok -text OK -command { - graph_update_nodelist - set node [string trim [.dialog.center.right.text1 get 1.0 end] " \n"] - xschem setprop rect 2 $graph_selected y1 [.dialog.top.min get] fast - xschem setprop rect 2 $graph_selected y2 [.dialog.top.max get] fast - xschem setprop rect 2 $graph_selected node $node fast - if {$graph_unlocked} { - xschem setprop rect 2 $graph_selected flags {graph,unlocked} fast + button .graphdialog.bottom.ok -text OK -command { + if { [xschem get schname] eq $graph_schname } { + graph_update_nodelist + set node [string trim [.graphdialog.center.right.text1 get 1.0 {end - 1 chars}] " \n"] + xschem setprop rect 2 $graph_selected y1 [.graphdialog.top.min get] fast + xschem setprop rect 2 $graph_selected y2 [.graphdialog.top.max get] fast + xschem setprop rect 2 $graph_selected node $node fast + if {$graph_unlocked} { + xschem setprop rect 2 $graph_selected flags {graph,unlocked} fastundo + } else { + xschem setprop rect 2 $graph_selected flags {graph} fastundo + } + destroy .graphdialog + xschem draw_graph $graph_selected + set graph_selected {} + set graph_schname {} } else { - xschem setprop rect 2 $graph_selected flags {graph} fast + destroy .graphdialog + set graph_selected {} + set graph_schname {} } - destroy .dialog - xschem draw_graph $graph_selected } - button .dialog.bottom.apply -text Apply -command { - graph_update_nodelist - set node [string trim [.dialog.center.right.text1 get 1.0 end] " \n"] - xschem setprop rect 2 $graph_selected y1 [.dialog.top.min get] fast - xschem setprop rect 2 $graph_selected y2 [.dialog.top.max get] fast - xschem setprop rect 2 $graph_selected node $node fast - if {$graph_unlocked} { - xschem setprop rect 2 $graph_selected flags {graph,unlocked} fast - } else { - xschem setprop rect 2 $graph_selected flags {graph} fast + button .graphdialog.bottom.apply -text Apply -command { + if { [xschem get schname] eq $graph_schname } { + graph_update_nodelist + set node [string trim [.graphdialog.center.right.text1 get 1.0 {end - 1 chars}] " \n"] + xschem setprop rect 2 $graph_selected y1 [.graphdialog.top.min get] fast + xschem setprop rect 2 $graph_selected y2 [.graphdialog.top.max get] fast + xschem setprop rect 2 $graph_selected node $node fast + if {$graph_unlocked} { + xschem setprop rect 2 $graph_selected flags {graph,unlocked} fastundo + } else { + xschem setprop rect 2 $graph_selected flags {graph} fastundo + } + xschem draw_graph $graph_selected } - xschem draw_graph $graph_selected } - pack .dialog.bottom.ok -side left - pack .dialog.bottom.apply -side left - pack .dialog.bottom.cancel -side left + # top packs + pack .graphdialog.bottom.ok -side left + pack .graphdialog.bottom.apply -side left + pack .graphdialog.bottom.cancel -side left for {set i 4} {$i < 22} {incr i} { - radiobutton .dialog.bottom.r$i -value $i -bg [lindex $colors $i] \ + radiobutton .graphdialog.bottom.r$i -value $i -bg [lindex $colors $i] \ -variable graph_sel_color -command graph_change_wave_color - pack .dialog.bottom.r$i -side left + pack .graphdialog.bottom.r$i -side left } - # top frame - label .dialog.top.labsearch -text Search: - entry .dialog.top.search -width 10 - checkbutton .dialog.top.bus -text Bus -padx 2 -variable graph_bus - checkbutton .dialog.top.incr -text {Incr. sort} -variable graph_sort -indicatoron 1 \ - -command fill_graph_listbox - checkbutton .dialog.top.dig -text {Digital} -variable graph_digital -indicatoron 1 \ - -command { - xschem setprop rect 2 $graph_selected digital $graph_digital fast - xschem draw_graph $graph_selected - } - label .dialog.top.labmin -text { Min Value:} - entry .dialog.top.min -width 5 - label .dialog.top.labmax -text { Max Value:} - entry .dialog.top.max -width 5 + # top2 frame + label .graphdialog.top2.labunitx -text {X units} + spinbox .graphdialog.top2.unitx -values {p n u m 1 k M G} -width 2 -textvar graph_unitx \ + -command { + xschem setprop rect 2 $graph_selected unitx $graph_unitx + xschem draw_graph $graph_selected + } - button .dialog.top.clear -text Clear -padx 2 -command { - .dialog.top.search delete 0 end + label .graphdialog.top2.labunity -text { Y units} + spinbox .graphdialog.top2.unity -values {p n u m 1 k M G} -width 2 -textvar graph_unity \ + -command { + xschem setprop rect 2 $graph_selected unity $graph_unity + xschem draw_graph $graph_selected + } + + label .graphdialog.top2.labdivx -text { X div.} + entry .graphdialog.top2.divx -textvariable graph_divx -width 2 + bind .graphdialog.top2.divx { + xschem setprop rect 2 $graph_selected divx $graph_divx + xschem draw_graph $graph_selected + } + + label .graphdialog.top2.labdivy -text { Y div.} + entry .graphdialog.top2.divy -textvariable graph_divy -width 2 + bind .graphdialog.top2.divy { + xschem setprop rect 2 $graph_selected divy $graph_divy + xschem draw_graph $graph_selected + } + + label .graphdialog.top2.labsubdivx -text { X subdiv.} + entry .graphdialog.top2.subdivx -textvariable graph_subdivx -width 2 + bind .graphdialog.top2.subdivx { + xschem setprop rect 2 $graph_selected subdivx $graph_subdivx + xschem draw_graph $graph_selected + } + + label .graphdialog.top2.labsubdivy -text { Y subdiv.} + entry .graphdialog.top2.subdivy -textvariable graph_subdivy -width 2 + bind .graphdialog.top2.subdivy { + xschem setprop rect 2 $graph_selected subdivy $graph_subdivy + xschem draw_graph $graph_selected + } + + set graph_divx [xschem getprop rect 2 $graph_selected divx] + if {$graph_divx eq {}} { set graph_divx 5} + set graph_divy [xschem getprop rect 2 $graph_selected divy] + if {$graph_divy eq {}} { set graph_divy 5} + set graph_subdivx [xschem getprop rect 2 $graph_selected subdivx] + if {$graph_subdivx eq {}} { set graph_subdivx 1} + set graph_subdivy [xschem getprop rect 2 $graph_selected subdivy] + if {$graph_subdivy eq {}} { set graph_subdivy 1} + set graph_unitx [xschem getprop rect 2 $graph_selected unitx] + if {$graph_unitx eq {}} { set graph_unitx 1} + set graph_unity [xschem getprop rect 2 $graph_selected unity] + if {$graph_unity eq {}} { set graph_unity 1} + pack .graphdialog.top2.labunitx .graphdialog.top2.unitx \ + .graphdialog.top2.labunity .graphdialog.top2.unity -side left + + pack .graphdialog.top2.labdivx .graphdialog.top2.divx \ + .graphdialog.top2.labdivy .graphdialog.top2.divy \ + .graphdialog.top2.labsubdivx .graphdialog.top2.subdivx \ + .graphdialog.top2.labsubdivy .graphdialog.top2.subdivy -side left + + + # top frame + label .graphdialog.top.labsearch -text Search: + entry .graphdialog.top.search -width 10 + checkbutton .graphdialog.top.bus -text Bus -padx 2 -variable graph_bus + checkbutton .graphdialog.top.incr -text {Incr. sort} -variable graph_sort -indicatoron 1 \ + -command fill_graph_listbox + checkbutton .graphdialog.top.dig -text {Digital} -variable graph_digital -indicatoron 1 \ + -command { + if { [xschem get schname] eq $graph_schname } { + xschem setprop rect 2 $graph_selected digital $graph_digital fastundo + xschem draw_graph $graph_selected + } + } + + label .graphdialog.top.labmin -text { Min Value:} + entry .graphdialog.top.min -width 5 + bind .graphdialog.top.min { + xschem setprop rect 2 $graph_selected y1 [.graphdialog.top.min get] + xschem draw_graph $graph_selected + } + + label .graphdialog.top.labmax -text { Max Value:} + entry .graphdialog.top.max -width 5 + bind .graphdialog.top.max { + xschem setprop rect 2 $graph_selected y2 [.graphdialog.top.max get] + xschem draw_graph $graph_selected + } + + button .graphdialog.top.clear -text Clear -padx 2 -command { + .graphdialog.top.search delete 0 end fill_graph_listbox } - pack .dialog.top.labsearch .dialog.top.search -side left - pack .dialog.top.clear -side left - pack .dialog.top.incr -side left - pack .dialog.top.bus -side left - pack .dialog.top.dig -side left - pack .dialog.top.labmin .dialog.top.min .dialog.top.labmax .dialog.top.max -side left - .dialog.top.min insert 0 [xschem getprop rect 2 $graph_selected y1] - .dialog.top.max insert 0 [xschem getprop rect 2 $graph_selected y2] + pack .graphdialog.top.labsearch .graphdialog.top.search -side left + pack .graphdialog.top.clear -side left + pack .graphdialog.top.incr -side left + pack .graphdialog.top.bus -side left + pack .graphdialog.top.dig -side left + pack .graphdialog.top.labmin .graphdialog.top.min .graphdialog.top.labmax .graphdialog.top.max -side left + .graphdialog.top.min insert 0 [xschem getprop rect 2 $graph_selected y1] + .graphdialog.top.max insert 0 [xschem getprop rect 2 $graph_selected y2] + # binding - bind .dialog.top.search { + bind .graphdialog.top.search { fill_graph_listbox } - bind .dialog.center.left.list1 { - graph_add_nodes; - set node [string trim [.dialog.center.right.text1 get 1.0 end] " \n"] - xschem setprop rect 2 $graph_selected node $node fast - graph_update_nodelist + bind .graphdialog.center.left.list1 { + graph_add_nodes + if { [xschem get schname] eq $graph_schname } { + set node [string trim [.graphdialog.center.right.text1 get 1.0 {end - 1 chars}] " \n"] + graph_update_nodelist + xschem setprop rect 2 $graph_selected node $node fast + xschem draw_graph $graph_selected + } } - bind .dialog.center.right.text1 { - set node [string trim [.dialog.center.right.text1 get 1.0 end] " \n"] - xschem setprop rect 2 $graph_selected node $node fast - graph_update_nodelist + bind .graphdialog.center.right.text1 { + if { [xschem get schname] eq $graph_schname } { + set node [string trim [.graphdialog.center.right.text1 get 1.0 {end - 1 chars}] " \n"] + graph_update_nodelist + xschem setprop rect 2 $graph_selected node $node fast + xschem draw_graph $graph_selected + } } - bind .dialog { - .dialog.bottom.ok invoke + bind .graphdialog { + .graphdialog.bottom.ok invoke } - bind .dialog { - .dialog.bottom.cancel invoke + bind .graphdialog { + .graphdialog.bottom.cancel invoke + } + wm protocol .graphdialog WM_DELETE_WINDOW { + .graphdialog.bottom.cancel invoke } # fill data in left listbox - eval .dialog.center.left.list1 insert 0 [graph_get_signal_list [xschem raw_query list] {}] + eval .graphdialog.center.left.list1 insert 0 [graph_get_signal_list [xschem raw_query list] {}] # fill data in right textbox set plotted_nodes [xschem getprop rect 2 $n node] - if {[string index $plotted_nodes end] ne "\n"} {append plotted_nodes \n} - .dialog.center.right.text1 insert 1.0 $plotted_nodes - graph_update_nodelist nosave + if {[string length $plotted_nodes] > 0 && [string index $plotted_nodes end] ne "\n"} {append plotted_nodes \n} + .graphdialog.center.right.text1 insert 1.0 $plotted_nodes + graph_update_nodelist # add stuff in textbox at end of line + 1 char (after newline) - # .dialog.center.right.text1 insert {insert lineend + 1 char} foo\n - tkwait window .dialog + # .graphdialog.center.right.text1 insert {insert lineend + 1 char} foo\n + # tkwait window .graphdialog } proc graph_show_measure {{action show}} { @@ -4182,6 +4372,10 @@ proc raise_dialog {parent window_path } { [wm stackorder .dialog isbelow $parent ]} { raise .dialog $window_path } + if {[winfo exists .graphdialog] && [winfo ismapped .graphdialog] && [winfo ismapped $parent] && + [wm stackorder .graphdialog isbelow $parent ]} { + raise .graphdialog $window_path + } } proc set_old_tk_fonts {} { @@ -4246,8 +4440,11 @@ 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 graph_bus graph_digital - graph_sel_color graph_selected graph_sel_wave graph_sort graph_unlocked + flat_netlist fullscreen gaw_fd gaw_tcp_address globfilter + graph_bus graph_digital graph_divx graph_divy + graph_sel_color graph_schname graph_selected graph_sel_wave graph_sort + graph_subdivx graph_subdivy + graph_unitx graph_unity graph_unlocked 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 @@ -5234,6 +5431,15 @@ set_ne to_png {gm convert} ## ps to pdf conversion set_ne to_pdf {ps2pdf} +# selected graph user is editing attributes with graph GUI +set_ne graph_selected {} +set_ne graph_schname {} +set_ne graph_unitx 1 +set_ne graph_unity 1 +set_ne graph_divx 5 +set_ne graph_divy 5 +set_ne graph_subdivx 1 +set_ne graph_subdivy 1 # user clicked this wave set_ne graph_sel_wave {} # flag to force simulation stop (Esc key pressed) diff --git a/xschem_library/examples/poweramp.sch b/xschem_library/examples/poweramp.sch index 081380f0..5ef6904f 100644 --- a/xschem_library/examples/poweramp.sch +++ b/xschem_library/examples/poweramp.sch @@ -18,8 +18,8 @@ B 2 1200 -330 1880 -140 {flags=graph y1 = 0.0391523 y2 = 0.0391626 divy = 5 -x1=0.0145887 -x2=0.0152398 +x1=0.0143753 +x2=0.015137 divx=10 node=i(v.x1.v3) color=11 unitx=m unity=m} @@ -27,8 +27,8 @@ B 2 1200 -530 1880 -340 {flags=graph y1 = 0 y2 = 12 divy = 6 -x1=0.0145887 -x2=0.0152398 +x1=0.0143753 +x2=0.015137 divx=10 node="i(v.x1.vu) i(v.x0.vu) @@ -40,8 +40,8 @@ B 2 1200 -860 1880 -550 {flags=graph y1 = -60 y2 = 60 divy = 12 -x1=0.0145887 -x2=0.0152398 +x1=0.0143753 +x2=0.015137 divx=10 node="outp outm diff --git a/xschem_library/rom8k/rom8k.sch b/xschem_library/rom8k/rom8k.sch index 8dc5585c..f15c61f6 100644 --- a/xschem_library/rom8k/rom8k.sch +++ b/xschem_library/rom8k/rom8k.sch @@ -27,13 +27,13 @@ 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 1840 -540 2890 -400 {flags=graph_unlocked +B 2 1840 -540 2890 -400 {flags=graph y1 = -0.048929 y2 = 0.999755 divy = 3 subdivy=1 -x1=1.48222e-07 -x2=1.94606e-07 divx=10 +x1=1.09401e-07 +x2=2.07622e-07 divx=10 node="ldbl[0] ldbl[16] ldbl[32] @@ -45,32 +45,33 @@ ldbl[18] ldbl[34]" color="8 9 10 11 12 13 14 15 11" unitx=n } -B 2 1840 -1160 2890 -1000 {flags=graph_unlocked +B 2 1840 -1160 2890 -1000 {flags=graph digital=0 y1 = 0 -y2 = 1.6 +y2 = 1.60 subdivy=1 divy = 4 -x1=1.48222e-07 -x2=1.94606e-07 +x1=1.09401e-07 +x2=2.07622e-07 divx=10 subdivx=4 node="ldcp ldyms[4] ldyms[5] ldyms[6] -ldymsref" -color="6 12 13 14 11" +ldymsref +xsa[14].ldqii" +color="6 12 13 14 11 4" unitx=n } -B 2 1840 -400 2890 -240 {flags=graph_unlocked +B 2 1840 -400 2890 -240 {flags=graph y1 = -0.0072 -y2 = 1.6 +y2 = 1.60 divy = 3 subdivy=0 subdivx = 1 -x1=1.48222e-07 -x2=1.94606e-07 divx=10 +x1=1.09401e-07 +x2=2.07622e-07 divx=10 node="ldwl[0] ldwl[1] ldwl[2] @@ -85,15 +86,15 @@ ldwl[9]" color="4 5 4 5 4 5 4 5 4 5 4" unitx=n } -B 2 1840 -1000 2890 -540 {flags=graph,unlocked +B 2 1840 -1000 2890 -540 {flags=graph digital=1 y1 = 0 y2 = 1.6 -ypos1=0.0694741 -ypos2=2.61557 +ypos1=0.293142 +ypos2=2.77211 divy = 1 -x1=1.48222e-07 -x2=1.94606e-07 +x1=1.09401e-07 +x2=2.07622e-07 divx=12 subdivx=4 node="---In/Out--- @@ -117,31 +118,33 @@ color="18 4 15 4 15 4 15 4 18 15 4 18 4 15 4 15 11" unitx=n ypos1=-2.20115 ypos2=2.79884 } -B 2 1840 -1300 2890 -1160 {flags=graph_unlocked +B 2 1840 -1300 2890 -1160 {flags=graph y1 = 0 -y2 = 1.6 +y2 = 1.60 divy = 4 -x1=1.48222e-07 -x2=1.94606e-07 +x1=1.09401e-07 +x2=2.07622e-07 divx=8 unitx=n node="xsa[0].ldqib xsa[5].ldqib xsa[0].ldsali xctrl.ldq_b" -color="4 12 5 10" +color="4 12 7 10" } -B 2 1840 -240 2890 0 {flags=graph_unlocked +B 2 1840 -240 2890 0 {flags=graph y1 = -0.0559946 y2 = 0.0205097 divy = 5 -x1=1.48222e-07 -x2=1.94606e-07 +x1=1.09401e-07 +x2=2.07622e-07 unity=m divx=10 subdivx=1 node=i(vvcc) -color=3 unitx=n subdivy=4 +color=3 +unitx=n +subdivy=4 } B 7 950 -250 980 -80 {} B 7 1150 -250 1180 -80 {}