1*47933Sbostic /*-
2*47933Sbostic  * Copyright (c) 1991 The Regents of the University of California.
3*47933Sbostic  * All rights reserved.
424470Sdonn  *
5*47933Sbostic  * %sccs.include.proprietary.c%
6*47933Sbostic  *
7*47933Sbostic  *	@(#)defines.h	5.4 (Berkeley) 04/12/91
824470Sdonn  */
924470Sdonn 
1024471Sdonn /*
1124471Sdonn  * defines.h
1224471Sdonn  *
1324471Sdonn  * Global definitions for the first pass of the f77 compiler, Unix 4.3 BSD.
1424471Sdonn  *
1524471Sdonn  * University of Utah CS Dept modification history:
1624471Sdonn  *
1724471Sdonn  * $Log:	defines.h,v $
1824471Sdonn  * Revision 5.2  85/08/10  05:11:20  donn
1924471Sdonn  * Added comment header; added Jerry Berkman's changes to delete INTRCNST
2024471Sdonn  * and to ifdef 66 code.
2124471Sdonn  *
2224471Sdonn  */
2324471Sdonn 
2424470Sdonn #define INTERDATA 2
2524470Sdonn #define GCOS 3
2624470Sdonn #define PDP11 4
2724470Sdonn #define IBM 5
2824470Sdonn #define CMACH 6
2924470Sdonn #define VAX 7
3024470Sdonn 
3124470Sdonn #define DMR 2
3224470Sdonn #define PCC 3
3324470Sdonn 
3424470Sdonn #ifndef FAMILY
3524470Sdonn FAMILY NOT DEFINED !!!
3624470Sdonn Family = FAMILY
3724470Sdonn #endif
3824470Sdonn 
3924470Sdonn #ifndef HERE
4024470Sdonn HERE NOT DEFINED !!!!
4124470Sdonn Here = HERE
4224470Sdonn #endif
4324470Sdonn 
4424470Sdonn #define M(x) (1<<x)
4524470Sdonn #define ALLOC(x)	(struct x *) ckalloc(sizeof(struct x))
4624470Sdonn #define ALLOCN(n,x)	(struct x *) ckalloc(n*sizeof(struct x))
4724470Sdonn #define ALLEXPR		(expptr) ckalloc( sizeof(union Expression) )
4824470Sdonn typedef int *ptr;
4924470Sdonn typedef char *charptr;
5024470Sdonn typedef FILE *FILEP;
5124470Sdonn typedef short flag;
5224470Sdonn typedef char field;	/* actually need only 4 bits */
5324470Sdonn typedef long int ftnint;
5424470Sdonn #define LOCAL static
5524470Sdonn 
5624470Sdonn #define NO 0
5724470Sdonn #define YES 1
5824470Sdonn 
5924470Sdonn #define CNULL (char *) 0
6024470Sdonn #define PNULL (ptr) 0
6124470Sdonn #define CHNULL (chainp) 0
6224470Sdonn #define ENULL (expptr) 0
6324470Sdonn 
6424470Sdonn 
6524470Sdonn 
6624470Sdonn /* block tag values */
6724470Sdonn 
6824470Sdonn #define TNAME 1
6924470Sdonn #define TCONST 2
7024470Sdonn #define TEXPR 3
7124470Sdonn #define TADDR 4
7224470Sdonn #define TTEMP 5
7324470Sdonn #define TPRIM 6
7424470Sdonn #define TLIST 7
7524470Sdonn #define TIMPLDO 8
7624470Sdonn #define TERROR 9
7724470Sdonn 
7824470Sdonn 
7924470Sdonn /* parser states */
8024470Sdonn 
8124470Sdonn #define OUTSIDE 0
8224470Sdonn #define INSIDE 1
8324470Sdonn #define INDCL 2
8424470Sdonn #define INDATA 3
8524470Sdonn #define INEXEC 4
8624470Sdonn 
8724470Sdonn /* procedure classes */
8824470Sdonn 
8924470Sdonn #define PROCMAIN 1
9024470Sdonn #define PROCBLOCK 2
9124470Sdonn #define PROCSUBR 3
9224470Sdonn #define PROCFUNCT 4
9324470Sdonn 
9424470Sdonn 
9524470Sdonn /* storage classes -- vstg values */
9624470Sdonn 
9724470Sdonn #define STGUNKNOWN 0
9824470Sdonn #define STGARG 1
9924470Sdonn #define STGAUTO 2
10024470Sdonn #define STGBSS 3
10124470Sdonn #define STGINIT 4
10224470Sdonn #define STGCONST 5
10324470Sdonn #define STGEXT 6
10424470Sdonn #define STGINTR 7
10524470Sdonn #define STGSTFUNCT 8
10624470Sdonn #define STGCOMMON 9
10724470Sdonn #define STGEQUIV 10
10824470Sdonn #define STGREG 11
10924470Sdonn #define STGLENG 12
11024470Sdonn #define STGNULL 13
11124470Sdonn #define STGPREG 14
11224470Sdonn 
11324470Sdonn /* name classes -- vclass values */
11424470Sdonn 
11524470Sdonn #define CLUNKNOWN 0
11624470Sdonn #define CLPARAM 1
11724470Sdonn #define CLVAR 2
11824470Sdonn #define CLENTRY 3
11924470Sdonn #define CLMAIN 4
12024470Sdonn #define CLBLOCK 5
12124470Sdonn #define CLPROC 6
12224470Sdonn #define CLNAMELIST 7
12324470Sdonn 
12424470Sdonn 
12524470Sdonn /* vprocclass values */
12624470Sdonn 
12724470Sdonn #define PUNKNOWN 0
12824470Sdonn #define PEXTERNAL 1
12924470Sdonn #define PINTRINSIC 2
13024470Sdonn #define PSTFUNCT 3
13124470Sdonn #define PTHISPROC 4
13224470Sdonn 
13324470Sdonn /* control stack codes */
13424470Sdonn 
13524470Sdonn #define CTLDO 1
13624470Sdonn #define CTLIF 2
13724470Sdonn #define CTLELSE 3
13824470Sdonn 
13924470Sdonn 
14024470Sdonn /* operators -- see also arrays 'ops' and 'ops2' in put.c */
14124470Sdonn 
14224470Sdonn #define OPPLUS 1
14324470Sdonn #define OPMINUS 2
14424470Sdonn #define OPSTAR 3
14524470Sdonn #define OPSLASH 4
14624470Sdonn #define OPPOWER 5
14724470Sdonn #define OPNEG 6
14824470Sdonn #define OPOR 7
14924470Sdonn #define OPAND 8
15024470Sdonn #define OPEQV 9
15124470Sdonn #define OPNEQV 10
15224470Sdonn #define OPNOT 11
15324470Sdonn #define OPCONCAT 12
15424470Sdonn #define OPLT 13
15524470Sdonn #define OPEQ 14
15624470Sdonn #define OPGT 15
15724470Sdonn #define OPLE 16
15824470Sdonn #define OPNE 17
15924470Sdonn #define OPGE 18
16024470Sdonn #define OPCALL 19
16124470Sdonn #define OPCCALL 20
16224470Sdonn #define OPASSIGN 21
16324470Sdonn #define OPPLUSEQ 22
16424470Sdonn #define OPSTAREQ 23
16524470Sdonn #define OPCONV 24
16624470Sdonn #define OPLSHIFT 25
16724470Sdonn #define OPMOD 26
16824470Sdonn #define OPCOMMA 27
16924470Sdonn #define OPQUEST 28
17024470Sdonn #define OPCOLON 29
17124470Sdonn #define OPABS 30
17224470Sdonn #define OPMIN 31
17324470Sdonn #define OPMAX 32
17424470Sdonn #define OPADDR 33
17524470Sdonn #define OPINDIRECT 34
17624470Sdonn #define OPBITOR 35
17724470Sdonn #define OPBITAND 36
17824470Sdonn #define OPBITXOR 37
17924470Sdonn #define OPBITNOT 38
18024470Sdonn #define OPRSHIFT 39
18124470Sdonn #define OPPAREN 40
18224470Sdonn #define	OPUNARYPLUS 41
18324470Sdonn 
18424470Sdonn 
18524470Sdonn /* label type codes */
18624470Sdonn 
18724470Sdonn #define LABUNKNOWN 0
18824470Sdonn #define LABEXEC 1
18924470Sdonn #define LABFORMAT 2
19024470Sdonn #define LABOTHER 3
19124470Sdonn 
19224470Sdonn 
19324470Sdonn /* INTRINSIC function codes*/
19424470Sdonn 
19524470Sdonn #define INTREND 0
19624470Sdonn #define INTRCONV 1
19724470Sdonn #define INTRMIN 2
19824470Sdonn #define INTRMAX 3
19924470Sdonn #define INTRGEN 4
20024470Sdonn #define INTRSPEC 5
20124470Sdonn #define INTRBOOL 6
20224470Sdonn 
20324470Sdonn 
20424470Sdonn /* I/O statement codes */
20524470Sdonn 
20624470Sdonn #define IOSTDIN ICON(5)
20724470Sdonn #define IOSTDOUT ICON(6)
20824470Sdonn #define IOSTDERR ICON(0)
20924470Sdonn 
21024470Sdonn #define IOSBAD (-1)
21124470Sdonn #define IOSPOSITIONAL 0
21224470Sdonn #define IOSUNIT 1
21324470Sdonn #define IOSFMT 2
21424470Sdonn 
21524470Sdonn #define IOINQUIRE 1
21624470Sdonn #define IOOPEN 2
21724470Sdonn #define IOCLOSE 3
21824470Sdonn #define IOREWIND 4
21924470Sdonn #define IOBACKSPACE 5
22024470Sdonn #define IOENDFILE 6
22124470Sdonn #define IOREAD 7
22224470Sdonn #define IOWRITE 8
22324470Sdonn 
22424470Sdonn 
22524470Sdonn /* type masks */
22624470Sdonn 
22724470Sdonn #define MSKLOGICAL	M(TYLOGICAL)
22824470Sdonn #define MSKADDR	M(TYADDR)
22924470Sdonn #define MSKCHAR	M(TYCHAR)
23024470Sdonn #define MSKINT	M(TYSHORT)|M(TYLONG)
23124470Sdonn #define MSKREAL	M(TYREAL)|M(TYDREAL)
23224470Sdonn #define MSKCOMPLEX	M(TYCOMPLEX)|M(TYDCOMPLEX)
23324470Sdonn #define MSKSTATIC (M(STGINIT)|M(STGBSS)|M(STGCOMMON)|M(STGEQUIV)|M(STGCONST))
23424470Sdonn 
23524470Sdonn /* miscellaneous macros */
23624470Sdonn 
23724470Sdonn #define ONEOF(x,y) (M(x) & (y))
23824470Sdonn #define ISCOMPLEX(z) ONEOF(z, MSKCOMPLEX)
23924470Sdonn #define ISREAL(z) ONEOF(z, MSKREAL)
24024470Sdonn #define ISNUMERIC(z) ONEOF(z, MSKINT|MSKREAL|MSKCOMPLEX)
24124470Sdonn #define ISICON(z) (z->tag==TCONST && ISINT(z->constblock.vtype))
24224470Sdonn #define ISCHAR(z) (z->headblock.vtype==TYCHAR)
24324470Sdonn #define ISINT(z)   ONEOF(z, MSKINT)
24424470Sdonn #define ISCONST(z) (z->tag==TCONST)
24524470Sdonn #define ISERROR(z) (z->tag==TERROR)
24624470Sdonn #define ISPLUSOP(z) (z->tag==TEXPR && z->exprblock.opcode==OPPLUS)
24724470Sdonn #define ISSTAROP(z) (z->tag==TEXPR && z->exprblock.opcode==OPSTAR)
24833258Sbostic #define ISONE(z) (ISICON(z) && z->constblock.constant.ci==1)
24924470Sdonn #define INT(z) ONEOF(z, MSKINT|MSKCHAR)
25024470Sdonn #define ICON(z) mkintcon( (ftnint)(z) )
25124470Sdonn 
25224471Sdonn #ifdef ONLY66
25324470Sdonn #define NO66(s)	if(no66flag) err66(s)
25424470Sdonn #define NOEXT(s)	if(noextflag) errext(s)
25524471Sdonn #else
25624471Sdonn #define NO66(s)
25724471Sdonn #define NOEXT(s)
25824471Sdonn #endif
25924470Sdonn 
26024470Sdonn /* round a up to a multiple of b */
26124470Sdonn #define roundup(a,b)    ( b * ( (a+b-1)/b) )
26224470Sdonn 
26324470Sdonn 
26424470Sdonn /* optimization buffer slot types */
26524470Sdonn 
26624470Sdonn #define SKNULL		0
26724470Sdonn #define SKIFN		1
26824470Sdonn #define SKGOTO		2
26924470Sdonn #define SKLABEL		3
27024470Sdonn #define SKEQ		4
27124470Sdonn #define SKCALL		5
27224470Sdonn #define SKCMGOTO	6
27324470Sdonn #define SKSTOP		7
27424470Sdonn #define SKDOHEAD	8
27524470Sdonn #define SKENDDO		9
27624470Sdonn #define SKARIF		10
27724470Sdonn #define SKRETURN	11
27824470Sdonn #define SKASGOTO	12
27924470Sdonn #define SKPAUSE		13
28024470Sdonn #define SKASSIGN	14
28124470Sdonn #define SKIOIFN		15
28224470Sdonn #define SKFRTEMP	16
283