cleanup, use wl_cons(), wl_append_word() and wl_chop_rest()

This commit is contained in:
rlar 2012-07-14 10:23:51 +02:00
parent d9ddaec784
commit 9655b9885a
19 changed files with 78 additions and 281 deletions

View File

@ -116,9 +116,7 @@ common(char *string, struct wordlist *wl, struct comm *command)
if ((buf = prompt(cp_in)) == NULL) /* prompt aborted */ if ((buf = prompt(cp_in)) == NULL) /* prompt aborted */
return; /* don't execute command */ return; /* don't execute command */
/* do something with the wordlist */ /* do something with the wordlist */
w = alloc(struct wordlist); w = wl_cons(buf, NULL);
w->wl_word = buf;
w->wl_next = NULL;
w = process(w); w = process(w);
/* O.K. now call fn */ /* O.K. now call fn */

View File

@ -133,10 +133,7 @@ dohsubst(char *string)
break; break;
case '\0': /* Maybe this should be cp_event. */ case '\0': /* Maybe this should be cp_event. */
wl = alloc(struct wordlist); wl = wl_cons(copy("!"), NULL);
wl->wl_word = copy("!");
wl->wl_next = NULL;
wl->wl_prev = NULL;
cp_didhsubst = FALSE; cp_didhsubst = FALSE;
return (wl); return (wl);

View File

@ -1095,7 +1095,7 @@ com_alter_common(wordlist *wl, int do_model)
char *argument; char *argument;
char **arglist; char **arglist;
int i=0, step=0, n, wlen, maxelem=3; int i=0, step=0, n, wlen, maxelem=3;
wordlist *wl2 = NULL, *wlin, *wleq; wordlist *wl2 = NULL, *wlin, *rhs;
bool eqfound = FALSE, vecfound = FALSE; bool eqfound = FALSE, vecfound = FALSE;
if (!ft_curckt) { if (!ft_curckt) {
@ -1207,18 +1207,9 @@ com_alter_common(wordlist *wl, int do_model)
return; return;
} }
/* add the '=' */ /* 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; wlin = wlin->wl_prev;
/* add ' = value' */ rhs = wl_chop_rest(wlin);
wlin->wl_next = wleq; wlin = wl_append(wlin, wl_cons(copy("="), rhs));
wleq->wl_prev = wlin;
if(wleq->wl_next)
wleq->wl_next->wl_prev = wleq;
/* step back until 'alter' or 'altermod' is found, /* step back until 'alter' or 'altermod' is found,
then move one step forward */ then move one step forward */
while (!ciprefix("alter",wlin->wl_word)) //while (!ciprefix(wlin->wl_word,"alter")) 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 * static wordlist *
devexpand(char *name) devexpand(char *name)
{ {
wordlist *wl, *devices, *tw; wordlist *wl, *devices;
if (strchr(name, '*') || strchr(name, '[') || strchr(name, '?')) { if (strchr(name, '*') || strchr(name, '[') || strchr(name, '?')) {
devices = cp_cctowl(ft_curckt->ci_devices); devices = cp_cctowl(ft_curckt->ci_devices);
for (wl = NULL; devices; devices = devices->wl_next) for (wl = NULL; devices; devices = devices->wl_next)
if (cp_globmatch(name, devices->wl_word)) { if (cp_globmatch(name, devices->wl_word)) {
tw = alloc(struct wordlist); wl = wl_cons(devices->wl_word, wl);
if (wl) {
wl->wl_prev = tw;
tw->wl_next = wl;
wl = tw;
} else
wl = tw;
wl->wl_word = devices->wl_word;
} }
} else if (cieq(name, "all")) { } else if (cieq(name, "all")) {
wl = cp_cctowl(ft_curckt->ci_devices); wl = cp_cctowl(ft_curckt->ci_devices);
} else { } else {
wl = alloc(struct wordlist); wl = wl_cons(name, NULL);
wl->wl_word = name;
} }
wl_sort(wl); wl_sort(wl);
return (wl); return (wl);

View File

@ -438,17 +438,10 @@ fixdotplot(wordlist *wl)
d2 = *d; d2 = *d;
tfree(wl->wl_word); tfree(wl->wl_word);
wl->wl_word = copy("xlimit"); wl->wl_word = copy("xlimit");
wl->wl_next = alloc(struct wordlist);
wl->wl_next->wl_prev = wl;
wl = wl->wl_next;
printnum(numbuf, d1); printnum(numbuf, d1);
wl->wl_word = copy(numbuf); wl_append_word(NULL, &wl, copy(numbuf));
wl->wl_next = alloc(struct wordlist);
wl->wl_next->wl_prev = wl;
wl = wl->wl_next;
printnum(numbuf, d2); printnum(numbuf, d2);
wl->wl_word = copy(numbuf); wl_append_word(NULL, &wl, copy(numbuf));
} }
wl = wl->wl_next; wl = wl->wl_next;
} }
@ -544,8 +537,7 @@ gettoks(char *s)
continue; continue;
l =strrchr(t, '('/*)*/); l =strrchr(t, '('/*)*/);
if (!l) { if (!l) {
wl = alloc(struct wordlist); wl = wl_cons(copy(t), NULL);
wl->wl_word = copy(t);
*prevp = wl; *prevp = wl;
prevp = &wl->wl_next; prevp = &wl->wl_next;
continue; continue;
@ -560,7 +552,9 @@ gettoks(char *s)
if (c) if (c)
*c = 0; *c = 0;
wl = alloc(struct wordlist); wl = wl_cons(NULL, NULL);
*prevp = wl;
prevp = &wl->wl_next;
if (*(l - 1) == 'i' || *(l - 1) == 'I') { if (*(l - 1) == 'i' || *(l - 1) == 'I') {
char buf[513]; char buf[513];
@ -570,13 +564,9 @@ gettoks(char *s)
} else } else
wl->wl_word = copy(l + 1); wl->wl_word = copy(l + 1);
*prevp = wl;
prevp = &wl->wl_next;
if (c != r) { if (c != r) {
*r = 0; *r = 0;
wl = alloc(struct wordlist); wl = wl_cons(copy(c + 1), NULL);
wl->wl_word = copy(c + 1);
*prevp = wl; *prevp = wl;
prevp = &wl->wl_next; prevp = &wl->wl_next;
} }

View File

@ -64,7 +64,7 @@ hlp_read(fplace *place)
topic *top = alloc(topic); topic *top = alloc(topic);
toplink *topiclink; toplink *topiclink;
toplink *tl, *tend = NULL; toplink *tl, *tend = NULL;
wordlist *wl, *end = NULL; wordlist *end = NULL;
int i, fchanges; int i, fchanges;
char *s; char *s;
bool mof = FALSE; bool mof = FALSE;
@ -104,14 +104,7 @@ hlp_read(fplace *place)
((s[0] == '_') && (s[1] == '\b'))) ((s[0] == '_') && (s[1] == '\b')))
fchanges++; fchanges++;
*s = '\0'; *s = '\0';
wl = alloc(wordlist); wl_append_word(&(top->text), &end, copy(&buf[6]));
wl->wl_word = copy(&buf[6]);
if (end)
end->wl_next = wl;
else
top->text = wl;
wl->wl_prev = end;
end = wl;
top->numlines++; top->numlines++;
i = (int) strlen(&buf[6]) - fchanges; i = (int) strlen(&buf[6]) - fchanges;
if (top->maxcols < i) if (top->maxcols < i)

