1: /* $Header: a2p.h,v 1.0.1.1 88/01/26 09:52:30 root Exp $
2: *
3: * $Log: a2p.h,v $
4: * Revision 1.0.1.1 88/01/26 09:52:30 root
5: * patch 5: a2p didn't use config.h.
6: *
7: * Revision 1.0 87/12/18 13:06:58 root
8: * Initial revision
9: *
10: */
11:
12: #define VOIDUSED 1
13: #include "../config.h"
14:
15: #ifndef BCOPY
16: # define bcopy(s1,s2,l) memcpy(s2,s1,l);
17: # define bzero(s,l) memset(s,0,l);
18: #endif
19:
20: #include "handy.h"
21: #define Nullop 0
22:
23: #define OPROG 1
24: #define OJUNK 2
25: #define OHUNKS 3
26: #define ORANGE 4
27: #define OPAT 5
28: #define OHUNK 6
29: #define OPPAREN 7
30: #define OPANDAND 8
31: #define OPOROR 9
32: #define OPNOT 10
33: #define OCPAREN 11
34: #define OCANDAND 12
35: #define OCOROR 13
36: #define OCNOT 14
37: #define ORELOP 15
38: #define ORPAREN 16
39: #define OMATCHOP 17
40: #define OMPAREN 18
41: #define OCONCAT 19
42: #define OASSIGN 20
43: #define OADD 21
44: #define OSUB 22
45: #define OMULT 23
46: #define ODIV 24
47: #define OMOD 25
48: #define OPOSTINCR 26
49: #define OPOSTDECR 27
50: #define OPREINCR 28
51: #define OPREDECR 29
52: #define OUMINUS 30
53: #define OUPLUS 31
54: #define OPAREN 32
55: #define OGETLINE 33
56: #define OSPRINTF 34
57: #define OSUBSTR 35
58: #define OSTRING 36
59: #define OSPLIT 37
60: #define OSNEWLINE 38
61: #define OINDEX 39
62: #define ONUM 40
63: #define OSTR 41
64: #define OVAR 42
65: #define OFLD 43
66: #define ONEWLINE 44
67: #define 45
68: #define OCOMMA 46
69: #define OSEMICOLON 47
70: #define 48
71: #define OSTATES 49
72: #define OSTATE 50
73: #define OPRINT 51
74: #define OPRINTF 52
75: #define OBREAK 53
76: #define ONEXT 54
77: #define OEXIT 55
78: #define OCONTINUE 56
79: #define OREDIR 57
80: #define OIF 58
81: #define OWHILE 59
82: #define OFOR 60
83: #define OFORIN 61
84: #define OVFLD 62
85: #define OBLOCK 63
86: #define OREGEX 64
87: #define OLENGTH 65
88: #define OLOG 66
89: #define OEXP 67
90: #define OSQRT 68
91: #define OINT 69
92:
93: #ifdef DOINIT
94: char *opname[] = {
95: "0",
96: "PROG",
97: "JUNK",
98: "HUNKS",
99: "RANGE",
100: "PAT",
101: "HUNK",
102: "PPAREN",
103: "PANDAND",
104: "POROR",
105: "PNOT",
106: "CPAREN",
107: "CANDAND",
108: "COROR",
109: "CNOT",
110: "RELOP",
111: "RPAREN",
112: "MATCHOP",
113: "MPAREN",
114: "CONCAT",
115: "ASSIGN",
116: "ADD",
117: "SUB",
118: "MULT",
119: "DIV",
120: "MOD",
121: "POSTINCR",
122: "POSTDECR",
123: "PREINCR",
124: "PREDECR",
125: "UMINUS",
126: "UPLUS",
127: "PAREN",
128: "GETLINE",
129: "SPRINTF",
130: "SUBSTR",
131: "STRING",
132: "SPLIT",
133: "SNEWLINE",
134: "INDEX",
135: "NUM",
136: "STR",
137: "VAR",
138: "FLD",
139: "NEWLINE",
140: "COMMENT",
141: "COMMA",
142: "SEMICOLON",
143: "SCOMMENT",
144: "STATES",
145: "STATE",
146: "PRINT",
147: "PRINTF",
148: "BREAK",
149: "NEXT",
150: "EXIT",
151: "CONTINUE",
152: "REDIR",
153: "IF",
154: "WHILE",
155: "FOR",
156: "FORIN",
157: "VFLD",
158: "BLOCK",
159: "REGEX",
160: "LENGTH",
161: "LOG",
162: "EXP",
163: "SQRT",
164: "INT",
165: "70"
166: };
167: #else
168: extern char *opname[];
169: #endif
170:
171: union {
172: int ival;
173: char *cval;
174: } ops[50000]; /* hope they have 200k to spare */
175:
176: EXT int mop INIT(1);
177:
178: #define DEBUGGING
179:
180: #include <stdio.h>
181: #include <ctype.h>
182: #include <setjmp.h>
183: #include <sys/types.h>
184: #include <sys/stat.h>
185: #include <time.h>
186: #include <sys/times.h>
187:
188: typedef struct string STR;
189: typedef struct htbl HASH;
190:
191: #include "str.h"
192: #include "hash.h"
193:
194: /* A string is TRUE if not "" or "0". */
195: #define True(val) (tmps = (val), (*tmps && !(*tmps == '0' && !tmps[1])))
196: EXT char *Yes INIT("1");
197: EXT char *No INIT("");
198:
199: #define str_true(str) (Str = (str), (Str->str_pok ? True(Str->str_ptr) : (Str->str_nok ? (Str->str_nval != 0.0) : 0 )))
200:
201: #define str_peek(str) (Str = (str), (Str->str_pok ? Str->str_ptr : (Str->str_nok ? (sprintf(buf,"num(%g)",Str->str_nval),buf) : "" )))
202: #define str_get(str) (Str = (str), (Str->str_pok ? Str->str_ptr : str_2ptr(Str)))
203: #define str_gnum(str) (Str = (str), (Str->str_nok ? Str->str_nval : str_2num(Str)))
204: EXT STR *Str;
205:
206: #define GROWSTR(pp,lp,len) if (*(lp) < (len)) growstr(pp,lp,len)
207:
208: STR *str_new();
209:
210: char *scanpat();
211: char *scannum();
212:
213: void str_free();
214:
215: EXT int line INIT(0);
216:
217: EXT FILE *rsfp;
218: EXT char buf[1024];
219: EXT char *bufptr INIT(buf);
220:
221: EXT STR *linestr INIT(Nullstr);
222:
223: EXT char tokenbuf[256];
224: EXT int expectterm INIT(TRUE);
225:
226: #ifdef DEBUGGING
227: EXT int debug INIT(0);
228: EXT int dlevel INIT(0);
229: #define YYDEBUG;
230: extern int yydebug;
231: #endif
232:
233: EXT STR *freestrroot INIT(Nullstr);
234:
235: EXT STR str_no;
236: EXT STR str_yes;
237:
238: EXT bool do_split INIT(FALSE);
239: EXT bool split_to_array INIT(FALSE);
240: EXT bool set_array_base INIT(FALSE);
241: EXT bool saw_RS INIT(FALSE);
242: EXT bool saw_OFS INIT(FALSE);
243: EXT bool saw_ORS INIT(FALSE);
244: EXT bool saw_line_op INIT(FALSE);
245: EXT bool in_begin INIT(TRUE);
246: EXT bool do_opens INIT(FALSE);
247: EXT bool do_fancy_opens INIT(FALSE);
248: EXT bool lval_field INIT(FALSE);
249: EXT bool do_chop INIT(FALSE);
250: EXT bool need_entire INIT(FALSE);
251: EXT bool absmaxfld INIT(FALSE);
252:
253: EXT char const_FS INIT(0);
254: EXT char *namelist INIT(Nullch);
255: EXT char fswitch INIT(0);
256:
257: EXT int saw_FS INIT(0);
258: EXT int maxfld INIT(0);
259: EXT int arymax INIT(0);
260: char *nameary[100];
261:
262: EXT STR *opens;
263:
264: EXT HASH *symtab;