a2p.h revision 7c478bd95313f5f23a4c958a745db2134aa03244
/* $RCSfile: a2p.h,v $$Revision: 4.1 $$Date: 92/08/07 18:29:09 $
*
* Copyright (c) 1991-2001, Larry Wall
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
* $Log: a2p.h,v $
*/
#define VOIDUSED 1
#ifdef WIN32
#define _INC_WIN32_PERL5 /* kludge around win32 stdio layer */
#endif
#ifdef VMS
# include "config.h"
#else
# include "../config.h"
#endif
#if defined(__STDC__) || defined(vax11c) || defined(_AIX) || defined(__stdc__) || defined(__cplusplus)
# define STANDARD_C 1
#endif
#ifdef WIN32
# ifndef STANDARD_C
# define STANDARD_C
# endif
# if defined(__BORLANDC__)
# elif defined(__MINGW32__)
# endif
#endif
/* Use all the "standard" definitions? */
#if defined(STANDARD_C) && defined(I_STDLIB)
# include <stdlib.h>
#endif /* STANDARD_C */
#include <stdio.h>
#ifdef I_MATH
#include <math.h>
#endif
#ifdef I_SYS_TYPES
#endif
#ifdef USE_NEXT_CTYPE
#if NX_CURRENT_COMPILER_RELEASE >= 400
#else /* NX_CURRENT_COMPILER_RELEASE < 400 */
#endif /* NX_CURRENT_COMPILER_RELEASE >= 400 */
#else /* !USE_NEXT_CTYPE */
#include <ctype.h>
#endif /* USE_NEXT_CTYPE */
#ifndef STANDARD_C
#endif
#if defined(I_STRING) || defined(__cplusplus)
# include <string.h>
#else
# include <strings.h>
#endif
#if !defined(HAS_BCOPY) || defined(__cplusplus)
#endif
#if !defined(HAS_BZERO) || defined(__cplusplus)
#endif
#endif
#ifdef I_TIME
# include <time.h>
#endif
#ifdef I_SYS_TIME
# ifdef I_SYS_TIME_KERNEL
# define KERNEL
# endif
# ifdef I_SYS_TIME_KERNEL
# endif
#endif
#ifndef MSDOS
# if defined(HAS_TIMES) && defined(I_SYS_TIMES)
# endif
#endif
#ifdef DOSISH
# if defined(OS2)
# define PTHX_UNUSED
# include "../os2ish.h"
# else
# include "../dosish.h"
# endif
#else
# if defined(VMS)
# define NO_PERL_TYPEDEFS
# include "vmsish.h"
# endif
#endif
#ifndef STANDARD_C
#else
#endif
#endif /* ! STANDARD_C */
#ifdef VMS
# include "handy.h"
#else
# include "../handy.h"
#endif
#define Nullop 0
#define OPROG 1
#define OJUNK 2
#define OHUNKS 3
#define ORANGE 4
#define OPAT 5
#define OHUNK 6
#define OPPAREN 7
#define OPANDAND 8
#define OPOROR 9
#define OPNOT 10
#define OCPAREN 11
#define OCANDAND 12
#define OCOROR 13
#define OCNOT 14
#define ORELOP 15
#define ORPAREN 16
#define OMATCHOP 17
#define OMPAREN 18
#define OCONCAT 19
#define OASSIGN 20
#define OADD 21
#define OSUBTRACT 22
#define OMULT 23
#define ODIV 24
#define OMOD 25
#define OPOSTINCR 26
#define OPOSTDECR 27
#define OPREINCR 28
#define OPREDECR 29
#define OUMINUS 30
#define OUPLUS 31
#define OPAREN 32
#define OGETLINE 33
#define OSPRINTF 34
#define OSUBSTR 35
#define OSTRING 36
#define OSPLIT 37
#define OSNEWLINE 38
#define OINDEX 39
#define ONUM 40
#define OSTR 41
#define OVAR 42
#define OFLD 43
#define ONEWLINE 44
#define OCOMMENT 45
#define OCOMMA 46
#define OSEMICOLON 47
#define OSCOMMENT 48
#define OSTATES 49
#define OSTATE 50
#define OPRINT 51
#define OPRINTF 52
#define OBREAK 53
#define ONEXT 54
#define OEXIT 55
#define OCONTINUE 56
#define OREDIR 57
#define OIF 58
#define OWHILE 59
#define OFOR 60
#define OFORIN 61
#define OVFLD 62
#define OBLOCK 63
#define OREGEX 64
#define OLENGTH 65
#define OLOG 66
#define OEXP 67
#define OSQRT 68
#define OINT 69
#define ODO 70
#define OPOW 71
#define OSUB 72
#define OGSUB 73
#define OMATCH 74
#define OUSERFUN 75
#define OUSERDEF 76
#define OCLOSE 77
#define OATAN2 78
#define OSIN 79
#define OCOS 80
#define ORAND 81
#define OSRAND 82
#define ODELETE 83
#define OSYSTEM 84
#define OCOND 85
#define ORETURN 86
#define ODEFINED 87
#define OSTAR 88
#ifdef DOINIT
char *opname[] = {
"0",
"PROG",
"JUNK",
"HUNKS",
"RANGE",
"PAT",
"HUNK",
"PPAREN",
"PANDAND",
"POROR",
"PNOT",
"CPAREN",
"CANDAND",
"COROR",
"CNOT",
"RELOP",
"RPAREN",
"MATCHOP",
"MPAREN",
"CONCAT",
"ASSIGN",
"ADD",
"SUBTRACT",
"MULT",
"DIV",
"MOD",
"POSTINCR",
"POSTDECR",
"PREINCR",
"PREDECR",
"UMINUS",
"UPLUS",
"PAREN",
"GETLINE",
"SPRINTF",
"SUBSTR",
"STRING",
"SPLIT",
"SNEWLINE",
"INDEX",
"NUM",
"STR",
"VAR",
"FLD",
"NEWLINE",
"COMMENT",
"COMMA",
"SEMICOLON",
"SCOMMENT",
"STATES",
"STATE",
"PRINT",
"PRINTF",
"BREAK",
"NEXT",
"EXIT",
"CONTINUE",
"REDIR",
"IF",
"WHILE",
"FOR",
"FORIN",
"VFLD",
"BLOCK",
"REGEX",
"LENGTH",
"LOG",
"EXP",
"SQRT",
"INT",
"DO",
"POW",
"SUB",
"GSUB",
"MATCH",
"USERFUN",
"USERDEF",
"CLOSE",
"ATAN2",
"SIN",
"COS",
"RAND",
"SRAND",
"DELETE",
"SYSTEM",
"COND",
"RETURN",
"DEFINED",
"STAR",
"89"
};
#else
extern char *opname[];
#endif
union u_ops {
int ival;
char *cval;
};
#else
#define OPSMAX 50000
#endif /* 80286 hack */
#include "str.h"
#include "hash.h"
/* A string is TRUE if not "" or "0". */
#define str_true(str) (Str = (str), (Str->str_pok ? True(Str->str_ptr) : (Str->str_nok ? (Str->str_nval != 0.0) : 0 )))
#define str_peek(str) (Str = (str), (Str->str_pok ? Str->str_ptr : (Str->str_nok ? (sprintf(buf,"num(%g)",Str->str_nval),buf) : "" )))
/* Prototypes for things in a2p.c */
void putone ( void );
int rememberargs ( int arg );
char * scannum ( char *s );
char * scanpat ( char *s );
void yyerror ( char *s );
int yylex ( void );
#ifdef DEBUGGING
#define YYDEBUG 1
extern int yydebug;
#else
# ifndef YYDEBUG
# define YYDEBUG 0
# endif
#endif
#define P_MIN 0
#define P_LISTOP 5
#define P_COMMA 10
#define P_ASSIGN 15
#define P_COND 20
#define P_DOTDOT 25
#define P_OROR 30
#define P_ANDAND 35
#define P_OR 40
#define P_AND 45
#define P_EQ 50
#define P_REL 55
#define P_UNI 60
#define P_FILETEST 65
#define P_SHIFT 70
#define P_ADD 75
#define P_MUL 80
#define P_MATCH 85
#define P_UNARY 90
#define P_POW 95
#define P_AUTO 100
#define P_MAX 999