perl 3.0 patch #7 (combined patch)
[p5sagit/p5-mst-13.2.git] / x2p / a2p.h
1 /* $Header: a2p.h,v 3.0.1.2 89/12/21 20:30:29 lwall Locked $
2  *
3  *    Copyright (c) 1989, Larry Wall
4  *
5  *    You may distribute under the terms of the GNU General Public License
6  *    as specified in the README file that comes with the perl 3.0 kit.
7  *
8  * $Log:        a2p.h,v $
9  * Revision 3.0.1.2  89/12/21  20:30:29  lwall
10  * patch7: arranged so a2p has a chance of running on a 286
11  * 
12  * Revision 3.0.1.1  89/11/11  05:07:00  lwall
13  * patch2: Configure may now set -DDEBUGGING
14  * 
15  * Revision 3.0  89/10/18  15:34:14  lwall
16  * 3.0 baseline
17  * 
18  */
19
20 #define VOIDUSED 1
21 #include "../config.h"
22
23 #ifndef BCOPY
24 #   define bcopy(s1,s2,l) memcpy(s2,s1,l);
25 #   define bzero(s,l) memset(s,0,l);
26 #endif
27
28 #include "handy.h"
29 #define Nullop 0
30
31 #define OPROG           1
32 #define OJUNK           2
33 #define OHUNKS          3
34 #define ORANGE          4
35 #define OPAT            5
36 #define OHUNK           6
37 #define OPPAREN         7
38 #define OPANDAND        8
39 #define OPOROR          9
40 #define OPNOT           10
41 #define OCPAREN         11
42 #define OCANDAND        12
43 #define OCOROR          13
44 #define OCNOT           14
45 #define ORELOP          15
46 #define ORPAREN         16
47 #define OMATCHOP        17
48 #define OMPAREN         18
49 #define OCONCAT         19
50 #define OASSIGN         20
51 #define OADD            21
52 #define OSUBTRACT       22
53 #define OMULT           23
54 #define ODIV            24
55 #define OMOD            25
56 #define OPOSTINCR       26
57 #define OPOSTDECR       27
58 #define OPREINCR        28
59 #define OPREDECR        29
60 #define OUMINUS         30
61 #define OUPLUS          31
62 #define OPAREN          32
63 #define OGETLINE        33
64 #define OSPRINTF        34
65 #define OSUBSTR         35
66 #define OSTRING         36
67 #define OSPLIT          37
68 #define OSNEWLINE       38
69 #define OINDEX          39
70 #define ONUM            40
71 #define OSTR            41
72 #define OVAR            42
73 #define OFLD            43
74 #define ONEWLINE        44
75 #define OCOMMENT        45
76 #define OCOMMA          46
77 #define OSEMICOLON      47
78 #define OSCOMMENT       48
79 #define OSTATES         49
80 #define OSTATE          50
81 #define OPRINT          51
82 #define OPRINTF         52
83 #define OBREAK          53
84 #define ONEXT           54
85 #define OEXIT           55
86 #define OCONTINUE       56
87 #define OREDIR          57
88 #define OIF             58
89 #define OWHILE          59
90 #define OFOR            60
91 #define OFORIN          61
92 #define OVFLD           62
93 #define OBLOCK          63
94 #define OREGEX          64
95 #define OLENGTH         65
96 #define OLOG            66
97 #define OEXP            67
98 #define OSQRT           68
99 #define OINT            69
100 #define ODO             70
101 #define OPOW            71
102 #define OSUB            72
103 #define OGSUB           73
104 #define OMATCH          74
105 #define OUSERFUN        75
106 #define OUSERDEF        76
107 #define OCLOSE          77
108 #define OATAN2          78
109 #define OSIN            79
110 #define OCOS            80
111 #define ORAND           81
112 #define OSRAND          82
113 #define ODELETE         83
114 #define OSYSTEM         84
115 #define OCOND           85
116 #define ORETURN         86
117 #define ODEFINED        87
118 #define OSTAR           88
119
120 #ifdef DOINIT
121 char *opname[] = {
122     "0",
123     "PROG",
124     "JUNK",
125     "HUNKS",
126     "RANGE",
127     "PAT",
128     "HUNK",
129     "PPAREN",
130     "PANDAND",
131     "POROR",
132     "PNOT",
133     "CPAREN",
134     "CANDAND",
135     "COROR",
136     "CNOT",
137     "RELOP",
138     "RPAREN",
139     "MATCHOP",
140     "MPAREN",
141     "CONCAT",
142     "ASSIGN",
143     "ADD",
144     "SUBTRACT",
145     "MULT",
146     "DIV",
147     "MOD",
148     "POSTINCR",
149     "POSTDECR",
150     "PREINCR",
151     "PREDECR",
152     "UMINUS",
153     "UPLUS",
154     "PAREN",
155     "GETLINE",
156     "SPRINTF",
157     "SUBSTR",
158     "STRING",
159     "SPLIT",
160     "SNEWLINE",
161     "INDEX",
162     "NUM",
163     "STR",
164     "VAR",
165     "FLD",
166     "NEWLINE",
167     "COMMENT",
168     "COMMA",
169     "SEMICOLON",
170     "SCOMMENT",
171     "STATES",
172     "STATE",
173     "PRINT",
174     "PRINTF",
175     "BREAK",
176     "NEXT",
177     "EXIT",
178     "CONTINUE",
179     "REDIR",
180     "IF",
181     "WHILE",
182     "FOR",
183     "FORIN",
184     "VFLD",
185     "BLOCK",
186     "REGEX",
187     "LENGTH",
188     "LOG",
189     "EXP",
190     "SQRT",
191     "INT",
192     "DO",
193     "POW",
194     "SUB",
195     "GSUB",
196     "MATCH",
197     "USERFUN",
198     "USERDEF",
199     "CLOSE",
200     "ATAN2",
201     "SIN",
202     "COS",
203     "RAND",
204     "SRAND",
205     "DELETE",
206     "SYSTEM",
207     "COND",
208     "RETURN",
209     "DEFINED",
210     "STAR",
211     "89"
212 };
213 #else
214 extern char *opname[];
215 #endif
216
217 EXT int mop INIT(1);
218
219 union u_ops {
220     int ival;
221     char *cval;
222 };
223 #if defined(iAPX286) || defined(M_I286) || defined(I80286)      /* 80286 hack */
224 #define OPSMAX (64000/sizeof(union u_ops))      /* approx. max segment size */
225 #else
226 #define OPSMAX 50000
227 #endif                                                  /* 80286 hack */
228 union u_ops ops[OPSMAX];
229
230 #include <stdio.h>
231 #include <ctype.h>
232
233 typedef struct string STR;
234 typedef struct htbl HASH;
235
236 #include "str.h"
237 #include "hash.h"
238
239 /* A string is TRUE if not "" or "0". */
240 #define True(val) (tmps = (val), (*tmps && !(*tmps == '0' && !tmps[1])))
241 EXT char *Yes INIT("1");
242 EXT char *No INIT("");
243
244 #define str_true(str) (Str = (str), (Str->str_pok ? True(Str->str_ptr) : (Str->str_nok ? (Str->str_nval != 0.0) : 0 )))
245
246 #define str_peek(str) (Str = (str), (Str->str_pok ? Str->str_ptr : (Str->str_nok ? (sprintf(buf,"num(%g)",Str->str_nval),buf) : "" )))
247 #define str_get(str) (Str = (str), (Str->str_pok ? Str->str_ptr : str_2ptr(Str)))
248 #define str_gnum(str) (Str = (str), (Str->str_nok ? Str->str_nval : str_2num(Str)))
249 EXT STR *Str;
250
251 #define GROWSTR(pp,lp,len) if (*(lp) < (len)) growstr(pp,lp,len)
252
253 STR *str_new();
254
255 char *scanpat();
256 char *scannum();
257
258 void str_free();
259
260 EXT int line INIT(0);
261
262 EXT FILE *rsfp;
263 EXT char buf[1024];
264 EXT char *bufptr INIT(buf);
265
266 EXT STR *linestr INIT(Nullstr);
267
268 EXT char tokenbuf[256];
269 EXT int expectterm INIT(TRUE);
270
271 #ifdef DEBUGGING
272 EXT int debug INIT(0);
273 EXT int dlevel INIT(0);
274 #define YYDEBUG 1
275 extern int yydebug;
276 #endif
277
278 EXT STR *freestrroot INIT(Nullstr);
279
280 EXT STR str_no;
281 EXT STR str_yes;
282
283 EXT bool do_split INIT(FALSE);
284 EXT bool split_to_array INIT(FALSE);
285 EXT bool set_array_base INIT(FALSE);
286 EXT bool saw_RS INIT(FALSE);
287 EXT bool saw_OFS INIT(FALSE);
288 EXT bool saw_ORS INIT(FALSE);
289 EXT bool saw_line_op INIT(FALSE);
290 EXT bool in_begin INIT(TRUE);
291 EXT bool do_opens INIT(FALSE);
292 EXT bool do_fancy_opens INIT(FALSE);
293 EXT bool lval_field INIT(FALSE);
294 EXT bool do_chop INIT(FALSE);
295 EXT bool need_entire INIT(FALSE);
296 EXT bool absmaxfld INIT(FALSE);
297 EXT bool saw_altinput INIT(FALSE);
298
299 EXT char const_FS INIT(0);
300 EXT char *namelist INIT(Nullch);
301 EXT char fswitch INIT(0);
302
303 EXT int saw_FS INIT(0);
304 EXT int maxfld INIT(0);
305 EXT int arymax INIT(0);
306 char *nameary[100];
307
308 EXT STR *opens;
309
310 EXT HASH *symtab;
311 EXT HASH *curarghash;
312
313 #define P_MIN           0
314 #define P_LISTOP        5
315 #define P_COMMA         10
316 #define P_ASSIGN        15
317 #define P_COND          20
318 #define P_DOTDOT        25
319 #define P_OROR          30
320 #define P_ANDAND        35
321 #define P_OR            40
322 #define P_AND           45
323 #define P_EQ            50
324 #define P_REL           55
325 #define P_UNI           60
326 #define P_FILETEST      65
327 #define P_SHIFT         70
328 #define P_ADD           75
329 #define P_MUL           80
330 #define P_MATCH         85
331 #define P_UNARY         90
332 #define P_POW           95
333 #define P_AUTO          100
334 #define P_MAX           999