|
|
1.1 ! root 1: /* awk.def 4.2 83/02/09 */ ! 2: ! 3: #define hack int ! 4: #define AWKFLOAT float ! 5: #define xfree(a) { if(a!=NULL) { yfree(a); a=NULL;} } ! 6: #define strfree(a) { if(a!=NULL && a!=EMPTY) { yfree(a);} a=EMPTY; } ! 7: #define yfree free ! 8: #ifdef DEBUG ! 9: # define dprintf if(dbg)printf ! 10: #else ! 11: # define dprintf(x1, x2, x3, x4) ! 12: #endif ! 13: typedef AWKFLOAT awkfloat; ! 14: ! 15: extern char **FS; ! 16: extern char **RS; ! 17: extern char **ORS; ! 18: extern char **OFS; ! 19: extern char **OFMT; ! 20: extern awkfloat *NR; ! 21: extern awkfloat *NF; ! 22: extern char **FILENAME; ! 23: ! 24: extern char record[]; ! 25: extern char EMPTY[]; ! 26: extern int dbg; ! 27: extern int lineno; ! 28: extern int errorflag; ! 29: extern int donefld; /* 1 if record broken into fields */ ! 30: extern int donerec; /* 1 if record is valid (no fld has changed */ ! 31: ! 32: typedef struct val { /* general value during processing */ ! 33: char *nval; /* name, for variables only */ ! 34: char *sval; /* string value */ ! 35: awkfloat fval; /* value as number */ ! 36: unsigned tval; /* type info */ ! 37: struct val *nextval; /* ptr to next if chained */ ! 38: } cell; ! 39: extern cell *symtab[]; ! 40: cell *setsymtab(), *lookup(), **makesymtab(); ! 41: ! 42: extern cell *recloc; /* location of input record */ ! 43: extern cell *nrloc; /* NR */ ! 44: extern cell *nfloc; /* NF */ ! 45: ! 46: #define STR 01 /* string value is valid */ ! 47: #define NUM 02 /* number value is valid */ ! 48: #define FLD 04 /* FLD means don't free string space */ ! 49: #define CON 010 /* this is a constant */ ! 50: #define ARR 020 /* this is an array */ ! 51: ! 52: awkfloat setfval(), getfval(); ! 53: char *setsval(), *getsval(); ! 54: char *tostring(), *tokname(), *malloc(); ! 55: double log(), sqrt(), exp(), atof(); ! 56: ! 57: /* function types */ ! 58: #define FLENGTH 1 ! 59: #define FSQRT 2 ! 60: #define FEXP 3 ! 61: #define FLOG 4 ! 62: #define FINT 5 ! 63: ! 64: typedef struct { ! 65: char otype; ! 66: char osub; ! 67: cell *optr; ! 68: } obj; ! 69: ! 70: #define BOTCH 1 ! 71: struct nd { ! 72: char ntype; ! 73: char subtype; ! 74: struct nd *nnext; ! 75: int nobj; ! 76: struct nd *narg[BOTCH]; /* C won't take a zero length array */ ! 77: }; ! 78: typedef struct nd node; ! 79: extern node *winner; ! 80: extern node *nullstat; ! 81: ! 82: /* otypes */ ! 83: #define OCELL 0 ! 84: #define OEXPR 1 ! 85: #define OBOOL 2 ! 86: #define OJUMP 3 ! 87: ! 88: /* cell subtypes */ ! 89: #define CTEMP 4 ! 90: #define CNAME 3 ! 91: #define CVAR 2 ! 92: #define CFLD 1 ! 93: #define CCON 0 ! 94: ! 95: /* bool subtypes */ ! 96: #define BTRUE 1 ! 97: #define BFALSE 2 ! 98: ! 99: /* jump subtypes */ ! 100: #define JEXIT 1 ! 101: #define JNEXT 2 ! 102: #define JBREAK 3 ! 103: #define JCONT 4 ! 104: ! 105: /* node types */ ! 106: #define NVALUE 1 ! 107: #define NSTAT 2 ! 108: #define NEXPR 3 ! 109: #define NPA2 4 ! 110: ! 111: extern obj (*proctab[])(); ! 112: extern obj true, false; ! 113: extern int pairstack[], paircnt; ! 114: ! 115: #define cantexec(n) (n->ntype == NVALUE) ! 116: #define notlegal(n) (n <= FIRSTTOKEN || n >= LASTTOKEN || proctab[n-FIRSTTOKEN]== nullproc) ! 117: #define isexpr(n) (n->ntype == NEXPR) ! 118: #define isjump(n) (n.otype == OJUMP) ! 119: #define isexit(n) (n.otype == OJUMP && n.osub == JEXIT) ! 120: #define isbreak(n) (n.otype == OJUMP && n.osub == JBREAK) ! 121: #define iscont(n) (n.otype == OJUMP && n.osub == JCONT) ! 122: #define isnext(n) (n.otype == OJUMP && n.osub == JNEXT) ! 123: #define isstr(n) (n.optr->tval & STR) ! 124: #define istrue(n) (n.otype == OBOOL && n.osub == BTRUE) ! 125: #define istemp(n) (n.otype == OCELL && n.osub == CTEMP) ! 126: #define isfld(n) (!donefld && n.osub==CFLD && n.otype==OCELL && n.optr->nval==EMPTY) ! 127: #define isrec(n) (donefld && n.osub==CFLD && n.otype==OCELL && n.optr->nval!=EMPTY) ! 128: obj nullproc(); ! 129: obj relop(); ! 130: ! 131: #define MAXSYM 50 ! 132: #define HAT 0177 /* matches ^ in regular expr */ ! 133: /* watch out for mach dep */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.