#include "awk.h"
#include "y.tab.h"
RESERVED reserved[] = {
s_BEGIN, KEYWORD, BEGIN, NULL,
s_END, KEYWORD, END, NULL,
M_MB_L("break"), KEYWORD, BREAK, NULL,
M_MB_L("continue"), KEYWORD, CONTINUE, NULL,
M_MB_L("for"), KEYWORD, FOR, NULL,
M_MB_L("if"), KEYWORD, IF, NULL,
M_MB_L("else"), KEYWORD, ELSE, NULL,
M_MB_L("in"), KEYWORD, IN, NULL,
s_next, KEYWORD, NEXT, NULL,
M_MB_L("while"), KEYWORD, WHILE, NULL,
M_MB_L("do"), KEYWORD, DO, NULL,
M_MB_L("print"), KEYWORD, PRINT, NULL,
M_MB_L("printf"), KEYWORD, PRINTF, NULL,
M_MB_L("return"), KEYWORD, RETURN, NULL,
M_MB_L("func"), KEYWORD, DEFFUNC, NULL,
M_MB_L("function"), KEYWORD, DEFFUNC, NULL,
M_MB_L("delete"), KEYWORD, DELETE, NULL,
M_MB_L("exit"), KEYWORD, EXIT, NULL,
s_FILENAME, VAR, 0, _null,
s_NF, SVAR, 0, NULL,
s_NR, VAR, 0, NULL,
s_FS, SVAR, 1, M_MB_L(" "),
s_OFS, VAR, 1, M_MB_L(" "),
s_ORS, VAR, 1, M_MB_L("\n"),
s_OFMT, VAR, 4, M_MB_L("%.6g"),
s_CONVFMT, VAR, 4, M_MB_L("%.6g"),
s_RS, SVAR, 1, M_MB_L("\n"),
s_FNR, VAR, 0, NULL,
s_SUBSEP, VAR, 1,
#ifdef M_AWK_SUBSEP
M_AWK_SUBSEP,
#else
M_MB_L("\34"),
#endif
s_ARGC, SVAR, 0, NULL,
(LOCCHARP)NULL
};
RESFUNC resfuncs[] = {
s_exp, FUNC, f_exp,
s_getline, GETLINE, f_getline,
s_index, FUNC, f_index,
s_int, FUNC, f_int,
s_length, FUNC, f_length,
s_log, FUNC, f_log,
s_split, FUNC, f_split,
s_sprintf, FUNC, f_sprintf,
s_sqrt, FUNC, f_sqrt,
s_substr, FUNC, f_substr,
s_rand, FUNC, f_rand,
s_srand, FUNC, f_srand,
s_sin, FUNC, f_sin,
s_cos, FUNC, f_cos,
s_atan2, FUNC, f_atan2,
s_sub, FUNC, f_sub,
s_gsub, FUNC, f_gsub,
s_match, FUNC, f_match,
s_system, FUNC, f_system,
s_ord, FUNC, f_ord,
s_toupper, FUNC, f_toupper,
s_tolower, FUNC, f_tolower,
s_asort, FUNC, f_asort,
s_close, FUNC, f_close,
(LOCCHARP)NULL
};
OFILE *ofiles;
long NIOSTREAM = 512;
wchar_t _null[] = M_MB_L("");
char r[] = "r";
char w[] = "w";
wchar_t s_OFMT[] = M_MB_L("OFMT");
wchar_t s_CONVFMT[] = M_MB_L("CONVFMT");
wchar_t s_NR[] = M_MB_L("NR");
wchar_t s_NF[] = M_MB_L("NF");
wchar_t s_OFS[] = M_MB_L("OFS");
wchar_t s_ORS[] = M_MB_L("ORS");
wchar_t s_RS[] = M_MB_L("RS");
wchar_t s_FS[] = M_MB_L("FS");
wchar_t s_FNR[] = M_MB_L("FNR");
wchar_t s_SUBSEP[] = M_MB_L("SUBSEP");
wchar_t s_ARGC[] = M_MB_L("ARGC");
wchar_t s_ARGV[] = M_MB_L("ARGV");
wchar_t s_ENVIRON[] = M_MB_L("ENVIRON");
wchar_t s_FILENAME[] = M_MB_L("FILENAME");
wchar_t s_SYMTAB[] = M_MB_L("SYMTAB");
wchar_t s_BEGIN[] = M_MB_L("BEGIN");
wchar_t s_END[] = M_MB_L("END");
wchar_t s_next[] = M_MB_L("next");
wchar_t s_exp[] = M_MB_L("exp");
wchar_t s_getline[] = M_MB_L("getline");
wchar_t s_index[] = M_MB_L("index");
wchar_t s_int[] = M_MB_L("int");
wchar_t s_length[] = M_MB_L("length");
wchar_t s_log[] = M_MB_L("log");
wchar_t s_split[] = M_MB_L("split");
wchar_t s_sprintf[] = M_MB_L("sprintf");
wchar_t s_sqrt[] = M_MB_L("sqrt");
wchar_t s_substr[] = M_MB_L("substr");
wchar_t s_rand[] = M_MB_L("rand");
wchar_t s_srand[] = M_MB_L("srand");
wchar_t s_sin[] = M_MB_L("sin");
wchar_t s_cos[] = M_MB_L("cos");
wchar_t s_atan2[] = M_MB_L("atan2");
wchar_t s_sub[] = M_MB_L("sub");
wchar_t s_gsub[] = M_MB_L("gsub");
wchar_t s_match[] = M_MB_L("match");
wchar_t s_system[] = M_MB_L("system");
wchar_t s_ord[] = M_MB_L("ord");
wchar_t s_toupper[] = M_MB_L("toupper");
wchar_t s_tolower[] = M_MB_L("tolower");
wchar_t s_asort[] = M_MB_L("asort");
wchar_t s_close[] = M_MB_L("close");
wchar_t redelim;
uchar_t inprint;
uchar_t funparm;
uchar_t splitdone;
uint npattern;
uint nfield;
uint fcount;
uint phase;
uint running = 0;
uchar_t catterm;
uint lexlast = '\n';
uint lineno = 0;
uchar_t doing_begin;
uchar_t begin_getline;
uchar_t needsplit;
uchar_t needenviron;
ushort slevel;
ushort loopexit;
wchar_t radixpoint;
REGEXP resep;
wchar_t *linebuf = NULL;
size_t lbuflen;
char interr[] = "internal execution tree error at E string";
char nomem[] = "insufficient memory for string storage";
NODE *symtab[NBUCKET];
NODE *yytree;
NODE *freelist;
wchar_t *(*awkrecord) ANSI((wchar_t *, int, FILE*)) = defrecord;
wchar_t *(*awkfield) ANSI((wchar_t **)) = whitefield;
NODE *constant;
NODE *const0;
NODE *const1;
NODE *constundef;
NODE *field0;
NODE *incNR;
NODE *incFNR;
NODE *clrFNR;
NODE *ARGVsubi;
NODE *varNR;
NODE *varFNR;
NODE *varNF;
NODE *varOFMT;
NODE *varCONVFMT;
NODE *varOFS;
NODE *varORS;
NODE *varFS;
NODE *varRS;
NODE *varARGC;
NODE *varSUBSEP;
NODE *varENVIRON;
NODE *varSYMTAB;
NODE *varFILENAME;
NODE *curnode;
NODE *inc_oper;
NODE *asn_oper;