|
|
1.1 ! root 1: typedef double Awkfloat; ! 2: typedef unsigned char uchar; ! 3: ! 4: #ifdef MYALLOC ! 5: extern uchar *Malloc(), *Calloc(); ! 6: #else ! 7: # define Malloc malloc ! 8: # define Calloc calloc ! 9: # define Free free ! 10: #endif ! 11: ! 12: #define xfree(a) { if ((a) != NULL) { Free(a); a = NULL; } } ! 13: ! 14: #ifdef DEBUG ! 15: # define dprintf if(dbg)printf ! 16: #else ! 17: # define dprintf(x1, x2, x3, x4) ! 18: #endif ! 19: ! 20: extern int compile_time; /* 1 if compiling, 0 if running */ ! 21: ! 22: #define RECSIZE (3 * 1024) /* sets limit on records, fields, etc., etc. */ ! 23: ! 24: extern uchar **FS; ! 25: extern uchar **RS; ! 26: extern uchar **ORS; ! 27: extern uchar **OFS; ! 28: extern uchar **OFMT; ! 29: extern Awkfloat *NR; ! 30: extern Awkfloat *FNR; ! 31: extern Awkfloat *NF; ! 32: extern uchar **FILENAME; ! 33: extern uchar **SUBSEP; ! 34: extern Awkfloat *RSTART; ! 35: extern Awkfloat *RLENGTH; ! 36: ! 37: extern uchar *record; ! 38: extern int dbg; ! 39: extern int lineno; ! 40: extern int errorflag; ! 41: extern int donefld; /* 1 if record broken into fields */ ! 42: extern int donerec; /* 1 if record is valid (no fld has changed */ ! 43: ! 44: #define CBUFLEN 400 ! 45: extern uchar cbuf[CBUFLEN]; /* miscellaneous character collection */ ! 46: ! 47: extern uchar *patbeg; /* beginning of pattern matched */ ! 48: extern int patlen; /* length. set in b.c */ ! 49: ! 50: /* Cell: all information about a variable or constant */ ! 51: ! 52: typedef struct Cell { ! 53: uchar ctype; /* OCELL, OBOOL, OJUMP, etc. */ ! 54: uchar csub; /* CCON, CTEMP, CFLD, etc. */ ! 55: uchar *nval; /* name, for variables only */ ! 56: uchar *sval; /* string value */ ! 57: Awkfloat fval; /* value as number */ ! 58: unsigned tval; /* type info: STR|NUM|ARR|FCN|FLD|CON|DONTFREE */ ! 59: struct Cell *cnext; /* ptr to next if chained */ ! 60: } Cell; ! 61: ! 62: typedef struct { /* symbol table array */ ! 63: int nelem; /* elements in table right now */ ! 64: int size; /* size of tab */ ! 65: Cell **tab; /* hash table pointers */ ! 66: } Array; ! 67: ! 68: #define NSYMTAB 50 /* initial size of a symbol table */ ! 69: extern Array *symtab, *makesymtab(); ! 70: extern Cell *setsymtab(), *lookup(); ! 71: ! 72: extern Cell *recloc; /* location of input record */ ! 73: extern Cell *nrloc; /* NR */ ! 74: extern Cell *fnrloc; /* FNR */ ! 75: extern Cell *nfloc; /* NF */ ! 76: extern Cell *rstartloc; /* RSTART */ ! 77: extern Cell *rlengthloc; /* RLENGTH */ ! 78: ! 79: /* Cell.tval values: */ ! 80: #define NUM 01 /* number value is valid */ ! 81: #define STR 02 /* string value is valid */ ! 82: #define DONTFREE 04 /* string space is not freeable */ ! 83: #define CON 010 /* this is a constant */ ! 84: #define ARR 020 /* this is an array */ ! 85: #define FCN 040 /* this is a function name */ ! 86: #define FLD 0100 /* this is a field $1, $2, ... */ ! 87: #define REC 0200 /* this is $0 */ ! 88: ! 89: #define freeable(p) (!((p)->tval & DONTFREE)) ! 90: ! 91: Awkfloat setfval(), getfval(); ! 92: uchar *setsval(), *getsval(); ! 93: uchar *tostring(), *tokname(), *malloc(), *calloc(), *qstring(); ! 94: double log(), sqrt(), exp(), atof(); ! 95: ! 96: /* function types */ ! 97: #define FLENGTH 1 ! 98: #define FSQRT 2 ! 99: #define FEXP 3 ! 100: #define FLOG 4 ! 101: #define FINT 5 ! 102: #define FSYSTEM 6 ! 103: #define FRAND 7 ! 104: #define FSRAND 8 ! 105: #define FSIN 9 ! 106: #define FCOS 10 ! 107: #define FATAN 11 ! 108: ! 109: /* Node: parse tree is made of nodes, with Cell's at bottom */ ! 110: ! 111: typedef struct Node { ! 112: int ntype; ! 113: struct Node *nnext; ! 114: int lineno; ! 115: int nobj; ! 116: struct Node *narg[1]; /* variable: actual size set by calling malloc */ ! 117: } Node; ! 118: ! 119: #define NIL ((Node *) 0) ! 120: ! 121: extern Node *winner; ! 122: extern Node *nullstat; ! 123: extern Node *nullnode; ! 124: ! 125: /* ctypes */ ! 126: #define OCELL 1 ! 127: #define OBOOL 2 ! 128: #define OJUMP 3 ! 129: ! 130: /* Cell subtypes: csub */ ! 131: #define CCOPY 6 ! 132: #define CCON 5 ! 133: #define CTEMP 4 ! 134: #define CNAME 3 ! 135: #define CVAR 2 ! 136: #define CFLD 1 ! 137: ! 138: /* bool subtypes */ ! 139: #define BTRUE 11 ! 140: #define BFALSE 12 ! 141: ! 142: /* jump subtypes */ ! 143: #define JEXIT 21 ! 144: #define JNEXT 22 ! 145: #define JBREAK 23 ! 146: #define JCONT 24 ! 147: #define JRET 25 ! 148: ! 149: /* node types */ ! 150: #define NVALUE 1 ! 151: #define NSTAT 2 ! 152: #define NEXPR 3 ! 153: #define NFIELD 4 ! 154: ! 155: extern Cell *(*proctab[])(); ! 156: extern Cell *nullproc(); ! 157: extern Cell *relop(); ! 158: extern int pairstack[], paircnt; ! 159: extern Cell *fieldadr(); ! 160: ! 161: extern Node *stat1(), *stat2(), *stat3(), *stat4(), *pa2stat(); ! 162: extern Node *op1(), *op2(), *op3(), *op4(); ! 163: extern Node *linkum(), *valtonode(), *rectonode(), *exptostat(); ! 164: extern Node *makearr(); ! 165: ! 166: #define notlegal(n) (n <= FIRSTTOKEN || n >= LASTTOKEN || proctab[n-FIRSTTOKEN] == nullproc) ! 167: #define isvalue(n) ((n)->ntype == NVALUE) ! 168: #define isexpr(n) ((n)->ntype == NEXPR) ! 169: #define isjump(n) ((n)->ctype == OJUMP) ! 170: #define isexit(n) ((n)->csub == JEXIT) ! 171: #define isbreak(n) ((n)->csub == JBREAK) ! 172: #define iscont(n) ((n)->csub == JCONT) ! 173: #define isnext(n) ((n)->csub == JNEXT) ! 174: #define isret(n) ((n)->csub == JRET) ! 175: #define isstr(n) ((n)->tval & STR) ! 176: #define isnum(n) ((n)->tval & NUM) ! 177: #define isarr(n) ((n)->tval & ARR) ! 178: #define isfunc(n) ((n)->tval & FCN) ! 179: #define istrue(n) ((n)->csub == BTRUE) ! 180: #define istemp(n) ((n)->csub == CTEMP) ! 181: ! 182: #define NCHARS (128+1) /* could be 256+1 */ ! 183: #define NSTATES 16 ! 184: ! 185: typedef struct rrow { ! 186: int ltype; ! 187: int lval; ! 188: int *lfollow; ! 189: } rrow; ! 190: ! 191: typedef struct fa { ! 192: uchar *restr; ! 193: int anchor; ! 194: int use; ! 195: uchar gototab[NSTATES][NCHARS]; ! 196: int *posns[NSTATES]; ! 197: uchar out[NSTATES]; ! 198: int initstat; ! 199: int curstat; ! 200: int accept; ! 201: int reset; ! 202: struct rrow re[1]; ! 203: } fa; ! 204: ! 205: extern fa *makedfa();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.