version 1.12, 1999/12/16 17:24:11 |
version 1.13, 1999/12/16 17:27:18 |
|
|
char *text; /* unexpanded text */ |
char *text; /* unexpanded text */ |
char *var; /* Index name */ |
char *var; /* Index name */ |
Lst lst; /* List of items */ |
Lst lst; /* List of items */ |
|
size_t guess; /* Estimated expansion size */ |
BUFFER buf; /* Accumulating text */ |
BUFFER buf; /* Accumulating text */ |
unsigned long lineno; /* Line number at start of loop */ |
unsigned long lineno; /* Line number at start of loop */ |
unsigned long level; /* Nesting level */ |
unsigned long level; /* Nesting level */ |
|
|
arg->var = interval_dup(wrd, endVar); |
arg->var = interval_dup(wrd, endVar); |
|
|
/* Make a list with the remaining words. */ |
/* Make a list with the remaining words. */ |
sub = Var_Subst(NULL, ptr, VAR_GLOBAL, FALSE); |
sub = Var_Subst(ptr, VAR_GLOBAL, FALSE); |
if (DEBUG(FOR)) |
if (DEBUG(FOR)) |
(void)fprintf(stderr, "For: Iterator %s List %s\n", arg->var, sub); |
(void)fprintf(stderr, "For: Iterator %s List %s\n", arg->var, sub); |
|
|
|
|
} |
} |
|
|
|
|
|
#define GUESS_EXPANSION 32 |
/*- |
/*- |
*----------------------------------------------------------------------- |
*----------------------------------------------------------------------- |
* ForExec -- |
* ForExec -- |
|
|
char *name = (char *)namep; |
char *name = (char *)namep; |
For *arg = (For *)argp; |
For *arg = (For *)argp; |
|
|
|
Buf_Init(&arg->buf, arg->guess); |
Var_Set(arg->var, name, VAR_GLOBAL); |
Var_Set(arg->var, name, VAR_GLOBAL); |
if (DEBUG(FOR)) |
if (DEBUG(FOR)) |
(void)fprintf(stderr, "--- %s = %s\n", arg->var, name); |
(void)fprintf(stderr, "--- %s = %s\n", arg->var, name); |
Parse_FromString(Var_Subst(arg->var, arg->text, VAR_GLOBAL, FALSE), |
Var_SubstVar(&arg->buf, arg->text, arg->var, VAR_GLOBAL); |
arg->lineno); |
if (Buf_Size(&arg->buf) >= arg->guess) |
|
arg->guess = Buf_Size(&arg->buf) + GUESS_EXPANSION; |
|
|
|
Parse_FromString(Buf_Retrieve(&arg->buf), arg->lineno); |
Var_Delete(arg->var, VAR_GLOBAL); |
Var_Delete(arg->var, VAR_GLOBAL); |
return 0; |
return 0; |
} |
} |
|
|
For *arg; |
For *arg; |
{ |
{ |
arg->text = Buf_Retrieve(&arg->buf); |
arg->text = Buf_Retrieve(&arg->buf); |
|
arg->guess = Buf_Size(&arg->buf) + GUESS_EXPANSION; |
|
|
Lst_ForEach(arg->lst, ForExec, (ClientData)arg); |
Lst_ForEach(arg->lst, ForExec, (ClientData)arg); |
free(arg->var); |
free(arg->var); |