|
|
|
@ -276,8 +276,8 @@ static char * |
|
|
|
doblock(struct control *bl, int *num) |
|
|
|
{ |
|
|
|
struct control *ch, *cn = NULL; |
|
|
|
wordlist *wl; |
|
|
|
char *i; |
|
|
|
wordlist *wl, *wltmp; |
|
|
|
char *i, *wlword; |
|
|
|
int nn; |
|
|
|
|
|
|
|
nn = *num + 1; /*CDHW this is a guess... CDHW*/ |
|
|
|
@ -449,9 +449,8 @@ doblock(struct control *bl, int *num) |
|
|
|
break; |
|
|
|
|
|
|
|
case CO_FOREACH: |
|
|
|
for (wl = cp_variablesubst(cp_bquote(cp_doglob(wl_copy(bl->co_text)))); |
|
|
|
wl; |
|
|
|
wl = wl->wl_next) { |
|
|
|
wltmp = cp_variablesubst(cp_bquote(cp_doglob(wl_copy(bl->co_text)))); |
|
|
|
for (wl = wltmp; wl; wl = wl->wl_next) { |
|
|
|
cp_vset(bl->co_foreachvar, CP_STRING, wl->wl_word); |
|
|
|
for (ch = bl->co_children; ch; ch = cn) { |
|
|
|
cn = ch->co_next; |
|
|
|
@ -463,9 +462,11 @@ doblock(struct control *bl, int *num) |
|
|
|
|
|
|
|
case BROKEN: /* Break. */ |
|
|
|
if (nn < 2) { |
|
|
|
wl_free(wltmp); |
|
|
|
return (NORMAL_STR); |
|
|
|
} else { |
|
|
|
*num = nn - 1; |
|
|
|
wl_free(wltmp); |
|
|
|
return (BROKEN_STR); |
|
|
|
} |
|
|
|
|
|
|
|
@ -475,16 +476,20 @@ doblock(struct control *bl, int *num) |
|
|
|
break; |
|
|
|
} else { |
|
|
|
*num = nn - 1; |
|
|
|
wl_free(wltmp); |
|
|
|
return (CONTINUED_STR); |
|
|
|
} |
|
|
|
|
|
|
|
default: |
|
|
|
cn = findlabel(i, bl->co_children); |
|
|
|
if (!cn) |
|
|
|
if (!cn) { |
|
|
|
wl_free(wltmp); |
|
|
|
return (i); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
wl_free(wltmp); |
|
|
|
break; |
|
|
|
|
|
|
|
case CO_BREAK: |
|
|
|
@ -508,9 +513,11 @@ doblock(struct control *bl, int *num) |
|
|
|
} |
|
|
|
|
|
|
|
case CO_GOTO: |
|
|
|
wl = cp_variablesubst(cp_bquote(cp_doglob( |
|
|
|
wl_copy(bl->co_text)))); /*CDHW Leak ? CDHW*/ |
|
|
|
return (wl->wl_word); |
|
|
|
wl = cp_variablesubst(cp_bquote(cp_doglob(wl_copy(bl->co_text)))); |
|
|
|
wlword = wl->wl_word; |
|
|
|
wl->wl_word = NULL; |
|
|
|
wl_free(wl); |
|
|
|
return (wlword); |
|
|
|
|
|
|
|
case CO_LABEL: |
|
|
|
/* Do nothing. */ |
|
|
|
|