C *********************************************************************
C **********                I/O UNITS                        **********
C *********************************************************************
C
      GLOBAL SIUNIT, RPTUNT, ERUNIT, TXTUNT, DATUNT
      INTEGER SIUNIT, RPTUNT, ERUNIT, TXTUNT, DATUNT
      GLOBAL SRIUNT, SROUNT
      INTEGER SRIUNT, SROUNT
      DATA SIUNIT/101/, ERUNIT/108/, RPTUNT/106/, TXTUNT/104/
      DATA DATUNT/107/, SRIUNT/110/, SROUNT/109/
C
C ***   SIUNIT - I/O UNIT FOR READING SOURCE FILES
C ***   ERUNIT - I/O UNIT FOR REPORTING ERRORS
C ***   RPTUNT - REPORT I/O UNIT
C ***   TXTUNT - I/O UNIT FOR WRITING EXTRACT TEXT
C ***   DATUNT - I/O UNIT FOR WRITING EXTRACT POINTER DATA
C ***   SRIUNT - SORT INPUT UNIT
C ***   SROUNT - SORT OUTPUT UNIT
C
C *********************************************************************
C **********            INPUT SCANNING DATA                  **********
C *********************************************************************
C
      GLOBAL RECBGN, EORFLG, RECORD, RECPOS
      GLOBAL RECLEN, RECNBR, RECCHR, RECKEY
      LOGICAL RECBGN, EORFLG
      INTEGER RECORD(141), RECPOS, RECLEN, RECNBR, RECCHR
      REAL  RECKEY
C
C ***   RECBGN - SET .FALSE. WHENEVER A NEW RECORD IS READ
C ***   EORFLG - FLAG SET .TRUE. IF PROCESSING RECORD END
C ***   RECORD - INTEGER VECTOR OF CHARACTERS IN R1 FORMAT
C ***   RECPOS - POSITION (INDEX) OF SCAN IN RECORD
C ***   RECLEN - POSITION (INDEX) OF LAST NON-BLANK CHAR OF RECORD
C ***   RECNBR - COUNT OF RECORDS READ FROM CURRENT INPUT FILE
C ***   RECCHR - CURRENT CHARACTER = RECORD(RECPOS)
C ***   RECKEY - EDIT KEY OF CURRENT RECORD
C
C **********           OTHER SCANNING DATA                   **********
C *********************************************************************
C
      GLOBAL INCMNT
      LOGICAL INCMNT
      DATA INCMNT/.FALSE./
C
C ***   INCMNT - SET TRUE IF INSIDE COMMENT
C
      GLOBAL TITEM, TOKEN, TPL6ID, TRCPOS, TRCNBR, TRCKEY
      INTEGER TITEM(0:140), TOKEN, TPL6ID, TRCPOS, TRCNBR
      REAL TRCKEY
C
C ***   TITEM - UNPACKED TEXTC STRING CONTAINING CURRENT ITEM
C ***   TOKEN - ITEM CODE FOR CURRENT ITEM
C ***   TPL6ID - ID IF CURRENT ITEM IS A PL6 KEYWORD
C ***            VALUE IF CURRENT ITEM IS AN INTEGER
C ***   TRCPOS - POSITION OF START OF CURRENT ITEM IN INPUT RECORD
C ***   TRCNBR - RECORD IN WHICH CURRENT ITEM BEGAN
C ***   TRCKEY - KEY OF RECORD TRCNBR
C
      GLOBAL SRCTYP, PRNLEV, CMTID, HAVCMT
      INTEGER SRCTYP, PRNLEV, CMTID
      LOGICAL HAVCMT
C
C ***   SRCTYP - TYPE OF SOURCE 1 - PL-6, 2 - BMAP, 3 - FORT
C ***   PRNLEV - PARENTHESIS LEVEL = +1 FOR (, -1 FOR )
C ***   CMTID  - ID VALUE GIVEN FOR COMMENT TYPE
C ***   HAVCMT - FLAG INDICATING UNWRITTEN COMMENT
C
      GLOBAL CMTIDS
      INTEGER CMTIDS(13)
      DATA CMTIDS/ 1RV, 1RM, 1RP, 1RF, 1RD, 1RI, 1RN, 1RE,
     &                1RS, 1RB, 1RK, 1RO, 1RC /
C
C ***   CMTIDS - TABLE OF LEGAL COMMENT TYPES INDEXED BT ID VALUE
C
C *********************************************************************
C **********               TOKEN TYPES                        *********
C *********************************************************************
C
      PARAMETER TNAME=1, TSQSTR=2, TDQSTR=3, TBTSTR=4, TDIGIT=5
      PARAMETER TRPAR=12, TARMOP=13, TNOT=14, TPEROD=15, TCOLON=16
      PARAMETER TPRCNT=17, TRELOP=18, TCMBGN=19, TCMEND=20, TEOR=21