View File

@ -442,24 +442,18 @@ inp_spsource(FILE *fp, bool comfile, char *filename)
else else
fprintf(cp_err, "Warning: misplaced .endc card\n"); fprintf(cp_err, "Warning: misplaced .endc card\n");
} else if (commands || prefix("*#", dd->li_line)) { } 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 */ /* more control lines */
if (prefix("*#", dd->li_line)) if (prefix("*#", dd->li_line))
wl->wl_word = copy(dd->li_line + 2); s = copy(dd->li_line + 2);
else { 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) */ 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. /* Look for set or unset numparams.
If either are found then we evaluate these lines immediately If either are found then we evaluate these lines immediately
so they take effect before netlist parsing */ so they take effect before netlist parsing */
s = wl->wl_word;
while(isspace(*s)) s++; /* step past any white space */ while(isspace(*s)) s++; /* step past any white space */
if(ciprefix("set", s)) { if(ciprefix("set", s)) {
s+=3; s+=3;
@ -492,13 +486,7 @@ inp_spsource(FILE *fp, bool comfile, char *filename)
|| eq(s, ".op") || eq(s, ".op")
|| ciprefix(".meas", s) || ciprefix(".meas", s)
|| eq(s, ".tf")) { || eq(s, ".tf")) {
if (end) { wl_append_word(&wl_first, &end, copy(dd->li_line));
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);
if (!eq(s, ".op") && !eq(s, ".tf") && !ciprefix(".meas", s)) { if (!eq(s, ".op") && !eq(s, ".tf") && !ciprefix(".meas", s)) {
ld->li_next = dd->li_next; ld->li_next = dd->li_next;
@ -561,7 +549,6 @@ inp_spsource(FILE *fp, bool comfile, char *filename)
if ( ciprefix(".csparam", dd->li_line) ) { if ( ciprefix(".csparam", dd->li_line) ) {
wordlist *wlist = NULL; wordlist *wlist = NULL;
wordlist *wl = NULL; wordlist *wl = NULL;
wordlist *cwl;
char *cstoken[3]; char *cstoken[3];
int i; int i;
s = dd->li_line; s = dd->li_line;
@ -572,16 +559,7 @@ inp_spsource(FILE *fp, bool comfile, char *filename)
cstoken[1]=gettok_char(&s, '=', TRUE); cstoken[1]=gettok_char(&s, '=', TRUE);
cstoken[2]=gettok(&s); cstoken[2]=gettok(&s);
for (i=0; i<3;i++) { for (i=0; i<3;i++) {
cwl = alloc(struct wordlist); wl_append_word(&wlist, &wl, cstoken[i]);
cwl->wl_prev = wl;
if (wl)
wl->wl_next = cwl;
else {
wlist = cwl;
cwl->wl_next = NULL;
}
cwl->wl_word = cstoken[i];
wl = cwl;
} }
com_let(wlist); com_let(wlist);
wl_free(wlist); wl_free(wlist);

View File

@ -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 *line, *beg_of_str, *end_of_str, *old_str, *equal_ptr, *new_str;
char *vec_str, *natok, *buffer, *newvec, *whereisgt; char *vec_str, *natok, *buffer, *newvec, *whereisgt;
bool control_section = FALSE; bool control_section = FALSE;
wordlist *wl, *nwl; wordlist *nwl;
int parens; int parens;
while ( c != NULL ) { while ( c != NULL ) {
@ -3097,7 +3097,6 @@ inp_fix_param_values( struct line *deck )
for (;;) { for (;;) {
natok = gettok(&vec_str); natok = gettok(&vec_str);
if (!natok) break; if (!natok) break;
wl = alloc(struct wordlist);
buffer = TMALLOC(char, strlen(natok) + 4); buffer = TMALLOC(char, strlen(natok) + 4);
if ( isdigit(*natok) || *natok == '{' || *natok == '.' || if ( isdigit(*natok) || *natok == '{' || *natok == '.' ||
@ -3130,12 +3129,8 @@ inp_fix_param_values( struct line *deck )
(void) sprintf(buffer, "{%s}", natok); (void) sprintf(buffer, "{%s}", natok);
} }
tfree(natok); tfree(natok);
wl->wl_word = copy(buffer); nwl = wl_cons(copy(buffer), nwl);
tfree(buffer); tfree(buffer);
wl->wl_next = nwl;
if (nwl)
nwl->wl_prev = wl;
nwl = wl;
} }
nwl = wl_reverse(nwl); nwl = wl_reverse(nwl);
/* new vector elements */ /* new vector elements */
@ -3165,7 +3160,6 @@ inp_fix_param_values( struct line *deck )
for (;;) { for (;;) {
natok = gettok(&vec_str); natok = gettok(&vec_str);
if (!natok) break; if (!natok) break;
wl = alloc(struct wordlist);
buffer = TMALLOC(char, strlen(natok) + 4); buffer = TMALLOC(char, strlen(natok) + 4);
if ( isdigit(*natok) || *natok == '{' || *natok == '.' || if ( isdigit(*natok) || *natok == '{' || *natok == '.' ||
@ -3176,12 +3170,8 @@ inp_fix_param_values( struct line *deck )
(void) sprintf(buffer, "{%s}", natok); (void) sprintf(buffer, "{%s}", natok);
} }
tfree(natok); tfree(natok);
wl->wl_word = copy(buffer); nwl = wl_cons(copy(buffer), nwl);
tfree(buffer); tfree(buffer);
wl->wl_next = nwl;
if (nwl)
nwl->wl_prev = wl;
nwl = wl;
} }
nwl = wl_reverse(nwl); nwl = wl_reverse(nwl);
/* new elements of complex variable */ /* 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 *equal_ptr, *str_ptr, *tmp_char, *new_str, *final_str;
char actchar, prevchar = ' '; char actchar, prevchar = ' ';
struct line *card, *new_line, *tmp_ptr; struct line *card, *new_line, *tmp_ptr;
wordlist *wl = NULL, *wlist = NULL, *cwl; wordlist *wl = NULL, *wlist = NULL;
char buf[512]; char buf[512];
size_t i, xlen, ustate = 0; size_t i, xlen, ustate = 0;
int skip_control = 0; int skip_control = 0;
@ -5008,14 +4998,7 @@ static void inp_bsource_compat(struct line *deck)
str_ptr++; str_ptr++;
if (*str_ptr == '\0') break; if (*str_ptr == '\0') break;
actchar = *str_ptr; actchar = *str_ptr;
cwl = alloc(struct wordlist); wl_append_word(&wlist, &wl, NULL);
cwl->wl_prev = wl;
if (wl)
wl->wl_next = cwl;
else {
wlist = cwl;
cwl->wl_next = NULL;
}
if ((actchar == ',') || (actchar == '(') || (actchar == ')') if ((actchar == ',') || (actchar == '(') || (actchar == ')')
|| (actchar == '*') || (actchar == '/') || (actchar == '^') || (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[0] = actchar;
buf[1] = '\0'; buf[1] = '\0';
cwl->wl_word = copy(buf); wl->wl_word = copy(buf);
str_ptr++; str_ptr++;
if (actchar == ')') ustate = 0; if (actchar == ')') ustate = 0;
else ustate = 1; /* we have an operator */ else ustate = 1; /* we have an operator */
@ -5035,22 +5018,22 @@ static void inp_bsource_compat(struct line *deck)
char *beg = str_ptr++; char *beg = str_ptr++;
if ((*str_ptr == '=') || (*str_ptr == '<') || (*str_ptr == '>')) if ((*str_ptr == '=') || (*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 */ ustate = 1; /* we have an operator */
} else if ((actchar == '|') || (actchar == '&')) { } else if ((actchar == '|') || (actchar == '&')) {
char *beg = str_ptr++; char *beg = str_ptr++;
if ((*str_ptr == '|') || (*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 */ ustate = 1; /* we have an operator */
} else if ((actchar == '-') && (ustate == 0)) { } else if ((actchar == '-') && (ustate == 0)) {
buf[0] = actchar; buf[0] = actchar;
buf[1] = '\0'; buf[1] = '\0';
cwl->wl_word = copy(buf); wl->wl_word = copy(buf);
str_ptr++; str_ptr++;
ustate = 1; /* we have an operator */ ustate = 1; /* we have an operator */
} else if ((actchar == '-') && (ustate == 1)) { } else if ((actchar == '-') && (ustate == 1)) {
cwl->wl_word = copy(""); wl->wl_word = copy("");
str_ptr++; str_ptr++;
ustate = 2; /* place a '-' in front of token */ ustate = 2; /* place a '-' in front of token */
} else if (isalpha(actchar)) { } else if (isalpha(actchar)) {
@ -5068,7 +5051,7 @@ static void inp_bsource_compat(struct line *deck)
} }
buf[i] = *str_ptr; buf[i] = *str_ptr;
buf[i+1] = '\0'; buf[i+1] = '\0';
cwl->wl_word = copy(buf); wl->wl_word = copy(buf);
str_ptr++; str_ptr++;
} else { } else {
while (isalnum(*str_ptr) || (*str_ptr == '!') || (*str_ptr == '#') while (isalnum(*str_ptr) || (*str_ptr == '!') || (*str_ptr == '#')
@ -5138,7 +5121,7 @@ static void inp_bsource_compat(struct line *deck)
str_ptr++; str_ptr++;
} }
*/ */
cwl->wl_word = copy(buf); wl->wl_word = copy(buf);
} }
else if (cieq(buf, "tc1") || cieq(buf, "tc2") || cieq(buf, "reciproctc")) { else if (cieq(buf, "tc1") || cieq(buf, "tc2") || cieq(buf, "reciproctc")) {
while (isspace(*str_ptr)) while (isspace(*str_ptr))
@ -5148,13 +5131,13 @@ static void inp_bsource_compat(struct line *deck)
buf[i++] = '='; buf[i++] = '=';
buf[i] = '\0'; buf[i] = '\0';
str_ptr++; str_ptr++;
cwl->wl_word = copy(buf); wl->wl_word = copy(buf);
} }
else { else {
xlen = strlen(buf); xlen = strlen(buf);
tmp_char = TMALLOC(char, xlen + 3); tmp_char = TMALLOC(char, xlen + 3);
sprintf(tmp_char, "{%s}", buf); sprintf(tmp_char, "{%s}", buf);
cwl->wl_word = tmp_char; wl->wl_word = tmp_char;
} }
} }
/* {} around all other tokens */ /* {} around all other tokens */
@ -5162,7 +5145,7 @@ static void inp_bsource_compat(struct line *deck)
xlen = strlen(buf); xlen = strlen(buf);
tmp_char = TMALLOC(char, xlen + 3); tmp_char = TMALLOC(char, xlen + 3);
sprintf(tmp_char, "{%s}", buf); sprintf(tmp_char, "{%s}", buf);
cwl->wl_word = tmp_char; wl->wl_word = tmp_char;
} }
} }
ustate = 0; /* we have a number */ ustate = 0; /* we have a number */
@ -5174,7 +5157,7 @@ static void inp_bsource_compat(struct line *deck)
if (ustate == 2) if (ustate == 2)
dvalue *= -1; dvalue *= -1;
sprintf(cvalue,"%18.10e", dvalue); sprintf(cvalue,"%18.10e", dvalue);
cwl->wl_word = copy(cvalue); wl->wl_word = copy(cvalue);
ustate = 0; /* we have a number */ ustate = 0; /* we have a number */
/* skip the `unit', FIXME INPevaluate() should do this */ /* skip the `unit', FIXME INPevaluate() should do this */
while(isalpha(*str_ptr)) 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); printf("Preparing B line for numparam\nWhat is this?\n%s\n", str_ptr);
buf[0] = *str_ptr; buf[0] = *str_ptr;
buf[1] = '\0'; buf[1] = '\0';
cwl->wl_word = copy(buf); wl->wl_word = copy(buf);
str_ptr++; str_ptr++;
} }
wl = cwl;
prevchar = actchar; prevchar = actchar;
} }

