version 1.31, 2020/06/10 21:03:36 |
version 1.32, 2020/06/10 21:03:56 |
|
|
#define MAXFLD 2 |
#define MAXFLD 2 |
int nfields = MAXFLD; /* last allocated slot for $i */ |
int nfields = MAXFLD; /* last allocated slot for $i */ |
|
|
int donefld; /* 1 = implies rec broken into fields */ |
bool donefld; /* true = implies rec broken into fields */ |
int donerec; /* 1 = record is valid (no flds have changed) */ |
bool donerec; /* true = record is valid (no flds have changed) */ |
|
|
int lastfld = 0; /* last used field */ |
int lastfld = 0; /* last used field */ |
int argno = 1; /* current input argument number */ |
int argno = 1; /* current input argument number */ |
|
|
strlcpy(inputFS, *FS, sizeof(inputFS)); |
strlcpy(inputFS, *FS, sizeof(inputFS)); |
} |
} |
|
|
static int firsttime = 1; |
static bool firsttime = true; |
|
|
int getrec(char **pbuf, int *pbufsize, int isrecord) /* get next input record */ |
int getrec(char **pbuf, int *pbufsize, bool isrecord) /* get next input record */ |
{ /* note: cares whether buf == record */ |
{ /* note: cares whether buf == record */ |
int c; |
int c; |
char *buf = *pbuf; |
char *buf = *pbuf; |
|
|
int bufsize = *pbufsize, savebufsize = bufsize; |
int bufsize = *pbufsize, savebufsize = bufsize; |
|
|
if (firsttime) { |
if (firsttime) { |
firsttime = 0; |
firsttime = false; |
initgetrec(); |
initgetrec(); |
} |
} |
DPRINTF( ("RS=<%s>, FS=<%s>, ARGC=%g, FILENAME=%s\n", |
DPRINTF( ("RS=<%s>, FS=<%s>, ARGC=%g, FILENAME=%s\n", |
*RS, *FS, *ARGC, *FILENAME) ); |
*RS, *FS, *ARGC, *FILENAME) ); |
if (isrecord) { |
if (isrecord) { |
donefld = 0; |
donefld = false; |
donerec = 1; |
donerec = true; |
savefs(); |
savefs(); |
} |
} |
saveb0 = buf[0]; |
saveb0 = buf[0]; |
|
|
char *rs = getsval(rsloc); |
char *rs = getsval(rsloc); |
|
|
if (*rs && rs[1]) { |
if (*rs && rs[1]) { |
int found; |
bool found; |
|
|
fa *pfa = makedfa(rs, 1); |
fa *pfa = makedfa(rs, 1); |
found = fnematch(pfa, inf, &buf, &bufsize, recsize); |
found = fnematch(pfa, inf, &buf, &bufsize, recsize); |
|
|
} |
} |
*fr = 0; |
*fr = 0; |
} else if ((sep = *inputFS) == 0) { /* new: FS="" => 1 char/field */ |
} else if ((sep = *inputFS) == 0) { /* new: FS="" => 1 char/field */ |
for (i = 0; *r != 0; r++) { |
for (i = 0; *r != '\0'; r += n) { |
char buf[2]; |
char buf[MB_CUR_MAX + 1]; |
|
|
i++; |
i++; |
if (i > nfields) |
if (i > nfields) |
growfldtab(i); |
growfldtab(i); |
if (freeable(fldtab[i])) |
if (freeable(fldtab[i])) |
xfree(fldtab[i]->sval); |
xfree(fldtab[i]->sval); |
buf[0] = *r; |
n = mblen(r, MB_CUR_MAX); |
buf[1] = 0; |
if (n < 0) |
|
n = 1; |
|
memcpy(buf, r, n); |
|
buf[n] = '\0'; |
fldtab[i]->sval = tostring(buf); |
fldtab[i]->sval = tostring(buf); |
fldtab[i]->tval = FLD | STR; |
fldtab[i]->tval = FLD | STR; |
} |
} |
|
|
FATAL("record `%.30s...' has too many fields; can't happen", r); |
FATAL("record `%.30s...' has too many fields; can't happen", r); |
cleanfld(i+1, lastfld); /* clean out junk from previous record */ |
cleanfld(i+1, lastfld); /* clean out junk from previous record */ |
lastfld = i; |
lastfld = i; |
donefld = 1; |
donefld = true; |
for (j = 1; j <= lastfld; j++) { |
for (j = 1; j <= lastfld; j++) { |
p = fldtab[j]; |
p = fldtab[j]; |
if(is_number(p->sval)) { |
if(is_number(p->sval)) { |
|
|
} |
} |
} |
} |
setfval(nfloc, (Awkfloat) lastfld); |
setfval(nfloc, (Awkfloat) lastfld); |
donerec = 1; /* restore */ |
donerec = true; /* restore */ |
if (dbg) { |
if (dbg) { |
for (j = 0; j <= lastfld; j++) { |
for (j = 0; j <= lastfld; j++) { |
p = fldtab[j]; |
p = fldtab[j]; |
|
|
char *r, *p; |
char *r, *p; |
char *sep = getsval(ofsloc); |
char *sep = getsval(ofsloc); |
|
|
if (donerec == 1) |
if (donerec) |
return; |
return; |
r = record; |
r = record; |
for (i = 1; i <= *NF; i++) { |
for (i = 1; i <= *NF; i++) { |
|
|
|
|
DPRINTF( ("in recbld inputFS=%s, fldtab[0]=%p\n", inputFS, (void*)fldtab[0]) ); |
DPRINTF( ("in recbld inputFS=%s, fldtab[0]=%p\n", inputFS, (void*)fldtab[0]) ); |
DPRINTF( ("recbld = |%s|\n", record) ); |
DPRINTF( ("recbld = |%s|\n", record) ); |
donerec = 1; |
donerec = true; |
} |
} |
|
|
int errorflag = 0; |
int errorflag = 0; |
|
|
fprintf(stderr, " at source line %d", lineno); |
fprintf(stderr, " at source line %d", lineno); |
if (curfname != NULL) |
if (curfname != NULL) |
fprintf(stderr, " in function %s", curfname); |
fprintf(stderr, " in function %s", curfname); |
if (compile_time == 1 && cursource() != NULL) |
if (compile_time == COMPILING && cursource() != NULL) |
fprintf(stderr, " source file %s", cursource()); |
fprintf(stderr, " source file %s", cursource()); |
fprintf(stderr, "\n"); |
fprintf(stderr, "\n"); |
errorflag = 2; |
errorflag = 2; |
|
|
extern Node *curnode; |
extern Node *curnode; |
|
|
fprintf(stderr, "\n"); |
fprintf(stderr, "\n"); |
if (compile_time != 2 && NR && *NR > 0) { |
if (compile_time != ERROR_PRINTING) { |
fprintf(stderr, " input record number %d", (int) (*FNR)); |
if (NR && *NR > 0) { |
if (strcmp(*FILENAME, "-") != 0) |
fprintf(stderr, " input record number %d", (int) (*FNR)); |
fprintf(stderr, ", file %s", *FILENAME); |
if (strcmp(*FILENAME, "-") != 0) |
fprintf(stderr, "\n"); |
fprintf(stderr, ", file %s", *FILENAME); |
|
fprintf(stderr, "\n"); |
|
} |
|
if (curnode) |
|
fprintf(stderr, " source line number %d", curnode->lineno); |
|
else if (lineno) |
|
fprintf(stderr, " source line number %d", lineno); |
} |
} |
if (compile_time != 2 && curnode) |
|
fprintf(stderr, " source line number %d", curnode->lineno); |
if (compile_time == COMPILING && cursource() != NULL) |
else if (compile_time != 2 && lineno) |
|
fprintf(stderr, " source line number %d", lineno); |
|
if (compile_time == 1 && cursource() != NULL) |
|
fprintf(stderr, " source file %s", cursource()); |
fprintf(stderr, " source file %s", cursource()); |
fprintf(stderr, "\n"); |
fprintf(stderr, "\n"); |
eprint(); |
eprint(); |
|
|
static int been_here = 0; |
static int been_here = 0; |
extern char ebuf[], *ep; |
extern char ebuf[], *ep; |
|
|
if (compile_time == 2 || compile_time == 0 || been_here++ > 0 || ebuf == ep) |
if (compile_time != COMPILING || been_here++ > 0 || ebuf == ep) |
return; |
return; |
p = ep - 1; |
p = ep - 1; |
if (p > ebuf && *p == '\n') |
if (p > ebuf && *p == '\n') |