version 1.38, 2023/10/30 17:52:54 |
version 1.39, 2024/05/04 22:59:21 |
|
|
Cell *ofsloc; /* OFS */ |
Cell *ofsloc; /* OFS */ |
Cell *orsloc; /* ORS */ |
Cell *orsloc; /* ORS */ |
Cell *rsloc; /* RS */ |
Cell *rsloc; /* RS */ |
Array *ARGVtab; /* symbol table containing ARGV[...] */ |
Cell *ARGVcell; /* cell with symbol table containing ARGV[...] */ |
Array *ENVtab; /* symbol table containing ENVIRON[...] */ |
|
Cell *rstartloc; /* RSTART */ |
Cell *rstartloc; /* RSTART */ |
Cell *rlengthloc; /* RLENGTH */ |
Cell *rlengthloc; /* RLENGTH */ |
Cell *subseploc; /* SUBSEP */ |
Cell *subseploc; /* SUBSEP */ |
|
|
|
|
void arginit(int ac, char **av) /* set up ARGV and ARGC */ |
void arginit(int ac, char **av) /* set up ARGV and ARGC */ |
{ |
{ |
|
Array *ap; |
Cell *cp; |
Cell *cp; |
int i; |
int i; |
char temp[50]; |
char temp[50]; |
|
|
ARGC = &setsymtab("ARGC", "", (Awkfloat) ac, NUM, symtab)->fval; |
ARGC = &setsymtab("ARGC", "", (Awkfloat) ac, NUM, symtab)->fval; |
cp = setsymtab("ARGV", "", 0.0, ARR, symtab); |
cp = setsymtab("ARGV", "", 0.0, ARR, symtab); |
ARGVtab = makesymtab(NSYMTAB); /* could be (int) ARGC as well */ |
ap = makesymtab(NSYMTAB); /* could be (int) ARGC as well */ |
free(cp->sval); |
free(cp->sval); |
cp->sval = (char *) ARGVtab; |
cp->sval = (char *) ap; |
for (i = 0; i < ac; i++) { |
for (i = 0; i < ac; i++) { |
double result; |
double result; |
|
|
snprintf(temp, sizeof(temp), "%d", i); |
snprintf(temp, sizeof(temp), "%d", i); |
if (is_number(*av, & result)) |
if (is_number(*av, & result)) |
setsymtab(temp, *av, result, STR|NUM, ARGVtab); |
setsymtab(temp, *av, result, STR|NUM, ap); |
else |
else |
setsymtab(temp, *av, 0.0, STR, ARGVtab); |
setsymtab(temp, *av, 0.0, STR, ap); |
av++; |
av++; |
} |
} |
|
ARGVcell = cp; |
} |
} |
|
|
void envinit(char **envp) /* set up ENVIRON variable */ |
void envinit(char **envp) /* set up ENVIRON variable */ |
{ |
{ |
|
Array *ap; |
Cell *cp; |
Cell *cp; |
char *p; |
char *p; |
|
|
cp = setsymtab("ENVIRON", "", 0.0, ARR, symtab); |
cp = setsymtab("ENVIRON", "", 0.0, ARR, symtab); |
ENVtab = makesymtab(NSYMTAB); |
ap = makesymtab(NSYMTAB); |
free(cp->sval); |
free(cp->sval); |
cp->sval = (char *) ENVtab; |
cp->sval = (char *) ap; |
for ( ; *envp; envp++) { |
for ( ; *envp; envp++) { |
double result; |
double result; |
|
|
|
|
continue; |
continue; |
*p++ = 0; /* split into two strings at = */ |
*p++ = 0; /* split into two strings at = */ |
if (is_number(p, & result)) |
if (is_number(p, & result)) |
setsymtab(*envp, p, result, STR|NUM, ENVtab); |
setsymtab(*envp, p, result, STR|NUM, ap); |
else |
else |
setsymtab(*envp, p, 0.0, STR, ENVtab); |
setsymtab(*envp, p, 0.0, STR, ap); |
p[-1] = '='; /* restore in case env is passed down to a shell */ |
p[-1] = '='; /* restore in case env is passed down to a shell */ |
} |
} |
} |
} |