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