This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update to Digest::MD5 2.31
[perl5.git] / x2p / a2p.h
CommitLineData
428aff04 1/* $RCSfile: a2p.h,v $$Revision: 4.1 $$Date: 92/08/07 18:29:09 $
a687059c 2 *
4bb101f2
JH
3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, by Larry Wall and others
a687059c 5 *
2b317908
LW
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
8d063cd8
LW
8 *
9 * $Log: a2p.h,v $
8d063cd8
LW
10 */
11
be04251a 12#define VOIDUSED 1
d07c2202
GS
13
14#ifdef WIN32
15#define _INC_WIN32_PERL5 /* kludge around win32 stdio layer */
16#endif
17
774d564b 18#ifdef VMS
19# include "config.h"
cf267c36
JH
20#elif defined(NETWARE)
21# include "../NetWare/config.h"
774d564b 22#else
23# include "../config.h"
24#endif
be04251a 25
3730b96e
GS
26#if defined(__STDC__) || defined(vax11c) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus)
27# define STANDARD_C 1
28#endif
29
d07c2202
GS
30#ifdef WIN32
31#undef USE_STDIO_PTR /* XXX fast gets won't work, must investigate */
32# ifndef STANDARD_C
33# define STANDARD_C
34# endif
35# if defined(__BORLANDC__)
36# pragma warn -ccc
37# pragma warn -rch
38# pragma warn -sig
39# pragma warn -pia
40# pragma warn -par
41# pragma warn -aus
42# pragma warn -use
43# pragma warn -csu
44# pragma warn -pro
45# elif defined(_MSC_VER)
46# elif defined(__MINGW32__)
47# endif
48#endif
49
9c8d0b29
AD
50/* Use all the "standard" definitions? */
51#if defined(STANDARD_C) && defined(I_STDLIB)
52# include <stdlib.h>
53#endif /* STANDARD_C */
fed7345c 54
9c8d0b29
AD
55#include <stdio.h>
56
57#ifdef I_MATH
58#include <math.h>
59#endif
60
fed7345c
AD
61#ifdef I_SYS_TYPES
62# include <sys/types.h>
63#endif
64
dfe0b228 65#ifdef USE_NEXT_CTYPE
66
67#if NX_CURRENT_COMPILER_RELEASE >= 400
68#include <objc/NXCType.h>
69#else /* NX_CURRENT_COMPILER_RELEASE < 400 */
9c8d0b29 70#include <appkit/NXCType.h>
dfe0b228 71#endif /* NX_CURRENT_COMPILER_RELEASE >= 400 */
72
73#else /* !USE_NEXT_CTYPE */
9c8d0b29 74#include <ctype.h>
dfe0b228 75#endif /* USE_NEXT_CTYPE */
9c8d0b29
AD
76
77#define MEM_SIZE Size_t
78
c1d22f6b 79#ifndef STANDARD_C
20ce7b12
GS
80 Malloc_t malloc (MEM_SIZE nbytes);
81 Malloc_t calloc (MEM_SIZE elements, MEM_SIZE size);
82 Malloc_t realloc (Malloc_t where, MEM_SIZE nbytes);
83 Free_t free (Malloc_t where);
55497cff 84#endif
85
9c8d0b29
AD
86#if defined(I_STRING) || defined(__cplusplus)
87# include <string.h>
88#else
89# include <strings.h>
90#endif
91
92#if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr)
93#define strchr index
94#define strrchr rindex
95#endif
96
1aef975c
AD
97#ifdef I_TIME
98# include <time.h>
99#endif
100
101#ifdef I_SYS_TIME
102# ifdef I_SYS_TIME_KERNEL
103# define KERNEL
104# endif
105# include <sys/time.h>
106# ifdef I_SYS_TIME_KERNEL
107# undef KERNEL
108# endif
109#endif
110
111#ifndef MSDOS
112# if defined(HAS_TIMES) && defined(I_SYS_TIMES)
113# include <sys/times.h>
114# endif
115#endif
116
4633a7c4
LW
117#ifdef DOSISH
118# if defined(OS2)
23da6c43 119# define PTHX_UNUSED
4633a7c4
LW
120# include "../os2ish.h"
121# else
122# include "../dosish.h"
123# endif
124#else
125# if defined(VMS)
44a8e56a 126# define NO_PERL_TYPEDEFS
774d564b 127# include "vmsish.h"
4633a7c4
LW
128# endif
129#endif
130
1aef975c
AD
131#ifndef STANDARD_C
132/* All of these are in stdlib.h or time.h for ANSI C */
133Time_t time();
134struct tm *gmtime(), *localtime();
092bebab
JH
135#if defined(OEMVS) || defined(__OPEN_VM)
136char *(strchr)(), *(strrchr)();
137char *(strcpy)(), *(strcat)();
138#else
1aef975c
AD
139char *strchr(), *strrchr();
140char *strcpy(), *strcat();
092bebab 141#endif
1aef975c
AD
142#endif /* ! STANDARD_C */
143
774d564b 144#ifdef VMS
145# include "handy.h"
146#else
147# include "../handy.h"
148#endif
55497cff 149
150#undef Nullfp
151#define Nullfp Null(FILE*)
152
8d063cd8
LW
153#define Nullop 0
154
155#define OPROG 1
156#define OJUNK 2
157#define OHUNKS 3
158#define ORANGE 4
159#define OPAT 5
160#define OHUNK 6
161#define OPPAREN 7
162#define OPANDAND 8
163#define OPOROR 9
164#define OPNOT 10
165#define OCPAREN 11
166#define OCANDAND 12
167#define OCOROR 13
168#define OCNOT 14
169#define ORELOP 15
170#define ORPAREN 16
171#define OMATCHOP 17
172#define OMPAREN 18
173#define OCONCAT 19
174#define OASSIGN 20
175#define OADD 21
a687059c 176#define OSUBTRACT 22
8d063cd8
LW
177#define OMULT 23
178#define ODIV 24
179#define OMOD 25
180#define OPOSTINCR 26
181#define OPOSTDECR 27
182#define OPREINCR 28
183#define OPREDECR 29
184#define OUMINUS 30
185#define OUPLUS 31
186#define OPAREN 32
187#define OGETLINE 33
188#define OSPRINTF 34
189#define OSUBSTR 35
190#define OSTRING 36
191#define OSPLIT 37
192#define OSNEWLINE 38
193#define OINDEX 39
194#define ONUM 40
195#define OSTR 41
196#define OVAR 42
197#define OFLD 43
198#define ONEWLINE 44
199#define OCOMMENT 45
200#define OCOMMA 46
201#define OSEMICOLON 47
202#define OSCOMMENT 48
203#define OSTATES 49
204#define OSTATE 50
205#define OPRINT 51
206#define OPRINTF 52
207#define OBREAK 53
208#define ONEXT 54
209#define OEXIT 55
210#define OCONTINUE 56
211#define OREDIR 57
212#define OIF 58
213#define OWHILE 59
214#define OFOR 60
215#define OFORIN 61
216#define OVFLD 62
217#define OBLOCK 63
218#define OREGEX 64
219#define OLENGTH 65
220#define OLOG 66
221#define OEXP 67
222#define OSQRT 68
223#define OINT 69
a687059c
LW
224#define ODO 70
225#define OPOW 71
226#define OSUB 72
227#define OGSUB 73
228#define OMATCH 74
229#define OUSERFUN 75
230#define OUSERDEF 76
231#define OCLOSE 77
232#define OATAN2 78
233#define OSIN 79
234#define OCOS 80
235#define ORAND 81
236#define OSRAND 82
237#define ODELETE 83
238#define OSYSTEM 84
239#define OCOND 85
240#define ORETURN 86
241#define ODEFINED 87
242#define OSTAR 88
8d063cd8
LW
243
244#ifdef DOINIT
245char *opname[] = {
246 "0",
247 "PROG",
248 "JUNK",
249 "HUNKS",
250 "RANGE",
251 "PAT",
252 "HUNK",
253 "PPAREN",
254 "PANDAND",
255 "POROR",
256 "PNOT",
257 "CPAREN",
258 "CANDAND",
259 "COROR",
260 "CNOT",
261 "RELOP",
262 "RPAREN",
263 "MATCHOP",
264 "MPAREN",
265 "CONCAT",
266 "ASSIGN",
267 "ADD",
a687059c 268 "SUBTRACT",
8d063cd8
LW
269 "MULT",
270 "DIV",
271 "MOD",
272 "POSTINCR",
273 "POSTDECR",
274 "PREINCR",
275 "PREDECR",
276 "UMINUS",
277 "UPLUS",
278 "PAREN",
279 "GETLINE",
280 "SPRINTF",
281 "SUBSTR",
282 "STRING",
283 "SPLIT",
284 "SNEWLINE",
285 "INDEX",
286 "NUM",
287 "STR",
288 "VAR",
289 "FLD",
290 "NEWLINE",
291 "COMMENT",
292 "COMMA",
293 "SEMICOLON",
294 "SCOMMENT",
295 "STATES",
296 "STATE",
297 "PRINT",
298 "PRINTF",
299 "BREAK",
300 "NEXT",
301 "EXIT",
302 "CONTINUE",
303 "REDIR",
304 "IF",
305 "WHILE",
306 "FOR",
307 "FORIN",
308 "VFLD",
309 "BLOCK",
310 "REGEX",
311 "LENGTH",
312 "LOG",
313 "EXP",
314 "SQRT",
315 "INT",
a687059c
LW
316 "DO",
317 "POW",
318 "SUB",
319 "GSUB",
320 "MATCH",
321 "USERFUN",
322 "USERDEF",
323 "CLOSE",
324 "ATAN2",
325 "SIN",
326 "COS",
327 "RAND",
328 "SRAND",
329 "DELETE",
330 "SYSTEM",
331 "COND",
332 "RETURN",
333 "DEFINED",
334 "STAR",
335 "89"
8d063cd8
LW
336};
337#else
338extern char *opname[];
339#endif
340
a687059c
LW
341EXT int mop INIT(1);
342
d8f2e4cc 343union u_ops {
8d063cd8
LW
344 int ival;
345 char *cval;
d8f2e4cc
LW
346};
347#if defined(iAPX286) || defined(M_I286) || defined(I80286) /* 80286 hack */
348#define OPSMAX (64000/sizeof(union u_ops)) /* approx. max segment size */
349#else
350#define OPSMAX 50000
351#endif /* 80286 hack */
a0d0e21e 352EXT union u_ops ops[OPSMAX];
8d063cd8 353
8d063cd8
LW
354typedef struct string STR;
355typedef struct htbl HASH;
356
357#include "str.h"
358#include "hash.h"
359
9c8d0b29 360
8d063cd8
LW
361/* A string is TRUE if not "" or "0". */
362#define True(val) (tmps = (val), (*tmps && !(*tmps == '0' && !tmps[1])))
363EXT char *Yes INIT("1");
364EXT char *No INIT("");
365
366#define str_true(str) (Str = (str), (Str->str_pok ? True(Str->str_ptr) : (Str->str_nok ? (Str->str_nval != 0.0) : 0 )))
367
1779d84d 368#define str_peek(str) (Str = (str), (Str->str_pok ? Str->str_ptr : (Str->str_nok ? (sprintf(buf,"num(%"NVgf")",Str->str_nval),buf) : "" )))
8d063cd8
LW
369#define str_get(str) (Str = (str), (Str->str_pok ? Str->str_ptr : str_2ptr(Str)))
370#define str_gnum(str) (Str = (str), (Str->str_nok ? Str->str_nval : str_2num(Str)))
371EXT STR *Str;
372
373#define GROWSTR(pp,lp,len) if (*(lp) < (len)) growstr(pp,lp,len)
374
9c8d0b29 375/* Prototypes for things in a2p.c */
20ce7b12
GS
376int aryrefarg ( int arg );
377int bl ( int arg, int maybe );
378void dump ( int branch );
379int fixfargs ( int name, int arg, int prevargs );
380int fixrargs ( char *name, int arg, int prevargs );
381void fixup ( STR *str );
382int numary ( int arg );
383int oper0 ( int type );
384int oper1 ( int type, int arg1 );
385int oper2 ( int type, int arg1, int arg2 );
386int oper3 ( int type, int arg1, int arg2, int arg3 );
387int oper4 ( int type, int arg1, int arg2, int arg3, int arg4 );
388int oper5 ( int type, int arg1, int arg2, int arg3, int arg4, int arg5 );
389void putlines ( STR *str );
390void putone ( void );
391int rememberargs ( int arg );
392char * scannum ( char *s );
393char * scanpat ( char *s );
394int string ( char *ptr, int len );
395void yyerror ( char *s );
396int yylex ( void );
8d063cd8
LW
397
398EXT int line INIT(0);
399
400EXT FILE *rsfp;
fe14fcc3 401EXT char buf[2048];
8d063cd8
LW
402EXT char *bufptr INIT(buf);
403
404EXT STR *linestr INIT(Nullstr);
405
fe14fcc3 406EXT char tokenbuf[2048];
8d063cd8
LW
407EXT int expectterm INIT(TRUE);
408
409#ifdef DEBUGGING
410EXT int debug INIT(0);
411EXT int dlevel INIT(0);
9bb9d9f7 412#define YYDEBUG 1
8d063cd8 413extern int yydebug;
9d116dd7
JH
414#else
415# ifndef YYDEBUG
416# define YYDEBUG 0
417# endif
8d063cd8
LW
418#endif
419
420EXT STR *freestrroot INIT(Nullstr);
421
422EXT STR str_no;
423EXT STR str_yes;
424
425EXT bool do_split INIT(FALSE);
426EXT bool split_to_array INIT(FALSE);
427EXT bool set_array_base INIT(FALSE);
428EXT bool saw_RS INIT(FALSE);
429EXT bool saw_OFS INIT(FALSE);
430EXT bool saw_ORS INIT(FALSE);
431EXT bool saw_line_op INIT(FALSE);
432EXT bool in_begin INIT(TRUE);
433EXT bool do_opens INIT(FALSE);
434EXT bool do_fancy_opens INIT(FALSE);
435EXT bool lval_field INIT(FALSE);
436EXT bool do_chop INIT(FALSE);
437EXT bool need_entire INIT(FALSE);
438EXT bool absmaxfld INIT(FALSE);
a687059c 439EXT bool saw_altinput INIT(FALSE);
8d063cd8 440
bf10efe7
LW
441EXT bool nomemok INIT(FALSE);
442
8d063cd8
LW
443EXT char const_FS INIT(0);
444EXT char *namelist INIT(Nullch);
445EXT char fswitch INIT(0);
a5571d59 446EXT bool old_awk INIT(0);
8d063cd8
LW
447
448EXT int saw_FS INIT(0);
449EXT int maxfld INIT(0);
450EXT int arymax INIT(0);
a0d0e21e 451EXT char *nameary[100];
8d063cd8
LW
452
453EXT STR *opens;
454
455EXT HASH *symtab;
a687059c
LW
456EXT HASH *curarghash;
457
458#define P_MIN 0
459#define P_LISTOP 5
460#define P_COMMA 10
461#define P_ASSIGN 15
462#define P_COND 20
463#define P_DOTDOT 25
464#define P_OROR 30
465#define P_ANDAND 35
466#define P_OR 40
467#define P_AND 45
468#define P_EQ 50
469#define P_REL 55
470#define P_UNI 60
471#define P_FILETEST 65
472#define P_SHIFT 70
473#define P_ADD 75
474#define P_MUL 80
475#define P_MATCH 85
476#define P_UNARY 90
477#define P_POW 95
478#define P_AUTO 100
479#define P_MAX 999
79072805
LW
480
481EXT int an;