Google
 

Trailing-Edge - PDP-10 Archives - BB-D480F-BB_1985_short - global.bli
There are 12 other files named global.bli in the archive. Click here to see a list.
!COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1973, 1985
!ALL RIGHTS RESERVED.
!
!THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
!ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH LICENSE AND WITH THE
!INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR ANY  OTHER
!COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
!OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF THE  SOFTWARE  IS  HEREBY
!TRANSFERRED.
!
!THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT  NOTICE
!AND  SHOULD  NOT  BE  CONSTRUED  AS A COMMITMENT BY DIGITAL EQUIPMENT
!CORPORATION.
!
!DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY  OF  ITS
!SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.

! Author: */TFV/CDM/SRM/AHM/PLB/TJK/RVM/MEM/AlB

MODULE GLOBA(RESERVE(0,1,2,3),SREG=#17,FREG=#16,VREG=#15,DREGS=4,STACK=GLOBAL(STACK,2200),GLOROUTINES)=
BEGIN

GLOBAL BIND GLOBAV = #10^24 + 0^18 + #2507;	! Version Date: 20-Dec-84

%(

***** Begin Revision History *****

53	-----	-----	ADD IMPLDO FOR I/O LIST OPTIMIZATIONS
54	-----	-----	CORRECT SIZE OF "RELBLOCK" TO 20 RATHER THAN 18
55	-----	-----	ADD LPRDCCT
56	-----	-----	ADD RDCLNK
57	-----	-----	DELETE M1 AND M3
			ADD LOWLIM AND CELMNT
58	-----	-----	CHANGE IMPLDO TO IOPTFLG
59	-----	-----	ADD UNIQVAL FOR OPTIMIZER
60	-----	-----	GUESS
61	-----	-----	REMOVE FGP,ETC FOR NEW GRAPH SRUCTURE
62	-----	-----	CLEANUP P2 GLOBALS AND CHANGE POOLSIZ
63	-----	-----	PERFORM DABS IN LINE
64	-----	-----	DEFINE THE REL FILE BUFFERS:
			MAINRLBF,SYMRLBF,LOCRLBF
			DELETE THE DEFINTIONS OF:
			 RELBLOCK,RELDATA,RELOCPTR
65	-----	-----	DELETE A SERIES OF ENTRIES NO LONGER USED IN FORTB
66	-----	-----	GENERATE CMPLX IN LINE

67	-----	-----	REMOVE PROEPITYP

68	-----	-----	INCREASE THE CHANNEL TABLE SIZE TO INCLUDE "INCLUDE"

				ADD THE GLOBAL NXXFIL WHICH HOLDS THE
				ADDRESS OF NXTFIL IN COMMAN SO THAT IT
				CAN BE CALLED BY PHAZ1 TO ALLOW THE
				COMPILE "+" FILE CONCATINATION COMMAND TO 
				WORK

69	-----	-----	ADD GLOBAL DEBGSW TO HOLD DEBUG SWITCH SETTING

			REMOVE NXXFIL

			MOVE SAVREG FROM STA2 TO HERE SO THAT ITS DEFINED
			FOR PHASE1

70	-----	-----	ADD GLOBAL BGSTBF - TO HOLD CORE REQUIREMENTS FOR
			THE LARGEST INPUT FILE.  CALCULATED IN COMMAN

71	-----	-----	ADD THE GLOBAL "ENDSCAA" - FOR ADDR OF
			END OF SCALARS/ARRAYS
72	-----	-----	CHANGE THE NAME OF DOINDEX TO CURDOINDEX SO
			THAT ALL REFERENCES GET CAUGHT

73	-----	-----	FIX PROBLEM OF DEFINITION OF VARIBLE DIMENSION
			ARRAYS BEFORE THEIR DEFINITION IN AN ENTRY
			BY DELAYING THE CHECK FOR THOSE DIMENSION
			VARIABLES THAT FAIL THE TEST

			SAVED IN STACK POINTED TO BY DIMSTK
74	351		MAKE NEW GLOBAL ARINGLEFT FOR FORTB, (DCE)
75	362	18245	INSERT OCTAL AND DOUBLE OCTAL IN EVALU TABLE, (DCE)

***** Begin Version 5 *****

76	410	-----	MAKE NEW GLOBAL DTABPTR FOR FORTB, (SJW)
77	464	QA754	MAKE NEW GLOBALS LMLINO, LMRONO, LMCONO FOR
		  780	  LINEMAP IN FORTG, (SJW)
100	607	22685	MAKE NEW GLOBAL NEDZER TO INDICATE IF
			  ZERO-ARG-BLOCK IS NEEDED

***** Begin Version 5B *****

101	674	11803	INCREASE THE SIZE OF DOSTAK, AND MOVE FOR
			BETTER SPACE UTILIZATION., (DCE)

***** Begin Version 6 *****

102	761	TFV	1-Mar-80	-----
	Add new library routines to tables.
	Expand EVALU to have /GFLOATING entries.
	Add GFMCOK for /GFLOATING microcode is present

103	767	DCE	20-May-80	-----
	Add F2 (secondary flag register); remove GFMCOK (now defined in FIRST)

113	1121	EGM	9-Sep-81	--------
	Add GETSPATH to hold GETSEG path information.

115	1133	TFV	28-Sep-81	------
	Add MAXFF, CHDSTART, RTIME, and CTIME for /STATISTICS performance
	analysis.

***** Begin Version 7 *****

104	1203	DCE	21-Nov-80	-----
	For expressions in I/O lists, may have items of type control.
	Allow this in argument blocks.

105	1212	TFV	29-Apr-81	------
	Replace literal with HOLLERITH

106	1213	TFV	20-May-81	------
	Add global symbol CHLEN for character count for character data.
	Move ACTLDATYPE and CHDLEN out of STA2. Make TYPTABle entries two
	words long.

107     1214	CKS	1-Jun-81
	Add DOIFSTK for block IFs and all DOs

110	1241	CDM	29-JUL-81
	Add intrinsic functions (ANINT, DDIM, DINT, DNINT, DPROD, IDNINT,
	NINT) and made several more functions (ACOS, AINT, ANINT, ASIN,
	COSH, DIM, LOG, LOG10, MAX, MIN, NINT, SINH, TAN, TANH) generic.

111	1245	TFV	3-Aug-81	------
	Declare global CHDECL flag which is set if a character declaration is
	seen. Used in MRP3R and MRP3G to test if we have to scan the symbol
	table to generate high seg character descriptors.  Add CHDSTART for
	the HISEG address of the start of character data descriptors.
	Add entries in EVALU for character data.  Also make HDRFLG global.
	It is a flag for whether the header has been put out to the listing.

112	1252	CDM	10-Aug-81
	Add new dotted names (unique names which users can't call) for
	inline generic functions in the 77-standard which are not
	specificly named.

114	1264	CDM	25-Sept-81
	Add 4 inline type conversion NOP functions for NOP type conversions.
	(To be removed in P2SKFN in P2S1.)
	Add MAX, MIN, and LOG10 to tables for generic entries.
	Add CMPL.C for complex to complex conversion.
	Add character functions CHAR, ICHAR, INDEX, LEN, LGE, LGT, LLE, LLT
	to tables.

116	1270	CDM	6-Oct-81
	Added 1 bit to 2nd word of ATT macro to give LIBATTRIBUTES a bit
	to signify that a generic function does not have a "specific" name.
	(For error checking - octal arguments are illegal for non-specific).

117	1274	TFV	16-Oct-81	------
	Rename COMSIZ to be COMTSIZ when talking about the total size of
	COMMON.  COMSIZ is the size of an encode source entry for a COMMON
	statement.  Also add declarations for .Qnnnn variable handling.
	They are QANCHOR, LASTQ, QLOC, QMAX, QCNT, LASTSFNQ, and QSFNMAX.

118	1406	TFV	27-Oct-81	------
	Add new globals for handling .Dnnnn compile-time-constant character
	descriptors.  They are DANCHOR, DCNT, ans LASTD.

119	1431	CKS	15-Dec-81
	Add MINUSONE, analagous to ONEPLIT.  It points to a const table entry
	for -1.

120	1436	SRM	16-Dec-81
	Add CHARUSED, a flag for character data used in the program.
	In version 7, the global optimizer will not attempt
	optimization if this flag is set.

121	1437	CDM	16-Dec-81
	Added new global variable HIORIGIN to keep the value of the
	hi-seg.

122	1445	SRM	20-Dec-81
	Changed stack size in module head from 500 to 2100, so that
	we can compile FM045.FOR in the validation tests. This program
	has 57 nested parens. ( Approximately 100 words of
	stack are needed for each 3 additional levels of nesting. )

123	1460	SRM	23-Jan-82
	Added TURNOFFOPT to indicate that /OPT was turned off because
	character data was used.

124	1466	CDM	1-Feb-82
	Added variable ENTPREVIOUS  for the address  of the previous  entry
	statement.

	Made entries  to  EVALU  table  be macros  instead  of  hard  wired
	constants so that they can be used elsewhere.

	Moved LIBFUNTAB, LIBATTRIBUTES, CLRWDS, EVALU, MTOPFUN so that they
	would not be in the region of global variables that are zeroed out.

125	1467	CDM	5-Feb-82
	Added variables  NUMSAVCOMMON  (count  of  how  many  have  been
	specified), PTRSAVCOMMON (linked list for the common  statements
	specified in SAVE).


1504	AHM	26-Feb-82
	Added variable BIGARY.  Any array  with at least BIGARY  words
	in it goes into  the .LARG. psect instead  of .DATA. with  the
	/EXTEND switch.

1511	CDM	17-Mar-82
	Added SAVLOC, SAVBLC, SAVALL, SAVNED for SAVE statement processing.

1526	AHM	6-Apr-82
	Define LARGELOC for the relocation counter for the large  data
	psect (.LARG.) and ABSLOC, which will always contain 0 for use
	in absolute addressing.  Define  a vector called PSECTS  which
	holds LOWLOC, HILOC, LARGELOC and  ABSLOC.  Use a GLOBAL  BIND
	to  keep  the  names  for  the  variables.   Finally,   define
	CURADDRESS  and  CURPSECT  communication  between  ZCODE   and
	ZOUTBLOCK of the current address and psect that code is  being
	stored into.

1530	TFV	4-May-82
	Add global TOPIO  which points  to the top  level I/O  statement
	during  skeleton  optimizations.    It  is  used   to  set   the
	IOLSTATEMENT field of IOLSCLS  nodes.  Also parametize the  size
	of FREELIST which is used by CORMAN and SAVSPACE.

1531	CDM	4-May-82
	Changes for save statement from code review.

1551	AHM	3-Jun-82
	Increase the size  of PSECTS vector  because the psect  PSOOPS
	was added (it now has the index of zero).

1567	CDM	24-Jun-82
	Add extra bit  in the IDATTRIBUTES  table for IDFNFOLD,  whether
	the function may be folded into a costant.

1633	TFV	1-Sep-82
	Add new globals  for /STATISTICS.   They are  LINCNT (number  of
	source  lines),   STCNT  (number   of  executable   statements),
	PHTIME[6] (run times for each  compiler phase), and PBTIME  (run
	time at the start of this phase).

1651	CKS	19-Oct-82
	Add global name for LEN.'s library attributes so EXPRES can make
	a function call node to LEN.

1654	SRM	22-Oct-82
	Changed stack size in module head from 2100 to 2200, so that
	we can compile FM045.FOR in the validation tests. This program
	has 57 nested parens. The -20 command scanner uses 11 more stack
	words than the old command scanner (and the -10 command scanner).
	( Approximately 100 words of
	stack are needed for each 3 additional levels of nesting. )

***** End V7 Development *****

1732	CDM	17-Mar-83
	Add PRVLIT.

1754	CDM	26-May-83
	Add INADJDIM.

2024	TJK	16-Dec-83
	Incorrect definition of macro  LG, used to  fill in values  in
	PLIT ZATTRIBUTES (globally  named by LIBATTRIBUTES).   Convert
	macro to a bind, and use symbolic names instead of numbers.


***** Begin Version 10 *****

2205	CDM	21-Jun-83
	Add EFIWTBL for EFIW table hashing.
	Remove ESIZ, etc. which  are duplicates of  the BIND's in  FIRST
	which is REQUIRE-d below.

2216	PLB	27-Sep-83
	Add OWGBPSECTION global for kludged generation
	of OWG byte pointers.

2251	CDM	22-Dec-83
	Add new global  variable BIGCONCAT to  declare the size  (50,000
	for now) of the largest concatenation allowed as fixed  (CONCTF)
	or known maximum  (CONCTM) in length.   If the concatenation  is
	larger  than  this,  then  the  concatenation  will  be  dynamic
	(CONCTV) so that it will use the character stack.

2301	RVM	28-Jan-84
	Make the compiler know about the MIL SPEC/VAX FORTRAN bit
	manipulation functions.  They are new INTRINSIC functions.

2310	CDM	13-Feb-84
	Output type 1131  rel block  for PSECT  redirection of  segments
	into psects.  The command scanner sets the names for the  psects
	and the code generator dumps the rel block.
	Add LONAME, HINAME to contain the names of the psects.

2322	CDM	27-Apr-84
	Fix array subscript calculations for /EXTEND to use a full  word
	to calculate  arithmetic.  In  PROCEQUIV  and BLDDIM,  check  an
	array reference against  the correct  maximum size  of an  array
	declaration  /EXTEND.   In   BLDDIM,  call   CNSTCM  for   array
	calculations to  give  underflow/overflow messages  for  illegal
	declarations.  Otherwise arrays  that are too  large may not  be
	detected since their size will overflow.

2330	AHM	28-Mar-84
	Remove definition of OWGBPSECTION - it is no longer needed now
	that we use type 1030 blocks to output OWGBPs.

2334	AHM	5-Apr-84
	Add global variable ENTADDR - it contains the object address
	in the .DATA. psect of the entry vector when compiling a main
	program under /EXTEND.

2342	AHM	18-Apr-84
	Move EXTERNPSECT plit from RELBUF to here so that OUTMOD can
	also reference it.  If you export an address that has P & S
	fields with a GLOBAL BIND in Bliss-10, you get LNKFTH errors
	from the references in other modules.  Hence, export it
	without P & S fields from a module that doesn't reference it.

2343	RVM	18-Apr-84
	Add globals needed for the table of COMMON blocks named in
	/EXTEND:COMMON or /EXTEND:NOCOMMON.  Note that there are
	various constants declared which usually would be declared in
	FIRST.BLI, but are declared as global symbols since there are
	needed by the command scanner.

2346	AHM	23-Apr-84
	Create two new globals SCOMSZ and LCOMSZ to hold the separate
	totals of the sizes of small and large COMMON blocks in these
	variables.  They will be used in computing the size of the
	psects in the test for the "?FTNPTL Program too large" error.
	Get rid of COMTSIZ, since no one uses it anymore.

2352	CDM	1-May-84
	Make intrinsic functions  IAND, IOR, and  IEOR inline functions.   They
	are converted to  Fortran .AND.,  .OR., AND .XOR.  within the  skeleton
	optimizer.
	Rework the intrinsic function tables, giving names to the magic bits in
	LIBATTRIBUTES.

2356	AHM	8-May-84
	Create new flags LCOMP and SCOMP that indicate the presence of
	at least one large (or small) COMMON block.

2370	MEM	1-JUN-84
        Add KEYBUFFER so that keywords up to 4 words long can be recognized in
	STA1. Add KEYLENGTH which contains the number of characters in
	KEYBUFFER.

2412	TFV	2-Jul-84
	Split LEXICA into  two modules.   The classifier is  in the  new
	module LEXCLA.   The lexeme  scanner is  in LEXICA.   LEXCLA  is
	called  to  initialize  each  program  unit,  to  classify  each
	statement, to classify the consequent statement of a logical IF,
	and to do the standard end of program and missing end of program
	actions.  All the  owns and  globals in LEXICA  have been  moved
	into GLOBAL.

2443	RVM	5-Aug-84
	Make HINAME and LONAME SYMLEN+1 words long.  Word 0 is number of
	words used; the other SYMLEN words are the SIXBIT psect name.

2447	PLB	10-Aug-84
	Added ICLEVEL for nested INCLUDE files. SAVFLG is now an array.

2454	RVM	28-Aug-84
	Move the definition of DEFLON (the default value for LONAME)
	and DEFHIN (the default value for HINAME) from CMND20 into
	GLOBAL.  Then make OUTMOD use DEFLON and DEFHIN where needed
	in the twoseg redirection rel block.

2474	TFV	21-Sep-84,	AlB	30-Oct-84
	Fix continuation processing to handle unlimited numbers of blank
	and comment  lines between  continuation lines.   The lines  are
	recorded in  a linked  list  of four  word entries,  defined  in
	LEXAID.BLI.  The following globals are also needed to manage the
	linked list:

	FCHARPOS     - CHARPOS for first line (72 unless it is not the
			first statement on a multi-statement line)
	LASTCODELINE - pointer to the entry for the last line containing
			code
	LINLCURR     - pointer to the current entry in the list (or zero)
	LINLHEAD     - pointer to head of the linked list (or zero)
	LINLLAST     - pointer to last non-deleted entry
	LINLPREV     - pointer to last non-comment entry
	NOLTLINE     - last line in pool has no line terminator
	CLASLCUR     - save LINLCURR at start of classification
	CONTLCUR     - save LINLCURR when looking for continuation

2473	CDM	29-Oct-84
	Add IMPLICIT NONE for the Military Standard MIL-STD-1753.
	Add IMPNONE, TYPIMP, SUBNAM.

2477	AlB	16-Nov-84
	Change the pool size to 2000 words (10000 characters).

2500	AlB	14-Nov-84
	Change the list of entries for source lines from a linked list
	in dynamic memory to a fixed-length list in static memory.

2507	CDM	20-Dec-84
	Add enhancement for IMPLICIT NONE (edit 2473) after code inpsection.
	Check more cases, and add a symbol table walk at the back 
	end to catch unreferenced variables.
	Remove SUBNAM crock.

***** End V10 Development *****

***** End Revision History *****

)%

SWITCHES NOLIST;
REQUIRE FIRST.BLI;
REQUIRE TABLES.BLI;
REQUIRE REQREL.BLI;
SWITCHES LIST;

BEGIN

GLOBAL
	POOL[POOLSIZ],	! MAJOR CHARACTER QUEUE
	STK[STKSIZ],	! STACK FOR SYNTAX PROCESSING
	MATRIX	CHNLTBL[TBLMAX,TBLSIZ],	! OPEN, LOOKUP/ENTER, & BUFFER HEADER
			! INFO FOR TBLMAX CHANNELS
%2447%	ICLEVEL,	! CURRENT INCLUDE LEVEL; VALID IF <ININCLUD> SET
	IBLOCK[3],	! PARAMETERS FOR ISCAN
	TBLOCK[8],	! PARAMETERS FOR TSCAN
	LBLOCK[4],	! PARAMETERS FOR LKWLD
	GETSBLOK[6],	! ARG BLOCK FOR GETSEG
%1121%	GETSPATH[9],	! PATH BLOCK FOR GETSEG
	FLGWRD,		! TEMPORARY STORAGE FOR FLGREG WHILE IN COMMAND SCANNER
	ISPEC,		! POINTER TO INITIAL FILE SPEC
	FSPEC,		! POINTER TO FINAL FILE SPEC
	CCLSW,		! VALUE OF CCL ENTRY, 1=YES, 0=NO
	INDEX,		! CURRENT FILE SPEC
	PAGE,		! COUNT OF NUMBER OF PAGES OUTPUT
	JOBFFSAVE;	! STATE OF JOBFF PRIOR TO OPENING SRC


	!***************************************************************
	! Note:	all globals from  SYMTBL  to  GLOBEND inclusive will  be
	! initialized  to  zero   in  module   classifier  before   each
	! compilation.
	!***************************************************************

GLOBAL
	SYMTBL[SSIZ],
	CONTBL[CSIZ],
	EXPTBL[ESIZ],
	LABTBL[LASIZ],
	LITTBL[LISIZ],
	NAMTBL[NSIZ],
	SRCTBL[SOSIZ],
	DIMTBL[DISIZ],
	DATTBL[DASIZ],
%2205%	EFIWTBL[EFSIZ],	! The EFIW hash table

	BASEPTR,	! This contains the pointer to the most current
			! entry made by the table handlers
	COMBLKPTR,	! Pointers for last and first COMMMON blocks
	LITPOINTER,	! LAST AND FIRST LITERALS [first,,last]
%1732%	PRVLIT,		! Pointer to previous literal, in case we need
%1732%			! to delete one from the linked list.
	SYMPTR,		! LAST AND FIRST SYMBOLS
	SORCPTR,	! LAST AND FIRST SOURCE ENTRIES
	LASTEXP,	! LAST EXPRESSION ENTRY
	LASTDIM,	! LAST DIMENSION ENTRY
	DTABPTR,	! HEAD OF DIM ENTRY LIST FOR BLDDIM
	CONSPTR,	! LAST AND FIRST CONSTANTS
	LABLPTR,	! FIRSTAND LAST STATEMENT LABELS
	EQVPTR,		! PTR TO FIRST AND LAST EQUIVALENCE CLASSES
	FORMPTR,	! PTR TO LINKED LIST OF FORMAT STRINGS 
			! 0 IF NONE IN SUBPROGRAM
%1530%	FMTEND,		! Pointer to word after block for FORMAT being built
%1530%	FMTPTR,		! Last character used in current FORMAT being built
	NAMLPTR,	! PTR TO LINKED LIST OF NAMELIST LISTS STATEMENT NODES
			! RIGHT HALF POINTS TO LAST, LEFT HALF POINTS TO FIRST
	ASIPTR,		! PTR TO FIRST AND LAST ASSIGN STATEMENTS
	TTOTAL,		! TOTAL UNUSED FREESPACE FOR DEBUGGING
%1530%	FREELIST[FLSIZ],	! VECTOR OF POINTERS TO LINKED LISTS OF
			! FREE STORAGE BLOCKS OF SIZE 0 TO FLSIZ - 1 WORDS
	SPACEFREE,	! AMOUNT OF FREE LOWSEG SPACE
	SRCHONLY,	! FLAG FOR TBLSEARCH FOR SEARCH ONLY MODE
	ISN,		! INTERNAL SOURCE SEQUENCE NUMBER
	IDOFSTATEMENT,	! IDENTIFICATION OF EXECUTABLE STEMENT IN TREE
	LABLOFSTATEMENT,! SOURCE STATEMENT NUMBER POINTER
			! IF CURRENT STATEMENT HAS ONE - OR 0
	DLOOPTREE,	! PTR TO DO LOOP NEST TREE
	DONESTLEVEL,	! CURRENT LEVEL OF DO NESTING
	CURDOINDEX,	! PTR TO CURRENT DO INDEX VARIABLE
	LASDOLABEL,	! LAST LABEL PTR FOR LABEL IN A DO STATEMENT
	LASLVL0,	! PTR TO LAST LEVEL 0 NEST SEEN
	DELETPTR,	! PTR TO DELETED TABLE ENTRY FOR DELETE ROUTINE
	SYMTYPE,	! TYPE OF CURRENT SYMBOL
	NAME,		! NAME OF THE TABLE FOR TBLSEARCH
			! AND SIZ OF ENTRY IN LEFT HALF
	TYPE,		! THE TYPE OF THE CURRENT SYMBOL
			! HAS VARIOUS MEANINGS DEPENDING UPON CONTEXT
	INCREM,		! INCREMENT USED FOR BUILDING FLOATING CONSTANT
	DECEXP,		! EXPONENT VALUE USED BY GETCONST FOR
			! FLOATING POINT NUMBER GENERATION
	ENTRY[5],	! THE GLOBAL PARAMETER PASSSING VECTOR
	REGSAV[16],	! SAV AREA FOR REGISTERS FOR GETSEG
	SEGINCORE,	! INDICATES WHICH SEGMENT IS CURRENTLY ACTIVE
%1551%	PSECTS[5],	! Holds current available address for psects
%1526%	CURADDRESS,	! Current loading address for ZOUTBLOCK
%1526%	CURPSECT,	! Current psect being loaded into
%2334%	ENTADDR,	! Object address of entry vector
%2346%	SCOMSZ,		! Size of the COMMON blocks in .DATA. in words
%2346%	LCOMSZ,		! Size of the COMMON blocks in .LARG. in words
%2356%	SCOMP,		! Flag for at least one COMMON block in .DATA.
%2356%	LCOMP;		! Flag for at least one COMMON block in .LARG.

GLOBAL BIND
!%1551%	OOPSLOC = PSECTS[PSOOPS]<0,0>,	! Shouldn't be referenced, but space
					!  for it must be allocated in PSECTS
	LOWLOC = PSECTS[PSDATA]<0,0>,	! Current LOWSEG (.DATA.) address
	HILOC = PSECTS[PSCODE]<0,0>,	! HISEG (.CODE.) address
%1526%	LARGELOC = PSECTS[PSLARGE]<0,0>,! .LARG. address
%1526%	ABSLOC = PSECTS[PSABS]<0,0>,	! Absolute (.ABS.) address (always 0)
	EXTERNPSECT = UPLIT(	![1512] New
				![2342] Another module needs EXTERNPSECT too
%PSOOPS:%	PXABS,		! Mapping between internal STE psects and
%PSDATA:%	PXDATA,		!  external REL file psect indices
%PSCODE:%	PXCODE,
%PSLARGE:%	PXLARGE,
%PSABS:%	PXABS
		)<0,0>;

GLOBAL
%1437%	HIORIGIN,	! Origin of Hi-seg
	RELOCWD,	! RELOCATION BITS FOR DATA IN REL BLOCK
	MAINRLBF[20],	! MAIN REL FILE BUFFER - 20 WDS
	LOCRLBF[20],	! BUFFER FOR LOCAL REQUESTS
	SYMRLBF[20],	! BUFFER FOR GLOBAL REQUESTS AND SYMBOL DEFS
	RDATWD,		! PARAMETER WORD FOR PASSING DATA TO REL
	BLANKCOM,	! BLANK COMMON BLOCK PTR
	ENDSCAA,	! ADDRESS OF LOC AFTER THE END OF THE
			! SCALARS AND ARRAYS (BEFORE THE FORMAT STRINGS)
	MULENTRY,	! PTR TO LINKED LIST OF ENTRY STATEMENTS
	FORMAREA,	! TOTAL NUMBER OF WORDS OCCUPIEDBY FORMAT STRINGS
	ONEPLIT,	! POINTER TO CONSTANT INTEGER 1
			! SET IN GLOBINIT
%1431%	MINUSONE,	! POINTER TO CONST TABLE ENTRY FOR -1
	SP,		! CURRENT TOP OF SYNTAX STACK
	LEXL,		! RESULT OF LAST CALL TO LEXEMEGEN
	LSAVE,		! FLAG INDICATING LEXEME ALREADY SCANNED
	FARRY,		! FIRST ARRAY NAME IN A ONE ARRAY
	CODELINES,	! THE NUMBER OF HISEG CODE LOCATION GENERATED
	STALABL,	! CURRENT LABLOFSTATEMENT
	PROGNAME,	! SIXBIT 'MAIN' OR FROM PROGRAM STATEMENT
	IDTYPE,		! VARIABLE TYPE DEFINED BY TYPE STATEMENT
	ASTATFUN,	! PTR TO CURRENT STATEMENT FUNCTION NAME IF
			! CURRENTLY BEING PARSED
	ERRLINK,	! POINTER TO A LINKED LIST OF ERROR MESSAGES
	TMPCNT[4],	! COUNT OF VARIOUS TYPES OF TEMP USED.
			! [0]=TEMPORARY,[1]=MULTIPLYCATION FACTOR
			! [2]=OFFSET,[3]=SIZE
	BSAVE,		! BREG SAVE AREA
	FSAVE,		! FREG SAVE WORD
	VSAVE,		! VREG SAVE WORD

	!***************************************************************
	! GLOBALS USED BY PHASE 2 SKELETON AND PHASE 3
	!***************************************************************

	TREEPTR,	! PTR TO THE NODE IN THE TREE CURRENTLY BEING PROCESSED
	CSTMNT,		! PTR TO THE STATEMENT NODE CURRENTLY  BEING PROCESSED
	NEDZER,		! FLAG TO INDICATE IF ZERO-ARG-BLOCK NEEDED
	ZERBLK,		! PTR TO LABEL TABLE ENTRY FOR LABEL ON A
			! ZERO-ARG-BLOCK FOR FOROTS
	A1NODE,		! PTR TO 1ST ARGNODE UNDER TREEPTR;
	A2NODE,		! PTR TO 2ND ARGNODE UNDER TREEPTR
	A1LABEL,	! PTRS TO LABEL-TABLE ENTRIES - USED IN THE
	A2LABEL,	! TABLE-DRIVEN PART OF THE CODE-GENERATOR
	A3LABEL,
	OPDSPIX,	! INDEX INTO DISPATCH TABLE FOR OPGENTABLE
	REGFORCOMP,	! REGISTER TO BE USED IN COMPUTING
			! THE VAL OF A NODE - THIS GLOBAL IS SET UP
			! WHEN CALLING "CGOPGEN" 
			! BITS 9-12 INDICATE THE REG TO BE USED
	PC,		! RELATIVE LOC OF NEXT INSTR TO BE GENERATED
	PBOPWD,		! INDICATES INSTRUCTION WD TO BE OUTPUT
			! TO PEEPHOLE BUFFER
	PSYMPTR,	! INDICATES THE PBFSYMPTR FIELD TO BE OUTPUT
			! TO THE PEEPHOLE BUFFER
	IOLSPTR,	! PTR TO THE FIRST AND LAST  IO STMNT IN THE PROGRAM
	DATASPTR,	! PTR TO FIRST AND LAST DATA STATEMENT NODES
	RESNAME,	! PTR TO EITHER SYMBOL TABLE ENTRY OR
			! EXPRESSION NODE SPECIFYING WHERE THE
			! FINAL RESULT OF THE EXPRESSION BEING PROCESSED
			! BY THE REGISTER ALLOCATOR WILL BE STORED

	!***************************************************************
	! GLOBALS USED ONLY BY PHASE 2 SKELETON
	!
	! GLOBALS USED IN PHASE 2 SKELETON FOR FORCING NEG AND NOT  DOWN
	! TO BOTTOMMOST  NODES.  IF  NOTFLG(NEGFLG) IS  TRUE WHEN  ENTER
	! ROUTINE FOR A GIVEN NODE THEN A NOT (NEG) MUST BE FORCED  DOWN
	! OVER THIS NODE. IF IT IS  TRUE WHEN LEAVE ROUTINE FOR A  GIVEN
	! NODE, THEN NOT(NEG) MUST  BE FORCED BACK UP  TO THE PARENT  OF
	! THIS NODE.
	!***************************************************************

	NEGFLG,
	NOTFLG,
	TRUECENTRY,	! Pointer to constant table entry for "TRUE"
	FALSECENTRY,	! For false
	CIOCALL,	! Pointer to current IOLSTCALL node being built
	CIOCLAST,	! Pointer to last element on the IOLSTCALL node
			! being built
	INPFLAG,	! Flag for current statement is an input statement
	USERFNFLG,	! Flag for this statement includes a call to a user
			! function
%1530%	TOPIO,		! Pointer to the top level I/O statement above this
%1530%			! IOLSCLS node

	!***************************************************************
	! GLOBALS USED ONLY BY THE REGISTER ALLOCATOR
	!***************************************************************

	CLOBBREGS,	! REGISTERS CLOBBERED IN THE COURSE OF
			! EVALUATION OF THIS EXPRESSION
	DBLMODE,	! IF THIS GLOBAL IS TRUE, THEN THE GLOBALS
			! STBSYR AND STRGCT HAVE BEEN SET TO DO
			! REG ALLOC IN DOUBLE-PREC MODE

	!***************************************************************
%1274%	! Globals used in temporary allocation
	!***************************************************************

%1274%	QANCHOR,	! Pointer to start of linked list of .Qnnnn variables
			! they are linked in order of location inside .Q space
%1274%	LASTQ,		! Pointer to the last .Q used by the current statement
%1274%	QLOC,		! Last location in .Q space that was used by the
			! current statement
%1274%	QMAX,		! Maximum size of .Q space for all statements
%1274%	QCNT,		! Counter to use when generating the next .Qnnnn
%1274%	LASTSFNQ,	! Pointer to the last .Q used by statement functions
			! The .Q variables between QANCHOR and LASTSFNQ can not
			! be reused by other statements
%1274%	QSFNMAX,	! Maximum size of .Q space used by statement functions
%1406%	DANCHOR,	! Pointer to start of linked list of .Dnnnn variables.
			! They are used for compile-time-constant character
			! descriptors.  They are not reused.
%1406%	LASTD,		! Pointer to the last .Dnnnn variable created
%1406%	DCNT,		! Counter to use when generating the next .Dnnnn
	VERYFRST,	! USED BY GLOBAL TEMPORARY ALLOCATOR IN THE GLOBALLY
			! OPTIMIZING CASE VERYFRST POINT TO AUXILLARY LIST
	PBFPTR,		! PTR TO NEXT AVAILABLE WORD IN BUFFER
	VECTOR PBUFF[PBFSIZE],
	PEEPPTR,	! PTR TO WD IN PEEPHOLE BUFFER OFF OF WHICH
			! ARE KEYING IN PEEPHOLE OPTIMIZING
	ILABIX,		! CT OF INTERNALLY GENERATED LABELS

	!***************************************************************
	! GLOBALS THAT ARE SET UP BEFORE CALLING THE STATEMENT REGISTER
	! ALLOCATOR
	!***************************************************************

	GBSYREGS,	! BITS IN THIS WD  ARE 0 FOR ANY REGISTERS USED FOR
			! GLOBALLY ALLOCATED VARIABLES
	GBSYCT,		! NUMBER OF REGS AVAILABLE FOR USE BY LOCAL
			! REGISTER ALLOCATOR
	STBSYR,		! INDICATES WHICH REGISTERS ARE AVAILABLE FOR USE.
			! EACH BIT IN THIS WORD CORRESPONDS TO A REG AND IS 0 
			! if THAT REG IS UNAVAILABLE, 1 IF FREE
	STRGCT,		! NUMBER OF REGS AVAILABLE FOR USE
	BLOCKBSYREGS,	! THIS WD IS  USED BY THE  BASIC BLOCK  REGISTER
			! ALLOCATOR.  EACH BIT IN THIS WD CORRESPONDS TO
			! A REG. IF THE REG  WAS ALLOCATED BY THE  BLOCK
			! ALLOCATOR, THE BIT IS ZERO IF NOT, THE BIT  IS
			! ONE.
	NOBBREGSLOAD,	! THIS FLAG  IS  USED  BY THE  BASIC  BLOCK  REG
			! ALLOCATOR IT IS  SET TO  TRUE WHEN  PROCESSING
			! NODES FOR  WHICH ONE  CANNOT ASSUME  THAT  THE
			! CODE IS  ALWAYS  EXECUTED WHENEVER  THE  BLOCK
			! CONTAINING THE NODES IS EXECUTED (E.G. FOR THE
			! STMNT UNDER A LOG  IF, FOR THE 2ND  RELATIONAL
			! UNDER A  CONTROL-BOOLEAN,...)   CANNOT  ASSUME
			! THE VALS OF REGS LOADED WHILE THIS FLAG IS SET
	PAIRMODE,	! THIS GLOBAL FLAG IS SET DURING COMPLEXITY WALK
			! IF ANY EXPRESSION IS  FOUND UNDER THE  CURRENT
			! STMNT THAT REQUIRES  A REG PAIR  THIS FLAG  IS
			! ALSO USED DURING  LOCAL REG ALLOC  WHEN IT  IS
			! SET WHENEVER A STMNT  IS BEING PROCESSED  THAT
			! REQUIRES ANY REG PAIRS

![674] MAKE DOSTAK BIGGER AND COMBINE IT WITH EHASH

%674%	DOSTAK[DOSTSIZ],	! DOSTAK MUST PRECEDE EHASH FOR FORTG
	EHASH[EHSIZ],	! EXPRESSION HASH TABLE FOR CMN SUB ELIM.
	BACKST,		! USED IN LOCAL COMMON SUB-EXPRESSION
			! ELIMINATION. MUST BE ZERO IN GLOBAL CASE
	IOPTFLG,	! DIFFERENTIATES NORMAL GLOBAL OPTIMIZATION
			! CASE FROM GLOBAL IMPLIED DO
			! OPTIMIZATION CASE
	DOSP,		! DO STACK POINTER
	EXITNO,		! NUMBER OF LOOP EXITS; 0 IN NORMAL CASE
	RDCCT,		! USED TO CREATE NAMES FOR REDUCTION IN
			! STRENGTH TEMPORARIES
	LPRDCCT,	! USED TO HOLD COUNT OF REDUCTIONS AT LOOP
			! START SO WE CAN TEELL IF THERE WAS A
			! UNIQUE REDUCTION
	RDCLNK,		! POINTER TO THE FIRST INCREMENT OF
			! A REDUCTION VARIABLE IN ANY LOOP
	LOCLNK,		! USED TO LINK LOCAL COMMON SUBS TOGETHER
	ARGLINKPT,	! TOLINK ARG BLOCKS TOGETHER
	SPECCASE,	! USED TO UNIT LEAF SUBS. ROUTINES
	QQ,		! TEMPORARY USED THROUGH PHASE2
	UNIQVAL,	! POINTER TO LIST OF VARIABLES UNIQUELY
			! ASSIGNED IN THE LOOP
	ASSOCPT,	! POINTER TO LINKED LIST OF ASSOCIATE VARIABLES
	FNTMP,		! NUMBER TO MAKE STATEMENT FUNCTION
			! ARGUMENTS WITH
	DOCNT,		! COUNT OF DO LOOPS IN PROGRAM
	OPTLAB,		! USED TO GENERATE LABELS BY THE OPTIMIZER
	GLOBREG[16],	! LIST OF REGISTERS GLOBALLY ALLOCATED
	RGRAPH,		! REVERSE GRAPH (USING POOL FOR SPACE)
	FGRAPH,		! FORWARD GRAPH (USING POOL FOR SPACE)
	SSIZTC,		! COUNTER FOR STEP SIZE TEMPS GENERATED FOR DO LOOPS
	INTLTC,		! COUNTER FOR INITIAL VALUE TEMPS FOR DO LOOPS
	LOOP,		! USED BY OPTIMIZER
	INDVAR,		! INDUCTION VARUABLE FOR CURRENT LOOP
	LEND,		! TERMINAL STATEMENT OF CURRENT LOOP
	LENTRY,		! ENTRY POINT OF CURRENT LOOP
	LOOPNO,		! NUMBER OF CURRENT LOOP
	CHOSEN[32],	! USED IN DEFINITION POINT COMPUTATION
			! AND GLOBAL REGISTER ALLOCATION
	TOP,		! TOP OF CURRENT LOOP
	BOTTOM,		! BOTTOM OF CURRRENT LOOP
	TPREV,		! TEMP USED BY OPTIMIZER IN CMN SUB ELIM
	PREV,		! DITTO
	PHI,		! POINTER TO HASH ENTRY FOR COMMON SUBS
	NAN,		! FLAG SET TO INDICATE THAT FIRST
			! EXPRESSION OF HASH PAIR NEEDS A NEGATE
			! NODE OR FLAG OVER IT
	EHASHP,		! POINTER TO HASH INDEX ENTRY. USED FOR
			! DELETION OF HASH ENTRIES IN COMMON SUBS
	LOWLIM,		! LOWER LIMIT FOR SUBSTITUTION
	CELMNT,		! CURRENT ELEM ON I/O LIST

! USED AS TRANSLATION TABLE FROM SRCID TO THE FUNCTION CODE IN CALLING
! THE MTOP. FUNCTION OF FOROTS

	INNERLOOP,	! "True" in phase 2 skeleton walk when we  are looking at
			! statements in an innermost DO loop.
	DOWDP,		! Used by phase 2 to skeleton optimize innermost
			! DO loops.
			! Used in the  complexity walk to  point to  the
			! information  needed   for   REGCONTENTS   node
			! substitution for innermost DO loops.
	CDONODE,	! Points to  "current"  innermost  DO  statement
			! node for skeleton opt and complexity walks.
	ITMCT,		! USED IN LEAF SUBSTITUTION UNIFICATION
	DWP,		! POINTER FOR WALK OF DO DEPTH ANALYSIS TREE

	!***************************************************************
	! GLOBALS USED TO  PASS ARGS TO  ASSEMBLY-LANG CONSTANT  FOLDING
	! ROUTINE
	!***************************************************************

	C1H,
	C1L,
	C2H,
	C2L,
	COPRIX,
	SAVACS[7],	! AREA WHERE THE CONSTANT-FOLDING ROUTINE SAVES THE ACS
	SAVE17,		! FOR SPECIAL RETURNS TO PHAZECONTROL

	!***************************************************************
	! MORE FORTB GLOBALS 
	!***************************************************************

	EOPSAVE,	! ADDRESS  AND  COUNT  OF  THE  PORTION  OF  THE
			! PORTION OF POOL  THAT HAD TO  BE SAVED AT  THE
			! END OF THE CURRENT PROGRAM UNIT, INORDER  THAT
			! THE LATER PASSES CAN USE POOL.
			!	<LEFT> - NUMBER OF WORDS
			!	<RIGHT> - BEGINNING ADDRESS 
	NOCR,		!  IF SET TO 1 IT INDICATES TO THE OUTPUT ROUTINES
			! THAT A CR SHOULD BE INSERTED
	STPTR,		! POINTER TO BEGINNING CHARACTER-1
			! OF CURRENT STATEMENT
	STLPTR,		! POINTER TO BEGINNING CHARACTER-1 OF THE
			! LINE CONTAINING THE CURRENT STATEMENT
	STPOS,		! CHARACTER POSITION ON LINE OF BEGINNING OF STATEMENT
	LASTLINE,	! LAST LINE NUMBER,  ALSO USED TO SAVE LINELINE BETWEEN
			! PROGRAM UNITS
	ERRFLAG,	! IF 1 INDICATES THAT THERE HAVE BEEN
			! OTHER ERRORS IN THIS STATEMENT
	MSGNOTYPD,	! IF 1 INDICATES THAT THERE ARE MESSAGES IN
			! THE QUEUE WHICH HAVE NOT BEEN TYPED ON THE USER TTY
	CLASPTR,	! CLASSIFICATION BACKUP POINTER
	CLASLPT,	! CLASSIFICATION BACKUP LINE BEGINNING POINTER
	CONTPTR,	! CONTINUATION BACKUP POINTER
	LEXLINE,	! LINE NUMBER ASSOCIATIED WITH CURRENT LEXEME
%2370%	KEYBUFFER[4],   ! BUFFER IN WHICH ALL KEYWORDS ARE STORED IN LEXICA
%2370%	KEYLENGTH,	! NUMBER OF CHARACTERS IN KEYBUFFER

	!***************************************************************
	! ERROR MESSAGE COUNTERS 
	!***************************************************************

	NUMWARN,	! NUMBER OF WARNING MESSAGES
	NUMFATL,	! NUMBER OF FATL MESSAGES
	WARNOPT,	! FLAG WHICH IF 1 INDICATES THAT WARNINGS WERE
			! ISSUED WHICH COULD ADVERSELY AFFECT THE OPTIMIZER
	STMNDESC,	! ADDRESS OF THE CURRENT STATEMENT DESCRIPTION BLOCK
	PSTATE,		! CURRENT STATE CODE OF THE STATEMENT
			! ORDER CHECKING TABLE - STMNSTATE
	BACKLINE,	! USED TO SAVE LINE ATTRIBUTES OF ANY LINES
			! PASSED OVER DURING LOOKAHEAD
	LOOK4LABEL,	! IF SET TO 1 INDICATES TO LEXICAL THAT
			! IT IS LOOKING FOR A LABEL
	FNDFF,		! SET T0 1 IF FORM FEED ENCOUNTERED
	DIMSTK,		! POINTER TO LIST OF VARIABLES USED AS
			! ARRAY DIMENSIONS WHICH HAVE NOT YET
			! BEEN DEFINED IN COMMON OR AS DUMMYS
	LOOK4CHAR,	! SET TO THE CHARACTER OR STRING THAT
			! LEXICAL CHARACTER OR STRING SCAN IS
			! SUPOSED TO TRY AND MATCH
	LMLINO,		! CURRENT SOURCE LINE NUMBER
	LMRONO,		! CURRENT MAP ROW NUMBER
	LMCONO;		! CURRENT MAP COLUMN NUMBER

GLOBAL BIND
	ENDOFILE = 0;	! END OF FILE INDICATOR RETURNED BY LEXICAL()

GLOBAL
%1133%	MAXFF,		! Maximum size of compiler lowseg
%1213%	CHLEN,		! Add CHLEN for character count for character data
			! Move ACTLDATYPE and CHDLEN out of STA2.
%1213%	ACTLDATYPE,	! Set to the identifier's actual datatype
			! in order to differentiate between REAL*8 and
			! DOUBLEPRECISION  when doing variable*n and
			! variable(subscripts)*n declarations
			! used in ASTER  and set in TYPDECLARE
%1213%	CHDLEN,		! The default length for a CHARACTER variable
%1245%	CHDECL,		! Flag that is set when a character  declaration
			! or an implicit character declaration is  seen.
			! It is used in MRP3R and MRP3G to test  whether
			! we have to scan  the symbol table to  generate
			! hi seg character descriptors.
%1436%	CHARUSED,	! Flag for character data used. Set if character
			! operator, character intrinsic function, or ref
			! to a  character var  is seen.   In V7,  causes
			! global  optimization   to   be   discontinued.
			! CHARUSED differs  from CHDECL  because  CHDECL
			! not set for: 'ABC' // 'DEF'
%1460%	TURNOFFOPT,	! Flag for /OPT turned  off for this  subroutine
			! because it  has  character data.   (Should  be
			! removed when /OPT of char is supported. )
%1245%	CHDSTART,	! HISEG location for the start of character data
			! descriptors
%1245%	HDRFLG,		! Flag for header has been output
%1245%	TCNT,		! Count of number of temporaries listed on line
%1214%	DOIFSTK,	! Nested DO and block IF stmts enclosing
			! current stmt.  (FORTB only)
%1466%	ENTPREVIOUS,	! Address of previous entry statement
%1511%	SAVLOC,		! Flag, Local variables need to be SAVE-d
%1511%	SAVBLC,		! Flag, Must SAVE blank common
%1511%	SAVALL,		! Flag, A SAVE without args was given
%1511%	SAVNED,		! Flag, A SAVE rel block is needed.
%1467%	NUMSAVCOMMON,	! NUMber of SAVe-d commons found in
%1467%			! 	SAVE statements in this module.
%1531%	PTRSAVCOMMON,	! Pointer to the end of a linked
%1531%			!	list of the commons in SAVE-s.
%1531%			!
%1531%			! Links have the form:
%1531%			! [ptr to symbol tab,, ptr to previous link]
%1633%	LINCNT,		! Number of source lines in program
%1633%	STCNT,		! Number of executable statements in program
%1754%	INADJDIM,	! Flag, Parsing a statement which could  declare
%1754%			! an adjustably dimensioned array.
%2473%	IMPNONE,	! Flag for IMPLICIT NONE
%2473%	TYPIMP,		! Flag for IMPLICIT is used for declaring data
%2473%			! types of variables.

	GLOBEND;	! Last global to be zeroed in GLOBAL.BLI

	!***************************************************************
	! NOTE:	ALL GLOBALS FROM SYMTBL  TO GLOBEND  INCLUSIVE  WILL  BE
	! INITIALIZED  TO  ZERO   IN  MODULE   CLASSIFIER  BEFORE   EACH
	! COMPILATION.
	!***************************************************************


	!***************************************************************
	! More LEXICAL and LEXCLAS globals 
	!***************************************************************

GLOBAL
%2412%	CHARTMP,	% STORAGE FOR REGISTER CHAR UPON EXIT %
%2412%	CODETMP,	%STORAGE FOR REGISTER CODE UPON EXIT %
%2412%	FOUNDCR,	! INDICATES THAT A <CR> WAS ENCOUNTERED BEFORE THE
			! LINE TERMINATOR WHICH TERMINATED THE REMARK STATE
			! IF SET TO 1.
%2412%	INCLAS,		! IF 1 INDICATES THAT CLASIFICATION LOOKAHEAD IS TAKING
			! PLACE
%2412%	VALUE,		! VALUE TO BE RETURNED AFTER SKIPPING TO NEXT SIGNIF
			! CHAR
%2412%	CLASERR,	! IF 1 INDICATES TO STSKIP THAT AN ILLEGAL CHARACTER
			! WAS DETECTED IN CLASSIFICATION AND THAT STSKIP
			! SHOULD ALSO DETECT IT AND REPORT IT
%2412%	ZEROCHK,	! SET TO 1 IF A DIGIT WAS ENCOUNTERED IN THE LABEL 
			! FIELD USED TO CHECK FOR "0" LABEL

%2412%	CHARCOUNT,	! Used to hold length of character constant
%2412%	COLONCOUNT,	! Number of zero-level colons skipped over by STTERM
%2412%	DOCHAR,		! Character after DO in classifier
%2412%	PAREN,		! COUNT OF PARENS FOR CLASSIFICATION AND SKIPPING
%2412%	HOLCONST,	! HOLDS THE CONSTANT FOR SKIPPING HOLERITHS
%2412%	LGIFCLAS,	! IF 1 THEN CLASSIFYING THE OBJECT OF A LOGICAL IF
%2412%	KEYPTR,		! BYTE POINTER FOR KEYWORD SPELLING CHECK
%2412%	TEMP,		% TEMPORARY STORAGE WITHIN MACROS %
%2260%	XORCHAR,	% Set true if first letter after '.' is X
			  (to catch .XOR.) %
%2412%	CNT,
%2412%	IDENTF,
%2412%	POINTER,
%2412%	SIIGN,
%2412%	STATESTACK[10],	! AREA FOR STATE CALL STACK
%2412%	STSTKPTR,	! CURRENT STACK POINTER
%2412%	CLASLINE,	! LINE NUMBER OF BEGINNING OF CLASSIFICATION
%2412%	CLASPOS,	! CHARACTER POSITION OF BEGINNING OF CLASSIFICATION
%2474%	CLASLCUR,	! Entry in linked list at start of classification
%2474%	CONTLCUR,	! Linked list backup entry
%2412%	MSNGTIC,	! THIS FLAG IS SET IF THERE IS WHAT APPEARS TO BE AN
			! UNTERMINATED LIT STRING.  THE CLASSIFIER WILL THEN
			! LET UNMATCHED PARENS GO BY SO THAT IT CAN CLASSIFY
			! IO STATEMENTS WITH THE DAMN IBM ' RECORD MARK IN THEM
%2412%	HIAC,
%2412%	LOAC,
%2474%	FCHARPOS,	! CHARPOS for first entry in pool source list
%2474%	LASTCODELINE,	! Pointer to last pool source entry containing code
%2474%	LINLCURR,	! Current entry in source list
%2474%	LINLLAST,	! Pointer to last valid entry in source list
%2474%	LINLPREV,	! Pointer to last non-comment entry in source list
%2474%	NOLTLINE;	! Flag for last line in pool has no line terminator

%2500%	! Note that LINLSENT is also defined in LEXAID
%2500%	BIND
%2500%	LINLSENT = 3,	! Size of each entry in LINLLIST
%2500%	LINLNENT = 100;	! Number of entries in LINLLIST

%2500%	GLOBAL
%2500%	LINLLIST[LINLSENT*(LINLNENT+1)]; ! List of pointers to source lines

%2500%	GLOBAL BIND
%2500%	LINLEND = (LINLLIST+LINLSENT*LINLNENT)<0,0>;	! End of LINLLIST

![1466] *** The below are tables which we DO NOT want zeroed out.  They have
![1466] *** been moved to here to avoid any confusion about this!!

![761] Add entries for /GFLOATING - it has its own arg type

! Used as  conversion table  from  internal valu  types to  external  value
! types.  Values for the macros can be found in REQREL.BLI.  These must  be
! changed to change these values.  This table exists in the normal and /GFL
! half, so to change a value, both halves of the table must be changed.

BIND	EVALDUM=PLIT(EVALU GLOBALLY NAMES

%1466%	TYPOCTAL,	!0,INTERNAL OCTAL
%1466%	TYPLOGICAL,	!1,INTERNAL LOGICAL
	0,		!2,INTERNALLY UNUSED
	0,		!3,INTERNALLY UNUSED
%1466%	TYPLOGICAL,	!4,INTERNALLY CONTROL (SAME AS LOGICAL)
	0,		!5,INTERNALLY UNUSED
	0,		!6,INTERNALLY UNUSED
	0,		!7,INTERNALLY UNUSED
%1466%	TYPDBLOCTAL,	!8,INTERNALLY DOUBLE OCTAL
	0,		!9,INTERNALLY UNUSED
	0,		!10,INTERNALLY UNUSED
	0,		!11,INTERNALLY UNUSED
%1466%	TYPHOLLERITH,	!12,INTERNALLY HOLLERITH
%1466%	TYPCHARACTER,	!13,INTERNALLY CHARACTER
	0,		!14,INTERNALLY UNUSED
	0,		!15,INTERNALLY UNUSED
%1466%	TYPINTEGER,	!16,INTERNALLY INTEGER
	0,		!17,INTERNALLY BYTE (NOT IN RELEASE 1)
%1466%	TYPINTEGER,	!18,INTERNALLY INDEX(SAME AS INTEGER)
	0,		!19,INTERNALLY UNUSED
%1466%	TYPREAL,	!20,INTERNALLY REAL
	0,		!21,INTERNALLY UNUSED
	0,		!22,INTERNALLY UNUSED
	0,		!23,INTERNALLY UNUSED
%1466%	TYPDOUBLPREC,	!24,INTERNALLY DOUBLE PRECISION
	0,		!25,INTERNALLY UNUSED
	0,		!26,INTERNALLY UNUSED
	0,		!27,INTERNALLY UNUSED
%1466%	TYPCOMPLEX,	!28, INTERNALLY COMPLEX
%[761]%	0,		!29, UNUSED
%[761]%	0,		!30, UNUSED
%[761]%	0,		!31, UNUSED

	! G-floating portion of table.
%1466%	TYPOCTAL,	!32,INTERNAL OCTAL
%1466%	TYPLOGICAL,	!33,INTERNAL LOGICAL
%[761]%	0,		!34,INTERNALLY UNUSED
%[761]%	0,		!35,INTERNALLY UNUSED
%1466%	TYPLOGICAL,	!36,INTERNALLY CONTROL (SAME AS LOGICAL)
%[761]%	0,		!37,INTERNALLY UNUSED
%[761]%	0,		!38,INTERNALLY UNUSED
%[761]%	0,		!39,INTERNALLY UNUSED
%1466%	TYPDBLOCTAL,	!40,INTERNALLY DOUBLE OCTAL
%[761]%	0,		!41,INTERNALLY UNUSED
%[761]%	0,		!42,INTERNALLY UNUSED
%[761]%	0,		!43,INTERNALLY UNUSED
%1466%	TYPHOLLERITH,	!44,INTERNALLY HOLLERITH
%1466%	TYPCHARACTER,	!45,INTERNALLY CHARACTER
%[761]%	0,		!46,INTERNALLY UNUSED
%[761]%	0,		!47,INTERNALLY UNUSED
%1466%	TYPINTEGER,	!48,INTERNALLY INTEGER
%[761]%	0,		!49,INTERNALLY BYTE (NOT IN RELEASE 1)
%1466%	TYPINTEGER,	!50,INTERNALLY INDEX(SAME AS INTEGER)
%[761]%	0,		!51,INTERNALLY UNUSED
%1466%	TYPREAL,	!52,INTERNALLY REAL
%[761]%	0,		!53,INTERNALLY UNUSED
%[761]%	0,		!54,INTERNALLY UNUSED
%[761]%	0,		!55,INTERNALLY UNUSED
%1466%	TYPGFLDBLPREC,	!56,INTERNALLY DOUBLE PRECISION
%[761]%	0,		!57,INTERNALLY UNUSED
%[761]%	0,		!58,INTERNALLY UNUSED
%[761]%	0,		!59,INTERNALLY UNUSED
%1466%	TYPCOMPLEX,	!60, INTERNALLY COMPLEX
%[761]%	0,		!61, UNUSED
%[761]%	0,		!62, UNUSED
%[761]%	0);		!63, UNUSED

!TABLE TO CONVERT SRCID-BACKID TO MTOP FUNCTION CODES
!FOR FOROTS
BIND MTPDUM=PLIT(MTOPFUN GLOBALLY NAMES
	2,	!BACKSPACE
	3,	!BACKFILE
	0,	!REWIND
	7,	!SKIPFILE
	5,	!SKIP RECORD
	1,	!UNLOAD
	0,	!RELEASE NOT HANDLED THIS WAY
	4);	!ENDFILE

!	Each TYPTABle entry is two words long. The first word has a -1 in the
!	left half if the letter already appeared in an IMPLICIT declaration.
!	The right half is the IDTYPE.  The second word is the character count
!	for character data.

%1213%	GLOBAL TYPTAB[52];

!***********************************************************************
!	The following  defines the  library  function ID  Tables.   Each
!	entry is composed of two  tables.

!	The first table, LIBFUNTAB, is the SIXBIT identification of  the
!	library function.  A binary search is done on this table to find
!	if a function is Fortran intrinsic.

!	The second, LIBATTRIBUTES,  is the attributes  of the  function.
!	This is accessed  by the index  into the above  table where  the
!	name was found.

!***********************************************************************
!	THIS TABLE MUST BE KEPT  IN ALPHABETICAL ORDER, since it  is
!	binary searched to find out if  a function in question is  a
!	Fortran or user function.
!***********************************************************************

!	In addition, there are 3 parallel tables which must be  kept
!	in order; LIBATTRIBUTES, DOTTEDNAMES, GDOTTEDNAMES.

	MACRO FN(A)= SIXBIT 'A'$;

	 BIND FUNTAB = PLIT(LIBFUNTAB GLOBALLY NAMES
	ABSENT NAMES	FN(ABS),
	ACOSENT NAMES	FN(ACOS),
	AIMAGENT NAMES	FN(AIMAG),
	AINTENT NAMES	FN(AINT),
	ALOGENT NAMES	FN(ALOG),
	ALOG10ENT NAMES	FN(ALOG10),
	AMAX0ENT NAMES	FN(AMAX0),
	AMAX1ENT NAMES	FN(AMAX1),
	AMIN0ENT NAMES	FN(AMIN0),
	AMIN1ENT NAMES	FN(AMIN1),
	AMODENT NAMES	FN(AMOD),
%1241%	ANINTENT NAMES	FN(ANINT),
	ASINENT NAMES	FN(ASIN),
	ATANENT NAMES	FN(ATAN),
	ATAN2ENT NAMES	FN(ATAN2),
%2301%	BTESTENT NAMES	FN(BTEST),
	CABSENT NAMES	FN(CABS),
	CCOSENT NAMES	FN(CCOS),
%[761]%	CDABSENT NAMES	FN(CDABS),
	CEXPENT NAMES	FN(CEXP),
%1264%	CHARENT NAMES	FN(CHAR),
	CLOGENT NAMES	FN(CLOG),
%1252%	?CMP1.DENT NAMES FN(CMP1.D),
%1252%	?CMP1.IENT NAMES FN(CMP1.I),
%1252%	?CMP1.RENT GLOBALLY NAMES FN(CMP1.R),
%1264%	?CMPL.CENT NAMES FN(CMPL.C),
%1252%	?CMPL.DENT NAMES FN(CMPL.D),
%1252%	?CMPL.IENT NAMES FN(CMPL.I),
%1252%	CMPLXENT GLOBALLY NAMES	FN(CMPLX),
	CONJGENT NAMES	FN(CONJG),
	COSENT NAMES	FN(COS),
	COSDENT NAMES	FN(COSD),
	COSHENT NAMES	FN(COSH),
%[761]%	COTANENT NAMES	FN(COTAN),
	CSINENT NAMES	FN(CSIN),
	CSQRTENT NAMES	FN(CSQRT),
	DABSENT NAMES	FN(DABS),
%[761]%	DACOSENT NAMES	FN(DACOS),
%[761]%	DASINENT NAMES	FN(DASIN),
	DATANENT NAMES	FN(DATAN),
	DATAN2ENT NAMES	FN(DATAN2),
	DBLEENT NAMES	FN(DBLE),
%1252%	?DBLE.CENT NAMES FN(DBLE.C),
%1252%	?DBLE.IENT NAMES FN(DBLE.I),
	DCOSENT NAMES	FN(DCOS),
%[761]%	DCOSHENT NAMES	FN(DCOSH),
%[761]%	DCOTANENT NAMES	FN(DCOTAN),
%1241%	DDIMENT NAMES	FN(DDIM),
	DEXPENT NAMES	FN(DEXP),
	DFLOATENT NAMES	FN(DFLOAT),
	DIMENT NAMES	FN(DIM),
%1241%	DINTENT NAMES	FN(DINT),
	DLOGENT NAMES	FN(DLOG),
	DLOG10ENT NAMES	FN(DLOG10),
	DMAX1ENT NAMES	FN(DMAX1),
	DMIN1ENT NAMES	FN(DMIN1),
	DMODENT NAMES	FN(DMOD),
%1241%	DNINTENT NAMES	FN(DNINT),
%1241%	DPRODENT NAMES	FN(DPROD),
	DSIGNENT NAMES	FN(DSIGN),
	DSINENT NAMES	FN(DSIN),
%[761]%	DSINHENT NAMES	FN(DSINH),
	DSQRTENT NAMES	FN(DSQRT),
%[761]%	DTANENT NAMES	FN(DTAN),
%[761]%	DTANHENT NAMES	FN(DTANH),
	EXPENT NAMES	FN(EXP),
	FLOATENT NAMES	FN(FLOAT),
	IABSENT NAMES	FN(IABS),
%2301%	IANDENT NAMES	FN(IAND),
%2301%	IBCLRENT NAMES	FN(IBCLR),
%2301%	IBITSENT NAMES	FN(IBITS),
%2301%	IBSETENT NAMES	FN(IBSET),
%1264%	ICHARENT NAMES	FN(ICHAR),
	IDIMENT NAMES	FN(IDIM),
	IDINTENT NAMES	FN(IDINT),
%1241%	IDNINTENT NAMES FN(IDNINT),
%2301%	IEORENT NAMES	FN(IEOR),
	IFIXENT NAMES	FN(IFIX),
%1264%	INDEXENT NAMES	FN(INDEX),
	INTENT NAMES	FN(INT),
%1252%	?INT.CENT NAMES	FN(INT.C),
%2301%	IORENT NAMES	FN(IOR),
%2301%	ISHFTENT NAMES	FN(ISHFT),
%2301%	ISHFTCENT NAMES	FN(ISHFTC),
	ISIGNENT NAMES	FN(ISIGN),
%1264%	LENENT NAMES	FN(LEN),
%1264%	LGEENT NAMES	FN(LGE),
%1264%	LGTENT NAMES	FN(LGT),
%1264%	LLEENT NAMES	FN(LLE),
%1264%	LLTENT NAMES	FN(LLT),
%1241%	LOGENT NAMES	FN(LOG),
%1264%	LOG10ENT NAMES	FN(LOG10),
%1264%	MAXENT NAMES	FN(MAX),
	MAX0ENT NAMES	FN(MAX0),
	MAX1ENT NAMES	FN(MAX1),
%1264%	MINENT NAMES	FN(MIN),
	MIN0ENT NAMES	FN(MIN0),
	MIN1ENT NAMES	FN(MIN1),
	MODENT NAMES	FN(MOD),
%1241%	NINTENT NAMES	FN(NINT),
%1264%	?NOP.CENT NAMES FN(NOP.C),
%1264%	?NOP.DENT NAMES FN(NOP.D),
%1264%	?NOP.IENT NAMES FN(NOP.I),
%1264%	?NOP.RENT NAMES FN(NOP.R),
%2301%	NOTENT NAMES	FN(NOT),
	REALENT NAMES	FN(REAL),
%1252%	?REAL.CENT NAMES FN(REAL.C),
	SIGNENT NAMES	FN(SIGN),
	SINENT NAMES	FN(SIN),
	SINDENT NAMES	FN(SIND),
	SINHENT NAMES	FN(SINH),
	SNGLENT NAMES	FN(SNGL),
	SQRTENT NAMES	FN(SQRT),
%[761]%	TANENT NAMES	FN(TAN),
	TANHENT NAMES	FN(TANH)		);
!
!	End of library function name table
	 BIND AFTERLIB = PLIT(ONEAFTERLIB GLOBALLY NAMES 0);

! Generic Functions:

! For each generic function, there is  a four word entry indicating  the
! actual fn to  be used,  depending on the  argument type  given to  the
! generic.  The types are INTEGER,  REAL, DOUBLE PRECISION, and  COMPLEX
! (in that order).  For each arg-type,  there is a pointer to the  entry
! in the  function table  for the  actual fn  to be  used or  ILGARGTYPE
! saying this arg type is illegal.


	BIND ABSGENTB	=
		PLIT (IABSENT,ABSENT,DABSENT,CABSENT);		!ABS
%1241%	BIND ACOSGENTB	=
%1241%  	PLIT (ILGARGTYPE,ACOSENT,DACOSENT,ILGARGTYPE);	!ACOS 
%1241%	BIND AINTGENTB	=
%1241%  	PLIT (ILGARGTYPE,AINTENT,DINTENT,ILGARGTYPE);	!AINT 
	BIND ALOGGENTB  =
		PLIT (ILGARGTYPE,ALOGENT,DLOGENT,CLOGENT);	!ALOG
	BIND ALOG10GENTB=
		PLIT (ILGARGTYPE,ALOG10ENT,DLOG10ENT,ILGARGTYPE); !ALOG10
	BIND AMAX1GENTB	=
		PLIT (ILGARGTYPE,AMAX1ENT,DMAX1ENT,ILGARGTYPE);	!AMAX1
	BIND AMIN1GENTB	=
		PLIT (ILGARGTYPE,AMIN1ENT,DMIN1ENT,ILGARGTYPE);	!AMIN1
%1241%	BIND ANINTGENTB	=
%1241%		PLIT (ILGARGTYPE,ANINTENT,DNINTENT,ILGARGTYPE); !ANINT 
%1241%	BIND ASINGENTB	=
%1241%		PLIT (ILGARGTYPE,ASINENT,DASINENT,ILGARGTYPE);  !ASIN 
	BIND ATANGENTB 	=
		PLIT (ILGARGTYPE,ATANENT,DATANENT,ILGARGTYPE);  !ATAN
	BIND ATAN2GENTB	=
		PLIT (ILGARGTYPE,ATAN2ENT,DATAN2ENT,ILGARGTYPE); !ATAN2
%1252%	BIND ?CMP1.RGENTB =
%1264%		PLIT (?CMP1.IENT,?CMP1.RENT,?CMP1.DENT,?NOP.CENT); !CMP1.R
%1252%	BIND CMPLXGENTB	=
%1264%		PLIT (?CMPL.IENT,CMPLXENT,?CMPL.DENT,?CMPL.CENT); !CMPLX
	BIND COSGENTB	=
		PLIT (ILGARGTYPE,COSENT,DCOSENT,CCOSENT);	!COS
%1241%	BIND COSHGENTB	=
%1241%	 	PLIT (ILGARGTYPE,COSHENT,DCOSHENT,ILGARGTYPE);  !COSH 
%1252%	BIND DBLEGENTB	=
%1264%		PLIT(?DBLE.IENT,DBLEENT,?NOP.DENT,?DBLE.CENT);	!DBLE
%1241%	BIND DIMGENTB	=
%1241%		PLIT (IDIMENT,DIMENT,DDIMENT,ILGARGTYPE);	!DIM 
	BIND EXPGENTB   =
		PLIT (ILGARGTYPE,EXPENT,DEXPENT,CEXPENT);	!EXP
	BIND INTGENTB	=
%1264%		PLIT (?NOP.IENT,INTENT,IDINTENT,?INT.CENT);	!INT
%1241%	BIND LOGGENTB	=
%1241%		PLIT (ILGARGTYPE,ALOGENT,DLOGENT,CLOGENT);	!LOG 
%1241%	BIND LOG10GENTB =
%1241%		PLIT (ILGARGTYPE,ALOG10ENT,DLOG10ENT,ILGARGTYPE); !LOG10 
%1241%	BIND MAXGENTB	=
%1241%		PLIT (MAX0ENT,AMAX1ENT,DMAX1ENT,ILGARGTYPE);	!MAX 
%1241%	BIND MINGENTB	=
%1241%		PLIT (MIN0ENT,AMIN1ENT,DMIN1ENT,ILGARGTYPE);	!MIN 
	BIND MODGENTB	=
		PLIT (MODENT,AMODENT,DMODENT,ILGARGTYPE);	!MOD
%1241%	BIND NINTGENTB	=
%1241%		PLIT (ILGARGTYPE,NINTENT,IDNINTENT,ILGARGTYPE); !NINT 
%1252%	BIND REALGENTB	=
%1264%		PLIT (REALENT,?NOP.RENT,SNGLENT,?REAL.CENT);	!REAL
	BIND SIGNGENTB	=
		PLIT (ISIGNENT,SIGNENT,DSIGNENT,ILGARGTYPE);	!SIGN
	BIND SINGENTB	=
		PLIT (ILGARGTYPE,SINENT,DSINENT,CSINENT);	!SIN
%1241%	BIND SINHGENTB	=
%1241%		PLIT (ILGARGTYPE,SINHENT,DSINHENT,ILGARGTYPE);	!SINH 
	BIND SQRTGENTB	=
		PLIT (ILGARGTYPE,SQRTENT,DSQRTENT,CSQRTENT);	!SQRT
%1241%	BIND TANGENTB	=
%1241%		PLIT (ILGARGTYPE,TANENT,DTANENT,ILGARGTYPE);	!TAN 
%1241%	BIND TANHGENTB	=
%1241%		PLIT (ILGARGTYPE,TANHENT,DTANHENT,ILGARGTYPE);  !TANH 



!	Macro for attributes

	MACRO ATT(ARGTYP,RESTYP,ARGCT,INLINFLG,GENERFLG,NEWOPR,GENTBPTR,GENSPGEN,FOLDTOCONST)=

	!	ATT(B,C,D,E,F,G,H,I,J)

	!	B - The type of the argument of the function
	!	C - The type of the result of the function
	!	D - The number of arguments
	!	E - Bit if function is in line eligible
	!	F - Bit if generic function name
	!	G - The operator to be substituted if in line fn
	!	H - For generic fns; Points to a sub-table that indicates
	!		which actual fn to use for each arg type.
	!	I - Bit if generic but non-specific name
	!	J - Bit if possible to fold to a constant at compile time

	! First word

		((INLINFLG^35)		!Bit 0 is flag for inline fn
	  OR	(1^34)			!Bit 1 is always set (in SYMTAB is
					! flag for Lib Fn)
	  OR	(GENERFLG^33)		!Bit 2 is generic fn flag
	  OR	(ARGTYP^28)		!Bits 3-7 give VALTYPE for arg
	  OR	(RESTYP^23)		!Bits 8-12 give VALTYPE for result
	  OR	(ARGCT^18)		!Bits 13-17 give number of args
	  OR	NEWOPR),		!Right-half-wd gives the operator to
					! be substituted if INLINFLG is set
	! Second word

%1270%		((GENSPGEN^35)		!Bit 0 is flag for generic function 
%1270%					! which has no specific name.
%1567%	  OR	(FOLDTOCONST^34)	!Bit 1 signifies that this function 
%1567%					! may be able to be folded into a const
%1270%	  OR	(GENTBPTR)<0,0>)$;	!For generic fns - The 2nd Wd points to
					! a 4 Wd sub-table that indicates which
					! actual Fn to use for each arg type


!	"Imaginary"  type  conversion  to  make  NOP  functions   inline
!	(functions are later removed  and these keeps  the names in  the
!	symbol table from being put  out to program listings).  Not  put
!	in TABLES.BLI, since these are not executed functions.
BIND
%1264%	CTOCOP = OPERC(COMPLEX,TYPECNV,FROMCMPLX),
%1264%	DTODOP = OPERC(DOUBLPREC,TYPECNV,FROMDBLPRC),
%1264%	ITOIOP = OPERC(INTEGER,TYPECNV,FROMINT),
%1264%	RTOROP = OPERC(REAL,TYPECNV,FROMREAL);


%1567%	BIND	CF=1,	! Constant folding is possible
%2352%		GEN=1,	! Is generic function
%2352%		INL=1;	! Is inline function

	! The following table contains the default types for identifiers
	! (abbreviated to save space).

%2024%	BIND	IN=INTEGER,
%2024%		RL=REAL,
%2024%		DB=DOUBLPREC,
%2024%		CX=COMPLEX,
%2024%		LG=LOGICAL,
%2024%		CH=CHARACTER;

!	The Function Attribute Table
!
!	ATT(Type of function, Type of result, #of args, Inline bit,
!		Generic bit, Inline function label, Pointer for Generic fn,
!		Generic but not specific bit, Fn may be folded to constant)
!
	 BIND ZATTRIBUTES = PLIT(LIBATTRIBUTES GLOBALLY NAMES

	ATT(RL,RL,1,INL,GEN,ABSFNOP,ABSGENTB,0,0),	!ABS
%1241%	ATT(RL,RL,1,0,GEN,0,ACOSGENTB,0,0),		!ACOS
	ATT(CX,RL,1,0,0,0,-1,0,0),			!AIMAG
%1241%	ATT(RL,RL,1,0,GEN,0,AINTGENTB,0,0),		!AINT
	ATT(RL,RL,1,0,GEN,0,ALOGGENTB,0,0),		!ALOG
	ATT(RL,RL,1,0,GEN,0,ALOG10GENTB,0,0),		!ALOG10
	ATT(IN,RL,VARGCTFLG,0,0,0,-1,0,0),		!AMAX0
	ATT(RL,RL,VARGCTFLG,INL,GEN,AMAXFNOP,AMAX1GENTB,0,0),	!AMAX1
	ATT(IN,RL,VARGCTFLG,0,0,0,-1,0,0),		!AMIN0
	ATT(RL,RL,VARGCTFLG,INL,GEN,AMINFNOP,AMIN1GENTB,0,0),	!AMIN1
	ATT(RL,RL,2,0,0,0,-1,0,0),			!AMOD
%1241%	ATT(RL,RL,1,0,GEN,0,ANINTGENTB,0,0),		!ANINT
%1241%	ATT(RL,RL,1,0,GEN,0,ASINGENTB,0,0),		!ASIN
	ATT(RL,RL,1,0,GEN,0,ATANGENTB,0,0),		!ATAN
	ATT(RL,RL,2,0,GEN,0,ATAN2GENTB,0,0),		!ATAN2
%2301%	ATT(IN,LG,2,0,0,0,0,0,0),			!BTEST
	ATT(CX,RL,1,0,0,0,-1,0,0),			!CABS
	ATT(CX,CX,1,0,0,0,-1,0,0),			!CCOS
%[761]%	ATT(DB,DB,1,0,0,0,-1,0,0),			!CDABS
	ATT(CX,CX,1,0,0,0,-1,0,0),			!CEXP
%1567%	ATT(IN,CH,1,INL,0,CHARFNOP,-1,0,CF),		!CHAR
	ATT(CX,CX,1,0,0,0,-1,0,0),			!CLOG
%1252%	ATT(DB,CX,1,INL,0,CMPDOP,-1,0,0),		!CMP1.D
%1252%	ATT(IN,CX,1,INL,0,CMPIOP,-1,0,0),		!CMP1.I
%1270%	ATT(RL,CX,1,INL,GEN,CMPLXOP,?CMP1.RGENTB,1,0),!CMP1.R
%1264%	ATT(CX,CX,2,0,0,0,-1,0,0),			!CMPL.C
%1252%	ATT(DB,CX,2,0,0,0,-1,0,0),			!CMPL.D
%1252%	ATT(IN,CX,2,0,0,0,-1,0,0),			!CMPL.I
%1270%	ATT(RL,CX,2,INL,GEN,CMPLXFNOP,CMPLXGENTB,1,0),	!CMPLX
	ATT(CX,CX,1,0,0,0,-1,0,0),			!CONJG
	ATT(RL,RL,1,0,GEN,0,COSGENTB,0,0),		!COS
	ATT(RL,RL,1,0,0,0,-1,0,0),			!COSD
%1241%	ATT(RL,RL,1,0,GEN,0,COSHGENTB,0,0),		!COSH
%[761]%	ATT(RL,RL,1,0,0,0,-1,0,0),			!COTAN
	ATT(CX,CX,1,0,0,0,-1,0,0),			!CSIN
	ATT(CX,CX,1,0,0,0,-1,0,0),			!CSQRT
	ATT(DB,DB,1,INL,0,DABSFNOP,-1,0,0),		!DABS
%[761]%	ATT(DB,DB,1,0,0,0,-1,0,0),			!DACOS
%[761]%	ATT(DB,DB,1,0,0,0,-1,0,0),			!DASIN
	ATT(DB,DB,1,0,0,0,-1,0,0),			!DATAN
	ATT(DB,DB,2,0,0,0,-1,0,0),			!DATAN2
%1270%	ATT(RL,DB,1,INL,GEN,DBLEOP,DBLEGENTB,1,0),	!DBLE
%1252%	ATT(CX,DB,1,INL,0,DBLCOP,-1,0,0),		!DBLE.C
%1252%	ATT(IN,DB,1,INL,0,DBLIOP,-1,0,0),		!DBLE.I
	ATT(DB,DB,1,0,0,0,-1,0,0),			!DCOS
%[761]%	ATT(DB,DB,1,0,0,0,-1,0,0),			!DCOSH
%[761]%	ATT(DB,DB,1,0,0,0,-1,0,0),			!DCOTAN
%1241%	ATT(DB,DB,2,0,0,0,-1,0,0),			!DDIM
	ATT(DB,DB,1,0,0,0,-1,0,0),			!DEXP
	ATT(IN,DB,1,INL,0,DFLOATOP,-1,0,0),		!DFLOAT
%1241%	ATT(RL,RL,2,INL,GEN,DIMFNOP,DIMGENTB,0,0),	!DIM
%1241%	ATT(DB,DB,1,0,0,0,-1,0,0),			!DINT
	ATT(DB,DB,1,0,0,0,-1,0,0),			!DLOG
	ATT(DB,DB,1,0,0,0,-1,0,0),			!DLOG10
	ATT(DB,DB,VARGCTFLG,0,0,0,-1,0,0),		!DMAX1
	ATT(DB,DB,VARGCTFLG,0,0,0,-1,0,0),		!DMIN1
	ATT(DB,DB,2,0,0,0,-1,0,0),			!DMOD
%1241%	ATT(DB,DB,1,0,0,0,-1,0,0),			!DNINT
%1241%	ATT(RL,DB,2,0,0,0,-1,0,0),			!DPROD
	ATT(DB,DB,2,0,0,0,-1,0,0),			!DSIGN
	ATT(DB,DB,1,0,0,0,-1,0,0),			!DSIN
%[761]%	ATT(DB,DB,1,0,0,0,-1,0,0),			!DSINH
	ATT(DB,DB,1,0,0,0,-1,0,0),			!DSQRT
%[761]%	ATT(DB,DB,1,0,0,0,-1,0,0),			!DTAN
%[761]%	ATT(DB,DB,1,0,0,0,-1,0,0),			!DTANH
	ATT(RL,RL,1,0,GEN,0,EXPGENTB,0,0),		!EXP
	ATT(IN,RL,1,INL,0,FLOATOP,-1,0,0),		!FLOAT
	ATT(IN,IN,1,INL,0,IABSFNOP,-1,0,0),		!IABS
%2352%	ATT(IN,IN,2,INL,0,IANDFNOP,-1,0,CF),		!IAND
%2301%	ATT(IN,IN,2,0,0,0,0,0,0),			!IBCLR
%2301%	ATT(IN,IN,3,0,0,0,0,0,0),			!IBITS
%2301%	ATT(IN,IN,2,0,0,0,0,0,0),			!IBSET
%1567%	ATT(CH,IN,1,INL,0,ICHARFNOP,-1,0,CF),		!ICHAR
	ATT(IN,IN,2,0,0,0,-1,0,0),			!IDIM
	ATT(DB,IN,1,INL,0,IDINTOP,-1,0,0),		!IDINT
%1241%	ATT(DB,IN,1,0,0,0,-1,0,0),			!IDNINT
%2301%	ATT(IN,IN,2,INL,0,IEORFNOP,-1,0,CF),		!IEOR
	ATT(RL,IN,1,INL,0,IFIXOP,-1,0,0),		!IFIX
%1264%	ATT(CH,IN,2,0,0,0,-1,0,0),			!INDEX
	ATT(RL,IN,1,INL,GEN,INTOP,INTGENTB,0,0),	!INT
%1252%	ATT(CX,IN,1,INL,0,INTCOP,-1,0,0),		!INT.C
%2352%	ATT(IN,IN,2,INL,0,IORFNOP,-1,0,CF),		!IOR
%2301%	ATT(IN,IN,2,0,0,0,0,0,0),			!ISHFT
%2301%	ATT(IN,IN,3,0,0,0,0,0,0),			!ISHFTC
	ATT(IN,IN,2,INL,0,ISIGNFNOP,-1,0,0),		!ISIGN
%1651% LENATTRIB GLOBALLY NAMES
%1567%	ATT(CH,IN,1,INL,0,LENFNOP,-1,0,CF),		!LEN
%1264%	ATT(CH,LG,2,0,0,0,-1,0,0),			!LGE
%1264%	ATT(CH,LG,2,0,0,0,-1,0,0),			!LGT
%1264%	ATT(CH,LG,2,0,0,0,-1,0,0),			!LLE
%1264%	ATT(CH,LG,2,0,0,0,-1,0,0),			!LLT
%1270%	ATT(RL,RL,1,0,GEN,0,LOGGENTB,1,0),		!LOG
%1270%	ATT(RL,RL,1,0,GEN,0,LOG10GENTB,1,0),		!LOG10
%1270%	ATT(RL,RL,VARGCTFLG,0,GEN,0,MAXGENTB,1,0),	!MAX
	ATT(IN,IN,VARGCTFLG,INL,0,MAXFNOP,-1,0,0),	!MAX0
	ATT(RL,IN,VARGCTFLG,0,0,0,-1,0,0),		!MAX1
%1270%	ATT(RL,RL,VARGCTFLG,0,GEN,0,MINGENTB,1,0),	!MIN
	ATT(IN,IN,VARGCTFLG,INL,0,MINFNOP,-1,0,0),	!MIN0
	ATT(RL,IN,VARGCTFLG,0,0,0,-1,0,0),		!MIN1
	ATT(IN,IN,2,INL,GEN,MODFNOP,MODGENTB,0,0),	!MOD
%1241%	ATT(RL,IN,1,0,GEN,0,NINTGENTB,0,0),		!NINT
%1264%	ATT(CX,CX,1,INL,0,CTOCOP,-1,0,0),		!Complex  NOP.
%1264%	ATT(DB,DB,1,INL,0,DTODOP,-1,0,0),		!Double prec  NOP.
%1264%	ATT(IN,IN,1,INL,0,ITOIOP,-1,0,0),		!Integer  NOP.
%1264%	ATT(RL,RL,1,INL,0,RTOROP,-1,0,0),		!Real  NOP.
%2301%	ATT(IN,IN,1,0,0,0,0,0,0),			!NOT
%1252%	ATT(IN,RL,1,INL,GEN,REALIOP,REALGENTB,0,0),	!REAL
%1252%	ATT(CX,RL,1,INL,0,REALOP,-1,0,0),		!REAL.C
	ATT(RL,RL,2,INL,GEN,SIGNFNOP,SIGNGENTB,0,0),	!SIGN
	ATT(RL,RL,1,0,GEN,0,SINGENTB,0,0),		!SIN
	ATT(RL,RL,1,0,0,0,-1,0,0),			!SIND
%1241%	ATT(RL,RL,1,0,GEN,0,SINHGENTB,0,0),		!SINH
	ATT(DB,RL,1,INL,0,SNGLOP,-1,0,0),		!SNGL
	ATT(RL,RL,1,0,GEN,0,SQRTGENTB,0,0),		!SQRT
%1241%	ATT(RL,RL,1,0,GEN,0,TANGENTB,0,0),		!TAN
%1241%	ATT(RL,RL,1,0,GEN,0,TANHGENTB,0,0)		!TANH
);
!END OF LIBRARY ATTRIBUTES
!
!

	%(***TABLE OF WDS IN WHICH IN SUCCESSIVE WDS HAVE 1 0-BIT, INDEX INTO THIS
		TABLE IN ORDER TO CLEAR A GIVEN BIT***)%
BIND DMY= PLIT (
	NOT(1^36),			!IN CLRWDS-1, HAVE A WORD IN WHICH ALL BITS
					! ARE SET SO THAT WHEN "CLEAR" THE BIT FOR -1
					! WILL DO NOTHING
CLRWDS GLOBALLY NAMES 	NOT(1^35),
	NOT(1^34),
	NOT(1^33),
	NOT(1^32),
	NOT(1^31),
	NOT(1^30),
	NOT(1^29),
	NOT(1^28),
	NOT(1^27),
	NOT(1^26),
	NOT(1^25),
	NOT(1^24),
	NOT(1^23),
	NOT(1^22),
	NOT(1^21),
	NOT(1^20),
	NOT(1^19),
	NOT(1^18),
	NOT(1^17),
	NOT(1^16),
	NOT(1^15),
	NOT(1^14),
	NOT(1^13),
	NOT(1^12),
	NOT(1^11),
	NOT(1^10),
	NOT(1^9),
	NOT(1^8),
	NOT(1^7),
	NOT(1^6),
	NOT(1^5),
	NOT(1^4),
	NOT(1^3),
	NOT(1^2),
	NOT(1^1),
	NOT(1^0)  );



!***********************************************************************
! These globals are  not to  be set  to zero  at the  beginning of  each
! program unit.  Phase I needs them.
!***********************************************************************

GLOBAL

%1133%	RTIME,		! Run time for this program unit
%1133%	CTIME,		! Time of day for connect time
%1633%	PHTIME[6],	! Runtime per phaze
%1633%	PBTIME,		! Runtime at the beginning of the current phase
	BGSTBF,		!HOLDS THE AMOUNT OF CORE NEEDED BY THE
			!LARGEST INPUT FILE. CALCULATED IN
			!COMMAN AND USED WHEN THE FIRST INPUT
			!FILE IS OPENED
%2447%	SAVFLG[INCLMAX], !FLGREG SAVE AREA FOR INCLUDED FILES
	DEBGSW,		! VALUE OF THE DEBUG SWITCH SET BY SCAN
	ARINGLEFT,	! USED FOR BUFFERING OF INPUT
 	BUGOUT,  	! INTERNAL OUTPUT SWITCH VALUE
	FLAGS2,		!SECONDARY FLAG  REGISTER - SEE IOFLG.BLI
![767] ADD F2; REMOVE GFMCOK (NOW IN FIRST)
	F2,		![767] SECONDARY SWITCH REGISTER - SEE IOFLG.BLI
	CURPOOLEND,  	! CURRENT END OF INPUT IN POOL
	CURPTR,		! CURRENT POOL POSITION POINTER
	CHARPOS,	! CHARACTER POSITION OF CURRENT 
			! CHARACTER ON PRINT LINE
	LINEPTR,	! POINTER TO THE CHARACTER-1 OF THE BEGINNING
			! OF THE CURRENT LINE
	SEQLAST,	! IF SET TO 1 IT INDICATES THAT THE LINE BEGINNING THIS
			! PROGRAM UNIT HAS A LINE SEQUENCE NUMBER IN LINELINE
	LINENO[2],	! AREA IN WHICH TO BUILD THE LINE NO
	PAGELINE,	! CURRENT LINE ON THE PAGE 59 TO 0
	LINELINE,	! CURRENT LINE NUMBER
	HEADSTR[20],	! AREA TO BUILD HEADING
	BASENO,		! ARITHMETIC BASE FOR DIGITS()
	HEADPTR,	! BYTE POINTER FOR HEADING
	PAGEPTR,	! BYTE POINTER TO POSITION TO INSERT PAGE #
%1504%	BIGARY,		! Holds size of smallest array that will go
			!  into .LARG. for extended addressing
%2251%	BIGCONCAT,	! Size of the biggest concatenation to allow  as
%2251%			! as a "fixed length" or "known maximum  length"
%2251%			! concatenation.  Maximum  size of  non  dynamic
%2251%			! concatenation.
%2443%	LONAME[SYMLEN+1],  ! Name of the low (data) PSECT in SIXBIT.
%2310%			   ! Set in command scanner.
%2443%	HINAME[SYMLEN+1];  ! Name of the high (code) PSECT in SIXBIT.
%2310%			   ! Set in command scanner.

!***********************************************************************
!
!	Define the default values for LONAME and HINAME.
!
!	DEFLON is the default value for LONAME.  DEFHIN is the default
!	value for HINAME.  DEFLONXXX and DEFHINXXX exist to get around
!	a bug in BLISS:  it thinks (PLIT ' ')<0,0>-1 is not a linktime
!	constant.
!***********************************************************************

BIND	
%2454%	DEFLONXX = (PLIT SIXBIT '.DATA.')-1,	!Default value of LONAME
%2454%	DEFHINXX = (PLIT SIXBIT '.CODE.')-1;	!Default value of HINAME
GLOBAL BIND
%2454%	DEFLON	= DEFLONXX<0,0>,		!Default value of LONAME
%2454%	DEFHIN	= DEFHINXX<0,0>;		!Default value of HINAME


%2343%	! The following tables are for /EXTEND:[NO]COMMON switch

GLOBAL BIND
%2343%	ECTABL = 100,  ! Number of common blocks which can be named in a
%2343%		       ! /EXTEND switch.
%2343%	ECHSHL = 31,   ! Length of the hash table for list of COMMON blks.
%2343%	ECRECL = 2;    ! Size of an entry in ECTAB

GLOBAL
%2343%	ECTAB[ECTABL*ECRECL],	! Table of COMMON blocks named in /EXTEND 
%2343%	ECUSED,		! Number of entries in ECTAB
%2343%	ECHASH[ECHSHL],	! Hash table of COMMON blocks named in /EXTEND switch.
%2343%	DFCMPS,		! Default psect for COMMON blocks (set by /EXTEND).
%2322%	VMSIZE;		! Size of virtual memory for this compile.  This
%2322%			! is set by the command scanner depending on whether
%2322%			! /EXTEND is set.

END
END
ELUDOM