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