add "ndir" parameter to get_sym_name(), some fixes in sym_vs_sch_pins()
This commit is contained in:
parent
ae8931c788
commit
a9ffa50ed8
|
|
@ -1216,23 +1216,27 @@ void launcher(void)
|
|||
}
|
||||
}
|
||||
|
||||
const char *get_sym_name(int inst, int ext)
|
||||
|
||||
/* get symbol reference of instance 'inst', looking into
|
||||
* instance 'schematic' attribute (and appending '.sym') if set
|
||||
* 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 *sym, *sch;
|
||||
|
||||
/* instance based symbol selection */
|
||||
sch = get_tok_value(xctx->inst[inst].prop_ptr, "schematic", 0);
|
||||
if(xctx->tok_size) { /* token exists */
|
||||
if(ext) sym = get_cell_w_ext(add_ext(rel_sym_path(sch), ".sym"), 0);
|
||||
else sym = get_cell(add_ext(rel_sym_path(sch), ".sym"), 0);
|
||||
sym = add_ext(rel_sym_path(sch), ".sym");
|
||||
}
|
||||
else if(ext) {
|
||||
sym = get_cell_w_ext(tcl_hook2(xctx->inst[inst].name), 0);
|
||||
} else {
|
||||
sym = get_cell(tcl_hook2(xctx->inst[inst].name), 0);
|
||||
else {
|
||||
sym = tcl_hook2(xctx->inst[inst].name);
|
||||
}
|
||||
dbg(1, "get_sym_name(): inst=%d, ext=%d, returning sym=%s\n", inst, ext, sym);
|
||||
return sym;
|
||||
|
||||
if(ext) return get_cell_w_ext(sym, ndir);
|
||||
else return get_cell(sym, ndir);
|
||||
}
|
||||
|
||||
void copy_symbol(xSymbol *dest_sym, xSymbol *src_sym)
|
||||
|
|
|
|||
|
|
@ -1380,8 +1380,8 @@ int sym_vs_sch_pins()
|
|||
err |= 1;
|
||||
tcleval("show_infotext"); /* critical error: force ERC window showing */
|
||||
for(j = 0; j < xctx->instances; ++j) {
|
||||
if(!xctx->x_strcmp(tcl_hook2(xctx->inst[j].name), xctx->sym[i].name)) {
|
||||
xctx->inst[i].color = -PINLAYER;
|
||||
if(!xctx->x_strcmp(get_sym_name(j, 9999, 1), xctx->sym[i].name)) {
|
||||
xctx->inst[j].color = -PINLAYER;
|
||||
xctx->hilight_nets=1;
|
||||
}
|
||||
}
|
||||
|
|
@ -1399,8 +1399,8 @@ int sym_vs_sch_pins()
|
|||
tcleval("show_infotext"); /* critical error: force ERC window showing */
|
||||
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(tcl_hook2(xctx->inst[j].name), xctx->sym[i].name)) {
|
||||
xctx->inst[i].color = -PINLAYER;
|
||||
if(!xctx->x_strcmp(get_sym_name(j, 9999, 1), xctx->sym[i].name)) {
|
||||
xctx->inst[j].color = -PINLAYER;
|
||||
xctx->hilight_nets=1;
|
||||
}
|
||||
}
|
||||
|
|
@ -1434,8 +1434,9 @@ int sym_vs_sch_pins()
|
|||
err |= 1;
|
||||
tcleval("show_infotext"); /* critical error: force ERC window showing */
|
||||
for(j = 0; j < xctx->instances; ++j) {
|
||||
if(!xctx->x_strcmp(tcl_hook2(xctx->inst[j].name), xctx->sym[i].name)) {
|
||||
xctx->inst[i].color = -PINLAYER;
|
||||
dbg(0, "instance %d --> %s, sym=%s\n", j, get_sym_name(j, 9999, 1), xctx->sym[i].name);
|
||||
if(!xctx->x_strcmp(get_sym_name(j, 9999, 1), xctx->sym[i].name)) {
|
||||
xctx->inst[j].color = -PINLAYER;
|
||||
xctx->hilight_nets=1;
|
||||
}
|
||||
}
|
||||
|
|
@ -1459,8 +1460,8 @@ int sym_vs_sch_pins()
|
|||
err |= 1;
|
||||
tcleval("show_infotext"); /* critical error: force ERC window showing */
|
||||
for(k = 0; k < xctx->instances; ++k) {
|
||||
if(!xctx->x_strcmp(tcl_hook2(xctx->inst[k].name), xctx->sym[i].name)) {
|
||||
xctx->inst[i].color = -PINLAYER;
|
||||
if(!xctx->x_strcmp(get_sym_name(k, 9999, 1), xctx->sym[i].name)) {
|
||||
xctx->inst[k].color = -PINLAYER;
|
||||
xctx->hilight_nets=1;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
30
src/token.c
30
src/token.c
|
|
@ -851,12 +851,12 @@ static void print_vhdl_primitive(FILE *fd, int inst) /* netlist primitives, 200
|
|||
else if(strcmp(token,"@symname")==0) /* of course symname must not be present */
|
||||
/* in hash table */
|
||||
{
|
||||
const char *s = sanitize(get_sym_name(inst, 0));
|
||||
const char *s = sanitize(get_sym_name(inst, 0, 0));
|
||||
fputs(s, fd);
|
||||
}
|
||||
else if (strcmp(token,"@symname_ext")==0)
|
||||
{
|
||||
const char *s = sanitize(get_sym_name(inst, 1));
|
||||
const char *s = sanitize(get_sym_name(inst, 0, 1));
|
||||
fputs(s, fd);
|
||||
}
|
||||
else if(strcmp(token,"@schname_ext")==0) /* of course schname must not be present */
|
||||
|
|
@ -1223,9 +1223,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(get_sym_name(inst, 0)) );
|
||||
fprintf(fd, "%d %s : %s\n", tmp, lab, sanitize(get_sym_name(inst, 0, 0)) );
|
||||
else /* name in some strange format, probably an error */
|
||||
fprintf(fd, "1 %s : %s\n", name, sanitize(get_sym_name(inst, 0)) );
|
||||
fprintf(fd, "1 %s : %s\n", name, sanitize(get_sym_name(inst, 0, 0)) );
|
||||
dbg(2, "print_vhdl_element(): printing generics passed as properties\n");
|
||||
|
||||
|
||||
|
|
@ -1864,7 +1864,7 @@ int print_spice_element(FILE *fd, int inst)
|
|||
}
|
||||
else if (strcmp(token,"@symname")==0) /* of course symname must not be present in attributes */
|
||||
{
|
||||
const char *s = sanitize(get_sym_name(inst, 0));
|
||||
const char *s = sanitize(get_sym_name(inst, 0, 0));
|
||||
tmp = strlen(s) +100 ; /* always make room for some extra chars
|
||||
* so 1-char writes to result do not need reallocs */
|
||||
STR_ALLOC(&result, tmp + result_pos, &size);
|
||||
|
|
@ -1873,7 +1873,7 @@ int print_spice_element(FILE *fd, int inst)
|
|||
}
|
||||
else if (strcmp(token,"@symname_ext")==0) /* of course symname must not be present in attributes */
|
||||
{
|
||||
const char *s = sanitize(get_sym_name(inst, 1));
|
||||
const char *s = sanitize(get_sym_name(inst, 0, 1));
|
||||
tmp = strlen(s) +100 ; /* always make room for some extra chars
|
||||
* so 1-char writes to result do not need reallocs */
|
||||
STR_ALLOC(&result, tmp + result_pos, &size);
|
||||
|
|
@ -2094,7 +2094,7 @@ void print_tedax_element(FILE *fd, int inst)
|
|||
int n;
|
||||
Int_hashtable table={NULL, 0};
|
||||
subcircuit = 1;
|
||||
fprintf(fd, "__subcircuit__ %s %s\n", sanitize(get_sym_name(inst, 0)), xctx->inst[inst].instname);
|
||||
fprintf(fd, "__subcircuit__ %s %s\n", sanitize(get_sym_name(inst, 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));
|
||||
|
|
@ -2231,12 +2231,12 @@ void print_tedax_element(FILE *fd, int inst)
|
|||
else if(strcmp(token,"@symname")==0) /* of course symname must not be present */
|
||||
/* in hash table */
|
||||
{
|
||||
const char *s = sanitize(get_sym_name(inst, 0));
|
||||
const char *s = sanitize(get_sym_name(inst, 0, 0));
|
||||
fputs(s, fd);
|
||||
}
|
||||
else if (strcmp(token,"@symname_ext")==0)
|
||||
{
|
||||
const char *s = sanitize(get_sym_name(inst, 1));
|
||||
const char *s = sanitize(get_sym_name(inst, 0, 1));
|
||||
fputs(s, fd);
|
||||
}
|
||||
else if(strcmp(token,"@schname_ext")==0) /* of course schname must not be present */
|
||||
|
|
@ -2472,12 +2472,12 @@ static void print_verilog_primitive(FILE *fd, int inst) /* netlist switch level
|
|||
else if(strcmp(token,"@symname")==0) /* of course symname must not be present */
|
||||
/* in hash table */
|
||||
{
|
||||
const char *s = sanitize(get_sym_name(inst, 0));
|
||||
const char *s = sanitize(get_sym_name(inst, 0, 0));
|
||||
fputs(s, fd);
|
||||
}
|
||||
else if (strcmp(token,"@symname_ext")==0)
|
||||
{
|
||||
const char *s = sanitize(get_sym_name(inst, 1));
|
||||
const char *s = sanitize(get_sym_name(inst, 0, 1));
|
||||
fputs(s, fd);
|
||||
}
|
||||
else if(strcmp(token,"@schname_ext")==0) /* of course schname must not be present */
|
||||
|
|
@ -2620,9 +2620,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));
|
||||
my_strcat(_ALLOC_ID_, &symname, get_sym_name(inst, 0, 0));
|
||||
} else {
|
||||
my_strdup(_ALLOC_ID_, &symname, get_sym_name(inst, 0));
|
||||
my_strdup(_ALLOC_ID_, &symname, get_sym_name(inst, 0, 0));
|
||||
}
|
||||
my_free(_ALLOC_ID_, &verilogprefix);
|
||||
my_strdup(_ALLOC_ID_, &template, (xctx->inst[inst].ptr + xctx->sym)->templ);
|
||||
|
|
@ -2976,7 +2976,7 @@ const char *translate(int inst, const char* s)
|
|||
memcpy(result+result_pos,xctx->inst[inst].instname, tmp+1);
|
||||
result_pos+=tmp;
|
||||
} else if(strcmp(token,"@symname")==0) {
|
||||
tmp_sym_name = get_sym_name(inst, 0);
|
||||
tmp_sym_name = get_sym_name(inst, 0, 0);
|
||||
tmp_sym_name=tmp_sym_name ? tmp_sym_name : "";
|
||||
tmp=strlen(tmp_sym_name);
|
||||
STR_ALLOC(&result, tmp + result_pos, &size);
|
||||
|
|
@ -2989,7 +2989,7 @@ const char *translate(int inst, const char* s)
|
|||
memcpy(result+result_pos, path, tmp+1);
|
||||
result_pos+=tmp;
|
||||
} else if(strcmp(token,"@symname_ext")==0) {
|
||||
tmp_sym_name = get_sym_name(inst, 1);
|
||||
tmp_sym_name = get_sym_name(inst, 0, 1);
|
||||
tmp_sym_name=tmp_sym_name ? tmp_sym_name : "";
|
||||
tmp=strlen(tmp_sym_name);
|
||||
STR_ALLOC(&result, tmp + result_pos, &size);
|
||||
|
|
|
|||
|
|
@ -1309,7 +1309,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);
|
||||
extern const char *get_sym_name(int inst, int ext);
|
||||
extern const char *get_sym_name(int inst, int ndir, int ext);
|
||||
extern void get_additional_symbols(int what);
|
||||
extern int descend_schematic(int instnumber);
|
||||
extern void go_back(int confirm);
|
||||
|
|
|
|||
Loading…
Reference in New Issue