View File

@ -127,9 +127,7 @@ com_meas(wordlist *wl) {
} }
sprintf(newvec, "%s = %e", outvar, result); sprintf(newvec, "%s = %e", outvar, result);
wl_let = alloc(struct wordlist); wl_let = wl_cons(copy(newvec), NULL);
wl_let->wl_next = NULL;
wl_let->wl_word = copy(newvec);
com_let(wl_let); com_let(wl_let);
wl_free(wl_let); wl_free(wl_let);
// fprintf(stdout, "in: %s\n", line_in); // fprintf(stdout, "in: %s\n", line_in);
@ -433,10 +431,7 @@ static wordlist *measure_parse_line( char *line )
txfree( extra_item ) ; txfree( extra_item ) ;
item = long_str ; item = long_str ;
} }
new_item = alloc(struct wordlist) ; new_item = wl_cons(item, NULL);
new_item->wl_word = item ;
new_item->wl_next = NULL ;
new_item->wl_prev = NULL ;
wl = wl_append(wl, new_item) ; wl = wl_append(wl, new_item) ;
} while( line && *line ) ; } while( line && *line ) ;

View File

@ -119,13 +119,8 @@ inp_nutsource(FILE *fp, bool comfile, char *filename)
fprintf(cp_err, fprintf(cp_err,
"Warning: misplaced .endc line\n"); "Warning: misplaced .endc line\n");
} else if (commands || prefix("*#", dd->li_line)) { } else if (commands || prefix("*#", dd->li_line)) {
wl = alloc(struct wordlist); controls = wl_cons(NULL, controls);
if (controls) { wl = controls;
wl->wl_next = controls;
controls->wl_prev = wl;
controls = wl;
} else
controls = wl;
if (prefix("*#", dd->li_line)) if (prefix("*#", dd->li_line))
wl->wl_word = copy(dd->li_line + 2); wl->wl_word = copy(dd->li_line + 2);
else else
@ -146,13 +141,7 @@ inp_nutsource(FILE *fp, bool comfile, char *filename)
eq(s, ".plot") || eq(s, ".plot") ||
eq(s, ".print") || eq(s, ".print") ||
eq(s, ".save")) { eq(s, ".save")) {
if (end) { wl_append_word(&wl, &end, copy(dd->li_line));
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);
ld->li_next = dd->li_next; ld->li_next = dd->li_next;
tfree(dd->li_line); tfree(dd->li_line);
tfree(dd); tfree(dd);

View File

@ -107,9 +107,7 @@ backeval(char *string)
(void) pclose(proc); (void) pclose(proc);
return (wl); return (wl);
#else #else
wordlist *wl = alloc(struct wordlist); wordlist *wl = wl_cons(copy(string), NULL);
wl->wl_word = copy(string);
return (wl); return (wl);
#endif #endif
} }

