From 9655b9885ae03cf7e97f5a0e1672e63e7aaad4be Mon Sep 17 00:00:00 2001 From: rlar Date: Sat, 14 Jul 2012 10:23:51 +0200 Subject: [PATCH] cleanup, use wl_cons(), wl_append_word() and wl_chop_rest() --- src/frontend/arg.c | 4 +-- src/frontend/com_history.c | 5 +--- src/frontend/device.c | 29 ++++--------------- src/frontend/dotcards.c | 24 +++++----------- src/frontend/help/readhelp.c | 11 ++----- src/frontend/inp.c | 34 ++++------------------ src/frontend/inpcom.c | 52 +++++++++++----------------------- src/frontend/measure.c | 9 ++---- src/frontend/nutinp.c | 17 ++--------- src/frontend/parser/backq.c | 4 +-- src/frontend/parser/complete.c | 50 ++++++-------------------------- src/frontend/parser/glob.c | 12 ++------ src/frontend/parser/lexical.c | 3 +- src/frontend/plotting/plotit.c | 7 ++--- src/frontend/rawfile.c | 8 ++---- src/frontend/runcoms.c | 6 +--- src/frontend/subckt.c | 28 ++++-------------- src/frontend/variable.c | 32 ++++++--------------- src/misc/wlist.c | 24 ++-------------- 19 files changed, 78 insertions(+), 281 deletions(-) diff --git a/src/frontend/arg.c b/src/frontend/arg.c index d18c35a11..f44e7d197 100644 --- a/src/frontend/arg.c +++ b/src/frontend/arg.c @@ -116,9 +116,7 @@ common(char *string, struct wordlist *wl, struct comm *command) if ((buf = prompt(cp_in)) == NULL) /* prompt aborted */ return; /* don't execute command */ /* do something with the wordlist */ - w = alloc(struct wordlist); - w->wl_word = buf; - w->wl_next = NULL; + w = wl_cons(buf, NULL); w = process(w); /* O.K. now call fn */ diff --git a/src/frontend/com_history.c b/src/frontend/com_history.c index 233a2cc18..0d7c3ac8e 100644 --- a/src/frontend/com_history.c +++ b/src/frontend/com_history.c @@ -133,10 +133,7 @@ dohsubst(char *string) break; case '\0': /* Maybe this should be cp_event. */ - wl = alloc(struct wordlist); - wl->wl_word = copy("!"); - wl->wl_next = NULL; - wl->wl_prev = NULL; + wl = wl_cons(copy("!"), NULL); cp_didhsubst = FALSE; return (wl); diff --git a/src/frontend/device.c b/src/frontend/device.c index 24fdaa8d1..c09b07ff6 100644 --- a/src/frontend/device.c +++ b/src/frontend/device.c @@ -1095,7 +1095,7 @@ com_alter_common(wordlist *wl, int do_model) char *argument; char **arglist; int i=0, step=0, n, wlen, maxelem=3; - wordlist *wl2 = NULL, *wlin, *wleq; + wordlist *wl2 = NULL, *wlin, *rhs; bool eqfound = FALSE, vecfound = FALSE; if (!ft_curckt) { @@ -1207,18 +1207,9 @@ com_alter_common(wordlist *wl, int do_model) return; } /* add the '=' */ - /* create wordlist with '=' */ - wleq = TMALLOC(wordlist, 1); - wleq->wl_word = copy("="); - /* add the last element (the value of the param - value pair) */ - wleq->wl_next = wlin; - /* move back one element to place equal sign */ wlin = wlin->wl_prev; - /* add ' = value' */ - wlin->wl_next = wleq; - wleq->wl_prev = wlin; - if(wleq->wl_next) - wleq->wl_next->wl_prev = wleq; + rhs = wl_chop_rest(wlin); + wlin = wl_append(wlin, wl_cons(copy("="), rhs)); /* step back until 'alter' or 'altermod' is found, then move one step forward */ while (!ciprefix("alter",wlin->wl_word)) //while (!ciprefix(wlin->wl_word,"alter")) @@ -1353,26 +1344,18 @@ com_alter_common(wordlist *wl, int do_model) static wordlist * devexpand(char *name) { - wordlist *wl, *devices, *tw; + wordlist *wl, *devices; if (strchr(name, '*') || strchr(name, '[') || strchr(name, '?')) { devices = cp_cctowl(ft_curckt->ci_devices); for (wl = NULL; devices; devices = devices->wl_next) if (cp_globmatch(name, devices->wl_word)) { - tw = alloc(struct wordlist); - if (wl) { - wl->wl_prev = tw; - tw->wl_next = wl; - wl = tw; - } else - wl = tw; - wl->wl_word = devices->wl_word; + wl = wl_cons(devices->wl_word, wl); } } else if (cieq(name, "all")) { wl = cp_cctowl(ft_curckt->ci_devices); } else { - wl = alloc(struct wordlist); - wl->wl_word = name; + wl = wl_cons(name, NULL); } wl_sort(wl); return (wl); diff --git a/src/frontend/dotcards.c b/src/frontend/dotcards.c index f3548d8df..9acace659 100644 --- a/src/frontend/dotcards.c +++ b/src/frontend/dotcards.c @@ -438,17 +438,10 @@ fixdotplot(wordlist *wl) d2 = *d; tfree(wl->wl_word); wl->wl_word = copy("xlimit"); - wl->wl_next = alloc(struct wordlist); - wl->wl_next->wl_prev = wl; - wl = wl->wl_next; - printnum(numbuf, d1); - wl->wl_word = copy(numbuf); - wl->wl_next = alloc(struct wordlist); - wl->wl_next->wl_prev = wl; - wl = wl->wl_next; + wl_append_word(NULL, &wl, copy(numbuf)); printnum(numbuf, d2); - wl->wl_word = copy(numbuf); + wl_append_word(NULL, &wl, copy(numbuf)); } wl = wl->wl_next; } @@ -544,8 +537,7 @@ gettoks(char *s) continue; l =strrchr(t, '('/*)*/); if (!l) { - wl = alloc(struct wordlist); - wl->wl_word = copy(t); + wl = wl_cons(copy(t), NULL); *prevp = wl; prevp = &wl->wl_next; continue; @@ -560,7 +552,9 @@ gettoks(char *s) if (c) *c = 0; - wl = alloc(struct wordlist); + wl = wl_cons(NULL, NULL); + *prevp = wl; + prevp = &wl->wl_next; if (*(l - 1) == 'i' || *(l - 1) == 'I') { char buf[513]; @@ -570,13 +564,9 @@ gettoks(char *s) } else wl->wl_word = copy(l + 1); - *prevp = wl; - prevp = &wl->wl_next; - if (c != r) { *r = 0; - wl = alloc(struct wordlist); - wl->wl_word = copy(c + 1); + wl = wl_cons(copy(c + 1), NULL); *prevp = wl; prevp = &wl->wl_next; } diff --git a/src/frontend/help/readhelp.c b/src/frontend/help/readhelp.c index c9af59c91..970d61ec7 100644 --- a/src/frontend/help/readhelp.c +++ b/src/frontend/help/readhelp.c @@ -64,7 +64,7 @@ hlp_read(fplace *place) topic *top = alloc(topic); toplink *topiclink; toplink *tl, *tend = NULL; - wordlist *wl, *end = NULL; + wordlist *end = NULL; int i, fchanges; char *s; bool mof = FALSE; @@ -104,14 +104,7 @@ hlp_read(fplace *place) ((s[0] == '_') && (s[1] == '\b'))) fchanges++; *s = '\0'; - wl = alloc(wordlist); - wl->wl_word = copy(&buf[6]); - if (end) - end->wl_next = wl; - else - top->text = wl; - wl->wl_prev = end; - end = wl; + wl_append_word(&(top->text), &end, copy(&buf[6])); top->numlines++; i = (int) strlen(&buf[6]) - fchanges; if (top->maxcols < i) diff --git a/src/frontend/inp.c b/src/frontend/inp.c index af8fe8675..23b3b3b3b 100644 --- a/src/frontend/inp.c +++ b/src/frontend/inp.c @@ -442,24 +442,18 @@ inp_spsource(FILE *fp, bool comfile, char *filename) else fprintf(cp_err, "Warning: misplaced .endc card\n"); } else if (commands || prefix("*#", dd->li_line)) { - wl = alloc(struct wordlist); - if (controls) { - wl->wl_next = controls; - controls->wl_prev = wl; - controls = wl; - } else - controls = wl; /* more control lines */ if (prefix("*#", dd->li_line)) - wl->wl_word = copy(dd->li_line + 2); + s = copy(dd->li_line + 2); else { - wl->wl_word = dd->li_line; + s = dd->li_line; dd->li_line = 0; /* SJB - prevent line_free() freeing the string (now pointed at by wl->wl_word) */ } + controls = wl_cons(s, controls); + wl = controls; /* Look for set or unset numparams. If either are found then we evaluate these lines immediately so they take effect before netlist parsing */ - s = wl->wl_word; while(isspace(*s)) s++; /* step past any white space */ if(ciprefix("set", s)) { s+=3; @@ -492,13 +486,7 @@ inp_spsource(FILE *fp, bool comfile, char *filename) || eq(s, ".op") || ciprefix(".meas", s) || eq(s, ".tf")) { - if (end) { - end->wl_next = alloc(struct wordlist); - end->wl_next->wl_prev = end; - end = end->wl_next; - } else - wl_first = end = alloc(struct wordlist); - end->wl_word = copy(dd->li_line); + wl_append_word(&wl_first, &end, copy(dd->li_line)); if (!eq(s, ".op") && !eq(s, ".tf") && !ciprefix(".meas", s)) { ld->li_next = dd->li_next; @@ -561,7 +549,6 @@ inp_spsource(FILE *fp, bool comfile, char *filename) if ( ciprefix(".csparam", dd->li_line) ) { wordlist *wlist = NULL; wordlist *wl = NULL; - wordlist *cwl; char *cstoken[3]; int i; s = dd->li_line; @@ -572,16 +559,7 @@ inp_spsource(FILE *fp, bool comfile, char *filename) cstoken[1]=gettok_char(&s, '=', TRUE); cstoken[2]=gettok(&s); for (i=0; i<3;i++) { - cwl = alloc(struct wordlist); - cwl->wl_prev = wl; - if (wl) - wl->wl_next = cwl; - else { - wlist = cwl; - cwl->wl_next = NULL; - } - cwl->wl_word = cstoken[i]; - wl = cwl; + wl_append_word(&wlist, &wl, cstoken[i]); } com_let(wlist); wl_free(wlist); diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c index acf2a5af3..445fa57d1 100644 --- a/src/frontend/inpcom.c +++ b/src/frontend/inpcom.c @@ -2990,7 +2990,7 @@ inp_fix_param_values( struct line *deck ) char *line, *beg_of_str, *end_of_str, *old_str, *equal_ptr, *new_str; char *vec_str, *natok, *buffer, *newvec, *whereisgt; bool control_section = FALSE; - wordlist *wl, *nwl; + wordlist *nwl; int parens; while ( c != NULL ) { @@ -3097,7 +3097,6 @@ inp_fix_param_values( struct line *deck ) for (;;) { natok = gettok(&vec_str); if (!natok) break; - wl = alloc(struct wordlist); buffer = TMALLOC(char, strlen(natok) + 4); if ( isdigit(*natok) || *natok == '{' || *natok == '.' || @@ -3130,12 +3129,8 @@ inp_fix_param_values( struct line *deck ) (void) sprintf(buffer, "{%s}", natok); } tfree(natok); - wl->wl_word = copy(buffer); + nwl = wl_cons(copy(buffer), nwl); tfree(buffer); - wl->wl_next = nwl; - if (nwl) - nwl->wl_prev = wl; - nwl = wl; } nwl = wl_reverse(nwl); /* new vector elements */ @@ -3165,7 +3160,6 @@ inp_fix_param_values( struct line *deck ) for (;;) { natok = gettok(&vec_str); if (!natok) break; - wl = alloc(struct wordlist); buffer = TMALLOC(char, strlen(natok) + 4); if ( isdigit(*natok) || *natok == '{' || *natok == '.' || @@ -3176,12 +3170,8 @@ inp_fix_param_values( struct line *deck ) (void) sprintf(buffer, "{%s}", natok); } tfree(natok); - wl->wl_word = copy(buffer); + nwl = wl_cons(copy(buffer), nwl); tfree(buffer); - wl->wl_next = nwl; - if (nwl) - nwl->wl_prev = wl; - nwl = wl; } nwl = wl_reverse(nwl); /* new elements of complex variable */ @@ -4959,7 +4949,7 @@ static void inp_bsource_compat(struct line *deck) char *equal_ptr, *str_ptr, *tmp_char, *new_str, *final_str; char actchar, prevchar = ' '; struct line *card, *new_line, *tmp_ptr; - wordlist *wl = NULL, *wlist = NULL, *cwl; + wordlist *wl = NULL, *wlist = NULL; char buf[512]; size_t i, xlen, ustate = 0; int skip_control = 0; @@ -5008,14 +4998,7 @@ static void inp_bsource_compat(struct line *deck) str_ptr++; if (*str_ptr == '\0') break; actchar = *str_ptr; - cwl = alloc(struct wordlist); - cwl->wl_prev = wl; - if (wl) - wl->wl_next = cwl; - else { - wlist = cwl; - cwl->wl_next = NULL; - } + wl_append_word(&wlist, &wl, NULL); if ((actchar == ',') || (actchar == '(') || (actchar == ')') || (actchar == '*') || (actchar == '/') || (actchar == '^') || (actchar == '+') || (actchar == '?') || (actchar == ':')) { @@ -5025,7 +5008,7 @@ static void inp_bsource_compat(struct line *deck) } buf[0] = actchar; buf[1] = '\0'; - cwl->wl_word = copy(buf); + wl->wl_word = copy(buf); str_ptr++; if (actchar == ')') ustate = 0; else ustate = 1; /* we have an operator */ @@ -5035,22 +5018,22 @@ static void inp_bsource_compat(struct line *deck) char *beg = str_ptr++; if ((*str_ptr == '=') || (*str_ptr == '<') || (*str_ptr == '>')) str_ptr++; - cwl->wl_word = copy_substring(beg, str_ptr); + wl->wl_word = copy_substring(beg, str_ptr); ustate = 1; /* we have an operator */ } else if ((actchar == '|') || (actchar == '&')) { char *beg = str_ptr++; if ((*str_ptr == '|') || (*str_ptr == '&')) str_ptr++; - cwl->wl_word = copy_substring(beg, str_ptr); + wl->wl_word = copy_substring(beg, str_ptr); ustate = 1; /* we have an operator */ } else if ((actchar == '-') && (ustate == 0)) { buf[0] = actchar; buf[1] = '\0'; - cwl->wl_word = copy(buf); + wl->wl_word = copy(buf); str_ptr++; ustate = 1; /* we have an operator */ } else if ((actchar == '-') && (ustate == 1)) { - cwl->wl_word = copy(""); + wl->wl_word = copy(""); str_ptr++; ustate = 2; /* place a '-' in front of token */ } else if (isalpha(actchar)) { @@ -5068,7 +5051,7 @@ static void inp_bsource_compat(struct line *deck) } buf[i] = *str_ptr; buf[i+1] = '\0'; - cwl->wl_word = copy(buf); + wl->wl_word = copy(buf); str_ptr++; } else { while (isalnum(*str_ptr) || (*str_ptr == '!') || (*str_ptr == '#') @@ -5138,7 +5121,7 @@ static void inp_bsource_compat(struct line *deck) str_ptr++; } */ - cwl->wl_word = copy(buf); + wl->wl_word = copy(buf); } else if (cieq(buf, "tc1") || cieq(buf, "tc2") || cieq(buf, "reciproctc")) { while (isspace(*str_ptr)) @@ -5148,13 +5131,13 @@ static void inp_bsource_compat(struct line *deck) buf[i++] = '='; buf[i] = '\0'; str_ptr++; - cwl->wl_word = copy(buf); + wl->wl_word = copy(buf); } else { xlen = strlen(buf); tmp_char = TMALLOC(char, xlen + 3); sprintf(tmp_char, "{%s}", buf); - cwl->wl_word = tmp_char; + wl->wl_word = tmp_char; } } /* {} around all other tokens */ @@ -5162,7 +5145,7 @@ static void inp_bsource_compat(struct line *deck) xlen = strlen(buf); tmp_char = TMALLOC(char, xlen + 3); sprintf(tmp_char, "{%s}", buf); - cwl->wl_word = tmp_char; + wl->wl_word = tmp_char; } } ustate = 0; /* we have a number */ @@ -5174,7 +5157,7 @@ static void inp_bsource_compat(struct line *deck) if (ustate == 2) dvalue *= -1; sprintf(cvalue,"%18.10e", dvalue); - cwl->wl_word = copy(cvalue); + wl->wl_word = copy(cvalue); ustate = 0; /* we have a number */ /* skip the `unit', FIXME INPevaluate() should do this */ while(isalpha(*str_ptr)) @@ -5183,10 +5166,9 @@ static void inp_bsource_compat(struct line *deck) printf("Preparing B line for numparam\nWhat is this?\n%s\n", str_ptr); buf[0] = *str_ptr; buf[1] = '\0'; - cwl->wl_word = copy(buf); + wl->wl_word = copy(buf); str_ptr++; } - wl = cwl; prevchar = actchar; } diff --git a/src/frontend/measure.c b/src/frontend/measure.c index 2f1480cea..25f6d789f 100644 --- a/src/frontend/measure.c +++ b/src/frontend/measure.c @@ -127,9 +127,7 @@ com_meas(wordlist *wl) { } sprintf(newvec, "%s = %e", outvar, result); - wl_let = alloc(struct wordlist); - wl_let->wl_next = NULL; - wl_let->wl_word = copy(newvec); + wl_let = wl_cons(copy(newvec), NULL); com_let(wl_let); wl_free(wl_let); // fprintf(stdout, "in: %s\n", line_in); @@ -433,10 +431,7 @@ static wordlist *measure_parse_line( char *line ) txfree( extra_item ) ; item = long_str ; } - new_item = alloc(struct wordlist) ; - new_item->wl_word = item ; - new_item->wl_next = NULL ; - new_item->wl_prev = NULL ; + new_item = wl_cons(item, NULL); wl = wl_append(wl, new_item) ; } while( line && *line ) ; diff --git a/src/frontend/nutinp.c b/src/frontend/nutinp.c index 0ee23b747..4f58f0d31 100644 --- a/src/frontend/nutinp.c +++ b/src/frontend/nutinp.c @@ -119,13 +119,8 @@ inp_nutsource(FILE *fp, bool comfile, char *filename) fprintf(cp_err, "Warning: misplaced .endc line\n"); } else if (commands || prefix("*#", dd->li_line)) { - wl = alloc(struct wordlist); - if (controls) { - wl->wl_next = controls; - controls->wl_prev = wl; - controls = wl; - } else - controls = wl; + controls = wl_cons(NULL, controls); + wl = controls; if (prefix("*#", dd->li_line)) wl->wl_word = copy(dd->li_line + 2); else @@ -146,13 +141,7 @@ inp_nutsource(FILE *fp, bool comfile, char *filename) eq(s, ".plot") || eq(s, ".print") || eq(s, ".save")) { - if (end) { - end->wl_next = alloc(struct wordlist); - end->wl_next->wl_prev = end; - end = end->wl_next; - } else - wl = end = alloc(struct wordlist); - end->wl_word = copy(dd->li_line); + wl_append_word(&wl, &end, copy(dd->li_line)); ld->li_next = dd->li_next; tfree(dd->li_line); tfree(dd); diff --git a/src/frontend/parser/backq.c b/src/frontend/parser/backq.c index 499a72155..1ebd213e6 100644 --- a/src/frontend/parser/backq.c +++ b/src/frontend/parser/backq.c @@ -107,9 +107,7 @@ backeval(char *string) (void) pclose(proc); return (wl); #else - wordlist *wl = alloc(struct wordlist); - - wl->wl_word = copy(string); + wordlist *wl = wl_cons(copy(string), NULL); return (wl); #endif } diff --git a/src/frontend/parser/complete.c b/src/frontend/parser/complete.c index 29ff54980..c87026446 100644 --- a/src/frontend/parser/complete.c +++ b/src/frontend/parser/complete.c @@ -204,7 +204,7 @@ ccfilec(char *buf) DIR *wdir; char *lcomp, *dir; struct direct *de; - wordlist *wl = NULL, *t; + wordlist *wl = NULL; struct passwd *pw; buf = copy(buf); /* Don't mangle anything... */ @@ -217,18 +217,7 @@ ccfilec(char *buf) buf++; while ((pw = getpwent()) != NULL) { if (prefix(buf, pw->pw_name)) { - if (wl == NULL) { - wl = alloc(struct wordlist); - wl->wl_next = NULL; - wl->wl_prev = NULL; - } else { - t = wl; - wl = alloc(struct wordlist); - wl->wl_prev = NULL; - wl->wl_next = t; - t->wl_prev = wl; - } - wl->wl_word = copy(pw->pw_name); + wl = wl_cons(copy(pw->pw_name), wl); } } (void) endpwent(); @@ -249,18 +238,7 @@ ccfilec(char *buf) while ((de = readdir(wdir)) != NULL) if ((prefix(lcomp, de->d_name)) && (*lcomp || (*de->d_name != '.'))) { - if (wl == NULL) { - wl = alloc(struct wordlist); - wl->wl_next = NULL; - wl->wl_prev = NULL; - } else { - t = wl; - wl = alloc(struct wordlist); - wl->wl_next = t; - t->wl_prev = wl; - wl->wl_prev = NULL; - } - wl->wl_word = copy(de->d_name); + wl = wl_cons(copy(de->d_name), wl); } (void) closedir(wdir); @@ -345,28 +323,16 @@ cp_ccom(wordlist *wlist, char *buf, bool esc) static wordlist * cctowl(struct ccom *cc, bool sib) { - wordlist *wl, *end; + wordlist *wl; if (!cc) return (NULL); + wl = cctowl(cc->cc_child, TRUE); if (!cc->cc_invalid) { - wl = alloc(struct wordlist); - wl->wl_word = copy(cc->cc_name); - wl->wl_prev = NULL; - wl->wl_next = cctowl(cc->cc_child, TRUE); - if (wl->wl_next) - wl->wl_next->wl_prev = wl; - } else - wl = cctowl(cc->cc_child, TRUE); + wl = wl_cons(copy(cc->cc_name), wl); + } if (sib) { - if (wl) { - for (end = wl; end->wl_next; end = end->wl_next) - ; - end->wl_next = cctowl(cc->cc_sibling, TRUE); - if (end->wl_next) - end->wl_next->wl_prev = end; - } else - wl = cctowl(cc->cc_sibling, TRUE); + wl = wl_append(wl, cctowl(cc->cc_sibling, TRUE)); } return (wl); } diff --git a/src/frontend/parser/glob.c b/src/frontend/parser/glob.c index 4a384ba48..f2f03713c 100644 --- a/src/frontend/parser/glob.c +++ b/src/frontend/parser/glob.c @@ -115,11 +115,8 @@ brac1(char *string) char *s; int nb; - words = alloc(struct wordlist); - words->wl_word = TMALLOC(char, BSIZE_SP); - words->wl_word[0] = 0; - words->wl_next = NULL; - words->wl_prev = NULL; + words = wl_cons(TMALLOC(char, BSIZE_SP), NULL); + words->wl_word[0] = '\0'; for (s = string; *s; s++) { if (*s == cp_ocurl) { nwl = brac2(s); @@ -141,10 +138,7 @@ brac1(char *string) newwl = NULL; for (wl = words; wl; wl = wl->wl_next) for (w = nwl; w; w = w->wl_next) { - nw = alloc(struct wordlist); - nw->wl_next = NULL; - nw->wl_prev = NULL; - nw->wl_word = TMALLOC(char, BSIZE_SP); + nw = wl_cons(TMALLOC(char, BSIZE_SP), NULL); (void) strcpy(nw->wl_word, wl->wl_word); (void) strcat(nw->wl_word, w->wl_word); newwl = wl_append(newwl, nw); diff --git a/src/frontend/parser/lexical.c b/src/frontend/parser/lexical.c index cfcf3d455..4b4159a74 100644 --- a/src/frontend/parser/lexical.c +++ b/src/frontend/parser/lexical.c @@ -124,8 +124,7 @@ nloop: i = 0; paren = 0; bzero(linebuf, NEW_BSIZE_SP); bzero(buf, NEW_BSIZE_SP); - wlist = cw = alloc(struct wordlist); - cw->wl_next = cw->wl_prev = NULL; + wlist = cw = wl_cons(NULL, NULL); for (;;) { if (string) { c = *string++; diff --git a/src/frontend/plotting/plotit.c b/src/frontend/plotting/plotit.c index 3d5defe82..8b205afd2 100644 --- a/src/frontend/plotting/plotit.c +++ b/src/frontend/plotting/plotit.c @@ -313,11 +313,8 @@ plotit(wordlist *wl, char *hcopy, char *devname) wl = wl->wl_prev; tw = NULL; /* Not used, so must be NULL */ } else { - tw = alloc(struct wordlist); - wl->wl_prev = tw; - tw->wl_next = wl; - wl = tw; - tw->wl_word = ""; + wl = wl_cons("", wl); + tw = wl; } sameflag = getflag(wl, "samep"); diff --git a/src/frontend/rawfile.c b/src/frontend/rawfile.c index 7c247f266..4990e7c90 100644 --- a/src/frontend/rawfile.c +++ b/src/frontend/rawfile.c @@ -410,12 +410,8 @@ raw_read(char *name) { skip(s); nonl(s); if (curpl) { - wl = alloc(struct wordlist); - wl->wl_word = copy(s); - wl->wl_next = curpl->pl_commands; - if (curpl->pl_commands) - curpl->pl_commands->wl_prev = wl; - curpl->pl_commands = wl; + curpl->pl_commands = wl_cons(copy(s), curpl->pl_commands); + wl = curpl->pl_commands; } else fprintf(cp_err, "Error: misplaced Command: line\n"); diff --git a/src/frontend/runcoms.c b/src/frontend/runcoms.c index b158ab3aa..a4041ac30 100644 --- a/src/frontend/runcoms.c +++ b/src/frontend/runcoms.c @@ -202,11 +202,7 @@ dosim( /* add "what" to beginning of wordlist wl, except "what" equals "run" and a rawfile name is given (in wl) */ if (!dofile) { - ww = alloc(struct wordlist); - ww->wl_next = wl; - if (wl) - wl->wl_prev = ww; - ww->wl_word = copy(what); + ww = wl_cons(copy(what), wl); } /* reset output file type according to variable given in spinit */ if (cp_getvar("filetype", CP_STRING, buf)) { diff --git a/src/frontend/subckt.c b/src/frontend/subckt.c index 385d73907..367f284ee 100644 --- a/src/frontend/subckt.c +++ b/src/frontend/subckt.c @@ -156,7 +156,6 @@ inp_subcktexpand(struct line *deck) { int ok = 0; char *t; int i; - wordlist *wl; wordlist *modnames = NULL; if (!cp_getvar("substart", CP_STRING, start)) @@ -222,12 +221,7 @@ inp_subcktexpand(struct line *deck) { if (ciprefix(model, c->li_line)) { s = c->li_line; txfree(gettok(&s)); /* discard the model keyword */ - wl = alloc(struct wordlist); - wl->wl_next = modnames; - if (modnames) - modnames->wl_prev = wl; - modnames = wl; - wl->wl_word = gettok(&s); /* wl->wl_word now holds name of model */ + modnames = wl_cons(gettok(&s), modnames); } /* model name finding routine */ #ifdef TRACE @@ -1671,7 +1665,6 @@ modtranslate(struct line *deck, char *subname, wordlist **submod, wordlist ** co { struct line *c; char *buffer, *name, *t, model[4 * BSIZE_SP]; - wordlist *wl, *wlsub; bool gotone; (void) strcpy(model, ".model"); @@ -1691,16 +1684,10 @@ modtranslate(struct line *deck, char *subname, wordlist **submod, wordlist ** co (void) sprintf(buffer, "%s ", name); /* at this point, buffer = ".model " */ tfree(name); name = gettok(&t); /* name now holds model name */ - wlsub = alloc(struct wordlist); - wlsub->wl_next = *submod; - if (*submod) - (*submod)->wl_prev = wlsub; - /* here's where we insert the model name into the model name list */ - *submod = wlsub; - wlsub->wl_word = name; + *submod = wl_cons(name, *submod); #ifdef TRACE /* SDB debug statement */ - printf("In modtranslate, sticking model name %s into submod\n", wlsub->wl_word); + printf("In modtranslate, sticking model name %s into submod\n", (*submod)->wl_word); #endif @@ -1719,16 +1706,11 @@ modtranslate(struct line *deck, char *subname, wordlist **submod, wordlist ** co /* this looks like it tries to stick the translated model name into the list of model names */ t = c->li_line; txfree(gettok(&t)); - wl = alloc(struct wordlist); - wl->wl_next = *modnames; - if (*modnames) - (*modnames)->wl_prev = wl; - (*modnames) = wl; - wl->wl_word = gettok(&t); + *modnames = wl_cons(gettok(&t), *modnames); #ifdef TRACE /* SDB debug statement */ - printf("In modtranslate, sticking model name %s into modnames\n", wl->wl_word); + printf("In modtranslate, sticking model name %s into modnames\n", (*modnames)->wl_word); #endif } diff --git a/src/frontend/variable.c b/src/frontend/variable.c index cfbed0d24..761f42c93 100644 --- a/src/frontend/variable.c +++ b/src/frontend/variable.c @@ -76,9 +76,7 @@ cp_varwl(struct variable *var) var->va_type); return (NULL); } - wl = alloc(struct wordlist); - wl->wl_next = wl->wl_prev = NULL; - wl->wl_word = copy(buf); + wl = wl_cons(copy(buf), NULL); return (wl); } @@ -689,11 +687,10 @@ cp_variablesubst(wordlist *wlist) if (nwl) { (void) strcat(buf, nwl->wl_word); tfree(nwl->wl_word); + nwl->wl_word = copy(buf); } else { - nwl = alloc(struct wordlist); - nwl->wl_next = nwl->wl_prev = NULL; + nwl = wl_cons(copy(buf), NULL); } - nwl->wl_word = copy(buf); } (void) strcpy(tbuf, t); /* MW. Save t*/ @@ -742,13 +739,8 @@ vareval(char *string) switch (*string) { case '$': - wl = alloc(struct wordlist); - wl->wl_next = wl->wl_prev = NULL; - - (void) sprintf(buf, "%d", getpid()); - - wl->wl_word = copy(buf); + wl = wl_cons(copy(buf), NULL); tfree(oldstring); return (wl); @@ -769,21 +761,17 @@ vareval(char *string) return (wl); case '?': - wl = alloc(struct wordlist); - wl->wl_next = wl->wl_prev = NULL; string++; for (v = variables; v; v = v->va_next) if (eq(v->va_name, string)) break; if (!v) v = cp_enqvar(string); - wl->wl_word = copy(v ? "1" : "0"); + wl = wl_cons(copy(v ? "1" : "0"), NULL); tfree(oldstring); return (wl); case '#': - wl = alloc(struct wordlist); - wl->wl_next = wl->wl_prev = NULL; string++; for (v = variables; v; v = v->va_next) if (eq(v->va_name, string)) @@ -802,14 +790,12 @@ vareval(char *string) else i = (v->va_type != CP_BOOL); (void) sprintf(buf, "%d", i); - wl->wl_word = copy(buf); + wl = wl_cons(copy(buf), NULL); tfree(oldstring); return (wl); case '\0': - wl = alloc(struct wordlist); - wl->wl_next = wl->wl_prev = NULL; - wl->wl_word = copy("$"); + wl = wl_cons(copy("$"), NULL); tfree(oldstring); return (wl); } @@ -833,9 +819,7 @@ vareval(char *string) v = cp_enqvar(string); } if (!v && (s = getenv(string)) != NULL) { - wl = alloc(struct wordlist); - wl->wl_next = wl->wl_prev = NULL; - wl->wl_word = copy(s); + wl = wl_cons(copy(s), NULL); tfree(oldstring); return (wl); } diff --git a/src/misc/wlist.c b/src/misc/wlist.c index b61987e49..a8ff2b179 100644 --- a/src/misc/wlist.c +++ b/src/misc/wlist.c @@ -46,17 +46,7 @@ wl_copy(wordlist *wlist) wordlist *wl, *nwl = NULL, *w = NULL; for (wl = wlist; wl; wl = wl->wl_next) { - if (nwl == NULL) { - nwl = w = alloc(struct wordlist); - w->wl_prev = NULL; - w->wl_next = NULL; - } else { - w->wl_next = alloc(struct wordlist); - w->wl_next->wl_prev = w; - w = w->wl_next; - w->wl_next = NULL; - } - w->wl_word = copy(wl->wl_word); + wl_append_word(&nwl, &w, copy(wl->wl_word)); } return (nwl); } @@ -119,19 +109,9 @@ wl_build(char **v) { wordlist *wlist = NULL; wordlist *wl = NULL; - wordlist *cwl; while (*v) { - cwl = alloc(struct wordlist); - cwl->wl_prev = wl; - if (wl) - wl->wl_next = cwl; - else { - wlist = cwl; - cwl->wl_next = NULL; - } - cwl->wl_word = copy(*v); - wl = cwl; + wl_append_word(&wlist, &wl, copy(*v)); v++; } return (wlist);