add "xschem setprop wire n tok val" command to add/change wire attributes via CLI
This commit is contained in:
parent
b3f4c4f5f7
commit
a8fab9fac8
|
|
@ -1554,7 +1554,7 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
|
||||||
3 : set modified flag, do nothing else.
|
3 : set modified flag, do nothing else.
|
||||||
-1 : set title, rst floater caches.
|
-1 : set title, rst floater caches.
|
||||||
-2 : rst floater caches, update simulation button colors (Simulate, Waves, Netlist).</pre>
|
-2 : rst floater caches, update simulation button colors (Simulate, Waves, Netlist).</pre>
|
||||||
<li><kbd> setprop [-fast|-fastundo] instance|symbol|text|rect ref tok [val]</kbd></li><pre>
|
<li><kbd> setprop [-fast|-fastundo] instance|symbol|text|rect|wire ref tok [val]</kbd></li><pre>
|
||||||
|
|
||||||
setprop [-fast] instance inst [tok] [val]
|
setprop [-fast] instance inst [tok] [val]
|
||||||
set attribute 'tok' of instance (name or number) 'inst' to value 'val'
|
set attribute 'tok' of instance (name or number) 'inst' to value 'val'
|
||||||
|
|
@ -1579,6 +1579,12 @@ C {verilog_timescale.sym} 1050 -100 0 0 {name=s1 timestep="1ns" precision="1ns"
|
||||||
setprop rect 2 n fullyzoom
|
setprop rect 2 n fullyzoom
|
||||||
These commands do full x/y zoom of graph 'n' (on layer 2, this is hardcoded).
|
These commands do full x/y zoom of graph 'n' (on layer 2, this is hardcoded).
|
||||||
|
|
||||||
|
setprop wire [-fast|-fastundo] n tok [val]
|
||||||
|
Set attribute 'tok' of wire number'n'
|
||||||
|
If 'val' not given (no attribute value) delete attribute from wire
|
||||||
|
If '-fast' argument is given does not redraw and is not undoable
|
||||||
|
If '-fastundo' s given same as above but action is undoable.
|
||||||
|
|
||||||
setprop [-fast|-fastundo] text n [tok] [val]
|
setprop [-fast|-fastundo] text n [tok] [val]
|
||||||
Set attribute 'tok' of text number 'n'
|
Set attribute 'tok' of text number 'n'
|
||||||
If 'tok' not specified set text string (txt_ptr) to value
|
If 'tok' not specified set text string (txt_ptr) to value
|
||||||
|
|
|
||||||
|
|
@ -5720,7 +5720,7 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
||||||
}
|
}
|
||||||
Tcl_ResetResult(interp);
|
Tcl_ResetResult(interp);
|
||||||
}
|
}
|
||||||
/* setprop [-fast|-fastundo] instance|symbol|text|rect ref tok [val]
|
/* setprop [-fast|-fastundo] instance|symbol|text|rect|wire ref tok [val]
|
||||||
*
|
*
|
||||||
* setprop [-fast] instance inst [tok] [val]
|
* setprop [-fast] instance inst [tok] [val]
|
||||||
* set attribute 'tok' of instance (name or number) 'inst' to value 'val'
|
* set attribute 'tok' of instance (name or number) 'inst' to value 'val'
|
||||||
|
|
@ -5745,6 +5745,12 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
||||||
* setprop rect 2 n fullyzoom
|
* setprop rect 2 n fullyzoom
|
||||||
* These commands do full x/y zoom of graph 'n' (on layer 2, this is hardcoded).
|
* These commands do full x/y zoom of graph 'n' (on layer 2, this is hardcoded).
|
||||||
*
|
*
|
||||||
|
* setprop wire [-fast|-fastundo] n tok [val]
|
||||||
|
* Set attribute 'tok' of wire number'n'
|
||||||
|
* If 'val' not given (no attribute value) delete attribute from wire
|
||||||
|
* If '-fast' argument is given does not redraw and is not undoable
|
||||||
|
* If '-fastundo' s given same as above but action is undoable.
|
||||||
|
*
|
||||||
* setprop [-fast|-fastundo] text n [tok] [val]
|
* setprop [-fast|-fastundo] text n [tok] [val]
|
||||||
* Set attribute 'tok' of text number 'n'
|
* Set attribute 'tok' of text number 'n'
|
||||||
* If 'tok' not specified set text string (txt_ptr) to value
|
* If 'tok' not specified set text string (txt_ptr) to value
|
||||||
|
|
@ -5930,7 +5936,57 @@ int xschem(ClientData clientdata, Tcl_Interp *interp, int argc, const char * arg
|
||||||
bbox(END,0.0,0.0,0.0,0.0);
|
bbox(END,0.0,0.0,0.0,0.0);
|
||||||
}
|
}
|
||||||
Tcl_ResetResult(interp);
|
Tcl_ResetResult(interp);
|
||||||
|
} else if(argc > 5 && !strcmp(argv[2], "wire")) {
|
||||||
|
/* 0 1 2 3 4 5
|
||||||
|
* xschem setprop wire n token [value] */
|
||||||
|
double bus, oldbus, width, ov, y1, y2;
|
||||||
|
int change_done = 0;
|
||||||
|
xWire *w;
|
||||||
|
int n = atoi(argv[3]);
|
||||||
|
if(!(n >=0 && n < xctx->wires) ) {
|
||||||
|
Tcl_SetResult(interp, "xschem setprop wire: wrong wire number", TCL_STATIC);
|
||||||
|
return TCL_ERROR;
|
||||||
|
}
|
||||||
|
w = &xctx->wire[n];
|
||||||
|
oldbus = w->bus;
|
||||||
|
if(!fast) {
|
||||||
|
bbox(START,0.0,0.0,0.0,0.0);
|
||||||
|
}
|
||||||
|
if(argc > 5) {
|
||||||
|
/* verify if there is some difference */
|
||||||
|
if(strcmp(argv[5], get_tok_value(w->prop_ptr, argv[4], 0))) {
|
||||||
|
change_done = 1;
|
||||||
|
if(fast == 3 || fast == 0) xctx->push_undo();
|
||||||
|
my_strdup2(_ALLOC_ID_, &w->prop_ptr, subst_token(w->prop_ptr, argv[4], argv[5]));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
get_tok_value(w->prop_ptr, argv[4], 0);
|
||||||
|
if(xctx->tok_size) {
|
||||||
|
change_done = 1;
|
||||||
|
if(fast == 3 || fast == 0) xctx->push_undo();
|
||||||
|
my_strdup2(_ALLOC_ID_, &w->prop_ptr, subst_token(w->prop_ptr, argv[4], NULL)); /* delete attr */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(change_done) set_modify(1);
|
||||||
|
w->bus = bus = get_attr_val(get_tok_value(w->prop_ptr,"bus", 0));
|
||||||
|
set_wire_flags(w); /* set cached .flags bitmask from attributes */
|
||||||
|
|
||||||
|
|
||||||
|
if(!fast) {
|
||||||
|
if(bus > 0.0) width = XLINEWIDTH(bus) / 2.0;
|
||||||
|
else width = INT_BUS_WIDTH(xctx->lw) / 2.0;
|
||||||
|
if(oldbus / 2.0 > width) width = XLINEWIDTH(oldbus) / 2.0;
|
||||||
|
|
||||||
|
ov = width > xctx->cadhalfdotsize ? width : xctx->cadhalfdotsize;
|
||||||
|
if(w->y1 < w->y2) { y1 = w->y1 - ov; y2 = w->y2 + ov; }
|
||||||
|
else { y1 = w->y1 + ov; y2 = w->y2 - ov; }
|
||||||
|
bbox(ADD, w->x1 - ov, y1 , w->x2 + ov , y2 );
|
||||||
|
/* redraw rect with new props */
|
||||||
|
bbox(SET,0.0,0.0,0.0,0.0);
|
||||||
|
draw();
|
||||||
|
bbox(END,0.0,0.0,0.0,0.0);
|
||||||
|
}
|
||||||
|
Tcl_ResetResult(interp);
|
||||||
} else if(argc > 3 && !strcmp(argv[2], "text")) {
|
} else if(argc > 3 && !strcmp(argv[2], "text")) {
|
||||||
/* 0 1 2 3 4 5 6
|
/* 0 1 2 3 4 5 6
|
||||||
* xschem setprop text n [token] value [fast|fastundo]
|
* xschem setprop text n [token] value [fast|fastundo]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue