add abs_path parameter to get_sym_name() for more flexibility

This commit is contained in:
stefan schippers 2024-06-21 11:33:28 +02:00
parent 5ce1f01f43
commit 4e236750ed
4 changed files with 36 additions and 30 deletions

View File

@ -1769,7 +1769,7 @@ void launcher(void)
* or get it from inst[inst].name.
* perform tcl substitution of the result and
* return the last 'ndir' directory components of symbol reference. */
const char *get_sym_name(int inst, int ndir, int ext)
const char *get_sym_name(int inst, int ndir, int ext, int abs_path)
{
const char *sym, *sch;
@ -1778,10 +1778,16 @@ const char *get_sym_name(int inst, int ndir, int ext)
get_cell(xctx->inst[inst].name, 0), '\\'));
if(xctx->tok_size) { /* token exists */
sym = add_ext(rel_sym_path(sch), ".sym");
if(abs_path)
sym = abs_sym_path(sch, ".sym");
else
sym = add_ext(rel_sym_path(sch), ".sym");
}
else {
sym = tcl_hook2(xctx->inst[inst].name);
if(abs_path)
sym = abs_sym_path(tcl_hook2(xctx->inst[inst].name), "");
else
sym = tcl_hook2(xctx->inst[inst].name);
}
if(ext) return get_cell_w_ext(sym, ndir);
@ -1977,7 +1983,7 @@ void get_additional_symbols(int what)
my_strdup2(_ALLOC_ID_, &templ, get_tok_value(symptr->prop_ptr, "template", 0));
my_mstrcat(_ALLOC_ID_, &symname_attr, "symname=", get_cell(sym, 0), NULL);
my_mstrcat(_ALLOC_ID_, &symname_attr, " symref=", abs_sym_path(get_sym_name(i, 9999, 1), ""), NULL);
my_mstrcat(_ALLOC_ID_, &symname_attr, " symref=", get_sym_name(i, 9999, 1, 1), NULL);
my_strdup(_ALLOC_ID_, &spice_sym_def,
translate3(spice_sym_def, 1, xctx->inst[i].prop_ptr,
templ,

View File

@ -1761,7 +1761,7 @@ int sym_vs_sch_pins(int all)
statusmsg(str,2);
err |= 1;
for(j = 0; j < xctx->instances; ++j) {
if(!xctx->x_strcmp(get_sym_name(j, 9999, 1), xctx->sym[i].name)) {
if(!xctx->x_strcmp(get_sym_name(j, 9999, 1, 0), xctx->sym[i].name)) {
xctx->inst[j].color = -PINLAYER;
xctx->hilight_nets=1;
}
@ -1780,7 +1780,7 @@ int sym_vs_sch_pins(int all)
err |= 1;
for(j = 0; j < xctx->instances; ++j) {
dbg(1, "inst.name=%s, sym.name=%s\n", tcl_hook2(xctx->inst[j].name), xctx->sym[i].name);
if(!xctx->x_strcmp(get_sym_name(j, 9999, 1), xctx->sym[i].name)) {
if(!xctx->x_strcmp(get_sym_name(j, 9999, 1, 0), xctx->sym[i].name)) {
xctx->inst[j].color = -PINLAYER;
xctx->hilight_nets=1;
}
@ -1814,7 +1814,7 @@ int sym_vs_sch_pins(int all)
statusmsg(str,2);
err |= 1;
for(j = 0; j < xctx->instances; ++j) {
if(!xctx->x_strcmp(get_sym_name(j, 9999, 1), xctx->sym[i].name)) {
if(!xctx->x_strcmp(get_sym_name(j, 9999, 1, 0), xctx->sym[i].name)) {
xctx->inst[j].color = -PINLAYER;
xctx->hilight_nets=1;
}
@ -1838,7 +1838,7 @@ int sym_vs_sch_pins(int all)
statusmsg(str,2);
err |= 1;
for(k = 0; k < xctx->instances; ++k) {
if(!xctx->x_strcmp(get_sym_name(k, 9999, 1), xctx->sym[i].name)) {
if(!xctx->x_strcmp(get_sym_name(k, 9999, 1, 0), xctx->sym[i].name)) {
xctx->inst[k].color = -PINLAYER;
xctx->hilight_nets=1;
}

View File

@ -1003,18 +1003,18 @@ static void print_vhdl_primitive(FILE *fd, int inst) /* netlist primitives, 200
}
else if(strcmp(token,"@symref")==0)
{
const char *s = get_sym_name(inst, 9999, 1);
const char *s = get_sym_name(inst, 9999, 1, 0);
my_mstrcat(_ALLOC_ID_, &result, s, NULL);
}
else if(strcmp(token,"@symname")==0) /* of course symname must not be present */
/* in hash table */
{
const char *s = sanitize(translate(inst, get_sym_name(inst, 0, 0)));
const char *s = sanitize(translate(inst, get_sym_name(inst, 0, 0, 0)));
my_mstrcat(_ALLOC_ID_, &result, s, NULL);
}
else if (strcmp(token,"@symname_ext")==0)
{
const char *s = sanitize(translate(inst, get_sym_name(inst, 0, 1)));
const char *s = sanitize(translate(inst, get_sym_name(inst, 0, 1, 0)));
my_mstrcat(_ALLOC_ID_, &result, s, NULL);
}
else if(strcmp(token,"@schname_ext")==0) /* of course schname must not be present */
@ -1468,9 +1468,9 @@ void print_vhdl_element(FILE *fd, int inst)
/* print instance name and subckt */
dbg(2, "print_vhdl_element(): printing inst name & subcircuit name\n");
if( (lab = expandlabel(name, &tmp)) != NULL)
fprintf(fd, "%d %s : %s\n", tmp, lab, sanitize(translate(inst, get_sym_name(inst, 0, 0))) );
fprintf(fd, "%d %s : %s\n", tmp, lab, sanitize(translate(inst, get_sym_name(inst, 0, 0, 0))) );
else /* name in some strange format, probably an error */
fprintf(fd, "1 %s : %s\n", name, sanitize(translate(inst, get_sym_name(inst, 0, 0))) );
fprintf(fd, "1 %s : %s\n", name, sanitize(translate(inst, get_sym_name(inst, 0, 0, 0))) );
dbg(2, "print_vhdl_element(): printing generics passed as properties\n");
@ -1845,7 +1845,7 @@ static int has_included_subcircuit(int inst, int symbol, char **result)
my_strdup2(_ALLOC_ID_, &symname, xctx->sym[symbol].name);
}
my_mstrcat(_ALLOC_ID_, &symname_attr, "symname=", get_cell(symname, 0), NULL);
my_mstrcat(_ALLOC_ID_, &symname_attr, " symref=", abs_sym_path(get_sym_name(inst, 9999, 1), ""), NULL);
my_mstrcat(_ALLOC_ID_, &symname_attr, " symref=", get_sym_name(inst, 9999, 1, 1), NULL);
translated_sym_def = translate3(spice_sym_def, 1, xctx->inst[inst].prop_ptr,
templ,
symname_attr);
@ -2240,20 +2240,20 @@ int print_spice_element(FILE *fd, int inst)
}
else if(strcmp(token,"@symref")==0)
{
const char *s = get_sym_name(inst, 9999, 1);
const char *s = get_sym_name(inst, 9999, 1, 0);
/* result_pos += my_snprintf(result + result_pos, tmp, "%s", s); */
my_mstrcat(_ALLOC_ID_, &result, s, NULL);
}
else if (strcmp(token,"@symname")==0) /* of course symname must not be present in attributes */
{
const char *s = sanitize(translate(inst, get_sym_name(inst, 0, 0)));
const char *s = sanitize(translate(inst, get_sym_name(inst, 0, 0, 0)));
/* result_pos += my_snprintf(result + result_pos, tmp, "%s", s); */
my_mstrcat(_ALLOC_ID_, &result, s, NULL);
/* fputs(s,fd); */
}
else if (strcmp(token,"@symname_ext")==0) /* of course symname_ext must not be present in attributes */
{
const char *s = sanitize(translate(inst, get_sym_name(inst, 0, 1)));
const char *s = sanitize(translate(inst, get_sym_name(inst, 0, 1, 0)));
/* result_pos += my_snprintf(result + result_pos, tmp, "%s", s); */
my_mstrcat(_ALLOC_ID_, &result, s, NULL);
/* fputs(s,fd); */
@ -2533,7 +2533,7 @@ void print_tedax_element(FILE *fd, int inst)
Int_hashtable table={NULL, 0};
subcircuit = 1;
fprintf(fd, "__subcircuit__ %s %s\n",
sanitize(translate(inst, get_sym_name(inst, 0, 0))), xctx->inst[inst].instname);
sanitize(translate(inst, get_sym_name(inst, 0, 0, 0))), xctx->inst[inst].instname);
int_hash_init(&table, 37);
for(i=0;i<no_of_pins; ++i) {
my_strdup2(_ALLOC_ID_, &net, net_name(inst,i, &net_mult, 0, 1));
@ -2665,18 +2665,18 @@ void print_tedax_element(FILE *fd, int inst)
}
else if(strcmp(token,"@symref")==0)
{
const char *s = get_sym_name(inst, 9999, 1);
const char *s = get_sym_name(inst, 9999, 1, 0);
fputs(s, fd);
}
else if(strcmp(token,"@symname")==0) /* of course symname must not be present */
/* in hash table */
{
const char *s = sanitize(translate(inst, get_sym_name(inst, 0, 0)));
const char *s = sanitize(translate(inst, get_sym_name(inst, 0, 0, 0)));
fputs(s, fd);
}
else if (strcmp(token,"@symname_ext")==0)
{
const char *s = sanitize(translate(inst, get_sym_name(inst, 0, 1)));
const char *s = sanitize(translate(inst, get_sym_name(inst, 0, 1, 0)));
fputs(s, fd);
}
else if(strcmp(token,"@schname_ext")==0) /* of course schname must not be present */
@ -2927,18 +2927,18 @@ static void print_verilog_primitive(FILE *fd, int inst) /* netlist switch level
}
else if(strcmp(token,"@symref")==0)
{
const char *s = get_sym_name(inst, 9999, 1);
const char *s = get_sym_name(inst, 9999, 1, 0);
my_mstrcat(_ALLOC_ID_, &result, s, NULL);
}
else if(strcmp(token,"@symname")==0) /* of course symname must not be present */
/* in hash table */
{
const char *s = sanitize(translate(inst, get_sym_name(inst, 0, 0)));
const char *s = sanitize(translate(inst, get_sym_name(inst, 0, 0, 0)));
my_mstrcat(_ALLOC_ID_, &result, s, NULL);
}
else if (strcmp(token,"@symname_ext")==0)
{
const char *s = sanitize(translate(inst, get_sym_name(inst, 0, 1)));
const char *s = sanitize(translate(inst, get_sym_name(inst, 0, 1, 0)));
my_mstrcat(_ALLOC_ID_, &result, s, NULL);
}
else if(strcmp(token,"@schname_ext")==0) /* of course schname must not be present */
@ -3162,9 +3162,9 @@ void print_verilog_element(FILE *fd, int inst)
get_tok_value((xctx->inst[inst].ptr + xctx->sym)->prop_ptr, "verilogprefix", 0));
if(verilogprefix) {
my_strdup(_ALLOC_ID_, &symname, verilogprefix);
my_strcat(_ALLOC_ID_, &symname, get_sym_name(inst, 0, 0));
my_strcat(_ALLOC_ID_, &symname, get_sym_name(inst, 0, 0, 0));
} else {
my_strdup(_ALLOC_ID_, &symname, get_sym_name(inst, 0, 0));
my_strdup(_ALLOC_ID_, &symname, get_sym_name(inst, 0, 0, 0));
}
my_free(_ALLOC_ID_, &verilogprefix);
my_strdup(_ALLOC_ID_, &template, (xctx->inst[inst].ptr + xctx->sym)->templ);
@ -3709,14 +3709,14 @@ const char *translate(int inst, const char* s)
memcpy(result+result_pos, instname, tmp+1);
result_pos+=tmp;
} else if(inst >= 0 && strcmp(token,"@symref")==0) {
tmp_sym_name = get_sym_name(inst, 9999, 1);
tmp_sym_name = get_sym_name(inst, 9999, 1, 0);
tmp_sym_name=tmp_sym_name ? tmp_sym_name : "";
tmp=strlen(tmp_sym_name);
STR_ALLOC(&result, tmp + result_pos, &size);
memcpy(result+result_pos,tmp_sym_name, tmp+1);
result_pos+=tmp;
} else if(inst >= 0 && strcmp(token,"@symname")==0) {
tmp_sym_name = get_sym_name(inst, 0, 0);
tmp_sym_name = get_sym_name(inst, 0, 0, 0);
tmp_sym_name=tmp_sym_name ? tmp_sym_name : "";
tmp=strlen(tmp_sym_name);
STR_ALLOC(&result, tmp + result_pos, &size);
@ -3729,7 +3729,7 @@ const char *translate(int inst, const char* s)
memcpy(result+result_pos, path, tmp+1);
result_pos+=tmp;
} else if(inst >= 0 && strcmp(token,"@symname_ext")==0) {
tmp_sym_name = get_sym_name(inst, 0, 1);
tmp_sym_name = get_sym_name(inst, 0, 1, 0);
tmp_sym_name=tmp_sym_name ? tmp_sym_name : "";
tmp=strlen(tmp_sym_name);
STR_ALLOC(&result, tmp + result_pos, &size);

View File

@ -1520,7 +1520,7 @@ extern char *read_line(FILE *fp, int dbg_level);
extern void read_record(int firstchar, FILE *fp, int dbg_level);
extern void create_sch_from_sym(void);
extern void get_sch_from_sym(char *filename, xSymbol *sym, int inst, int fallback);
extern const char *get_sym_name(int inst, int ndir, int ext);
extern const char *get_sym_name(int inst, int ndir, int ext, int abs_path);
extern void toggle_ignore(void);
extern void get_additional_symbols(int what);
extern int descend_schematic(int instnumber, int fallback, int alert);