View File

@ -204,7 +204,7 @@ ccfilec(char *buf)
DIR *wdir; DIR *wdir;
char *lcomp, *dir; char *lcomp, *dir;
struct direct *de; struct direct *de;
wordlist *wl = NULL, *t; wordlist *wl = NULL;
struct passwd *pw; struct passwd *pw;
buf = copy(buf); /* Don't mangle anything... */ buf = copy(buf); /* Don't mangle anything... */
@ -217,18 +217,7 @@ ccfilec(char *buf)
buf++; buf++;
while ((pw = getpwent()) != NULL) { while ((pw = getpwent()) != NULL) {
if (prefix(buf, pw->pw_name)) { if (prefix(buf, pw->pw_name)) {
if (wl == NULL) { wl = wl_cons(copy(pw->pw_name), wl);
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);
} }
} }
(void) endpwent(); (void) endpwent();
@ -249,18 +238,7 @@ ccfilec(char *buf)
while ((de = readdir(wdir)) != NULL) while ((de = readdir(wdir)) != NULL)
if ((prefix(lcomp, de->d_name)) && (*lcomp || if ((prefix(lcomp, de->d_name)) && (*lcomp ||
(*de->d_name != '.'))) { (*de->d_name != '.'))) {
if (wl == NULL) { wl = wl_cons(copy(de->d_name), wl);
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);
} }
(void) closedir(wdir); (void) closedir(wdir);
@ -345,28 +323,16 @@ cp_ccom(wordlist *wlist, char *buf, bool esc)
static wordlist * static wordlist *
cctowl(struct ccom *cc, bool sib) cctowl(struct ccom *cc, bool sib)
{ {
wordlist *wl, *end; wordlist *wl;
if (!cc) if (!cc)
return (NULL); return (NULL);
wl = cctowl(cc->cc_child, TRUE);
if (!cc->cc_invalid) { if (!cc->cc_invalid) {
wl = alloc(struct wordlist); wl = wl_cons(copy(cc->cc_name), wl);
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);
if (sib) { if (sib) {
if (wl) { wl = wl_append(wl, cctowl(cc->cc_sibling, TRUE));
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);
} }
return (wl); return (wl);
} }

View File

@ -115,11 +115,8 @@ brac1(char *string)
char *s; char *s;
int nb; int nb;
words = alloc(struct wordlist); words = wl_cons(TMALLOC(char, BSIZE_SP), NULL);
words->wl_word = TMALLOC(char, BSIZE_SP); words->wl_word[0] = '\0';
words->wl_word[0] = 0;
words->wl_next = NULL;
words->wl_prev = NULL;
for (s = string; *s; s++) { for (s = string; *s; s++) {
if (*s == cp_ocurl) { if (*s == cp_ocurl) {
nwl = brac2(s); nwl = brac2(s);
@ -141,10 +138,7 @@ brac1(char *string)
newwl = NULL; newwl = NULL;
for (wl = words; wl; wl = wl->wl_next) for (wl = words; wl; wl = wl->wl_next)
for (w = nwl; w; w = w->wl_next) { for (w = nwl; w; w = w->wl_next) {
nw = alloc(struct wordlist); nw = wl_cons(TMALLOC(char, BSIZE_SP), NULL);
nw->wl_next = NULL;
nw->wl_prev = NULL;
nw->wl_word = TMALLOC(char, BSIZE_SP);
(void) strcpy(nw->wl_word, wl->wl_word); (void) strcpy(nw->wl_word, wl->wl_word);
(void) strcat(nw->wl_word, w->wl_word); (void) strcat(nw->wl_word, w->wl_word);
newwl = wl_append(newwl, nw); newwl = wl_append(newwl, nw);

View File

@ -124,8 +124,7 @@ nloop: i = 0;
paren = 0; paren = 0;
bzero(linebuf, NEW_BSIZE_SP); bzero(linebuf, NEW_BSIZE_SP);
bzero(buf, NEW_BSIZE_SP); bzero(buf, NEW_BSIZE_SP);
wlist = cw = alloc(struct wordlist); wlist = cw = wl_cons(NULL, NULL);
cw->wl_next = cw->wl_prev = NULL;
for (;;) { for (;;) {
if (string) { if (string) {
c = *string++; c = *string++;

View File

@ -313,11 +313,8 @@ plotit(wordlist *wl, char *hcopy, char *devname)
wl = wl->wl_prev; wl = wl->wl_prev;
tw = NULL; /* Not used, so must be NULL */ tw = NULL; /* Not used, so must be NULL */
} else { } else {
tw = alloc(struct wordlist); wl = wl_cons("", wl);
wl->wl_prev = tw; tw = wl;
tw->wl_next = wl;
wl = tw;
tw->wl_word = "";
} }
sameflag = getflag(wl, "samep"); sameflag = getflag(wl, "samep");

View File

@ -410,12 +410,8 @@ raw_read(char *name) {
skip(s); skip(s);
nonl(s); nonl(s);
if (curpl) { if (curpl) {
wl = alloc(struct wordlist); curpl->pl_commands = wl_cons(copy(s), curpl->pl_commands);
wl->wl_word = copy(s); wl = curpl->pl_commands;
wl->wl_next = curpl->pl_commands;
if (curpl->pl_commands)
curpl->pl_commands->wl_prev = wl;
curpl->pl_commands = wl;
} else } else
fprintf(cp_err, fprintf(cp_err,
"Error: misplaced Command: line\n"); "Error: misplaced Command: line\n");

View File

@ -202,11 +202,7 @@ dosim(
/* add "what" to beginning of wordlist wl, except "what" equals "run" /* add "what" to beginning of wordlist wl, except "what" equals "run"
and a rawfile name is given (in wl) */ and a rawfile name is given (in wl) */
if (!dofile) { if (!dofile) {
ww = alloc(struct wordlist); ww = wl_cons(copy(what), wl);
ww->wl_next = wl;
if (wl)
wl->wl_prev = ww;
ww->wl_word = copy(what);
} }
/* reset output file type according to variable given in spinit */ /* reset output file type according to variable given in spinit */
if (cp_getvar("filetype", CP_STRING, buf)) { if (cp_getvar("filetype", CP_STRING, buf)) {

View File

@ -156,7 +156,6 @@ inp_subcktexpand(struct line *deck) {
int ok = 0; int ok = 0;
char *t; char *t;
int i; int i;
wordlist *wl;
wordlist *modnames = NULL; wordlist *modnames = NULL;
if (!cp_getvar("substart", CP_STRING, start)) if (!cp_getvar("substart", CP_STRING, start))
@ -222,12 +221,7 @@ inp_subcktexpand(struct line *deck) {
if (ciprefix(model, c->li_line)) { if (ciprefix(model, c->li_line)) {
s = c->li_line; s = c->li_line;
txfree(gettok(&s)); /* discard the model keyword */ txfree(gettok(&s)); /* discard the model keyword */
wl = alloc(struct wordlist); modnames = wl_cons(gettok(&s), modnames);
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 */
} /* model name finding routine */ } /* model name finding routine */
#ifdef TRACE #ifdef TRACE
@ -1671,7 +1665,6 @@ modtranslate(struct line *deck, char *subname, wordlist **submod, wordlist ** co
{ {
struct line *c; struct line *c;
char *buffer, *name, *t, model[4 * BSIZE_SP]; char *buffer, *name, *t, model[4 * BSIZE_SP];
wordlist *wl, *wlsub;
bool gotone; bool gotone;
(void) strcpy(model, ".model"); (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 " */ (void) sprintf(buffer, "%s ", name); /* at this point, buffer = ".model " */
tfree(name); tfree(name);
name = gettok(&t); /* name now holds model name */ name = gettok(&t); /* name now holds model name */
wlsub = alloc(struct wordlist); *submod = wl_cons(name, *submod);
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;
#ifdef TRACE #ifdef TRACE
/* SDB debug statement */ /* 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 #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 */ /* this looks like it tries to stick the translated model name into the list of model names */
t = c->li_line; t = c->li_line;
txfree(gettok(&t)); txfree(gettok(&t));
wl = alloc(struct wordlist); *modnames = wl_cons(gettok(&t), *modnames);
wl->wl_next = *modnames;
if (*modnames)
(*modnames)->wl_prev = wl;
(*modnames) = wl;
wl->wl_word = gettok(&t);
#ifdef TRACE #ifdef TRACE
/* SDB debug statement */ /* 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 #endif
} }

View File

@ -76,9 +76,7 @@ cp_varwl(struct variable *var)
var->va_type); var->va_type);
return (NULL); return (NULL);
} }
wl = alloc(struct wordlist); wl = wl_cons(copy(buf), NULL);
wl->wl_next = wl->wl_prev = NULL;
wl->wl_word = copy(buf);
return (wl); return (wl);
} }
@ -689,11 +687,10 @@ cp_variablesubst(wordlist *wlist)
if (nwl) { if (nwl) {
(void) strcat(buf, nwl->wl_word); (void) strcat(buf, nwl->wl_word);
tfree(nwl->wl_word); tfree(nwl->wl_word);
nwl->wl_word = copy(buf);
} else { } else {
nwl = alloc(struct wordlist); nwl = wl_cons(copy(buf), NULL);
nwl->wl_next = nwl->wl_prev = NULL;
} }
nwl->wl_word = copy(buf);
} }
(void) strcpy(tbuf, t); /* MW. Save t*/ (void) strcpy(tbuf, t); /* MW. Save t*/
@ -742,13 +739,8 @@ vareval(char *string)
switch (*string) { switch (*string) {
case '$': case '$':
wl = alloc(struct wordlist);
wl->wl_next = wl->wl_prev = NULL;
(void) sprintf(buf, "%d", getpid()); (void) sprintf(buf, "%d", getpid());
wl = wl_cons(copy(buf), NULL);
wl->wl_word = copy(buf);
tfree(oldstring); tfree(oldstring);
return (wl); return (wl);
@ -769,21 +761,17 @@ vareval(char *string)
return (wl); return (wl);
case '?': case '?':
wl = alloc(struct wordlist);
wl->wl_next = wl->wl_prev = NULL;
string++; string++;
for (v = variables; v; v = v->va_next) for (v = variables; v; v = v->va_next)
if (eq(v->va_name, string)) if (eq(v->va_name, string))
break; break;
if (!v) if (!v)
v = cp_enqvar(string); v = cp_enqvar(string);
wl->wl_word = copy(v ? "1" : "0"); wl = wl_cons(copy(v ? "1" : "0"), NULL);
tfree(oldstring); tfree(oldstring);
return (wl); return (wl);
case '#': case '#':
wl = alloc(struct wordlist);
wl->wl_next = wl->wl_prev = NULL;
string++; string++;
for (v = variables; v; v = v->va_next) for (v = variables; v; v = v->va_next)
if (eq(v->va_name, string)) if (eq(v->va_name, string))
@ -802,14 +790,12 @@ vareval(char *string)
else else
i = (v->va_type != CP_BOOL); i = (v->va_type != CP_BOOL);
(void) sprintf(buf, "%d", i); (void) sprintf(buf, "%d", i);
wl->wl_word = copy(buf); wl = wl_cons(copy(buf), NULL);
tfree(oldstring); tfree(oldstring);
return (wl); return (wl);
case '\0': case '\0':
wl = alloc(struct wordlist); wl = wl_cons(copy("$"), NULL);
wl->wl_next = wl->wl_prev = NULL;
wl->wl_word = copy("$");
tfree(oldstring); tfree(oldstring);
return (wl); return (wl);
} }
@ -833,9 +819,7 @@ vareval(char *string)
v = cp_enqvar(string); v = cp_enqvar(string);
} }
if (!v && (s = getenv(string)) != NULL) { if (!v && (s = getenv(string)) != NULL) {
wl = alloc(struct wordlist); wl = wl_cons(copy(s), NULL);
wl->wl_next = wl->wl_prev = NULL;
wl->wl_word = copy(s);
tfree(oldstring); tfree(oldstring);
return (wl); return (wl);
} }

View File

@ -46,17 +46,7 @@ wl_copy(wordlist *wlist)
wordlist *wl, *nwl = NULL, *w = NULL; wordlist *wl, *nwl = NULL, *w = NULL;
for (wl = wlist; wl; wl = wl->wl_next) { for (wl = wlist; wl; wl = wl->wl_next) {
if (nwl == NULL) { wl_append_word(&nwl, &w, copy(wl->wl_word));
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);
} }
return (nwl); return (nwl);
} }
@ -119,19 +109,9 @@ wl_build(char **v)
{ {
wordlist *wlist = NULL; wordlist *wlist = NULL;
wordlist *wl = NULL; wordlist *wl = NULL;
wordlist *cwl;
while (*v) { while (*v) {
cwl = alloc(struct wordlist); wl_append_word(&wlist, &wl, copy(*v));
cwl->wl_prev = wl;
if (wl)
wl->wl_next = cwl;
else {
wlist = cwl;
cwl->wl_next = NULL;
}
cwl->wl_word = copy(*v);
wl = cwl;
v++; v++;
} }
return (wlist); return (wlist);