1*24470Sdonn /*
2*24470Sdonn  * Copyright (c) 1980 Regents of the University of California.
3*24470Sdonn  * All rights reserved.  The Berkeley software License Agreement
4*24470Sdonn  * specifies the terms and conditions for redistribution.
5*24470Sdonn  *
6*24470Sdonn  *	@(#)defines.h	5.1 (Berkeley) 08/28/85
7*24470Sdonn  */
8*24470Sdonn 
9*24470Sdonn #define INTERDATA 2
10*24470Sdonn #define GCOS 3
11*24470Sdonn #define PDP11 4
12*24470Sdonn #define IBM 5
13*24470Sdonn #define CMACH 6
14*24470Sdonn #define VAX 7
15*24470Sdonn 
16*24470Sdonn #define DMR 2
17*24470Sdonn #define PCC 3
18*24470Sdonn 
19*24470Sdonn #ifndef FAMILY
20*24470Sdonn FAMILY NOT DEFINED !!!
21*24470Sdonn Family = FAMILY
22*24470Sdonn #endif
23*24470Sdonn 
24*24470Sdonn #ifndef HERE
25*24470Sdonn HERE NOT DEFINED !!!!
26*24470Sdonn Here = HERE
27*24470Sdonn #endif
28*24470Sdonn 
29*24470Sdonn #define M(x) (1<<x)
30*24470Sdonn #define ALLOC(x)	(struct x *) ckalloc(sizeof(struct x))
31*24470Sdonn #define ALLOCN(n,x)	(struct x *) ckalloc(n*sizeof(struct x))
32*24470Sdonn #define ALLEXPR		(expptr) ckalloc( sizeof(union Expression) )
33*24470Sdonn typedef int *ptr;
34*24470Sdonn typedef char *charptr;
35*24470Sdonn typedef FILE *FILEP;
36*24470Sdonn typedef short flag;
37*24470Sdonn typedef char field;	/* actually need only 4 bits */
38*24470Sdonn typedef long int ftnint;
39*24470Sdonn #define LOCAL static
40*24470Sdonn 
41*24470Sdonn #define NO 0
42*24470Sdonn #define YES 1
43*24470Sdonn 
44*24470Sdonn #define CNULL (char *) 0
45*24470Sdonn #define PNULL (ptr) 0
46*24470Sdonn #define CHNULL (chainp) 0
47*24470Sdonn #define ENULL (expptr) 0
48*24470Sdonn 
49*24470Sdonn 
50*24470Sdonn 
51*24470Sdonn /* block tag values */
52*24470Sdonn 
53*24470Sdonn #define TNAME 1
54*24470Sdonn #define TCONST 2
55*24470Sdonn #define TEXPR 3
56*24470Sdonn #define TADDR 4
57*24470Sdonn #define TTEMP 5
58*24470Sdonn #define TPRIM 6
59*24470Sdonn #define TLIST 7
60*24470Sdonn #define TIMPLDO 8
61*24470Sdonn #define TERROR 9
62*24470Sdonn 
63*24470Sdonn 
64*24470Sdonn /* parser states */
65*24470Sdonn 
66*24470Sdonn #define OUTSIDE 0
67*24470Sdonn #define INSIDE 1
68*24470Sdonn #define INDCL 2
69*24470Sdonn #define INDATA 3
70*24470Sdonn #define INEXEC 4
71*24470Sdonn 
72*24470Sdonn /* procedure classes */
73*24470Sdonn 
74*24470Sdonn #define PROCMAIN 1
75*24470Sdonn #define PROCBLOCK 2
76*24470Sdonn #define PROCSUBR 3
77*24470Sdonn #define PROCFUNCT 4
78*24470Sdonn 
79*24470Sdonn 
80*24470Sdonn /* storage classes -- vstg values */
81*24470Sdonn 
82*24470Sdonn #define STGUNKNOWN 0
83*24470Sdonn #define STGARG 1
84*24470Sdonn #define STGAUTO 2
85*24470Sdonn #define STGBSS 3
86*24470Sdonn #define STGINIT 4
87*24470Sdonn #define STGCONST 5
88*24470Sdonn #define STGEXT 6
89*24470Sdonn #define STGINTR 7
90*24470Sdonn #define STGSTFUNCT 8
91*24470Sdonn #define STGCOMMON 9
92*24470Sdonn #define STGEQUIV 10
93*24470Sdonn #define STGREG 11
94*24470Sdonn #define STGLENG 12
95*24470Sdonn #define STGNULL 13
96*24470Sdonn #define STGPREG 14
97*24470Sdonn 
98*24470Sdonn /* name classes -- vclass values */
99*24470Sdonn 
100*24470Sdonn #define CLUNKNOWN 0
101*24470Sdonn #define CLPARAM 1
102*24470Sdonn #define CLVAR 2
103*24470Sdonn #define CLENTRY 3
104*24470Sdonn #define CLMAIN 4
105*24470Sdonn #define CLBLOCK 5
106*24470Sdonn #define CLPROC 6
107*24470Sdonn #define CLNAMELIST 7
108*24470Sdonn 
109*24470Sdonn 
110*24470Sdonn /* vprocclass values */
111*24470Sdonn 
112*24470Sdonn #define PUNKNOWN 0
113*24470Sdonn #define PEXTERNAL 1
114*24470Sdonn #define PINTRINSIC 2
115*24470Sdonn #define PSTFUNCT 3
116*24470Sdonn #define PTHISPROC 4
117*24470Sdonn 
118*24470Sdonn /* control stack codes */
119*24470Sdonn 
120*24470Sdonn #define CTLDO 1
121*24470Sdonn #define CTLIF 2
122*24470Sdonn #define CTLELSE 3
123*24470Sdonn 
124*24470Sdonn 
125*24470Sdonn /* operators -- see also arrays 'ops' and 'ops2' in put.c */
126*24470Sdonn 
127*24470Sdonn #define OPPLUS 1
128*24470Sdonn #define OPMINUS 2
129*24470Sdonn #define OPSTAR 3
130*24470Sdonn #define OPSLASH 4
131*24470Sdonn #define OPPOWER 5
132*24470Sdonn #define OPNEG 6
133*24470Sdonn #define OPOR 7
134*24470Sdonn #define OPAND 8
135*24470Sdonn #define OPEQV 9
136*24470Sdonn #define OPNEQV 10
137*24470Sdonn #define OPNOT 11
138*24470Sdonn #define OPCONCAT 12
139*24470Sdonn #define OPLT 13
140*24470Sdonn #define OPEQ 14
141*24470Sdonn #define OPGT 15
142*24470Sdonn #define OPLE 16
143*24470Sdonn #define OPNE 17
144*24470Sdonn #define OPGE 18
145*24470Sdonn #define OPCALL 19
146*24470Sdonn #define OPCCALL 20
147*24470Sdonn #define OPASSIGN 21
148*24470Sdonn #define OPPLUSEQ 22
149*24470Sdonn #define OPSTAREQ 23
150*24470Sdonn #define OPCONV 24
151*24470Sdonn #define OPLSHIFT 25
152*24470Sdonn #define OPMOD 26
153*24470Sdonn #define OPCOMMA 27
154*24470Sdonn #define OPQUEST 28
155*24470Sdonn #define OPCOLON 29
156*24470Sdonn #define OPABS 30
157*24470Sdonn #define OPMIN 31
158*24470Sdonn #define OPMAX 32
159*24470Sdonn #define OPADDR 33
160*24470Sdonn #define OPINDIRECT 34
161*24470Sdonn #define OPBITOR 35
162*24470Sdonn #define OPBITAND 36
163*24470Sdonn #define OPBITXOR 37
164*24470Sdonn #define OPBITNOT 38
165*24470Sdonn #define OPRSHIFT 39
166*24470Sdonn #define OPPAREN 40
167*24470Sdonn #define	OPUNARYPLUS 41
168*24470Sdonn 
169*24470Sdonn 
170*24470Sdonn /* label type codes */
171*24470Sdonn 
172*24470Sdonn #define LABUNKNOWN 0
173*24470Sdonn #define LABEXEC 1
174*24470Sdonn #define LABFORMAT 2
175*24470Sdonn #define LABOTHER 3
176*24470Sdonn 
177*24470Sdonn 
178*24470Sdonn /* INTRINSIC function codes*/
179*24470Sdonn 
180*24470Sdonn #define INTREND 0
181*24470Sdonn #define INTRCONV 1
182*24470Sdonn #define INTRMIN 2
183*24470Sdonn #define INTRMAX 3
184*24470Sdonn #define INTRGEN 4
185*24470Sdonn #define INTRSPEC 5
186*24470Sdonn #define INTRBOOL 6
187*24470Sdonn #define INTRCNST 7
188*24470Sdonn 
189*24470Sdonn 
190*24470Sdonn /* I/O statement codes */
191*24470Sdonn 
192*24470Sdonn #define IOSTDIN ICON(5)
193*24470Sdonn #define IOSTDOUT ICON(6)
194*24470Sdonn #define IOSTDERR ICON(0)
195*24470Sdonn 
196*24470Sdonn #define IOSBAD (-1)
197*24470Sdonn #define IOSPOSITIONAL 0
198*24470Sdonn #define IOSUNIT 1
199*24470Sdonn #define IOSFMT 2
200*24470Sdonn 
201*24470Sdonn #define IOINQUIRE 1
202*24470Sdonn #define IOOPEN 2
203*24470Sdonn #define IOCLOSE 3
204*24470Sdonn #define IOREWIND 4
205*24470Sdonn #define IOBACKSPACE 5
206*24470Sdonn #define IOENDFILE 6
207*24470Sdonn #define IOREAD 7
208*24470Sdonn #define IOWRITE 8
209*24470Sdonn 
210*24470Sdonn 
211*24470Sdonn /* type masks */
212*24470Sdonn 
213*24470Sdonn #define MSKLOGICAL	M(TYLOGICAL)
214*24470Sdonn #define MSKADDR	M(TYADDR)
215*24470Sdonn #define MSKCHAR	M(TYCHAR)
216*24470Sdonn #define MSKINT	M(TYSHORT)|M(TYLONG)
217*24470Sdonn #define MSKREAL	M(TYREAL)|M(TYDREAL)
218*24470Sdonn #define MSKCOMPLEX	M(TYCOMPLEX)|M(TYDCOMPLEX)
219*24470Sdonn #define MSKSTATIC (M(STGINIT)|M(STGBSS)|M(STGCOMMON)|M(STGEQUIV)|M(STGCONST))
220*24470Sdonn 
221*24470Sdonn /* miscellaneous macros */
222*24470Sdonn 
223*24470Sdonn #define ONEOF(x,y) (M(x) & (y))
224*24470Sdonn #define ISCOMPLEX(z) ONEOF(z, MSKCOMPLEX)
225*24470Sdonn #define ISREAL(z) ONEOF(z, MSKREAL)
226*24470Sdonn #define ISNUMERIC(z) ONEOF(z, MSKINT|MSKREAL|MSKCOMPLEX)
227*24470Sdonn #define ISICON(z) (z->tag==TCONST && ISINT(z->constblock.vtype))
228*24470Sdonn #define ISCHAR(z) (z->headblock.vtype==TYCHAR)
229*24470Sdonn #define ISINT(z)   ONEOF(z, MSKINT)
230*24470Sdonn #define ISCONST(z) (z->tag==TCONST)
231*24470Sdonn #define ISERROR(z) (z->tag==TERROR)
232*24470Sdonn #define ISPLUSOP(z) (z->tag==TEXPR && z->exprblock.opcode==OPPLUS)
233*24470Sdonn #define ISSTAROP(z) (z->tag==TEXPR && z->exprblock.opcode==OPSTAR)
234*24470Sdonn #define ISONE(z) (ISICON(z) && z->constblock.const.ci==1)
235*24470Sdonn #define INT(z) ONEOF(z, MSKINT|MSKCHAR)
236*24470Sdonn #define ICON(z) mkintcon( (ftnint)(z) )
237*24470Sdonn 
238*24470Sdonn #define NO66(s)	if(no66flag) err66(s)
239*24470Sdonn #define NOEXT(s)	if(noextflag) errext(s)
240*24470Sdonn 
241*24470Sdonn /* round a up to a multiple of b */
242*24470Sdonn #define roundup(a,b)    ( b * ( (a+b-1)/b) )
243*24470Sdonn 
244*24470Sdonn 
245*24470Sdonn /* optimization buffer slot types */
246*24470Sdonn 
247*24470Sdonn #define SKNULL		0
248*24470Sdonn #define SKIFN		1
249*24470Sdonn #define SKGOTO		2
250*24470Sdonn #define SKLABEL		3
251*24470Sdonn #define SKEQ		4
252*24470Sdonn #define SKCALL		5
253*24470Sdonn #define SKCMGOTO	6
254*24470Sdonn #define SKSTOP		7
255*24470Sdonn #define SKDOHEAD	8
256*24470Sdonn #define SKENDDO		9
257*24470Sdonn #define SKARIF		10
258*24470Sdonn #define SKRETURN	11
259*24470Sdonn #define SKASGOTO	12
260*24470Sdonn #define SKPAUSE		13
261*24470Sdonn #define SKASSIGN	14
262*24470Sdonn #define SKIOIFN		15
263*24470Sdonn #define SKFRTEMP	16
264