Merge pull request #3 from TheSUPERCD/upstream-clone
Resolved merge conflicts and integrated upstream changes into this fork. Future merge conflicts will be resolved this way (using local upstream-clone to resolve merge-conflicts).
This commit is contained in:
commit
ec8ba527e3
|
|
@ -687,6 +687,9 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
|
|||
Redraw graph rectangle number 'n'.
|
||||
If the optional 'flags' integer is given it will be used as the
|
||||
flags bitmask to use while drawing (can be used to restrict what to redraw) </pre>
|
||||
<li><kbd> draw_hilight_net [1|0]</kbd></li><pre>
|
||||
Redraw only hilight colors on nets and instances
|
||||
the parameter specifies if drawing on window or only on back buffer </pre>
|
||||
<li><kbd> drc_check [i]</kbd></li><pre>
|
||||
Perform DRC rulecheck of instances.
|
||||
if i is specified do check of specified instance
|
||||
|
|
@ -800,6 +803,7 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
|
|||
<li><kbd> schtedaxprop </kbd> get schematic "tedax" global attributes </li>
|
||||
<li><kbd> sch_path </kbd> get hierarchy path. if 'n' given get hierpath of level 'n' </li>
|
||||
<li><kbd> sch_to_compare </kbd> if set return schematic current design is compared with </li>
|
||||
<li><kbd> sim_sch_path </kbd> get sim hier path. start from level where raw was loaded </li>
|
||||
<li><kbd> symbols </kbd> number of loaded symbols </li>
|
||||
<li><kbd> temp_dir </kbd> get windows temporary dir </li>
|
||||
<li><kbd> text_svg </kbd> return 1 if using <text> elements in svg export </li>
|
||||
|
|
@ -899,9 +903,9 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
|
|||
Highlight selected element/pins/labels/nets
|
||||
if 'drill' is given propagate net highlights through conducting elements
|
||||
(elements that have the 'propag' attribute on pins ) </pre>
|
||||
<li><kbd> hilight_instname inst [fast]</kbd></li><pre>
|
||||
<li><kbd> hilight_instname [-fast] inst</kbd></li><pre>
|
||||
Highlight instance 'inst'
|
||||
if 'fast' is specified do not redraw
|
||||
if '-fast' is specified do not redraw
|
||||
'inst' can be an instance name or number </pre>
|
||||
<li><kbd> hilight_netname [-fast] net </kbd></li><pre>
|
||||
Highlight net name 'net'
|
||||
|
|
|
|||
|
|
@ -260,6 +260,7 @@ static double interpolate_yval(int idx, int p, double x, int sweep_idx, int poin
|
|||
|
||||
void backannotate_at_cursor_b_pos(xRect *r, Graph_ctx *gr)
|
||||
{
|
||||
tcleval("catch {eval $cursor_2_hook}");
|
||||
if(sch_waves_loaded() >= 0) {
|
||||
int dset, first = -1, last, dataset = gr->dataset, i, p, ofs = 0, ofs_end;
|
||||
double start, end;
|
||||
|
|
@ -1352,7 +1353,7 @@ static int waves_callback(int event, int mx, int my, KeySym key, int button, int
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* what == 0 : delete and draw
|
||||
/* what == 3 : delete and draw
|
||||
* what == 1 : delete
|
||||
* what == 2 : draw */
|
||||
void draw_crosshair(int what)
|
||||
|
|
@ -1367,7 +1368,7 @@ void draw_crosshair(int what)
|
|||
|
||||
xctx->draw_pixmap = 0;
|
||||
xctx->draw_window = 1;
|
||||
if(what != 2) { /* delete previous */
|
||||
if(what & 1) { /* delete previous */
|
||||
if(fix_broken_tiled_fill || !_unix) {
|
||||
if(xhair_size) {
|
||||
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0],
|
||||
|
|
@ -1425,7 +1426,7 @@ void draw_crosshair(int what)
|
|||
}
|
||||
}
|
||||
}
|
||||
if(what != 1) { /* draw new */
|
||||
if(what & 2) { /* draw new */
|
||||
if(xhair_size) {
|
||||
draw_xhair_line(xctx->gc[xctx->crosshair_layer], xhair_size,
|
||||
X_TO_SCREEN(xctx->mousex_snap) - xhair_size,
|
||||
|
|
@ -1456,7 +1457,7 @@ void draw_crosshair(int what)
|
|||
X_TO_SCREEN(xctx->mousex_snap), xctx->areay2);
|
||||
}
|
||||
}
|
||||
draw_selection(xctx->gc[SELLAYER], 0);
|
||||
if(what) draw_selection(xctx->gc[SELLAYER], 0);
|
||||
xctx->prev_crossx = xctx->mousex_snap;
|
||||
xctx->prev_crossy = xctx->mousey_snap;
|
||||
|
||||
|
|
@ -4461,7 +4462,7 @@ int rstate; /* (reduced state, without ShiftMask) */
|
|||
break;
|
||||
}
|
||||
|
||||
if(draw_xhair) draw_crosshair(0);
|
||||
if(draw_xhair) draw_crosshair(3); /* restore crosshair when selecting / unselecting */
|
||||
if(snap_cursor && wire_draw_active) draw_snap_cursor(0);
|
||||
break;
|
||||
case -3: /* double click : edit prop */
|
||||
|
|
|
|||
|
|
@ -5137,7 +5137,7 @@ void draw(void)
|
|||
} else {
|
||||
draw_selection(xctx->gc[SELLAYER], 0); /* 20181009 moved outside of cadlayers loop */
|
||||
}
|
||||
if(tclgetboolvar("draw_crosshair")) draw_crosshair(0);
|
||||
if(tclgetboolvar("draw_crosshair")) draw_crosshair(3);
|
||||
} /* if(has_x) */
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1104,6 +1104,7 @@ static void drill_hilight(int mode)
|
|||
if(propagate_str) my_free(_ALLOC_ID_, &propagate_str);
|
||||
}
|
||||
|
||||
/* if fast is set you need to do a propagate_hilights() at the end to finalize the operation */
|
||||
int hilight_netname(const char *name, int fast)
|
||||
{
|
||||
Node_hashentry *node_entry;
|
||||
|
|
@ -1113,8 +1114,8 @@ int hilight_netname(const char *name, int fast)
|
|||
node_entry = bus_node_hash_lookup(name, "", XLOOKUP, 0, "", "", "", "");
|
||||
/* sets xctx->hilight_nets=1 */
|
||||
if(node_entry && !bus_hilight_hash_lookup(name, xctx->hilight_color, XINSERT_NOREPLACE)) {
|
||||
propagate_hilights(1, 0, XINSERT_NOREPLACE);
|
||||
if(!fast) {
|
||||
propagate_hilights(1, 0, XINSERT_NOREPLACE);
|
||||
if(tclgetboolvar("incr_hilight")) incr_hilight_color();
|
||||
redraw_hilights(0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -907,7 +907,7 @@ void copy_objects(int what)
|
|||
xctx->rotatelocal=0;
|
||||
} /* if(what & END) */
|
||||
draw_selection(xctx->gc[SELLAYER], 0);
|
||||
if(tclgetboolvar("draw_crosshair")) draw_crosshair(0);
|
||||
if(tclgetboolvar("draw_crosshair")) draw_crosshair(3);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1361,5 +1361,5 @@ void move_objects(int what, int merge, double dx, double dy)
|
|||
xctx->rotatelocal=0;
|
||||
} /* what & end */
|
||||
draw_selection(xctx->gc[SELLAYER], 0);
|
||||
if(tclgetboolvar("draw_crosshair")) draw_crosshair(0);
|
||||
if(tclgetboolvar("draw_crosshair")) draw_crosshair(3);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -368,24 +368,30 @@ void print_verilog_signals(FILE *fd)
|
|||
void list_nets(char **result)
|
||||
{
|
||||
Node_hashentry *ptr;
|
||||
char *type = NULL;
|
||||
int i;
|
||||
int netlist_lvs_ignore=tclgetboolvar("lvs_ignore");
|
||||
char *type = NULL;
|
||||
int mult, k;
|
||||
char *pin_node = NULL;
|
||||
char *p_n_s1, *p_n_s2, *lab;
|
||||
|
||||
prepare_netlist_structs(1);
|
||||
for(i = 0; i < xctx->instances; i++) {
|
||||
if(skip_instance(i, 0, netlist_lvs_ignore)) continue;
|
||||
my_strdup(_ALLOC_ID_, &type,(xctx->inst[i].ptr+ xctx->sym)->type);
|
||||
if(type && xctx->inst[i].node && IS_PIN(type)) {
|
||||
/*
|
||||
* my_mstrcat(_ALLOC_ID_, result,
|
||||
* "{", get_tok_value(xctx->inst[i].prop_ptr, "lab", 0), " ", type, "}\n", NULL);
|
||||
*/
|
||||
my_mstrcat(_ALLOC_ID_, result,
|
||||
"{", xctx->inst[i].lab, " ", type, "}\n", NULL);
|
||||
my_strdup2(_ALLOC_ID_, &pin_node, expandlabel(xctx->inst[i].lab, &mult));
|
||||
p_n_s1 = pin_node;
|
||||
for(k = 1; k <= mult; ++k) {
|
||||
lab = my_strtok_r(p_n_s1, ",", "", 0, &p_n_s2);
|
||||
p_n_s1 = NULL;
|
||||
my_mstrcat(_ALLOC_ID_, result, "{", lab, " ", type, "}\n", NULL);
|
||||
}
|
||||
}
|
||||
if(pin_node) my_free(_ALLOC_ID_, &pin_node);
|
||||
}
|
||||
if(type) my_free(_ALLOC_ID_, &type);
|
||||
|
||||
for(i=0;i<HASHSIZE; ++i) {
|
||||
ptr = xctx->node_table[i];
|
||||
while(ptr) {
|
||||
|
|
|
|||
|
|
@ -1388,7 +1388,7 @@ int extra_rawfile(int what, const char *file, const char *type, double sweep1, d
|
|||
int update_op()
|
||||
{
|
||||
int res = 0, p = 0, i;
|
||||
tcleval("array unset ngspice::ngspice_data");
|
||||
Tcl_UnsetVar(interp, "ngspice::ngspice_data", TCL_GLOBAL_ONLY);
|
||||
if(xctx->raw && xctx->raw->values) {
|
||||
xctx->raw->annot_p = 0;
|
||||
dbg(1, "update_op(): nvars=%d\n", xctx->raw->nvars);
|
||||
|
|
@ -1398,10 +1398,10 @@ int update_op()
|
|||
xctx->raw->cursor_b_val[i] = xctx->raw->values[i][p];
|
||||
my_snprintf(s, S(s), "%.4g", xctx->raw->values[i][p]);
|
||||
dbg(1, "%s = %g\n", xctx->raw->names[i], xctx->raw->values[i][p]);
|
||||
tclvareval("array set ngspice::ngspice_data [list {", xctx->raw->names[i], "} ", s, "]", NULL);
|
||||
Tcl_SetVar2(interp, "ngspice::ngspice_data", xctx->raw->names[i], s, TCL_GLOBAL_ONLY);
|
||||
}
|
||||
tclvareval("set ngspice::ngspice_data(n\\ vars) ", my_itoa( xctx->raw->nvars), NULL);
|
||||
tclvareval("set ngspice::ngspice_data(n\\ points) 1", NULL);
|
||||
Tcl_SetVar2(interp, "ngspice::ngspice_data", "n\\ vars", my_itoa( xctx->raw->nvars), TCL_GLOBAL_ONLY);
|
||||
Tcl_SetVar2(interp, "ngspice::ngspice_data", "n\\ points", "1", TCL_GLOBAL_ONLY);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -899,6 +899,20 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
}
|
||||
Tcl_ResetResult(interp);
|
||||
}
|
||||
|
||||
/* draw_hilight_net [1|0]
|
||||
* Redraw only hilight colors on nets and instances
|
||||
* the parameter specifies if drawing on window or only on back buffer */
|
||||
else if(!strcmp(argv[1], "draw_hilight_net")) {
|
||||
int on_window = 1;
|
||||
if(!xctx) {Tcl_SetResult(interp, not_avail, TCL_STATIC); return TCL_ERROR;}
|
||||
if(argc > 2) {
|
||||
on_window = atoi(argv[2]);
|
||||
}
|
||||
draw_hilight_net(on_window);
|
||||
Tcl_ResetResult(interp);
|
||||
}
|
||||
|
||||
/* drc_check [i]
|
||||
* Perform DRC rulecheck of instances.
|
||||
* if i is specified do check of specified instance
|
||||
|
|
@ -1619,6 +1633,21 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
if(!xctx) {Tcl_SetResult(interp, not_avail, TCL_STATIC); return TCL_ERROR;}
|
||||
Tcl_SetResult(interp, xctx->sch_to_compare, TCL_VOLATILE);
|
||||
}
|
||||
else if(!strcmp(argv[2], "sim_sch_path")) /* get sim hier path. start from level where raw was loaded */
|
||||
{
|
||||
int x = xctx->currsch;
|
||||
char *path = xctx->sch_path[x] + 1;
|
||||
int skip = 0;
|
||||
int start_level;
|
||||
if(!xctx) {Tcl_SetResult(interp, not_avail, TCL_STATIC); return TCL_ERROR;}
|
||||
start_level = sch_waves_loaded();
|
||||
/* skip path components that are above the level where raw file was loaded */
|
||||
while(*path && skip < start_level) {
|
||||
if(*path == '.') skip++;
|
||||
++path;
|
||||
}
|
||||
Tcl_SetResult(interp, path, TCL_VOLATILE);
|
||||
}
|
||||
else if(!strcmp(argv[2], "symbols")) { /* number of loaded symbols */
|
||||
if(!xctx) {Tcl_SetResult(interp, not_avail, TCL_STATIC); return TCL_ERROR;}
|
||||
Tcl_SetResult(interp, my_itoa(xctx->symbols), TCL_VOLATILE);
|
||||
|
|
@ -2202,23 +2231,34 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
|||
redraw_hilights(0);
|
||||
Tcl_ResetResult(interp);
|
||||
}
|
||||
/* hilight_instname inst [fast]
|
||||
/* hilight_instname [-fast] inst
|
||||
* Highlight instance 'inst'
|
||||
* if 'fast' is specified do not redraw
|
||||
* if '-fast' is specified do not redraw
|
||||
* 'inst' can be an instance name or number */
|
||||
else if(!strcmp(argv[1], "hilight_instname"))
|
||||
{
|
||||
const char *instname=NULL;
|
||||
int i, fast = 0;
|
||||
|
||||
if(!xctx) {Tcl_SetResult(interp, not_avail, TCL_STATIC); return TCL_ERROR;}
|
||||
if(argc > 2) {
|
||||
for(i = 2; i < argc; i++) {
|
||||
if(argv[i][0] == '-') {
|
||||
if(!strcmp(argv[i], "-fast")) {
|
||||
fast = 1;
|
||||
}
|
||||
} else {
|
||||
instname = argv[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(instname) {
|
||||
int inst;
|
||||
char *type;
|
||||
int incr_hi;
|
||||
int fast = 0;
|
||||
if(argc > 3 && !strcmp(argv[3], "fast")) fast = 1;
|
||||
xctx->enable_drill=0;
|
||||
incr_hi = tclgetboolvar("incr_hilight");
|
||||
prepare_netlist_structs(0);
|
||||
if((inst = get_instance(argv[2])) < 0 ) {
|
||||
if((inst = get_instance(instname)) < 0 ) {
|
||||
Tcl_SetResult(interp, "xschem hilight_instname: instance not found", TCL_STATIC);
|
||||
return TCL_ERROR;
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -7656,9 +7656,9 @@ set tctx::global_list {
|
|||
add_all_windows_drives auto_hilight auto_hilight_graph_nodes autofocus_mainwindow
|
||||
autotrim_wires orthogonal_wiring snap_cursor bespice_listen_port big_grid_points bus_replacement_char cadgrid cadlayers
|
||||
cadsnap cairo_font_name cairo_font_scale change_lw color_ps tctx::colors compare_sch constr_mv
|
||||
copy_cell crosshair_layer crosshair_size snap_cursor_size custom_label_prefix custom_token dark_colors dark_colorscheme
|
||||
dark_gui_colorscheme delay_flag dim_bg dim_value disable_unique_names
|
||||
do_all_inst draw_crosshair
|
||||
copy_cell crosshair_layer crosshair_size cursor_2_hook snap_cursor_size custom_label_prefix custom_token
|
||||
dark_colors dark_colorscheme dark_gui_colorscheme delay_flag
|
||||
dim_bg dim_value disable_unique_names do_all_inst draw_crosshair
|
||||
draw_grid draw_grid_axes draw_window edit_prop_pos edit_prop_size
|
||||
edit_symbol_prop_new_sel editprop_sympath en_hilight_conn_inst enable_dim_bg enable_stretch
|
||||
enter_text_default_geometry filetmp fix_broken_tiled_fill flat_netlist fullscreen
|
||||
|
|
@ -9116,6 +9116,7 @@ set_ne zoom_full_center 0
|
|||
set_ne change_lw 1
|
||||
set_ne line_width 0
|
||||
set_ne live_cursor2_backannotate 1
|
||||
set_ne cursor_2_hook {}
|
||||
set_ne draw_window 0
|
||||
set_ne show_hidden_texts 0
|
||||
set_ne incr_hilight 1
|
||||
|
|
|
|||
10
src/xschemrc
10
src/xschemrc
|
|
@ -597,6 +597,16 @@ set crosshair_size 2
|
|||
#### default: not enabled (0)
|
||||
# set hide_empty_graphs 0
|
||||
|
||||
|
||||
###########################################################################
|
||||
#### ATTACH HOOK FUNCTION TO CURSOR 2 MOVEMENT
|
||||
###########################################################################
|
||||
#### if enabled whenever the cursor2 is moved the specified script is
|
||||
#### executed. Examples:
|
||||
#### set cursor_2_hook {conducting_devices 10e-3 nodraw}
|
||||
#### set cursor_2_hook {hilight_high_nets 0 1.8 nodraw}
|
||||
#### this can be used to add backannotation actions.
|
||||
|
||||
###########################################################################
|
||||
#### LIVE BACKANNOTATION OF DATA AT CURSOR 2 (B) POSITION
|
||||
###########################################################################
|
||||
|
|
|
|||
Loading…
Reference in New Issue