C
C
C ***      TNAME    TPL6ID CONTAINS 0 (NOT PL6 WORD) OR ID - NAME
C ***      TSQSTR - 'STRING'
C ***      TDQSTR - "STRING"
C ***      TBTSTR - BIT STRING ('XX'O OR 'XX'B)
C ***      TDIGIT - INTEGER STRING
C ***      TEOR - RECORD END
C ***      TEOF - FILE END
C ***      TSMICL - ; TCOMMA - , TEQUAL - = TLPAR - ( TRPAR - )
C ***      TARMOP - (* + - / & [ ->) TNOT - ~ TPEROD - . TCOLON - :
C ***      TPRCNT - %  TRELOP - (< > ~= <= >=)  TCMBGN - /*
C ***      TCMEND - */
C *********************************************************************
C **********               FILE INFORMATION                  **********
C *********************************************************************
C
      GLOBAL FILNAM, FILNLN, FILACT, FILNMR
      CHARACTER FILNAM*32, FILACT*8
      INTEGER FILNLN, FILNMR(31)
C
C ***   FILNAM - NAME OF CURRENT FILE
C ***   FILNLN - LENGTH OF CURRENT FILE NAME
C ***   FILACT - ACCOUNT OF CURRENT FILE
C ***   FILNMR - FILENAME IN R1 FORMAT
C
C *********************************************************************
C **********                  NAME TABLE                     **********
C *********************************************************************
C
      PARAMETER TBLMAX=1500
      GLOBAL NAMTBL, NAMNID, NAMFIX
      INTEGER NAMTBL(TBLMAX), NAMNID, NAMFIX
C
C ***      NAMTBL - TABLE OF NAMES IN UNPACKED TEXTC
C ***      NAMNID - IDENTIFICATION NUMBER OF LAST NAME IN TABLE
C ***      NAMFIX - NEXT FREE TABLE INDEX
C
C **********            LAST FULLY QUALIFIED DATA ITEM       **********
C *********************************************************************
C
      GLOBAL LSTNAM, LSTNPS, LSTLEV, LSTEND
      INTEGER LSTNAM(0:140), LSTNPS(0:10), LSTLEV(1:10), LSTEND
C
C ***   LSTNAM - TEXTC OF LAST FULLY QUALIFIED DATA ITEM NAME
C ***   LSTNPS - LSTNAM IX WHERE NAME AT PHYS LEV ENDED
C ***   LSTLEV - LOGICAL LEVEL INDEXED BY PHYSICAL LEVEL
C ***   LSTEND - LAST PHYSICAL LEVEL NUMBER
C
      GLOBAL ITMDIM, ITMSIZ, ITMTYP, ITMALN, ITMID
      INTEGER ITMDIM(0:20), ITMSIZ(0:20), ITMTYP(0:20), ITMALN(0:20)
      INTEGER ITMID
C
C ***   ITMDIM - NUMBER OF ELEMENTS IN ITEM, 0 IF SCALAR
C ***   ITMSIZ - SIZE OF SINGLE ITEM IN BITS
C ***   ITMTYP - TYPE OF ITEM
C ***   ITMALN - ALIGNMENT OF ITEM
C ***   ITMID  - IDENTIFIER NUMBER GIVEN TO CURRENT ITEM
C
C *********************************************************************
C **********               ASSOCIATED NAMES                  **********
C *********************************************************************
C
      GLOBAL NAMES
      INTEGER NAMES(20,0:140)
C
C ***   NAMES - 20 NAMES OF UP TO 140 CHARS EACH
C
C *********************************************************************
C **********            COMMENT INFO                         **********
C *********************************************************************
C
      GLOBAL CMTSTR, CMTREC, CMTTYP, CMTBGN
      INTEGER CMTSTR, CMTREC, CMTTYP, CMTBGN
C
C ***   CMTSTR - RECORD POSITION WHERE COMMENT STARTED
C ***   CMTREC - RECORD NUMBER WHERE COMMENT STARTED
C ***   CMTTYP - TYPE OF COMMENT
C
C *********************************************************************
C **********         TEXT OUTPUT BLOCK DATA                  **********
C *********************************************************************
C
      PARAMETER BLKSIZ=4096,BLKSZX=4095
      GLOBAL TBKCHR, TBKNBR, TBTNBR
      INTEGER TBKCHR(0:BLKSZX), TBKNBR/0/, TBTNBR/0/
C
C ***   TBKCHR - TEXT OUTPUT BLOCK
C ***   TBKNBR - CURRENT BLOCK NUMBER
C ***   TBTNBR - INDEX OF NEXT FREE BYTE IN BLOCK
C
C *********************************************************************
C **********         IN-CORE DATA BLOCKS                     **********
C *********************************************************************
C
      PARAMETER BLKMAX=5, ITMMAX=3, NULMRK=4095, RECMAX=2
C
C ***   BLKMAX - MAXIMUM NUMBER OF BLOCKS MINUS 1
C ***   ITMMAX - MAXIMUM NUMBER OF ITEMS MINUS 1
C ***   NUKMRK - 2**24-1 MARKS LIST ENDS
C ***   RECMAX - MAX NUMBER OF DIFFERENT RECORDS
C
      GLOBAL BLK
      INTEGER BLK(0:BLKSZX,0:BLKMAX)
C
C ***   BLK   - STRUCTURE TO ACCESS ALL IN-CORE BLOCKS BY THEIR INDICES
C
      GLOBAL BK, BT, BM, BA, BTIC, BMAXIX
      INTEGER BK(0:BLKMAX), BT(0:BLKMAX), BA(0:BLKMAX), BTIC, BMAXIX
      LOGICAL BM(0:BLKMAX)
C
C ***   BK - PHYSICAL BLOCK NUMBER OF LOGICAL BLOCK I
C ***   BT - BYTE DISPLACEMENT OF CURRENT RECORD OF BLOCK
C ***   BM - BLOCK MODIFIED FLAG
C ***   BA - 'TIME' OF BLOCK'S LAST ACCESS
C ***   BTIC - 'TIME'
C ***   BMAXIX - INDEX OF NEXT UNUSED BLOCK
C
      GLOBAL PBK, NBK, PBT, NBT, NUMRCS
      INTEGER PBK, NBK, PBT, NBT, NUMRCS
C
C ***   PBK - LOGICAL BLOCK NUMBER OF PREVIOUS RECORD
C ***   PBT - DISPLACEMENT INTO PREVIOUS BLOCK OF PREVIOUS RECORD
C ***   NBT - DISPLACEMENT INTO NEXT BLOCK OF NEXT RECORD
C ***   NUMRCS - NUMBER OF RECORDS IN THE DATA BASE
C
      GLOBAL CIDX, CRCX, CNMX, CMDX, TXKNBR, TXTNBR
      INTEGER CIDX, CRCX, CNMX, CMDX, TXKNBR, TXTNBR
C
C ***   CIDX - INDEX OF COMMENT TYPE ID
C ***   CRCX - INDEX OF COMMENT RECORD NUMBER
C ***   CNMX - INDEX OF COMMENT NAME
C ***   CMDX - INDEX OF COMMENT MODULE
C ***   TXKNBR - NUMBER OF ASSOCIATED TEXT BLOCK
C ***   TXTNBR - OFFSET OF COMMENT INTO TEXT BLOCK
C
C *********************************************************************
C **********            RECORD LIST POINTERS                 **********
C *********************************************************************
C
      PARAMETER INDMAX=337
      GLOBAL FSTBLK, FSTBYT, FSTEND
      INTEGER FSTBLK(0:ITMMAX,0:INDMAX), FSTBYT(0:ITMMAX,0:INDMAX)
      INTEGER FSTEND(0:ITMMAX)
C
C ***   INDMAX - INDEX OF LAST INDEX LEVEL
C ***   FSTBLK - NUMBER OF BLOCK IN WHICH FIRST RECORD OF LIST RESIDES
C ***   FSTBYT - DISPLACEMENT INTO BLOCK OF FIRST RECORD
C ***   FSTEND - END OF USED INDEX ENTRIES FOR ITEM
C
      GLOBAL BEQUAL, BGRATR, BLESS
      LOGICAL BEQUAL, BGRATR, BLESS
C
C ***   FLAGS SET AFTER RECORD ITEM COMPARISONS
C
C *********************************************************************
C **********         FILE NAMES ETC                          **********
C *********************************************************************
C
      GLOBAL FNLN, FNAME, FACCT
      INTEGER FNLN
      CHARACTER FNAME*31, FACCT*8
C
C ***   FNLN  - FILE NAME LENGTH
C ***   FACCT - ACCOUNT
C
      GLOBAL BASOPN, HAVDAT
      LOGICAL BASOPN, HAVDAT
C
C ***   BASOPN - FLAG SET IF DATA BASE IS OPEN
C ***   HAVDAT - SET .TRUE. WHEN DATA BASE DATA READIED
C
C *********************************************************************
C **********         EXECUTION CONTROL                       **********
C *********************************************************************
C
      GLOBAL BRKFLG
      INTEGER BRKFLG
      DATA BRKFLG/0/
C
C ***   BRKFLG - INCREMENTED BY ONE FOR EACH BREAK HIT
C
