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