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