#include <assert.h>
#include <stdint.h>
#include <stdbool.h>
#if __STDC_VERSION__ <= 199901L
#define noreturn __dead
#else
#include <stdnoreturn.h>
#endif
typedef double Awkfloat;
typedef unsigned char uschar;
#define xfree(a) { free((void *)(intptr_t)(a)); (a) = NULL; }
#define setptr(ptr, a) (*(char *)(intptr_t)(ptr)) = (a)
#define NN(p) ((p) ? (p) : "(null)")
#define DEBUG
#ifdef DEBUG
# define DPRINTF(...) if (dbg) printf(__VA_ARGS__)
#else
# define DPRINTF(...)
#endif
extern enum compile_states {
RUNNING,
COMPILING,
ERROR_PRINTING
} compile_time;
extern bool safe;
extern bool do_posix;
#define RECSIZE (8 * 1024)
extern int recsize;
extern size_t awk_mb_cur_max;
extern char EMPTY[];
extern char **FS;
extern char **RS;
extern char **ORS;
extern char **OFS;
extern char **OFMT;
extern Awkfloat *NR;
extern Awkfloat *FNR;
extern Awkfloat *NF;
extern char **FILENAME;
extern char **SUBSEP;
extern Awkfloat *RSTART;
extern Awkfloat *RLENGTH;
extern bool CSV;
extern char *record;
extern int lineno;
extern int errorflag;
extern bool donefld;
extern bool donerec;
extern int dbg;
extern const char *patbeg;
extern int patlen;
typedef struct Cell {
uschar ctype;
uschar csub;
char *nval;
char *sval;
Awkfloat fval;
int tval;
char *fmt;
struct Cell *cnext;
} Cell;
typedef struct Array {
int nelem;
int size;
Cell **tab;
} Array;
#define NSYMTAB 50
extern Array *symtab;
extern Cell *nrloc;
extern Cell *fnrloc;
extern Cell *fsloc;
extern Cell *nfloc;
extern Cell *ofsloc;
extern Cell *orsloc;
extern Cell *rsloc;
extern Cell *rstartloc;
extern Cell *rlengthloc;
extern Cell *subseploc;
extern Cell *symtabloc;
#define NUM 01
#define STR 02
#define DONTFREE 04
#define CON 010
#define ARR 020
#define FCN 040
#define FLD 0100
#define REC 0200
#define CONVC 0400
#define CONVO 01000
#define FLENGTH 1
#define FSQRT 2
#define FEXP 3
#define FLOG 4
#define FINT 5
#define FSYSTEM 6
#define FRAND 7
#define FSRAND 8
#define FSIN 9
#define FCOS 10
#define FATAN 11
#define FTOUPPER 12
#define FTOLOWER 13
#define FFLUSH 14
#define FAND 15
#define FFOR 16
#define FXOR 17
#define FCOMPL 18
#define FLSHIFT 19
#define FRSHIFT 20
#define FSYSTIME 21
#define FSTRFTIME 22
#define FMKTIME 23
typedef struct Node {
int ntype;
struct Node *nnext;
int lineno;
int nobj;
struct Node *narg[1];
} Node;
#define NIL ((Node *) 0)
extern Node *winner;
extern Node *nullnode;
#define OCELL 1
#define OBOOL 2
#define OJUMP 3
#define CFREE 7
#define CCOPY 6
#define CCON 5
#define CTEMP 4
#define CNAME 3
#define CVAR 2
#define CFLD 1
#define CUNK 0
#define BTRUE 11
#define BFALSE 12
#define JEXIT 21
#define JNEXT 22
#define JBREAK 23
#define JCONT 24
#define JRET 25
#define JNEXTFILE 26
#define NVALUE 1
#define NSTAT 2
#define NEXPR 3
extern int pairstack[], paircnt;
#define notlegal(n) (n <= FIRSTTOKEN || n >= LASTTOKEN || proctab[n-FIRSTTOKEN] == nullproc)
#define isvalue(n) ((n)->ntype == NVALUE)
#define isexpr(n) ((n)->ntype == NEXPR)
#define isjump(n) ((n)->ctype == OJUMP)
#define isexit(n) ((n)->csub == JEXIT)
#define isbreak(n) ((n)->csub == JBREAK)
#define iscont(n) ((n)->csub == JCONT)
#define isnext(n) ((n)->csub == JNEXT || (n)->csub == JNEXTFILE)
#define isret(n) ((n)->csub == JRET)
#define isrec(n) ((n)->tval & REC)
#define isfld(n) ((n)->tval & FLD)
#define isstr(n) ((n)->tval & STR)
#define isnum(n) ((n)->tval & NUM)
#define isarr(n) ((n)->tval & ARR)
#define isfcn(n) ((n)->tval & FCN)
#define istrue(n) ((n)->csub == BTRUE)
#define istemp(n) ((n)->csub == CTEMP)
#define isargument(n) ((n)->nobj == ARG)
#define freeable(p) ( ((p)->tval & (STR|DONTFREE)) == STR )
#define NCHARS (1256+3)
#define HAT (NCHARS+2)
#define NSTATES 32
typedef struct rrow {
long ltype;
union {
int i;
Node *np;
uschar *up;
int *rp;
} lval;
int *lfollow;
} rrow;
typedef struct gtte {
unsigned int ch;
unsigned int state;
} gtte;
typedef struct gtt {
size_t allocated;
size_t inuse;
gtte *entries;
} gtt;
typedef struct fa {
gtt *gototab;
uschar *out;
uschar *restr;
int **posns;
int state_count;
bool anchor;
int use;
int initstat;
int curstat;
int accept;
struct rrow re[1];
} fa;
#include "proto.h"