|
|
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.