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