|
|
|
@ -198,7 +198,7 @@ struct inp_read_t { |
|
|
|
int line_number; |
|
|
|
}; |
|
|
|
|
|
|
|
struct inp_read_t inp_read( FILE *fp, int call_depth, const char *dir_name, |
|
|
|
static struct inp_read_t inp_read( FILE *fp, int call_depth, const char *dir_name, |
|
|
|
const char* file_name, bool comfile, bool intfile); |
|
|
|
|
|
|
|
|
|
|
|
@ -432,7 +432,7 @@ static int is_xspice_model(char* buf) |
|
|
|
*/ |
|
|
|
|
|
|
|
struct card *insert_new_line( |
|
|
|
struct card *card, char *line, int linenum, int linenum_orig) |
|
|
|
struct card *card, char *line, int linenum, int linenum_orig, char *lineinfo) |
|
|
|
{ |
|
|
|
struct card *x = TMALLOC(struct card, 1); |
|
|
|
|
|
|
|
@ -443,6 +443,7 @@ struct card *insert_new_line( |
|
|
|
x->linenum = linenum; |
|
|
|
x->linenum_orig = linenum_orig; |
|
|
|
x->level = card ? card->level : NULL; |
|
|
|
x->linesource = lineinfo; |
|
|
|
|
|
|
|
if (card) |
|
|
|
card->nextcard = x; |
|
|
|
@ -828,7 +829,7 @@ static void inp_cider_models(struct card* working) |
|
|
|
} |
|
|
|
else { |
|
|
|
prev->actualLine = |
|
|
|
insert_new_line(NULL, s, prev->linenum, prev->linenum_orig); |
|
|
|
insert_new_line(NULL, s, prev->linenum, prev->linenum_orig, prev->linesource); |
|
|
|
prev->actualLine->level = prev->level; |
|
|
|
prev->actualLine->nextcard = working; |
|
|
|
} |
|
|
|
@ -1242,7 +1243,7 @@ struct card *inp_readall(FILE *fp, const char *dir_name, const char* file_name, |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
struct inp_read_t inp_read(FILE* fp, int call_depth, const char* dir_name, |
|
|
|
static struct inp_read_t inp_read(FILE* fp, int call_depth, const char* dir_name, |
|
|
|
const char* file_name, bool comfile, bool intfile) |
|
|
|
/* fp: in, pointer to file to be read, |
|
|
|
call_depth: in, nested call to fcn |
|
|
|
@ -1465,7 +1466,7 @@ struct inp_read_t inp_read(FILE* fp, int call_depth, const char* dir_name, |
|
|
|
/* append `buffer' to the (cc, end) chain of decks */ |
|
|
|
{ |
|
|
|
end = insert_new_line( |
|
|
|
end, copy(buffer), line_number, line_number); |
|
|
|
end, copy(buffer), line_number, line_number, NULL); |
|
|
|
|
|
|
|
if (!cc) |
|
|
|
cc = end; |
|
|
|
@ -1700,8 +1701,7 @@ struct inp_read_t inp_read(FILE* fp, int call_depth, const char* dir_name, |
|
|
|
|
|
|
|
{ |
|
|
|
end = insert_new_line( |
|
|
|
end, copy(buffer), line_number++, line_number_orig++); |
|
|
|
end->linesource = sourcelineinfo; |
|
|
|
end, copy(buffer), line_number++, line_number_orig++, sourcelineinfo); |
|
|
|
if (!cc) |
|
|
|
cc = end; |
|
|
|
} |
|
|
|
@ -1722,10 +1722,10 @@ struct inp_read_t inp_read(FILE* fp, int call_depth, const char* dir_name, |
|
|
|
|
|
|
|
if (call_depth == 0 && !comfile) { |
|
|
|
if (!cp_getvar("no_auto_gnd", CP_BOOL, NULL, 0)) |
|
|
|
insert_new_line(cc, copy(".global gnd"), 1, 0); |
|
|
|
insert_new_line(cc, copy(".global gnd"), 1, 0, "internal"); |
|
|
|
else |
|
|
|
insert_new_line( |
|
|
|
cc, copy("* gnd is not set to 0 automatically "), 1, 0); |
|
|
|
cc, copy("* gnd is not set to 0 automatically "), 1, 0, "internal"); |
|
|
|
|
|
|
|
if (!newcompat.lt && !newcompat.ps && !newcompat.s3) { |
|
|
|
/* process all library section references */ |
|
|
|
@ -1740,7 +1740,7 @@ struct inp_read_t inp_read(FILE* fp, int call_depth, const char* dir_name, |
|
|
|
if (call_depth == 0 && !comfile) |
|
|
|
if (found_end == TRUE) |
|
|
|
end = insert_new_line( |
|
|
|
end, copy(".end"), line_number++, line_number_orig++); |
|
|
|
end, copy(".end"), line_number++, line_number_orig++, end->linesource); |
|
|
|
|
|
|
|
/* Replace first line with the new title, if available */ |
|
|
|
if (call_depth == 0 && !comfile && new_title) { |
|
|
|
@ -2220,8 +2220,8 @@ static int inp_chk_for_multi_in_vcvs(struct card *c, int *line_number) |
|
|
|
tfree(xy_values2[1]); |
|
|
|
|
|
|
|
*c->line = '*'; |
|
|
|
c = insert_new_line(c, m_instance, (*line_number)++, c->linenum_orig); |
|
|
|
c = insert_new_line(c, m_model, (*line_number)++, c->linenum_orig); |
|
|
|
c = insert_new_line(c, m_instance, (*line_number)++, c->linenum_orig, c->linesource); |
|
|
|
c = insert_new_line(c, m_model, (*line_number)++, c->linenum_orig, c->linesource); |
|
|
|
#endif |
|
|
|
return 1; |
|
|
|
} else { |
|
|
|
@ -2401,7 +2401,7 @@ static void replace_freq(struct card *c, int *line_number) |
|
|
|
|
|
|
|
line = tprintf("b_gen_%.*s gen_node_%.*s 0 v=%.*s", |
|
|
|
BSTR(e), BSTR(e), BSTR(expr)); |
|
|
|
c = insert_new_line(c, line, (*line_number)++, c->linenum_orig); |
|
|
|
c = insert_new_line(c, line, (*line_number)++, c->linenum_orig, c->linesource); |
|
|
|
if (n2) { |
|
|
|
line = tprintf("a_gen_%.*s gen_node_%.*s %%%cd(%.*s %.*s) " |
|
|
|
"gen_model_%.*s", |
|
|
|
@ -2412,13 +2412,13 @@ static void replace_freq(struct card *c, int *line_number) |
|
|
|
BSTR(e), BSTR(e), pt, BSTR(n1), BSTR(e)); |
|
|
|
} |
|
|
|
} |
|
|
|
c = insert_new_line(c, line, (*line_number)++, c->linenum_orig); |
|
|
|
c = insert_new_line(c, line, (*line_number)++, c->linenum_orig, c->linesource); |
|
|
|
|
|
|
|
line = tprintf(".model gen_model_%.*s xfer %s table = [%.*s]", |
|
|
|
BSTR(e), |
|
|
|
ri ? "r_i=true" : rad ? "rad=true" : !db ? "db=false" : "", |
|
|
|
BSTR(list)); |
|
|
|
c = insert_new_line(c, line, (*line_number)++, c->linenum_orig); |
|
|
|
c = insert_new_line(c, line, (*line_number)++, c->linenum_orig, c->linesource); |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
@ -2489,12 +2489,12 @@ static void inp_add_control_section(struct card *deck, int *line_number) |
|
|
|
if (last_end) |
|
|
|
prev_card = last_end; |
|
|
|
for (lp = cards; *lp; ++lp) |
|
|
|
prev_card = insert_new_line(prev_card, copy(*lp), (*line_number)++, 0); |
|
|
|
prev_card = insert_new_line(prev_card, copy(*lp), (*line_number)++, 0, "internal"); |
|
|
|
if (cp_getvar("rawfile", CP_STRING, rawfile, sizeof(rawfile))) { |
|
|
|
line = tprintf("write %s", rawfile); |
|
|
|
prev_card = insert_new_line(prev_card, line, (*line_number)++, 0); |
|
|
|
prev_card = insert_new_line(prev_card, line, (*line_number)++, 0, "internal"); |
|
|
|
} |
|
|
|
insert_new_line(prev_card, copy(".endc"), (*line_number)++, 0); |
|
|
|
insert_new_line(prev_card, copy(".endc"), (*line_number)++, 0, "internal"); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -3410,7 +3410,7 @@ static char *inp_fix_subckt(struct names *subckt_w_params, char *s) |
|
|
|
beg = skip_back_non_ws(beg, s); |
|
|
|
beg[-1] = '\0'; /* fixme can be < s */ |
|
|
|
|
|
|
|
head = insert_new_line(NULL, NULL, 0, 0); |
|
|
|
head = insert_new_line(NULL, NULL, 0, 0, "internal"); |
|
|
|
/* create list of parameters that need to get sorted */ |
|
|
|
first_param_card = c = NULL; |
|
|
|
while ((ptr1 = strchr(beg, '=')) != NULL) { |
|
|
|
@ -3431,7 +3431,7 @@ static char *inp_fix_subckt(struct names *subckt_w_params, char *s) |
|
|
|
|
|
|
|
beg = ptr2; |
|
|
|
|
|
|
|
c = insert_new_line(c, copy_substring(ptr1, ptr2), 0, 0); |
|
|
|
c = insert_new_line(c, copy_substring(ptr1, ptr2), 0, 0, "internal"); |
|
|
|
|
|
|
|
if (!first_param_card) |
|
|
|
first_param_card = c; |
|
|
|
@ -3665,7 +3665,7 @@ static struct card *expand_section_ref(struct card *c, const char *dir_name) |
|
|
|
struct card *t = section_def; |
|
|
|
for (; t; t = t->nextcard) { |
|
|
|
c = insert_new_line( |
|
|
|
c, copy(t->line), t->linenum, t->linenum_orig); |
|
|
|
c, copy(t->line), t->linenum, t->linenum_orig, t->linesource); |
|
|
|
if (t == section_def) { |
|
|
|
c->line[0] = '*'; |
|
|
|
c->line[1] = '<'; |
|
|
|
@ -5450,7 +5450,7 @@ static int inp_split_multi_param_lines(struct card *card, int line_num) |
|
|
|
*(card->line) = '*'; |
|
|
|
// insert new param lines immediately after current line |
|
|
|
for (i = 0; i < counter; i++) |
|
|
|
card = insert_new_line(card, array[i], line_num++, card->linenum_orig); |
|
|
|
card = insert_new_line(card, array[i], line_num++, card->linenum_orig, card->linesource); |
|
|
|
|
|
|
|
tfree(array); |
|
|
|
} |
|
|
|
@ -5938,10 +5938,8 @@ static void inp_compat(struct card *card) |
|
|
|
// comment out current variable e line |
|
|
|
*(card->line) = '*'; |
|
|
|
// insert new lines immediately after current line |
|
|
|
char* tmpsource = card->linesource; |
|
|
|
for (i = 0; i < 2; i++) { |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber); |
|
|
|
card->linesource = copy(tmpsource); |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber, card->linesource); |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
@ -5952,10 +5950,8 @@ static void inp_compat(struct card *card) |
|
|
|
// comment out current variable e line |
|
|
|
*(card->line) = '*'; |
|
|
|
// insert new lines immediately after current line |
|
|
|
char* tmpsource = card->linesource; |
|
|
|
for (i = 0; i < 4; i++) { |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber); |
|
|
|
card->linesource = copy(tmpsource); |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber, card->linesource); |
|
|
|
} |
|
|
|
} |
|
|
|
tfree(expression); |
|
|
|
@ -6000,10 +5996,8 @@ static void inp_compat(struct card *card) |
|
|
|
// comment out current variable e line |
|
|
|
*(card->line) = '*'; |
|
|
|
// insert new B source line immediately after current line |
|
|
|
char* tmpsource = card->linesource; |
|
|
|
for (i = 0; i < 2; i++) { |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber); |
|
|
|
card->linesource = copy(tmpsource); |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber, card->linesource); |
|
|
|
} |
|
|
|
tfree(title_tok); |
|
|
|
tfree(node1); |
|
|
|
@ -6159,10 +6153,8 @@ static void inp_compat(struct card *card) |
|
|
|
// comment out current variable e line |
|
|
|
*(card->line) = '*'; |
|
|
|
// insert new lines immediately after current line |
|
|
|
char* tmpsource = card->linesource; |
|
|
|
for (i = 0; i < 2; i++) { |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber); |
|
|
|
card->linesource = copy(tmpsource); |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber, card->linesource); |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
@ -6171,10 +6163,8 @@ static void inp_compat(struct card *card) |
|
|
|
// comment out current variable g line |
|
|
|
*(card->line) = '*'; |
|
|
|
// insert new lines immediately after current line |
|
|
|
char* tmpsource = card->linesource; |
|
|
|
for (i = 0; i < 4; i++) { |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber); |
|
|
|
card->linesource = copy(tmpsource); |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber, card->linesource); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -6231,10 +6221,8 @@ static void inp_compat(struct card *card) |
|
|
|
// comment out current variable g line |
|
|
|
*(card->line) = '*'; |
|
|
|
// insert new B source line immediately after current line |
|
|
|
char* tmpsource = card->linesource; |
|
|
|
for (i = 0; i < 2; i++) { |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber); |
|
|
|
card->linesource = copy(tmpsource); |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber, card->linesource); |
|
|
|
} |
|
|
|
|
|
|
|
tfree(title_tok); |
|
|
|
@ -6280,10 +6268,8 @@ static void inp_compat(struct card *card) |
|
|
|
// comment out current variable f line |
|
|
|
*(card->line) = '*'; |
|
|
|
// insert new three lines immediately after current line |
|
|
|
char* tmpsource = card->linesource; |
|
|
|
for (i = 0; i < 3; i++) { |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber); |
|
|
|
card->linesource = copy(tmpsource); |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber, card->linesource); |
|
|
|
} |
|
|
|
|
|
|
|
tfree(title_tok); |
|
|
|
@ -6329,10 +6315,8 @@ static void inp_compat(struct card *card) |
|
|
|
// comment out current variable h line |
|
|
|
*(card->line) = '*'; |
|
|
|
// insert new three lines immediately after current line |
|
|
|
char* tmpsource = card->linesource; |
|
|
|
for (i = 0; i < 3; i++) { |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber); |
|
|
|
card->linesource = copy(tmpsource); |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber, card->linesource); |
|
|
|
} |
|
|
|
|
|
|
|
tfree(title_tok); |
|
|
|
@ -6404,16 +6388,11 @@ static void inp_compat(struct card *card) |
|
|
|
// comment out current old R line |
|
|
|
*(card->line) = '*'; |
|
|
|
// insert new B source line immediately after current line |
|
|
|
char* tmpsource = card->linesource; |
|
|
|
card = insert_new_line(card, xline, 1, currlinenumber); |
|
|
|
card->linesource = copy(tmpsource); |
|
|
|
card = insert_new_line(card, xline, 1, currlinenumber, card->linesource); |
|
|
|
if (rnoise) { |
|
|
|
card = insert_new_line(card, x2line, 2, currlinenumber); |
|
|
|
card->linesource = copy(tmpsource); |
|
|
|
card = insert_new_line(card, x3line, 3, currlinenumber); |
|
|
|
card->linesource = copy(tmpsource); |
|
|
|
card = insert_new_line(card, x4line, 4, currlinenumber); |
|
|
|
card->linesource = copy(tmpsource); |
|
|
|
card = insert_new_line(card, x2line, 2, currlinenumber, card->linesource); |
|
|
|
card = insert_new_line(card, x3line, 3, currlinenumber, card->linesource); |
|
|
|
card = insert_new_line(card, x4line, 4, currlinenumber, card->linesource); |
|
|
|
} |
|
|
|
|
|
|
|
tfree(title_tok); |
|
|
|
@ -6488,10 +6467,8 @@ static void inp_compat(struct card *card) |
|
|
|
// comment out current variable capacitor line |
|
|
|
*(card->line) = '*'; |
|
|
|
// insert new B source line immediately after current line |
|
|
|
char* tmpsource = card->linesource; |
|
|
|
for (i = 0; i < 3; i++) { |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber); |
|
|
|
card->linesource = copy(tmpsource); |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber, card->linesource); |
|
|
|
} |
|
|
|
|
|
|
|
tfree(title_tok); |
|
|
|
@ -6550,10 +6527,8 @@ static void inp_compat(struct card *card) |
|
|
|
// comment out current variable inductor line |
|
|
|
*(card->line) = '*'; |
|
|
|
// insert new B source line immediately after current line |
|
|
|
char* tmpsource = card->linesource; |
|
|
|
for (i = 0; i < 3; i++) { |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber); |
|
|
|
card->linesource = copy(tmpsource); |
|
|
|
card = insert_new_line(card, ckt_array[i], (int)i + 1, currlinenumber, card->linesource); |
|
|
|
} |
|
|
|
|
|
|
|
tfree(title_tok); |
|
|
|
@ -6712,7 +6687,7 @@ static void inp_compat(struct card *card) |
|
|
|
card->line = inp_remove_ws(curr_line); |
|
|
|
// insert new B source line immediately after current line |
|
|
|
for (ii = paui; ii < pai; ii++) |
|
|
|
card = insert_new_line(card, ckt_array[ii], (int)ii + 1, currlinenumber); |
|
|
|
card = insert_new_line(card, ckt_array[ii], (int)ii + 1, currlinenumber, card->linesource); |
|
|
|
|
|
|
|
paui = pai; |
|
|
|
} |
|
|
|
@ -6809,7 +6784,7 @@ static void inp_compat(struct card *card) |
|
|
|
// *(ckt_array[0]) = '*'; |
|
|
|
// insert new B source line immediately after current line |
|
|
|
for (ii = paui; ii < pai; ii++) |
|
|
|
card = insert_new_line(card, ckt_array[ii], (int)ii + 1, currlinenumber); |
|
|
|
card = insert_new_line(card, ckt_array[ii], (int)ii + 1, currlinenumber, card->linesource); |
|
|
|
|
|
|
|
paui = pai; |
|
|
|
// continue; |
|
|
|
@ -6910,7 +6885,7 @@ static void inp_bsource_compat(struct card *card) |
|
|
|
// insert new B source line immediately after current line |
|
|
|
/* Copy old line numbers into new B source line */ |
|
|
|
card = insert_new_line( |
|
|
|
card, final_str, card->linenum, card->linenum_orig); |
|
|
|
card, final_str, card->linenum, card->linenum_orig, card->linesource); |
|
|
|
|
|
|
|
tfree(new_str); |
|
|
|
} /* end of if 'b' */ |
|
|
|
@ -7271,8 +7246,8 @@ static void inp_add_series_resistor(struct card *deck) |
|
|
|
*(card->line) = '*'; |
|
|
|
|
|
|
|
// insert new new L and R lines immediately after current line |
|
|
|
card = insert_new_line(card, newL, 1, currlinenumber); |
|
|
|
card = insert_new_line(card, newR, 2, currlinenumber); |
|
|
|
card = insert_new_line(card, newL, 1, currlinenumber, card->linesource); |
|
|
|
card = insert_new_line(card, newR, 2, currlinenumber, card->linesource); |
|
|
|
|
|
|
|
tfree(title_tok); |
|
|
|
tfree(node1); |
|
|
|
@ -7308,7 +7283,7 @@ static void subckt_params_to_param(struct card *card) |
|
|
|
/* card->line ends with subcircuit name */ |
|
|
|
cut_line[-1] = '\0'; |
|
|
|
/* insert new_line after card->line */ |
|
|
|
insert_new_line(card, new_line, card->linenum + 1, card->linenum_orig); |
|
|
|
insert_new_line(card, new_line, card->linenum + 1, card->linenum_orig, card->linesource); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -7668,7 +7643,7 @@ static void inp_fix_temper_in_param(struct card *deck) |
|
|
|
} |
|
|
|
else { |
|
|
|
/* Or just enter new line into deck */ |
|
|
|
insert_new_line(card, new_str, 0, card->linenum); |
|
|
|
insert_new_line(card, new_str, 0, card->linenum_orig, card->linesource); |
|
|
|
*card->line = '*'; |
|
|
|
} |
|
|
|
} |
|
|
|
@ -7877,7 +7852,7 @@ static void inp_fix_agauss_in_param(struct card *deck, char *fcn) |
|
|
|
|
|
|
|
*card->line = '*'; |
|
|
|
/* Enter new line into deck */ |
|
|
|
insert_new_line(card, new_str, 0, card->linenum); |
|
|
|
insert_new_line(card, new_str, 0, card->linenum_orig, card->linesource); |
|
|
|
} |
|
|
|
} |
|
|
|
/* final memory clearance */ |
|
|
|
@ -7946,7 +7921,7 @@ static struct func_temper *inp_new_func(char *funcname, char *funcbody, |
|
|
|
new_str = tprintf(".func %s() %s", funcname, funcbody); |
|
|
|
|
|
|
|
*card->line = '*'; |
|
|
|
insert_new_line(card, new_str, 0, card->linenum); |
|
|
|
insert_new_line(card, new_str, 0, card->linenum_orig, card->linesource); |
|
|
|
|
|
|
|
return f; |
|
|
|
} |
|
|
|
@ -8449,7 +8424,7 @@ static void inp_meas_current(struct card *deck) |
|
|
|
new_line = tprintf("%s %s %s_vmeas_%d 0", |
|
|
|
new_tok, node1, node1, sn); |
|
|
|
/* insert new_line after card->line */ |
|
|
|
insert_new_line(card, new_line, card->linenum + 1, card->linenum_orig); |
|
|
|
insert_new_line(card, new_line, card->linenum + 1, card->linenum_orig, card->linesource); |
|
|
|
} |
|
|
|
sn++; |
|
|
|
tfree(new_tok); |
|
|
|
|