add_pinlayer_boxes(): fix uninitialized bb[PINLAYER][i].fill, LCC symbols: make 1st LCC level pins display spice_get_voltage annotation data

This commit is contained in:
stefan schippers 2025-01-13 17:30:11 +01:00
parent 6cca3fefc4
commit b0973ae8c0
5 changed files with 23 additions and 7 deletions

View File

@ -3991,6 +3991,7 @@ static void add_pinlayer_boxes(int *lastr, xRect **bb,
bb[PINLAYER][i].dash = 0; bb[PINLAYER][i].dash = 0;
bb[PINLAYER][i].ellipse_a = bb[PINLAYER][i].ellipse_b = -1; bb[PINLAYER][i].ellipse_a = bb[PINLAYER][i].ellipse_b = -1;
bb[PINLAYER][i].sel = 0; bb[PINLAYER][i].sel = 0;
bb[PINLAYER][i].fill = 1;
/* add to symbol pins remaining attributes from schematic pins, except name= and lab= */ /* add to symbol pins remaining attributes from schematic pins, except name= and lab= */
my_strdup(_ALLOC_ID_, &pin_label, get_sym_template(prop_ptr, "lab")); /* remove name=... and lab=... */ my_strdup(_ALLOC_ID_, &pin_label, get_sym_template(prop_ptr, "lab")); /* remove name=... and lab=... */
my_strcat(_ALLOC_ID_, &bb[PINLAYER][i].prop_ptr, pin_label); my_strcat(_ALLOC_ID_, &bb[PINLAYER][i].prop_ptr, pin_label);

View File

@ -1,5 +1,6 @@
v {xschem version=2.9.7 file_version=1.2} v {xschem version=3.4.6 file_version=1.2}
G {type=lcc_iopin G {}
K {type=lcc_iopin
format="*.iopin @lab" format="*.iopin @lab"
template="name=p1 lab=xxx" template="name=p1 lab=xxx"
} }
@ -11,3 +12,4 @@ L 7 -10 2.5 -7.5 0 {}
L 7 -12.5 0 -10 -2.5 {} L 7 -12.5 0 -10 -2.5 {}
L 7 -12.5 0 -10 2.5 {} L 7 -12.5 0 -10 2.5 {}
T {@lab} -3.75 -16.25 0 1 0.2 0.2 {} T {@lab} -3.75 -16.25 0 1 0.2 0.2 {}
T {@#0:spice_get_voltage} -1.875 3.90625 0 1 0.2 0.2 {layer=15}

View File

@ -1,5 +1,6 @@
v {xschem version=2.9.7 file_version=1.2} v {xschem version=3.4.6 file_version=1.2}
G {type=lcc_ipin G {}
K {type=lcc_ipin
format="*.ipin @lab" format="*.ipin @lab"
template="name=p1 lab=xxx" template="name=p1 lab=xxx"
} }
@ -9,3 +10,4 @@ E {}
L 7 10 -2.5 12.5 0 {} L 7 10 -2.5 12.5 0 {}
L 7 10 2.5 12.5 0 {} L 7 10 2.5 12.5 0 {}
T {@lab} 3.75 -16.25 0 0 0.2 0.2 {} T {@lab} 3.75 -16.25 0 0 0.2 0.2 {}
T {@#0:spice_get_voltage} 1.875 3.90625 0 0 0.2 0.2 {layer=15}

View File

@ -1,5 +1,6 @@
v {xschem version=2.9.7 file_version=1.2} v {xschem version=3.4.6 file_version=1.2}
G {type=lcc_opin G {}
K {type=lcc_opin
format="*.opin @lab" format="*.opin @lab"
template="name=p1 lab=xxx" template="name=p1 lab=xxx"
} }
@ -9,3 +10,4 @@ E {}
L 7 -12.5 -2.5 -10 0 {} L 7 -12.5 -2.5 -10 0 {}
L 7 -12.5 2.5 -10 0 {} L 7 -12.5 2.5 -10 0 {}
T {@lab} -3.75 -16.25 0 1 0.2 0.2 {} T {@lab} -3.75 -16.25 0 1 0.2 0.2 {}
T {@#0:spice_get_voltage} -1.875 3.90625 0 1 0.2 0.2 {layer=15}

View File

@ -4432,7 +4432,9 @@ const char *translate2(Lcc *lcc, int level, char* s)
if(!tclgetboolvar("spiceprefix") && !strcmp(token, "@spiceprefix")) { if(!tclgetboolvar("spiceprefix") && !strcmp(token, "@spiceprefix")) {
if(value) my_free(_ALLOC_ID_, &value); if(value) my_free(_ALLOC_ID_, &value);
xctx->tok_size = 0; xctx->tok_size = 0;
} else if(token[0] == '@' && (token[1] == '@' || token[1] == '#')) { /* get rid of pin attribute info */
} else if(!strstr(token, "spice_get_voltage") &&
token[0] == '@' && (token[1] == '@' || token[1] == '#')) { /* get rid of pin attribute info */
if(value) my_free(_ALLOC_ID_, &value); if(value) my_free(_ALLOC_ID_, &value);
xctx->tok_size = 0; xctx->tok_size = 0;
} else { } else {
@ -4473,6 +4475,13 @@ const char *translate2(Lcc *lcc, int level, char* s)
memcpy(result + result_pos, token, tmp + 1); memcpy(result + result_pos, token, tmp + 1);
result_pos += tmp; result_pos += tmp;
} }
/* @#n:spice_get_voltage tokens */
else if (strstr(token, "spice_get_voltage")) {
tmp = strlen(token);
STR_ALLOC(&result, tmp + result_pos, &size);
memcpy(result + result_pos, token, tmp + 1);
result_pos += tmp;
}
else if(strcmp(token,"@path")==0) { else if(strcmp(token,"@path")==0) {
char *path = NULL; char *path = NULL;
here(level); here(level);