diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c index b48371188..dcfe11ac4 100644 --- a/src/frontend/inpcom.c +++ b/src/frontend/inpcom.c @@ -1608,10 +1608,15 @@ is_a_modelname(const char *s) } +struct nlist { + char **names; + int num_names; +}; + + static void get_subckts_for_subckt(struct line *start_card, char *subckt_name, - char *used_subckt_names[], int *num_used_subckt_names, - char *used_model_names[], int *num_used_model_names, + struct nlist *used_subckts, struct nlist *used_models, bool has_models) { struct line *card; @@ -1642,24 +1647,24 @@ get_subckts_for_subckt(struct line *start_card, char *subckt_name, if (*line == 'x') { char *inst_subckt_name = get_instance_subckt(line); bool have_subckt = FALSE; - for (i = 0; i < *num_used_subckt_names; i++) - if (strcmp(used_subckt_names[i], inst_subckt_name) == 0) + for (i = 0; i < used_subckts->num_names; i++) + if (strcmp(used_subckts->names[i], inst_subckt_name) == 0) have_subckt = TRUE; if (!have_subckt) { - new_names[tmp_cnt++] = used_subckt_names[*num_used_subckt_names] = inst_subckt_name; - *num_used_subckt_names += 1; + new_names[tmp_cnt++] = used_subckts->names[used_subckts->num_names] = inst_subckt_name; + used_subckts->num_names += 1; } else { tfree(inst_subckt_name); } } else if (*line == 'a') { char *model_name = get_adevice_model_name(line); bool found_model = FALSE; - for (i = 0; i < *num_used_model_names; i++) - if (strcmp(used_model_names[i], model_name) == 0) + for (i = 0; i < used_models->num_names; i++) + if (strcmp(used_models->names[i], model_name) == 0) found_model = TRUE; if (!found_model) { - used_model_names[*num_used_model_names] = model_name; - *num_used_model_names += 1; + used_models->names[used_models->num_names] = model_name; + used_models->num_names += 1; } else { tfree(model_name); } @@ -1671,11 +1676,11 @@ get_subckts_for_subckt(struct line *start_card, char *subckt_name, if (is_a_modelname(model_name)) { bool found_model = FALSE; - for (i = 0; i < *num_used_model_names; i++) - if (strcmp(used_model_names[i], model_name) == 0) found_model = TRUE; + for (i = 0; i < used_models->num_names; i++) + if (strcmp(used_models->names[i], model_name) == 0) found_model = TRUE; if (!found_model) { - used_model_names[*num_used_model_names] = model_name; - *num_used_model_names += 1; + used_models->names[used_models->num_names] = model_name; + used_models->num_names += 1; } else { tfree(model_name); } @@ -1689,8 +1694,8 @@ get_subckts_for_subckt(struct line *start_card, char *subckt_name, // now make recursive call on instances just found above for (i = 0; i < tmp_cnt; i++) - get_subckts_for_subckt(start_card, new_names[i], used_subckt_names, num_used_subckt_names, - used_model_names, num_used_model_names, has_models); + get_subckts_for_subckt(start_card, new_names[i], + used_subckts, used_models, has_models); } @@ -1704,8 +1709,8 @@ static void comment_out_unused_subckt_models(struct line *start_card, int no_of_lines) { struct line *card; - char **used_subckt_names, **used_model_names; - int num_used_subckt_names = 0, num_used_model_names = 0, i = 0, tmp_cnt = 0; + struct nlist used_subckts, used_models; + int i = 0, tmp_cnt = 0; bool processing_subckt = FALSE, remove_subckt = FALSE, has_models = FALSE; int skip_control = 0, nested_subckt = 0; @@ -1714,8 +1719,10 @@ comment_out_unused_subckt_models(struct line *start_card, int no_of_lines) if (no_of_lines < 1000) no_of_lines = 1000; - used_subckt_names = TMALLOC(char*, no_of_lines); - used_model_names = TMALLOC(char*, no_of_lines); + used_subckts.names = TMALLOC(char*, no_of_lines); + used_models.names = TMALLOC(char*, no_of_lines); + used_subckts.num_names = 0; + used_models.num_names = 0; for (card = start_card; card; card = card->li_next) { if (ciprefix(".model", card->li_line)) @@ -1753,10 +1760,10 @@ comment_out_unused_subckt_models(struct line *start_card, int no_of_lines) if (*line == 'x') { char *subckt_name = get_instance_subckt(line); bool found_subckt = FALSE; - for (i = 0; i < num_used_subckt_names; i++) - if (strcmp(used_subckt_names[i], subckt_name) == 0) found_subckt = TRUE; + for (i = 0; i < used_subckts.num_names; i++) + if (strcmp(used_subckts.names[i], subckt_name) == 0) found_subckt = TRUE; if (!found_subckt) { - used_subckt_names[num_used_subckt_names++] = subckt_name; + used_subckts.names[used_subckts.num_names++] = subckt_name; tmp_cnt++; } else { tfree(subckt_name); @@ -1764,11 +1771,11 @@ comment_out_unused_subckt_models(struct line *start_card, int no_of_lines) } else if (*line == 'a') { char *model_name = get_adevice_model_name(line); bool found_model = FALSE; - for (i = 0; i < num_used_model_names; i++) - if (strcmp(used_model_names[i], model_name) == 0) + for (i = 0; i < used_models.num_names; i++) + if (strcmp(used_models.names[i], model_name) == 0) found_model = TRUE; if (!found_model) - used_model_names[num_used_model_names++] = model_name; + used_models.names[used_models.num_names++] = model_name; else tfree(model_name); } else if (has_models) { @@ -1780,14 +1787,14 @@ comment_out_unused_subckt_models(struct line *start_card, int no_of_lines) char *model_name = get_model_name(line, num_terminals); /* Check if model has already been recognized, if not, add its name to - list used_model_names[i] */ + list used_models.names[i] */ if (is_a_modelname(model_name)) { bool found_model = FALSE; - for (i = 0; i < num_used_model_names; i++) - if (strcmp(used_model_names[i], model_name) == 0) + for (i = 0; i < used_models.num_names; i++) + if (strcmp(used_models.names[i], model_name) == 0) found_model = TRUE; if (!found_model) - used_model_names[num_used_model_names++] = model_name; + used_models.names[used_models.num_names++] = model_name; else tfree(model_name); } else { @@ -1799,10 +1806,8 @@ comment_out_unused_subckt_models(struct line *start_card, int no_of_lines) } /* for loop through all cards */ for (i = 0; i < tmp_cnt; i++) - get_subckts_for_subckt - (start_card, used_subckt_names[i], - used_subckt_names, &num_used_subckt_names, - used_model_names, &num_used_model_names, has_models); + get_subckts_for_subckt(start_card, used_subckts.names[i], + &used_subckts, &used_models, has_models); /* comment out any unused subckts, currently only at top level */ for (card = start_card; card; card = card->li_next) { @@ -1818,8 +1823,8 @@ comment_out_unused_subckt_models(struct line *start_card, int no_of_lines) if (nested_subckt == 1) { /* check if unused, only at top level */ remove_subckt = TRUE; - for (i = 0; i < num_used_subckt_names; i++) - if (strcmp(used_subckt_names[i], subckt_name) == 0) + for (i = 0; i < used_subckts.num_names; i++) + if (strcmp(used_subckts.names[i], subckt_name) == 0) remove_subckt = FALSE; } tfree(subckt_name); @@ -1850,8 +1855,8 @@ comment_out_unused_subckt_models(struct line *start_card, int no_of_lines) { found_model = TRUE; } else { - for (i = 0; i < num_used_model_names; i++) - if (model_name_match(used_model_names[i], model_name)) { + for (i = 0; i < used_models.num_names; i++) + if (model_name_match(used_models.names[i], model_name)) { found_model = TRUE; break; } @@ -1863,12 +1868,12 @@ comment_out_unused_subckt_models(struct line *start_card, int no_of_lines) } } - for (i = 0; i < num_used_subckt_names; i++) - tfree(used_subckt_names[i]); - for (i = 0; i < num_used_model_names; i++) - tfree(used_model_names[i]); - tfree(used_subckt_names); - tfree(used_model_names); + for (i = 0; i < used_subckts.num_names; i++) + tfree(used_subckts.names[i]); + for (i = 0; i < used_models.num_names; i++) + tfree(used_models.names[i]); + tfree(used_subckts.names); + tfree(used_models.names); }