*DECK TSTEXT
          IDENT  TSTEXT 
          STEXT 
          LIST   F,X
          SST 
 RUN3     SPACE  4,8
***       TSTEXT - SYSTEM TEXT FOR C.D.C. FAST FORTRAN COMPILER.
* 
* 
*         AUTHORS EMERITUS: 
*                RICHARD H. FRANK   (CHIEF DESIGNER) 1971 
*                PAUL H. MC QUESTEN (CHIEF ASSISTANT) 1971
  
          TITLE  T S T E X T - FORTRAN (TS) ASSEMBLY TEXT 
*CALL OPTIONS 
*         SELECT SYSTEM - OR TEST-MODE COMPILER CONFIGURATION.
  
*IF -DEF,TEST,1 
 TEST     =      0           ASSEMBLE COMPILER IN NORMAL (SYSTEM) MODE
*IF DEF,TEST,1
 TEST     =      1           ASSEMBLE COMPILER IN TEST MODE 
  
* 
          TITLE  I/O MACRO CODING CONVENTIONS.
*CALL FA=DEFS 
 SYS=SYM  SPACE  4,8
 SYSTEM   TITLE  SYS=SYM  -  OP SYSTEM INTERFACE SYMBOLS
**        SYSTEM = SCOPE 3.4
*                  (BUT WITH CIO INSTEAD OF 6RM INTERFACE)
  
  
 RUN      MICRO  1,,/"LPNAME"/
 VERSION  MICRO  1,,/"VER"/ 
 L.SBUF   EQU    1001B       STANDARD LENGTH BUFFER (SCOPE) 
 EXT      MICRO  1,, .       SUFFIX FOR STANDARD EXTERNALS
 FILE     MICRO  1,, "C"     SUFFIX FOR FILE NAMES
  
  
  
 CHAR     EQU    6           NUMBER OF BITS PER CHARACTER 
 P.       EQU    59          SIGN BIT POSITION (NOT SUBJECT TO CHANGE)
 BLOWUP   MICRO  1,, *+4S15  OUT OF BOUNDS JUMP ADDRESS 
 CIO      SPACE  4,8
**        *CIO* REQUESTS
  
 IO.READ  EQU    10B         BUFFERED READ
 IO.RITE  EQU    14B         BUFFERED WRITE 
 IO.EOR   EQU    24B         WRITE END-OF-RECORD
 IO.EOF   EQU    34B         WRITE END-OF-FILE
 IO.REW   EQU    50B         REWIND FILE
 IO.RETN  =      170B        RETURN FILE TO SYSTEM
 IO.EVICT EQU    114B        EVICT MASS STORAGE FILE
  
 POPMAC   OPSYN  PURGMAC
 POPDEF   OPSYN  PURGDEF
  
          PURGDEF  =A,Q 
          PURGDEF  =A,A 
          PURGDEF  =A,AQ
          PURGDEF  =A,BQ
          PURGDEF  =A,XQ
          PURGDEF  =B,Q 
          PURGDEF  =B,AQ
          PURGDEF  =B,B 
          PURGDEF  =B,BQ
          PURGDEF  =B,XQ
          PURGDEF  =X,Q 
          PURGDEF  =X,AQ
          PURGDEF  =X,BQ
          PURGDEF  =X,X 
          PURGDEF  =X,XQ
*CALL COMAREG 
  
  
**        MOVE - MOVE BLOCK OF CORE.
* 
*         MOVE   COUNT,FROM,TO
  
  
          PURGMAC   MOVE
 MOVE     MACRO  C,F,T
          =X1    C
          =X2    F
          =X3    T
          RJ     =XMVE= 
 MOVE     ENDM
          SPACE  4,8
  
 #OS      ENDIF 
  
 NEGSHIF  SPACE  4,8
          SPACE  4,8
 .1       ECHO   ,OP=(LE,LT,EQ,NE,GT,GE)
  
          POPMAC OP_1 
 OP_1     MACRO  B,Q
          OP     B,B1,Q 
          ENDM
  
 .1       ENDD
  
 ADDREF   SPACE  4,12 
**        ADDREF - ADD REFERENCE TO TABLE.
* 
* 
*         ADDREF TAG,TYPE,RETURN
*         (TAG) = X-REGISTER CONTAINING THE TAG (X6)
*                18/TAG,42/IGNORED
* 
*         (TYPE) = TYPE OF REFERENCE (X1).
*                1R FORMAT CHARACTERS.  CALL SHOULD USE ONE OF THE
*                CR.XXX SYMBOLS.
* 
*         (RETURN) = RETURN ADDRESS (B7). 
*                *+1 IF OMITTED.
  
  
 ADDREF   MACRO  TAG,TYPE,RETURN
          IFC    NE, TAG X6 ,1
          BX6    TAG
          =X1    TYPE 
          IFC    NE, B7 RETURN ,1 
          SB7    RETURN  *+2-*P/60D 
          EQ     =XERT
 ADDREF   ENDM
 ADSYM    SPACE  4,8
**        ADSXX- ADD ENTRY TO A HASHED TABLE. 
* 
*         ADSYM  TS.SYM      TO ADD A *SYMBOL*
*         ADSTN  TS.STN      TO ADD A *STATEMENT NUMBER*
* 
*         ENTRY  (X6) = 48/[SYMBOL TO ENTER], 12/0
*                (X7) = 18/0, 42/[SECOND WORD OF ENTRY] 
*                (TABLNAM) = TS.SYM  OR TS.STAT 
*         CALLS  ESY IF *SYMBOL* CALL.
*                ESN IF *STATEMENT NUMBER* CALL.
  
  
 ADSYM    MACRO  TABL 
          =A1    TABL 
          RJ     =XESY
 ADSYM    ENDM
  
  
 ADSTN    MACRO  TABL 
          =A1    TABL 
          RJ     =XESN
 ADSTN    ENDM
 ADDWD    SPACE  4,8
**        ADDWD- ADD WORD TO MANAGED TABLE
* 
*         ADDWD  TNAM 
  
  
 ADDWD    MACRO  TNAM 
          =A1    TNAM 
          RJ     =XADW
 ADDWD    ENDM
 ALLOC    SPACE  4,8
**        ALLOC - ALLOCATE ROOM FOR TABLE.
* 
* 
*         ALLOC  TNAM,ROOM         SCM TABLE
*         ALLOX  TNAM,ROOM         LCM TABLE
* 
*         *TNAM* _ ORIGIN WORD OF TABLE TO BE ALLOCATED.
*         *ROOM* = NUMBER OF WORDS TO EXPAND (OR SHRINK, IF NEGATIVE).
  
  
 ALLOC    MACRO  T,R
          =A1    T
          =X0    R
          RJ     =XALC
 ALLOC    ENDM
  
 ALLOX    MACRO  T,R
          =A1    T
          =X0    R
          RJ     =XALE
 ALLOX    ENDM
 ANSI     SPACE  4,8
**        ANSI - MACRO TO PROCESS *ANSI* DIAGNOSTICS. 
* 
*         ANSI   ARG
* 
*         *ARG*  = ADDRESS OF ERROR.
  
  
 ANSI     MACRO  ARG
          =B7    ARG
          RJ     =XANSI=
 ANSI     ENDM
 BITMIC   SPACE  4,30 
**        BITMIC - MACRO TO GENERATE BIT MASKS FOR CHARACTER STRINGS
* 
* MIKE    BITMIC (BITS),OFF 
* MIKE    LETMIC (LETS),OFF             (ALTERNATE FORM)
* 
*         *MIKE* = THE NAME OF THE MICRO TO BE GENERATED. 
*         *BITS* = (BIT1,BIT2,...,BITN) 
*                WHERE EACH *BITN* IS A VALUE OF A BIT THAT IS TO BE SET
*         *LETS* = A CHARACTER STRING, (ABCD...N) IMPLIES THAT
*                THE BIT VALUES ARE (1RA,1RB,1RC,...,1RN).
*                THIS ALTERNATE FORM IS MERELY A CONVENIENCE ITEM.
*         *OFF*  = OFFSET, IF OTHER THAN 59.
* 
*         GENERATES A MICRO WHICH IS A 20 OCTAL DIGIT INTEGER (WITH 
*                THE *B* SUFFIX PRESENT) WHICH REPRESENTS THE SUM OF
*                    ---     2**(OFF-BIT(N))     ---
*                TAKEN OVER ALL *N* PARAMETERS. 
*                *OFF* IS = 59 UNLESS EXPLICITLY MENTIONED. 
* 
*         USES   (AS SCRATCH SYMBOLS)  A B C D E F G
  
  
          MACRO  BITMIC,LOC,BITS,OFF
 C        OCTMIC ,10D 
 D        OCTMIC ,10D 
 F        SET    OFF 59D
          IRP    BITS 
..2       IFLE   F-BITS,29
 E        DECMIC F-BITS,2 
 C        OCTMIC 1S"E"+"C"B,10D 
..2       ELSE
 E        DECMIC F-30-BITS,2
 D        OCTMIC 1S"E"+"D"B,10D 
..2       ENDIF 
          IRP 
 LOC      MICRO  1,, "D""C"B
 BITMIC   ENDM
  
  
          MACRO  LETMIC,LOC,BITS,OFF
 A        SET    0
 B        MICRO  1,,^_BITS_^
 C        OCTMIC ,10D 
 D        OCTMIC ,10D 
 F        SET    OFF 59D
 G        MICCNT B
.1        DUP    G
 A        SET    A+1
 B        MICRO  A,1,^_BITS_^ 
..2       IFLE   F-1R"B",29 
 E        DECMIC F-1R"B",2
 C        OCTMIC 1S"E"+"C"B,10D 
..2       ELSE
 E        DECMIC F-30-1R"B",2 
 D        OCTMIC 1S"E"+"D"B,10D 
..2       ENDIF 
.1        ENDD
 LOC      MICRO  1,, "D""C"B
 LETMIC   ENDM
 BSSX     SPACE  4,8
**        BXQ -  CONVIENCE MACRO TO ZERO AN *X* REGISTER
*                (ON THE 6400, BXI XI-XI IS FASTER THAN MXI 00) 
  
  
 BXQ      OPDEF  I,Q
          IFNE   Q,0,1
          ERR    BXQ  -  Q NOT ZERO 
          IFMI   Q,2
          BX.I   -X.I-X.I 
          SKIP   1
          BX.I   X.I-X.I
 BXQ      ENDM
 CLAS=    SPACE  4,8
**        CLAS= -MACRO TO LOAD "CLASS" BITS INTO A REGISTER.
  
  
 CLAS=    MACRO  REG,BITS 
 A        SET    0
          IRP    BITS 
 A        SET    A+M.BITS 
          IRP 
          R=     REG,A
 CLAS=    ENDM
 CLEAR    SPACE  4,8
**        CLEAR - MACRO FOR SEQUENCES OF PRESETS. 
  
  
 CLEAR    MACRO  CELL 
 A        SET    6+7-A
.1        IF     DEF,CELL 
 .2       IFEQ   C,CELL-1 
 B        SET    6+7-A
          SA.A   A.B+B1 
 .2       ELSE
          SA.A   CELL 
 .2       ENDIF 
 C        SET    CELL 
.1        ELSE
 C        SET    0
          SA.A   CELL 
.1        ENDIF 
 CLEAR    ENDM
 CLONG    SPACE  4,8
**        CLONG - MACRO TO COMPILE 30-BIT INSTRUCTIONS
* 
*         CLONG  XR,INST
  
  
 CLONG    MACRO  XR,INST
          =X7    INST 
          L_XR   P.LTAG+L.LI12
          BX7    X7+XR
          LX7    -L.LI12
          WCODE  X7 
 CLONG    ENDM
 COMP     SPACE  4,8
**        COMP - COMPILE 15 BIT INSTRUCTION 
* 
*         COMP   REG,INST 
* 
*         *REG*  = B OR X REGISTER TO BE MERGED WITH *INST* 
*         *INST* = TYPE OF INSTRUCTION TO COMPILE 
*                  (MAY BE 12, 15, OR 18 BITS LONG) 
  
  
 COMP     MACRO  BR,CON 
 A        MICRO  1,5,B_CON_B
 L."A"    MAC=REF "A"B
          SX7    BR+CON 
.1        IFLT   CON,7777B
          LX7    48 
.1        ELSE
 .2       IFLT   CON,77777B 
          LX7    45 
 .2       ELSE
          LX7    42 
 .2       ENDIF 
.1        ENDIF 
          WCODE  X7 
 COMP     ENDM
 DEFINE   SPACE  4,8
**        DEFINE - MACRO USED FOR BIT POSITIONS AND LENGTH
*         OF FIELDS USED IN COMPILER TABLES AND ENTRYS
* 
* SYM     DEFINE LOW,LEN
* 
*         *SYM*  = NAME OF FIELD
*         *LOW*  = BIT NUMBER OF LOW-ORDER POSITION OF FIELD
*         *LEN*  = LENGTH OF FIELD (IN BITS), OR EMPTY FOR A SINGLE BIT 
  
  
          MACRO  DEFINE,SYM,LOW,LEN 
 P.SYM    EQU    LOW         LOW-ORDER BIT POSITION OF FIELD
.1        IFC    EQ,//LEN/
 .2       IFLT   LOW,20 
 A        DECMIC LOW
 M.SYM    EQU    1S_"A"           = 2**"A"  (LOW) 
 .2       ENDIF 
.1        ELSE
 L.SYM    EQU    LEN         LENGTH OF FIELD
.1        ENDIF 
 DEFINE   ENDM
 EQUX     SPACE  4,8
 IFBIT    SPACE  4,30 
**        IFBIT- MACRO TO TEST A BIT WHICH HAS A P.XXX DEFINITION.
* 
*         IFBIT  XN,WHICH/OFFSET,WHERE
* 
*         JUMPS TO "WHERE" IF BIT 2**"WHICH" IS ON (=1), UNLESS "WHICH" 
*         IS PRECEEDED BY A MINUS WILL JUMP IF OFF (=0).
*         BIT TO BE TESTED IS IN "XN" AND HAS BEEN SHIFTED (CIRCULARLY) 
*         UNTIL BIT 2**(P."OFFSET") IS IN THE SIGN BIT POSITION.  THE 
*         "OFFSET" PARAMETER IS, OF COURSE, OMITTED IF "XN" IS IN 
*         NOMINAL POSITION. 
* 
*         EXAMPLES: 
* 
*         1.     IFBIT  X5,REAL,HEXX             EXIT IF TYPE REAL
* 
*         2.     IFBIT  X3,-LONG,ATS             IF SINGLE-WORD ELEMENT 
* 
*         3.     IFBIT  X6,-COMM,GLK             IF NOT IN COMMON 
*                IFBIT  X6,INT/COMM,GLL          IF TYPE INTEGER
*                LX6    P.INT+1                  RESTORE X6 
  
  
 IFBIT    MACRO  XN,WHICH,WHERE 
          SBIT   XN,WHICH 
.1        IFC    NE,,WHERE,,
 E        MICRO  2*B,2, *MIPL 
          "E"    XN,WHERE 
.1        ENDIF 
 IFBIT    ENDM
 JPQ      SPACE  4,8
**        JPQ -  REDEFINE *JP* AS A *FAST JUMP* (04)
  
  
 JPQ      CPSYN  EQQ
 MOVE     SPACE  4,8
**        MVE -  MOVE BLOCK OF CORE 
* 
*         MVE    COUNT,FROM,TO
  
  
 MVE      MACRO  C,F,T
          =X1    C
          =X2    F
          =X3    T
          RJ     =XMVE
 MVE      ENDM
 PIA      SPACE  4,8
**        PIA -  MACRO TO CONVERT INSTRUCTION ADDRESS FOR LISTING.
* 
*         PIA    FROM,TO
* 
*         FROM   = ADDRESS OF VALUE TO BE CONVERTED.
*                  <SA1 FROM> 
*         TO     = ADDRESS OF CELL TO RECEIVE RESULT
*                  <SA6 TO> 
*         ENTRY  X1 = VALUE, @ 2**17-1
*         EXIT   X6 = DPC CONVERSION, SUITABLE FOR LISTING, LEADING 
*                     ZEROES SUPPRESSED,
*                     FORMAT  " 123456 - "
*         CALLS PIA (Q.V.)
  
  
 PIA      MACRO  F,T
          IFC    NE,**F*,1
          SA1    F
          RJ     =XCOD
          IFC    NE,**T*,1
          SA6    T
 PIA      ENDM
 PLINE    SPACE  4,8
**        PLINE- PRINT CODED LINE ON OUTPUT FILE. 
* 
*         PLINE  ADDR,L,N 
* 
*         *ADDR* = FWA OF LINE IN *C* FORMAT. 
*         *L*    = NUMBER OF WORDS TO BE PRINTED
*         *N*    = NUMBER OF BLANK LINES BEFORE LINE. 
* 
*         CALLS  WBL, WOF.
  
  
 PLINE    MACRO  ADDR,L,N 
          =X1    ADDR 
          IFC    NE,=L==,2
          =X2    L
          SKIP   1
          SX2    B0 
          IFC    NE,=N==,3
          =X6    N
          RJ     =XWBL
          SKIP   1
          RJ     =XWOF
 PLINE    ENDM
 RMT=     SPACE  4,8
**        RMT= - MACRO TO FORCE MICRO EVALUATION FOR REMOTES. 
* 
* BLOCK   RMT=   (S)
* 
*         *BLOCK* IS THE RMT BLOCK LABEL, IF ANY. 
*         (S) IS THE STATEMENT TO BE ENTERED INTO THAT RMT BLOCK. 
  
  
          MACRO  RMT=,BLK,S 
 BLK      RMT 
 S
 BLK      RMT 
 RMT=     ENDM
 RPVDEF   SPACE  4,8
**        RPVDEF - DEFINE FWA OF ROUTINE FOR REPRIEVE UTILITY.
* 
*         DEFINES THE FIRST WORD ADDRESS OF A ROUTINE AND DECLARES
*         IT AS AN ENTRY POINT, FOR FORMING THE NAME/ADDRESS TABLES 
*         USED BY THE UTILITY ROUTINE *RPV* (LOCATED IN *TABLES*).
*         FOR PROPER OPERATION, THIS MACRO MUST BE CALLED AT THE
*         BEGINNING OF EACH ROUTINE, BEFORE ANY OTHER INSTRUCTION OR
*         PSEUDO-OP THAT WOULD CAUSE *COMPASS-S* LOCATION COUNTER TO BE 
*         ADVANCED. 
* 
* 
*  *TAG*  RPVDEF
* 
*         ENTRY  *TAG* = SYMBOLIC NAME OF ROUTINE FWA.
  
  
          PURGMAC   RPVDEF
  
 RPRV     IFEQ   TEST 
  
 RPVDEF   OPSYN  NIL
  
 RPRV     ELSE
  
          MACRO  RPVDEF,T 
          ENTRY  T
 T        BSS    0
 RPVDEF   ENDM
  
 RPRV     ENDIF 
 SBIT     SPACE  4,30 
**        SBIT - MACRO TO SHIFT A BIT INTO SIGN POSITION. 
* 
*         SBIT   XN,WHICH/OFFSET
* 
*         SHIFTS *XN* LEFT CIRCULAR UNTIL BIT 2**P.WHICH IS IN SIGN BIT 
*                POSITION.  *WHICH* MAY BE PRECEDED BY A MINUS SIGN.
*                IF THE REGISTER HAS ALREADY BEEN SHIFTED, THEN 
*                BIT 2**P.OFFSET IS THE BIT NOW AT 2**59. 
* 
*         TO RESTORE A REGISTER AFTER USING SBIT, DO A
*         --     LXN    P.WHICH+1     --
* 
*         OF COURSE, THE MACRO MAY BE USED TO POSITION TO ANY POSITION, 
*                (NOT JUST 2**59).  TO POSITION TO BIT *P.OTHER*, 
*         --     SBIT   XN,WHICH/OFFSET+A    --,
*                            WHERE  *A* =  MOD (P.OTHER+1, 60). 
*                IN THIS CASE, HOWEVER, THE CODER MUST INSURE THAT THE
*                FINAL SHIFT COUNT IS IN THE RANGE COMPASS WILL ASSEMBLE
*                PROPERLY (I.E...  -60 .LE. COUNT .LE. 60). 
* 
*         IF THE FINAL SHIFT COUNT IS ZERO (AND PREVIOUSLY DEFINED),
*                NO INSTRUCTION WILL BE GENERATED.
* 
*         NOTE THAT *IFBIT* MAKES ASSUMPTIONS ABOUT SOME OF THE SCRATCH 
*                SYMBOLS USED BY *SBIT* -- USE CAUTION. 
  
  
 SBIT     MACRO  XN,WHICH 
 A        MICRO  1,1, WHICH 
 B        SET    1
          IFC    EQ, - "A" ,1 
 B        SET    2
 C        MICRO  B,,/WHICH/ 
 D        MICCNT C
 E        MICRO  B+D+1,, WHICH
 .2       IF     DEF,P."E"-P."C"
          IFEQ   P."E"-P."C",,1 
 .2       ELSE
          L_XN   P."E"-P."C"
 .2       ENDIF 
 SBIT     ENDM
 SCAN     SPACE  4,8
**        SCAN - MACRO TO CALL SCAN ROUTINES
* 
*         SCAN   TABLE,TYPE 
* 
*         TABLE  = NAME OF TABLE TO BE SCANNED (TS.NAM, TBI, ETC.)
*         TYPE   = TYPE OF SCAN TO PERFORM (NAME OF SCAN ROUTINE).
* 
* EXAMPLES--- 
*    1.-- SCAN   I,SCT
*         SA1    TBI
*         RJ     SCT
* 
*    2.-- SCAN   TS.NAM,BTR 
*         SA1    TS.NAM 
*         RJ     BTR
  
  
 SCAN     MACRO  TABLE,TYPE 
          =A1    TABLE
          RJ     TYPE 
 SCAN     ENDM
  
**        SECT - MACRO TO FORM SECTION TITLES AND SET LISTING FLAGS.
* 
* NAM     SECT   (HEAD) 
* 
*         *NAM*  NAME OF SECTION
*         *HEAD* TITLE FOR THIS SECTION 
  
  
          MACRO  SECT,NAM,HEAD
          TITLE  /NAM  HEAD 
          LIST   F,X
 SECT     ENDM
 SHRINK   SPACE  4,10 
**        SHRINK - COLLAPSE TABLE TO GIVEN LENGTH.
* 
*         SHRINK TNAM,SIZE
* 
*         TNAM   _ LENGTH WORD FOR TABLE TO BE COLLAPSED. 
*         SIZE   = NEW SIZE.  (DISASTER IF SIZE .GT. CURRENT LENGTH.) 
  
  
 SHRINK   MACRO  TNAM,SIZE
          =X6    SIZE 
          =A6    TNAM 
 SHRINK   ENDM
 SYMASK   SPACE  4,12 
**        SYMASK - MACRO TO GENERATE MASKS OF SYMBOLIC FIELDS.
* 
* LOC     SYMASK (FIELD1,FIELD2,...,FIELDN) 
* 
*         *LOC*  = NAME OF THE LITERAL TO BE GENERATED. 
*                IF LOCATION FIELD IS BLANK, LITERAL WILL NOT BE CREATED
*                AND MICRO NAMED "E" CONTAINS THE 20-OCTAL DIGIT VALUE. 
*         FIELD(I) ARE SYMBOLIC NAMES OF FIELDS TO BE SET.
*                GENERATES A LITERAL WITH 1-BITS IN SPECIFIED FIELDS, 
*                AND 0-BITS ELSEWHERE.  THE DESIGNATED FIELDS MUST HAVE 
*                P.FIELD DEFINITIONS (SEE *DEFINE* MACRO).
  
  
          MACRO  SYMASK,LOC,FLD 
 C        MICRO  1,60, 0000000000_0000000000_0000000000_0000000000_00000
,00000_0000000000 
* 
          IRP    FLD
*                            NUMBER OF BITS IN THIS FIELD 
 A        SET    1
          IF     DEF,L.FLD,1
 A        SET    L.FLD
 A        MICRO  1,A, 1111111111_1111111111_1111111111_1111111111_111111
,1111_1111111111
*                            EXTRACT TRAILING BITS
 .1       IFEQ   P.FLD
 B        MICRO 
 .1       ELSE
 B        MICRO  61-P.FLD,, "C" 
 .1       ENDIF 
*                            EXTRACT LEADING BITS 
 .1       IFEQ   60-P.FLD-A 
 D        MICRO 
 .1       ELSE
 D        MICRO  1,60-P.FLD-A, "C"
 .1       ENDIF 
*                            MERGE NEW PIECES 
 C        MICRO  1,60, "D""A""B"
          IRP 
*                            CONVERT BINARY TO OCTAL
 E        MICRO 
 E        SET    0
 .1       DUP    60D/3
 E        SET    E+1
 F        MICRO  3*E-2,1, "C" 
 G        MICRO  3*E-1,1, "C" 
 H        MICRO  3*E-0,1, "C" 
 F        OCTMIC "F"*4+"G"*2+"H",1
 E        MICRO  1,, "E""F" 
 .1       ENDD
* 
          IFC    NE,  LOC ,1
 LOC      LIT    "E"B 
 SYMASK   ENDM
 TSF      SPACE  4,12 
**        TSF -  GENERAL MACRO FOR SETTING CALLING SEQUENCE TO *TSF*
*                TO TAG A *SPECIAL* FUNCTION. (SEE CLASS2 WRITE-UP FOR
*                TABLE TS.SYM)
  
  
 TSF      MACRO  SYMPNT,TYPE
          =B4    SYMPNT 
          =X6    TYPE 
          RJ     =XTSF
 TSF      ENDM
 TAGASF   SPACE  4,8
**        TAGASF - MACRO TO BE USED WHENEVER TRANSLATING AN *ASF* 
*                USES *TSF* MACRO.
  
  
 TAGASF   MACRO  SYMPNT 
          TSF    SYMPNT,M.NVAR+M.FUN+M.ASF
 TAGASF   ENDM
 TAGEXT   SPACE  4,8
**        TAGEXT - MACRO TO BE USED WHENEVER TRANSLATING AN *EXTERNAL*
*                USES *TSF* MACRO.
  
  
 TAGEXT   MACRO  SYMPNT 
          TSF    SYMPNT,M.NVAR+M.EXT
 TAGEXT   ENDM
 TAGINL   SPACE  4,8
**        TAGINL - MACRO TO BE USED WHENEVER TRANSLATING AN *INLINE*
*                USES *TSF* MACRO.
  
  
 TAGINL   MACRO  SYMPNT 
          TSF    SYMPNT,M.NVAR+M.INLINE+M.FUN 
 TAGINL   ENDM
 TAGFUN   SPACE  4,8
**        TAGFUN - MACRO TO BE USED WHENEVER TRANSLATING AN *FUNCTION*
*                USES *TSF* MACRO.
  
  
 TAGFUN   MACRO  SYMPNT 
          TSF    SYMPNT,M.NVAR+M.FUN+M.EXT
 TAGFUN   ENDM
 TAGSUB   SPACE  4,8
**        TAGSUB - MACRO TO BE USED WHENEVER TRANSLATING AN *SUBROUTINE*
*                USES *TSF* MACRO.
  
  
 TAGSUB   MACRO  SYMPNT 
          TSF    SYMPNT,M.NVAR+M.SUB+M.EXT
 TAGSUB   ENDM
 TAGSEX   SPACE  4,8
**        TAGSEX - MACRO TO BE USED WHENEVER TRANSLATING AN 
*                *SYSTEM EXTERNAL*.  USES *TSF* MACRO.
  
  
 TAGSEX   MACRO  SYMPNT 
          TSF    SYMPNT,M.SYSEXT
 TAGSEX   ENDM
 WARN     SPACE  4,8
**        WARN - MACRO TO PRINT WARNING MESSAGES
* 
*         WARN   ERR
*         FATAL  ERR         (ONLY IF *FATAL* ERROR)
*         ANSI   ERR         (ONLY IF *ANSI * ERROR)
* 
*         *ERR*  = THE NAME OF THE ERROR TO BE PRINTED. 
* 
*         WILL PRINT THE SPECIFIED ERROR AND RETURN, WITHOUT CLOBBERING 
*                MANY REGISTERS, PROVIDED THE EXIT ADDRESS FOR THAT 
*                ERROR IS *PWE1*.  CALLS *PWE*. 
*         SEE *PWE* FOR DETAILS.
  
 WARN     MACRO  ADDR 
          =B7    ADDR 
          RJ     =XPWE
 WARN     ENDM
  
 FATAL    OPSYN  WARN 
 NOTE     OPSYN  WARN 
 MESSAGE  SPACE  4,8
**        MESAGE - DISPLAY MESSAGE
* 
*         MESAGE ADDR,OPTIONS,RCL 
* 
*         ENTRY  *ADDR* = ADDRESS OF MESSAGE IN *C* FORMAT. 
*         *OPTION* = AS DEFINED BY OPERATING SYSTEM.
  
  
 MESAGE   OPSYN  MESSAGE
          EJECT 
          SYSCOM B1 
  
  
****      ASSEMBLY CONSTANTS. 
  
  
          COL    30          COLUMN FOR COMMENT FIELD.
 .CMLOD   EQU    0           NO COMPILE TO CORE 
 FLSLOP   =      4           AMOUNT OF SLOP FOR MANAGER = 
*                            (1/2**N)*(WIDTH OF TABLE AREA) 
 INC.LTN  =      1000B       FIELD LENGTH INCREMENT WHEN FL .LT. NOM.FL 
 INC.GTN  =      2000B       FIELD LENGTH INCREMENT WHEN FL .GT. NOM.FL 
  
 N.OPSTK  EQU    240B        NUM WORDS RESERVED FOR OPERAND STACK 
 N.ELSTK  EQU    240B        NUM WORDS RESERVED FOR ELEMENT STACK 
  
 MAX.BLK  =      500D        MAXIMUM NUMBER OF COMMON BLOCKS
  
 MAX.SARG =      63D         MAXIMUM NUMBER OF ARGUMENTS TO SUBPROGRAM
  
 MAX.PARG EQU    49D         MAXIMUM NUMBER OF ARGUMENTS TO MAIN PROGRAM
  
 ANS.DIM  EQU    3           ANSI VALUE OF ...
 MAX.DIM  EQU    3           MAXIMUM NUMBER DIMENSIONS PERMITTED
  
 ANS.CONT EQU    19D         MAX. NO. OF CONTIN. CARDS PERMITTED BY ANSI
*CALL TEXTCOM 
  
 MAX.BUFL EQU    360000B
 MAX.RECL EQU    1S17-1 
  
 MIN.LF   EQU    100B        MINIMUM NUMBER OF WORDS TO BE KEPT RESERVED
                             FOR THE *LONG FILE*, PAST (IGE) OR (A7). 
  
  
          NOREF  A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
          EJECT 
**        TRUBL - COMPILER MAL-FUNCTION FLAG. 
* 
*         TRUBL  ERR
* 
*         *ERR* = NAME OF THE *Z-ERROR* TO PUT OUT. 
* 
*         IN *TEST* MODE, WILL DUMP REGISTERS AND PRINT THE ERROR LINE. 
*         WHEN *TEST* = 0, WILL BE ONLY A JUMP OUT OF BOUNDS. 
  
  
 TEST     IFEQ   TEST        BLOW UP IF NOT IN TEST MODE
  
 TRUBL    MACRO  NAM
          EQ     "BLOWUP"   NAM 
 TRUBL    ENDM
  
 TEST     ELSE               DUMP REGISTERS IN TEST MODE
  
 TRUBL    MACRO  NAM
**                           SAVE REGISTERS 
          RJ     =XSVR= 
**                           DISPLAY ALL REGISTERS
          RJ     =XDAR= 
          EQ     NAM   "BLOWUP" 
 TRUBL    ENDM
  
 TEST     ENDIF 
 SNAP     TITLE  SNAP1  -  SNAP MACROS
 SNAP     IFEQ   TEST 
  
  
**        SNAP MACROS  - IF NO SNAP REQUESTED 
  
  
 BREAK    OPSYN  NIL
 CORE     OPSYN  NIL
 DUMPT    OPSYN  NIL
 REG      OPSYN  NIL
 SNAP     OPSYN  NIL
 STRING   OPSYN  NIL
  
 SNAP     ELSE
  
**        SNAP MACROS - IF SNAP TURNED ON 
*CALL DBG=MAC 
 CORE     SPACE  4,8
**        CORE - MACRO TO SNAPSHOT CORE.
* 
* 
* LABEL   CORE   FWA,LENGTH 
* 
*         USES   NONE (OR IT WOULDNT BE ANY GOOD).
*         CALLS  SNP= 
  
  
          MACRO  CORE,NAM,FWA,LNG 
 NAM      SNAP   FWA,,LNG,NR
 CORE     ENDM
 DUMPT    SPACE  4,8
**        DUMPT- MACRO TO DUMP COMPILER TABLES. 
* 
*         CALLS THE *SNAP* PACKAGE TO DUMP SPECIFIED TABLES.
* 
* NAME    DUMPT  (P1,P2,...,PN) 
* 
*         EACH PARAMETER IS THE ADDRESS OF A TABLE, OR AN INCLUSIVE 
*                RANGE OF TABLES TO BE DUMPED.  A RANGE OF TABLES IS
*                INDICATED BY THE ADDRESS OF THE FIRST TABLE PARAMETER
*                WORD, FOLLOWED BY A DASH (*-*), FOLLOWED BY THE LAST 
*                TABLE TO BE DUMPED.
*         IF FWA GREATER THAN LWA, ONLY FWA WILL BE DUMPED. 
* 
*  EXAMPLE -- 
*         DUMPT  (TT.PEM,TS.NAM-TA.NAM,TP.ARR)
* 
*         USES   NONE (OR IT WOULDNT BE ANY GOOD).
*         CALLS  DMT= 
  
  
          MACRO  DUMPT,NAME,TAB,LL,UL,INC,NUSE
          LOCAL  RTN
          LOCAL  APL
* 
 +        RJ     =XDMT= 
 -        VFD    30/APL 
* 
 #NUSE    IFC    EQ,/NUSE// 
          USE    DEBUG
* 
 #NUSE    ELSE
          EQ     RTN
 #NUSE    ENDIF 
* 
 APL      BSS    0
          FRK=   (NAME),LL,UL,INC 
          IRP    TAB
 A        MICRO  1,,-TAB- 
 B        MICCNT A
 C        MICRO  B+1,1, TAB 
 D        MICRO  1,, "A"
.1        IFC    EQ,/-/"C"/ 
 D        MICRO  B+2,, TAB
 .2       IFLT   "D","A"
 8        ERR    DUMPT - "A" .GT. "D", ONLY "A" WILL BE DUMPED. 
 D        MICRO  1,, "A"
.2        ENDIF 
.1        ENDIF 
          VFD    18/0,21/"D",21/"A" 
          IRP 
          VFD    60/0 
* 
 #NUSE    IFC    EQ,/NUSE// 
          USE    *
* 
 #NUSE    ELSE
 RTN      BSS    0
 #NUSE    ENDIF 
* 
 DUMPT    ENDM
 STRING   SPACE  4,8
**        STRING - FORMATTED SNAPSHOT OF STRING BUFFER. 
* 
* 
* NAME    STRING LL,UL,INC
* 
*         ENTRY  NAME =  DISPLAY CODE (DPC) MESSAGE TO BE PRINTED WITH
*                          EACH SNAP. (NR CHARS.LE.8) 
*                LL   =  LOWER LIMIT (DEFAULT=1)
*                UL   =  UPPER LIMIT (DEFAULT=100)
*                INC  =  INCREMENT   (DEFAULT=1)
*                          SEE *FRK=* MACRO.
*                NUSE =  USE BLOCK FLAG. IF *NUSE* IS NULL, THE PARA- 
*                          METER LIST EXISTS IN *USE DEBUG*, ELSE IS
*                          ASSEMBLED AFTER *RJ* 
* 
*         EXIT   NONE 
* 
*         USES   NONE 
* 
*         CALLS  FRK=,SBD 
  
  
          PURGMAC STRING
  
          MACRO  STRING,NAME,LL,UL,INC,NUSE 
          LOCAL  RTN
          LOCAL  APL
* 
 +        RJ     =XSBD
 -        VFD    30/APL 
* 
 #NUSE    IFC    EQ,/NUSE// 
          USE    DEBUG
* 
 #NUSE    ELSE
          EQ     RTN
 #NUSE    ENDIF 
* 
 APL      BSS    0
          FRK=   (NAME),LL,UL,INC 
* 
 #NUSE    IFC    EQ,/NUSE// 
          USE    *
* 
 #NUSE    ELSE
 RTN      BSS    0
 #NUSE    ENDIF 
* 
 STRING   ENDM
  
 SNAP     ENDIF 
 TABLES   SECT   (T A B L E   DEFINITIONS.),1 
  
  
 FUDGE    EQU    1           AMOUNT OF SLOP SPACE BETWEEN TABLES
****
*         LONGFILE - CONTAINS GENERATED PSEUDO - OBJECT CODE. 
*         AS INSTRUCTIONS ARE COMPILED THEY ARE ENTERED INTO THE *LONG
*         FILE* ONE INSTRUCTION PER WORD.  THE *K* PORTION OF A 30 - BIT
*         INSTRUCTION WILL CONTAIN A *SHORT CONSTANT* OR A TAG.  WHEN 
*         THE END OF A SOURCE PROGRAM - UNIT IS ENCOUNTERED, THE LONG 
*         FILE (AND CONTENTS OF APPROPRIATE TABLES) ARE USED TO GENERATE
*         ACTUAL LOADER TEXT.  THUS, WE MAY CONSIDER THE LONG FILE TO BE
*         A COMPILER SCRATCH TAPE, AND *END* STATEMENT PROCESSING TO BE 
*         A *PASS 2*. 
* 
*         THE LONG FILE RESIDES ENTIRELY IN CORE.  DURING STATEMENT 
*         PROCESSING, *A7* ALWAYS POINTS TO THE LAST COMPILED 
*         INSTRUCTION.  WHEN A STATEMENT PROCESSOR DECIDES THAT AN INST-
*         RUCTION MUST BE COMPILED, IT IS NECESSARY MERELY TO ASSEMBLE
*         THE (PSEUDO) INSTRUCTION INTO *X7* AND ADVANCE *A7*.
*         THE DIFFERENT ENTRY FORMATS ARE DESCRIBED BELOW : 
  
  
* T.INT   TABLE  5           INTERMEDIATE FILE
*TT.LF    TABLE  =,T.INT
  
  
  
  
*  1.     15 BIT INSTRUCTIONS 
*         +--------------+---------------------------------------------+
*         +              +/////////////////////////////////////////////+
*         +   I N S T    +/////////////////////////////////////////////+
*         +              +/////////////////////////////////////////////+
*         +--------------+---------------------------------------------+
*                15                         45
*         THE *BXI  XJ* (10B) INSTRUCTION IS COMPILED AS 10IJ0 AND
*         CHANGED LATER TO 10IJJ. 
  
 LI15     DEFINE 45,15       15 - BIT INSTRUCTION.
  
 LGH      DEFINE 54,6 
 LI       DEFINE 51,3 
 LJ       DEFINE 48,3 
 LK       DEFINE 45,3 
  
  
*  2.     30 - BIT INSTRUCTIONS 
*         +-----------+-----------------+-----------------------+----+-+
*         +           +                 +                       +////+C+
*         + G,H,I,J   +                 +                       +////+O+
*         + OP-CODE   +     T  A  G     +      B  I  A  S       +////+M+
*         +           +                  +                      +////+P+
*         +-----------+-----------------+-----------------------+----+-+
*                    12       18                   24                 1 
  
  
 LI12     DEFINE 48,12       *GHIJ* OP-CODE PORTION 
 LTAG     DEFINE 30,18       *K* - ADDRESS PORTION
                             WILL BE A TAG OR SHORT CONSTANT
 LBIAS    DEFINE 12,18
 LNEG     DEFINE 0           COMPLEMENT TAG 
                             IF = 1 COMPLEMENT THE ADDRESS OF THE TAG 
  
  
*  3.     PSEUDO - INSTRUCTIONS (GH=00) 
*         +-----------+-----------------+-----------+-----------------+ 
*         +           +                 +           +                 + 
*         +   I.XX    +    T A G        +  LINE NO. +    L O C N      + 
*         +           +                 +           +                 + 
*         +-----------+-----------------+-----------+-----------------+ 
*              12            18             12            18
 I.BSS    EQU    0000B       *LOCN BSS  TAG*
 TRC      DEFINE 18,12
 LOCN     DEFINE 0,18        LOCATION FIELD.  THIS IS THE ONLY WAY TO 
                             DEFINE A TAG WITHIN THE COMPILED CODE.  IF 
                             LOCN IS < C.CON IT IS A *FORCE UPPER* ONLY,
                             AND WILL NOT CAUSE A TAG TO BE CREATED.
  
*         TAG    NUMBER OF WORDS TO BE RESERVED.  USUALLY ZERO. 
  
  
**        I.CALL             +RJ   TAG
*                            -VFD 12/LINE NO.,18/TRACEBACK WORD 
  
 I.CALL   EQU    0001B       RJ WITH TRACE
  
  
**        I.RJ               RJ   TAG 
*                            BSS  0 
  
 I.RJ     EQU    0002B       RETURN JUMP
  
  
**        I.JP               JP   TAG + (B) 
*                            BSS  0 
  
 I.JP     EQU    3           INDEXED JUMP 
  
  
**        I.EQ               EQ   B0,B0,TAG 
*                            BSS  0 
  
 I.EQ     EQU    4           UNCONDITIONAL JUMP 
****
 MISC     EJECT 
****      MISCELLEANOUS FIELDS
  
  
 LCON     DEFINE 18,9        LENGTH OF *HOLLERITH* CONSTANT 
 CLCON    DEFINE 27,15       CHARACTER LENGTH OF *HOLLERITH* CONSTANT 
 SHC      DEFINE 42,18       SHORT CONSTANT 
  
****
 TS.ARG   EJECT 
****      TT.USE - USE COUNT OF ALL ELEMENT IN A EXPRESSION 
  
*         ENTRY FORMAT INTO USE TABLE.
* 
*         +--------------+---+-----------------+-----+-------------+---+
*         +              +   +                 +     +             +   +
*         +  USE COUNT   +MOD+   T   A   G     + MIS +   B  I  A  S+PAR+
*         +              +   +                 +     +             +   +
*         +--------------+---+-----------------+-----+-------------+---+
  
* TT.USE  TABLE  3
****
 TT.ARG   SPACE  4,8
****      TT.SCR - ARGUMENT TAG SCRATCH TABLE.
  
  
* TT.SCR  TABLE  3           SCRATCH TABLE. 
  
 TAG      DEFINE 42,18       ARGUMENT TAG 
****
 TS.CON   SPACE  4,8
****      TS.CON - CONSTANT VALUE TABLE 
  
*         59                                                          0 
*         +-----------------------------------------------------------+ 
*         +                                                           + 
*         +            A C T U A L             C O N S T A N T        + 
*         +                                                           + 
*         +-----------------------------------------------------------+ 
*         +                     --  60  --                            + 
  
  
* TS.CON  TABLE  3           CONSTANT VALUES
****
 TS.SYM   EJECT 
**        TS.SYM - SYMBOL TABLE.
* 
*         (1ST WORD OF TABLE ENTRY - SYMBOL WORD) 
* 
*         59                                       18                 0 
*         +-----------------------------------------+-----------------+ 
*         +                                         +                 + 
*         +      S  Y  M  B  O  L                   +  HASH POINTER   + 
*         +                                         +                 + 
*         +-----------------------------------------+-----------------+ 
*         +                  42                     +     18          + 
* 
* 
* 
*         (2ND WORD OF TABLE ENTRY - TAG WORD)
* 
*         59               42   37           24    18             3   0 
*         +-----------------+--+-+------------+-----+-------------+---+ 
*         +                 +//+ +            + F P +             +   + 
*         +     T  A  G     +//+N+ TP.DIM PT. +     +  C L A S S  +MOD+ 
*         +                 +//+ +            + NO. +             +   + 
*         +-----------------+--+-+------------+-----+-------------+---+ 
*         +       18        +3 +2+     13     +  6  +      15     + 3 + 
 PSYM     SPACE  4,8
****
 PSYM     EQU    7           LOG(2) OF SYM TAB HASH BASE
****                         (= NUMBER OF BITS TO HASH.)
 A        DECMIC PSYM 
 LSYM     EQU    1S"A"
  
* TS.SYM  TABLE  5,LSYM      SYMBOLS
  
****
 SYM      DEFINE 18,42       VARIABLE NAME
 TNAM     DEFINE 0,18        HASH CHAIN LINK
****
  
 VERR.    MICRO  1,, 5R-ERR- ERROR SYMBOL 
 TAG      SPACE  4,8
**** 1.   GENERAL FIELD DEFINITION FOR *TAG* ENTRY. 
  
  
 TGB      DEFINE 55,5        TAG TYPE 
 PWF      DEFINE 42,13       TAG ORDINAL
 TAG      DEFINE P.PWF,L.PWF+L.TGB
 FPS      DEFINE 39,1        ON IF FP USED AS SUBSCRIPT 
 LEVN     DEFINE 37,2        LEVEL NUMBER IF LEV CLASS BIT ON 
 PNT      DEFINE 24,13       GENERAL POINTER FIELD -- 
                             FOR ARRAYS IT IS THE TP.DIM ORDINAL. 
                             IF NLST OR ENT, = ADDRESS. 
  
  
 FPNO     DEFINE 18,6        FORMAL PARAMETER NUMBER.  ZERO IF NOT. 
                             VALUE IS 1 TO 63.  DEFINED ONLY WHEN --
                             A.  *VAR* BIT IS SET (PROGRAMMER VARIABLE).
                             B.  *NVAR* SET, AND NONE OF (*BEF*, *ASF*, 
                                 NOR *INLINE*) IS SET -- I. E., 
                                 FOR A PROGRAMMER *SUBROUTINE* OR 
                                 *FUNCTION*.
  
 UARGC    DEFINE 24,6        ARGUMENT COUNT = NUMBER OF ARGUMENTS TO
                             A USER SUBROUTINE OR FUNCTION. 
*                NOTE -- BE VERY CAREFUL ABOUT THE DIFFERENCE BETWEEN 
*                            THIS FIELD AND *ARGC*. 
****
  
 CLASS    DEFINE 3,15        *CLASS* OF SYMBOL
  
****
*         NOTE - THESE DEFINES REPLACE THOSE FORMERLY GENERATED BY THE
*         CLASS MACRO, WITH P.CLASS AS BASE.
  
 DEF      DEFINE P.CLASS+0
 FP       DEFINE P.CLASS+1
 ENT      DEFINE P.CLASS+2
 EXT      DEFINE P.CLASS+3
 LEV      DEFINE P.CLASS+4   IS A LEVEL VARIABLE
 ARY      DEFINE P.CLASS+5
 NLST     DEFINE P.CLASS+6
 EQUIV    DEFINE P.CLASS+7
 COMM     DEFINE P.CLASS+8
 VAR      DEFINE P.CLASS+9
 NVAR     DEFINE P.CLASS+10 
 RP       DEFINE P.CLASS+11 
 TYP      DEFINE P.CLASS+12 
 EST      DEFINE P.CLASS+13  APPEARS IN EXTERNAL STATEMENT
  
 CLASS2   DEFINE P.ENT,P.RP+1-P.ENT 
  
****
*         NOTE - THESE DEFINES REPLACE THOSE FORMERLY GENERATED BY THE
*         CLASS MACRO, WITH P.ENT AS BASE.
  
 ENT=     DEFINE P.ENT+0
 EXT=     DEFINE P.ENT+1
 FUN      DEFINE P.ENT+2
 BEF      DEFINE P.ENT+3
 SUB      DEFINE P.ENT+4
 ASF      DEFINE P.ENT+5
 INLINE   DEFINE P.ENT+6
****      SYMBOL TABLE ENTRY FORMAT FOR EITHER *BEF* OR *INTRINSIC* 
* 
*         +-----------------+---+-+-+--------+--+-----+-------------+--+
*         +                 +///+B+A+ SHIFT  +A + NUM +             +M +
*         +   T    A    G   +///+E+N+ COUNT  +R + OF  +  C L A S S  +O +
*         +                 +///+F+S+  OR    +G + ARGS+             +D +
*         +                 +///+F+I+ ADDRESS+M +     +             +E +
*         +-----------------+---+-+-+--------+--+-----+-------------+--+
*                18            7        9      3   6         15      3
  
  
 ARGMF    DEFINE 24,3 
 JPADF    DEFINE 27,9 
 ANSIF    DEFINE 36,1 
 BEFF     DEFINE 37,1 
  
 ARGC     DEFINE 18,6        ARGUMENT COUNT = NUMBER OF ARGUMENTS TO
                             AN *NVAR*.  DEFINED ONLY FOR A *BEF*, *ASF*
                             OR *INLINE*. 
*                NOTE -- BE VERY CAREFUL ABOUT THE DIFFERENCE BETWEEN 
*                            THIS FIELD AND *UARGC*.
  
 ASFP     DEFINE 24,18       ASF SKELETON POINTER - DEFINED ONLY FOR ASF
****
 MODE     SPACE  4,8
**** 4.   MODE - THE FOLLOWING SYMBOLS DEFINE THE MODE A SYMBOL MAY HAVE
*                ON ENTRY TO THE SYMBOL TABLE.
  
  
 MODE     DEFINE 0,P.CLASS   *MODE* OF ELEMENT. 
  
 M.MODE   EQU    7           UPPER LIMIT VALUE OF MODE, 
  
 M.UNIV   EQU    0           CHAMELEON. 
 M.LOG    EQU    1           LOGICAL
 M.INT    EQU    2           INTEGER
 M.REAL   EQU    3           REAL 
  
 LONG     DEFINE 2           IS A DOUBLE-WORD ELEMENT,
 M.DBL    EQU    4           DOUBLE PRECISION,
 M.CPLX   EQU    5           COMPLEX, 
  
 L.TYPE   EQU    M.CPLX      NUMBER OF DIFFERENT (HONEST) TYPES.
  
 M.CHAR   EQU    6           CHAR STRING WITH LIST-DIRECTED I/O 
 M.NAML   EQU    6           NAMELIST (FAKE)
 M.SUBRT  EQU    7           SUBROUTINE (FAKE)
  
 M.SYSEXT EQU    M.NVAR+M.EXT      FOR STANDARD SYSTEM ROUTINES.
 M.BEFF   EQU    M.NVAR+M.EXT+M.FUN+M.BEF+M.DEF 
 M.INLF   EQU    M.NVAR+M.INLINE+M.FUN+M.DEF
 TA.NAM   SPACE  4,15 
****      TA.NAM - VARIABLE ADDRESS TABLE 
  
*         +-----------------+-----+-----------+-----------------------+ 
*         +                 +/////+           + OVER   +    BLOCK     + 
*         +   TAG  ORDINAL  +/////+ BLOCK NO. +        +   RELATIVE   + 
*         +                 +/////+           + FLOW   +   ADDRESS    + 
*         +-----------------+-----+-----------+-----------------------+ 
*         PARALLEL TO TT.NAM. 
*         THIS TABLE IS ALLOCATED TWICE, FIRST WHEN DECLARATIVES ARE
*                CLOSED, AND AGAIN AT *END* TIME. 
  
* TA.NAM  TABLE  3           ADDRESS OF VARIABLES 
  
 TAG      DEFINE 42,18       TAG (ORDINAL ONLY) 
 BLOCK    DEFINE 24,12       TS.BLK ORDINAL 
 RELADD   DEFINE  0,24       BLOCK-RELATIVE ADDRESS 
****
 TS.STN   SPACE  4,60 
****      TS.STN - STATEMENT NUMBER TABLE.
*         (1ST WORD OF TABLE - SYMBOL WORD) 
*         59                                       18                 0 
*         +-----------------------------------------+-----------------+ 
*         +                                         +                 + 
*         +   S T A T E M E N T      L A B E L      +  HASH POINTER   + 
*         +                                         +                 + 
*         +-----------------------------------------+-----------------+ 
*         +                   42                    +      18         + 
  
 PSTN     EQU    5           LOG(2) OF NUM OF STAT TAB ENTRIES
 A        DECMIC PSTN 
 LSTN     EQU    1S"A"
  
* TS.STN  TABLE  4,LSTN      STATEMENT NUMBER TABLE 
 SERR.    MICRO  1,, 5R(ERR) ERROR LABEL FOR STATEMENT ERROR
 STN      DEFINE 18,30       STATEMENT NUMBER (R-JUST, ZERO FILL) 
  
*         (2ND WORD OF TABLE ENTRY - TAG WORD)
*         +-----------------+-----------------+------------+----------+ 
*         +                 +                 +            +          + 
*         +     T  A  G          ADDRESS        LINK POINT.+  CLASS   + 
*         +                 +                 +            +          + 
*         +-----------------+-----------------+------------+----------+ 
* 
  
 TAG      DEFINE 42,18
 SNAD     DEFINE 24,18
 SLINK    DEFINE 11,13
 SNCLS    DEFINE 0,11 
  
*         SNCLS FIELD DEFINITION
  
 SNREF    DEFINE 0           IF STATEMENT NUMBER REFERENCED 
 SNDEF    DEFINE 1           IF     -      -     DEFINED. 
 SNINA    DEFINE 2           IF     -      -     IS INACTIVE
 SNE      DEFINE 3           IF     -      -     IS ENTRY TO *DO* 
 SNX      DEFINE 4           IF     -      -     IS EXIT FROM *DO*
 SNNS     DEFINE 5                               IF NESTED *DO* 
 SNEX     DEFINE 6                               IF EXTERNAL CALL IN DO 
 SNLAB    DEFINE 7           IF     -      -    IS CONTROL
 SNFMT    DEFINE 8           IF     -      -     IS A FORMAT NUMBER 
 SNDOT    DEFINE 9           IF     -      -     DO-TERMINATOR
 SNOPE    DEFINE 10          DO LOOP IS OPEN - (EXTENDED RANGE.)
                             (CAN ONLY BE SET ON TAGS HAVING *SNDOT* BIT
                              SET.) 
****
 #FID     IFNE   .FID,0 
 T.LNT    SPACE  4,12 
****      T.LNT - LINE NUMBER TABLE 
  
*                          42    36                18                 0 
*         +-----------------+-----+-----------------+-----------------+ 
*         +                 +/////+                 +                 + 
*         +STATEMENT NUMBER +/////+   LINE NUMBER   +  LINE ADDRESS   + 
*         +                 +/////+                 +                 + 
*         +-----------------+-----+-----------------+-----------------+ 
*                 18                      18                18
  
* T.LNT   TABLE  4           IMAGE OF 57 LOADER TABLE 
  
  
 SN       DEFINE 42,18       STATEMENT NUMBER (LABEL) 
 LN       DEFINE 18,18       LINE NUMBER
 OCORG    DEFINE 0,18        ADDRESS OF LINE
****
 #FID     ENDIF 
 TT.COMM  SPACE  4,20 
****      TT.COMM - COMMON TAG TABLE. 
  
*         59              42                24    18                 0
*         +-----------------+-----+-----------+-----------------------+ 
*         +                 +/////+           + OVER   +    BLOCK     + 
*         +   TAG  ORDINAL  +/////+ BLOCK NO. +        +   RELATIVE   + 
*         +                 +/////+           + FLOW   +   ADDRESS    + 
*         +-----------------+-----+-----------+-----------------------+ 
*         +      18        +       18        +  6  +      18         +
  
* TT.COMM TABLE  =,TT.USE    COMMON TAGS (PHASE 1 ONLY) 
  
 TAG      DEFINE 42,18       V- OR W- TAG 
 BLOCK    DEFINE 24,12       TS.BLK ORDINAL 
 RELADD   DEFINE  0,24       BLOCK-RELATIVE ADDRESS 
****
 TP.DIM   EJECT 
****      TP.DIM - DIMENSION PARAMETER TABLE
  
*         5    5    4 4                      2
*         9    4    9 7                      4                       0
*         +----+----+-+----------------------+-----------------------+
*         + NR +WORD+V+T                     +T                      +
*         +    +COUN+D+D    D I M  2         +D    D I M  1          +
*         +DIMS+THIS+I+I          (4,6,...)  +I          (3,5,...)   +
*         +    +NTRY+M+M                     +M                      +
*         +----+----+-+----------------------+-----------------------+
*         + 6  + 5  +1+        24            +           24          +
  
  
* TP.DIM  TABLE  1,2         DIMENSION PARAMETERS 
  
  
*         THIS TABLE HOLDS THE DIMENSIONING INFORMATION FOR EVERY ARRAY 
*                DECLARATION.  THE *PNT* FIELD OF TT.NAM (FOR AN ARRAY) 
*                CONTAINS THE ORDINAL OF THE CORRESPONDING TP.DIM ENTRY.
*                NOTE SPECIFICALLY THAT MORE THAN ONE ARRAY MAY POINT TO
*                THE SAME DIM TABLE ENTRY (HOPEFULLY, NOT UNLESS THE
*                ARRAYS HAVE IDENTICAL DIMENSIONS). 
  
 NDIM     DEFINE 54,6        NUMBER OF DIMENSIONS OF THIS ARRAY.
 VDIM     DEFINE 29          *ON* IF THIS ARRAY IS VARIABLY DIMENSIONED.
  
*         THE NDIM, WDIM, AND VDIM FIELDS ARE PRESENT ONLY IN THE FIRST 
*                WORD OF AN ENTRY.
  
  
 P.DIM    EQU    30          POSITION OF UPPER FIELDS.
 L.DIM    EQU    24          LENGTH OF EACH DIM DESCRIPTOR. 
 TDIM     DEFINE L.DIM-1     TAG FLAG BIT FOR EACH DIM DESCRIPTOR.
                               (RELATIVE POSITION WITHIN EACH FIELD.) 
                             SET IF THIS DESCRIPTOR IS A TAG ORDINAL
                             INSTEAD OF A NUMBER
 SDIM     DEFINE P.TDIM-1    INDICATE VARIABLE DIMENSION ALREADY DEFINED
                             IN LOCAL *V-TAG* CELL. 
 CDIM     DEFINE P.SDIM-1    INDICATE THIS DIMENSIONALITY WITHIN A
                             VARIABLE DIMENSIONED ARRAY IS A CONSTANT.
  
*         OBVIOUSLY, IF ANY OF THE *TDIM* BITS IN AN ENTRY ARE SET, THE 
*                *VDIM* BIT WILL BE SET ALSO. 
  
*         THE LOWER 48 BITS ARE DIVIDED INTO TWO 24 BIT FIELDS WHICH
*                CONTAIN THE DIMENSIONALITY DESCRIPTORS.
*         COUNTING DIMENSIONS IN THE SOURCE STATEMENT FROM LEFT TO RIGHT
*                DIMENSION NUMBER ONE IS IN THE LOWER DIM FIELD OF THE
*                FIRST WORD.  THE UPPER BYTE IS DIM 2.
*         SUCCEEDING WORDS CONSIST OF MORE DIM FIELDS, THE LOWER ONE
*                ALWAYS CONTAINING AN ODD DIMENSIONALITY, AND THE UPPER 
*                WITH THE (NEXT) EVEN ONE.  THIS CONTINUES FOR AS MANY
*                WORDS AS ARE NECESSARY TO REPRESENT THE ARRAY. 
*         UNUSED FIELDS (WHEN AN ARRAY HAS AN ODD NUMBER OF DIMENSIONS) 
*                ARE ZERO.  A LOWER DESCRIPTOR CAN NEVER BE ZERO. 
  
 DIMOS    DEFINE 0,L.DIM     INITIAL ARRAY OFFSET.  USED BY SUBSCRIPT 
                             PROCESSORS.
*         DIMOS  =  SIGMA [1@J@N, PI (0@K@J-1, DIM(K)) ]
  
 DIMLG    DEFINE P.DIM,L.DIM       ARRAY SIZE.  TOTAL NUMBER OF ELEMENTS
                             NOT NUMBER OF WORDS (UNLESS ELEMENT LENGTH 
                             = 1 WORD). 
  
*         THESE TWO FIELDS ARE IN ONE WORD AS THE LAST WORD OF THE
*                ENTRY.  THEY ARE NOT KNOWN FOR A VARIABLY DIMENSIONED
*                ARRAY, AND THEREFORE THIS WORD IS NOT PRESENT IF *VDIM*
*                IS SET.
****
 TP.DO    SPACE  4,20 
****      TP.DO - DO PARAMETER TABLE. 
* 
*         (6 WORD TABLE ENTRY FORMAT) 
*         1ST FOUR ENTRYS USE THE TAG ENTRY FORMAT FOR *TS.SYM* 
*         1.  INITIAL VARIABLE.    (M1) 
*         2.  LIMIT   VARIABLE.    (M2) 
*         3.  INCREMENT VARIABLE.  (M3) 
*         4.  CONTROL VARIABLE.    (CI) 
*         5.  RETURN ADDRESS TAG. 
*         6.  DO STATEMENT NUMBER.
  
  
* TP.DO   TABLE  2           DO PARAMETER TABLE 
  
 OR.DOSI  EQU    0           ORDINAL OF INITIAL (STARTING) VALUE TAG. 
 OR.DOLI  EQU    1              -    -  LIMIT VALUE TAG.
 OR.DOII  EQU    2              -    -  INCREMENT VALUE TAG.
 OR.DOCI  EQU    3              -    -  CONTROL VALUE TAG.
 OR.DORT  EQU    4              -    -  RETURN ADDRESS TAG. 
 OR.DOSN  EQU    5           ORDINAL OF DO STATEMENT TAG. 
 DOTAG    DEFINE 18,18       IF *DO* IS AN I/O TYPE OR.DOSN CONTAINS
                             GENERATED TAG FOR DO IN LOW ORDER OF WORD
                             IF NOT AN I/O DO TAG FOR STATEMENT IS
                             SHIFTED UP BY P.DOTAG. 
  
 OR.DFLAG EQU    5           ORDINAL IN TURPLE FOR *DO* BEGIN OF FLAG 
*                            TO INDICATE TO PASS *2* PROCESSING OF *DO* 
*                            WHERE *DO* BEGIN *TURPLE* IS LOCATED IN
*                            PARSED FILE. 
  
 DFLAG    DEFINE 42,18       FIELD FOR *DO* BEGIN *TURPLE* RELATIVE 
*                            ADDRESS FOR PASS *2* AND PASS *3*
*                            PROCESSING.
  
 L.DOE    EQU    6           LENGTH OF EACH *DO* ENTRY. 
****
 TT.EQU   SPACE  4,60 
****      TT.EQU - EQUIVALENCE TAG TABLE. 
*         USED TO ACCUMULATE EQUIVALENCE INFORMATION DURING DECLARATIVE 
*                PROCESSING.  THROWN AWAY AFTER IT IS PROCESSED INTO
*                TP.EQU AT *XUT* TIME.
  
  
* TS.EQU  TABLE  1           TRANSLATED EQUIVALENCE STATEMENTS
  
 EQLINK   DEFINE 48,12       LINK TO ROOT 
 EQHI     DEFINE 24,24       SPACE ABOVE ROOT NEEDED
 EQLO     DEFINE  0,24       SPACE BELOW ROOT NEEDED
****
 TP.EQU   SPACE  4,8
****      TP.EQU - EQUIVALENCE PARAMETER TABLE. 
*         CONTAINS EQUIVALENCE PAIRS AND OFFSETS. 
  
  
* TP.EQU  TABLE  =,TS.EQU    EQUIVALENCE PARAMETER TABLE
  
 EQU2     DEFINE P.TAG,L.TAG  SECONDARY NAME TAG
 EQU1     DEFINE 24,L.TAG    PRIMARY NAME TAG 
 EQUB     DEFINE 0,24        BIAS:  ADDR[PRIMARY]+BIAS = ADDR[SECONDARY]
****
 TP.FMT   SPACE  4,60 
****      TP.FMT - FORMATS AND NAMELIST GROUPS
  
  
* TP.FMT  TABLE  3
****
 TT.ASF   SPACE  4,8
****      TT.ASF - *ASF* SKELETON TABLE.
*         CAN BE TRASHED AT *END* STATEMENT TIME. 
  
  
* TT.ASF  TABLE  2
****
 TT.PAR   SPACE  4,12 
****      TT.PAR - PARSED FILE. 
  
  
* TT.PAR  TABLE  3
  
  
**        PARSED FILE ENTRY ORDINAL DEFINITIONS.
*                ORDINALS ARE GIVEN RELATIVE TO EACH TURPLE.
  
 L.TURP   EQU    3           LENGTH OF EACH TURPLE. 
  
 OR.OPR   EQU    0           ORDINAL OF  OPERATOR.
 OR.1OP   EQU    1           ORDINAL OF  FIRST OPERAND. 
 OR.2OP   EQU    2           ORDINAL OF  SECOND OPERAND.
****
 T.VDIM   SPACE  4,15 
**        T.VDIM - VARIABLE DIMENSION PRE-SET TURPLES.
* 
*         TURPLES FOR PRE-COMPUTING VARIABLE DIMENSION SUBSCRIPT
*         TERMS ARE ACCUMULATED IN THIS TABLE.  WHEN THE *END* STATEMENT
*         IS ENCOUNTERED, THESE TURPLES ARE COMPILED INTO THE OBJECT
*         PROGRAM.
  
  
* T.VDIM  TABLE  1           VARIABLE DIMENSION TURPLES.
 TP.NLST  SPACE  4,8
****      TP.NLST - TABLE OF "NAMELIST" GROUPS. 
*         NAMELIST GROUP DEFINITIONS ARE STORED IN HERE.
*         THE *ARR* FIELD OF THE TT.NAM ENTRY OF A NAMELIST-GROUP NAME
*                POINTS INTO THIS TABLE.
  
  
* TP.NLST TABLE  1
****
 TP.APL   SPACE  4,8
****      TP.APL - TABLE OF ACTUAL PARAMETER LISTS. 
*         ORDINALS OF *AL-TAGS* POINT INTO THIS TABLE.
  
  
* TP.APL  TABLE  3           ACTUAL PARAMETER LISTS 
  
*         TAG AND BIAS FIELDS MUST HAVE SAME POSITION RELATIVE TO EACH
*                OTHER AS THEY DO IN THE LONG FILE.  MUST ALSO BE SAME
*                LENGTH.
  
 ATAG     DEFINE 42,L.TAG    TAG (VAR, CON, OR TEM) 
 ABIAS    DEFINE 24,L.LBIAS 
          IFNE   P.LTAG-P.LBIAS,P.ATAG-P.ABIAS,1
          ERR    AP-LIST AND LONG FILE TAG/BIAS FIELDS OUT OF SYNCH.
  
 ASIZ     DEFINE 0,13        FOR AN I/O ITEM, THIS IS NBREL,
                             VALUE DEPENDS ON (ATYP) -- 
 ATYP     DEFINE 13,3 
 AP=SIZ   EQU    1           1 _ ASIZ IS ELEMENT LENGTH 
 AP=CON   EQU    2           2 _ ASIZ IS CON-TAG ORDINAL
 AP=TEM   EQU    3           3 _ ASIZ IS TEM-TAG ORDINAL. 
 AP=PRO   EQU    4           4 _ ASIZ IS PRO-TAG ORDINAL
 AP=UIOC  EQU    5           5 _ ASIZ IS OUTPUT CONTROL 
  
 AVAR     DEFINE 16          SET *VAR* BIT IN THE I/O LIST
 AFIT     DEFINE 17          SET *FIT* BIT IN THE I/O LIST
 ALCM     DEFINE 20          SET *LCM* BIT IN THE I/O LIST
  
 APIO     DEFINE 0,21        IF ENTIRE FIELD IS ZERO, THIS IS NOT AN
                             I/O ITEM, BUT MERELY A NORMAL AP-LIST
                             ENTRY, SAVING *KAP* MUCH GRIEF.
                             A LEVEL 3 ITEM GETS TREATED AS AN I/O ITEM,
                             AGAIN SAVING *KAP* SOME GRIEF. 
  
**        AN OBJECT-LIBRARY (I/O) AP-LIST ENTRY HAS THE FOLLOWING FORMAT
*                IN THE BINARY -- 
  
 IOLCM    DEFINE 59          ITEM IS LCM/ECS RESIDENT 
 IOFIT    DEFINE 59          ITEM IS A VARIABLE FIT INDICATOR.
 IOFP     DEFINE 58          ITEM IS A FORMAL PARAMETER.
 IOIND    DEFINE 57          ITEM IS INDIRECTLY REFERENCED. 
                             (FOR AN ACTUAL LIST-VARIABLE, THE ITEM 
                             LENGTH IS INDIRECTED.) 
 IOTYP    DEFINE 48,L.MODE TYPE OF ITEM 
 IOSIZ    DEFINE 30,18       ADDRESS OF WORD CONTAINING NUMBER OF 
                             ELEMENTS IN THIS I/O LIST ITEM, WHEN 
                             *IOIND* IS SET.
 IOLEN    DEFINE 24,24       LENGTH OF I/O ITEM WHEN *IOIND* IS NOT SET.
 IOADDR   DEFINE 0,L.ABIAS   ADDRESS OF THE ITEM. 
 IOARG    DEFINE 0,6         F.P. ORDINAL, WHEN *IOFP* IS SET.
****
 TP.ILI   SPACE  4,8
****      TP.ILI - TABLE OF INPUT LIST ITEMS
*         INPUT VARIABLES AND ARRAY NAMES ARE STORED IN THIS TABLE IN 
*         THE FORM OF PASS 2 TAGS.  ARRAY SUBSCRIPTS ARE CHECKED FOR
*         MATCHES WITH THE ITEMS IN THE TABLE.  I/O RESTART CALLS WILL
*         BE FORCED WHEN A MATCH IS FOUND.
  
  
*TP.ILI   TABLE  3           INPUT LIST ITEMS 
****
 TA.PRO   SPACE  4,8
****      TA.PRO - TABLE OF PROGRAM ADDRESSES.
*         EVENTUALLY CONTAINS THE ADDRESS OF ALL PROGRAM TAGS.
*         ORDINALS OF *L-TAGS* POINT INTO THIS TABLE. 
  
  
* TA.PRO  TABLE  3,4
****
 TS.DAT   SPACE  4,15 
****      TS.DAT - DATA STATEMENT TABLE.
  
  
* TS.DAT  TABLE  1
  
*         THE ENTRIES IN THIS TABLE ARE DIRECTIVES TO THE END PROCESSOR 
*                TO OUTPUT THE NECESSARY LOADER TEXT. 
*         THE TYPE OF AN ENTRY IS GIVEN BY THE EXPONENT FIELD --
  
*  .S            OUTPUT A SHORT (@ 2**48-1 IN MAGNITUDE) CONSTANT.
* 
*  .W            OUTPUT A FULL WORD OF DATA (TWO WORD ENTRY). 
*                            DATUM IN THE NEXT TABLE WORD.
* 
*  .O            RESET THE ORIGIN COUNTER TO -- 
  
 DTAG     DEFINE 48-L.TAG,L.TAG    VARIABLE ADDRESS 
 DBIAS    DEFINE P.DTAG-L.LBIAS,L.LBIAS     OFFSET
  
*  .R            OUTPUT A REPLICATION TABLE (TWO WORD ENTRY) -- 
*         WORD 1,  (DTAG) = BLOCK LENGTH
*                  (17-00) = REPLICATION COUNT +1 
*         WORD 2,  (DTAG)  =  ADDRESS INCREMENT 
*                  (17-00) =  DESTINATION ADDRESS 
  
  
*         DIL - DATA INITIALIZATION LIST POINTERS.
*          FORMAT:  24/0,18/FWA OF DVL,18/FWA OF DIL
*         BUILT BY A BACKWARDS SCAN OF THE DATA STATEMENT.
  
* TL.DAT  TABLE  =,TT.USE    AUX DATA TABLE, LOCAL TO EACH DATA STMNT.
  
 DLVAR    DEFINE 18,18       FWA OF DVL (VARIABLE LIST) 
 DLITM    DEFINE  0,18       FWA OF DIL (  ITEM   LIST) 
  
  
* TI.DAT  TABLE  =,TT.SCR    AUX DATA TABLE, LOCAL TO EACH DATA STMNT.
                             CONTAINS CONSTANTS FOUND IN THE STATEMENT
                             AND REP FACTORS, PLUS OTHER GOODIES. 
  
 DIWC     DEFINE  0,18       WORD COUNT 
 DINDX    DEFINE 18,18       INDEX FIELD
 DIRL     DEFINE 36,18       REP LIST ITEM COUNT
 DICIF    DEFINE 54,3        CONSTANT ITEM FACTOR 
*                            NOTE.  THE ABOVE FIELD USED TO BE 5 BITS 
*                            LONG, BUT WAS TRUNCATED TO 3 ON THE
*                            ADDITION OF THE *DNEGH* FIELD. 
                             = 1 OR 2 IF ALL ITEMS ARE THE SAME LENGTH, 
                             AND LENGTH = 1 OR 2, ELSE ZERO.
 DNEGH    DEFINE 57          SET IF A MINUS SIGN PRECEEDED A HOLL 
 DIHOL    DEFINE 58          IF THIS IS A HOLLERITH CONSTANT
 DIREP    DEFINE 59          IF THIS IS A REP COUNT 
  
 P.SDPF   EQU    58                SINGLE/DOUBLE PRECISION FLAG 
 P.CTYP   EQU    36          CONSTANT TYPE FIELD POSITION 
 P.SYMORD EQU    18                SYMTAB ORD IN BITS 18-35 
****
 T.FILE   SPACE  4,30 
****      T.FILE - DESCRIPTIONS OF PROGRAMMER FILES.
* 
*         NOTE   ALTHOUGH LOGICALLY A DISTINCT TABLE, THIS INFORMATION
*                PHYSICALLY RESIDES IN THE FIRST PART OF TS.DAT.
* 
*         WORD 1 -- 
*                42/ 0L FILENAME
*                18/ -GARBAGE-
*         WORD 2 -- 
*                 1/ EQUIVALENCED FLAG
*                 5/ -GARBAGE-
*                18/ TAG OF BUFFER ADDRESS
*                18/ FIT ADDRESS
*                18/ BUFFER LENGTH
*         WORD 3 -- 
*                 1/ 0 = VALID ENTRY
*                    1 = NO ENTRY 
*                 5/ -GARBAGE-
*                18/ RECORD LENGTH TAG
*                18/ -GARBAGE-
*                18/ RECORD LENGTH
* 
*         THE END OF THE TABLE IS MARKED BY AN ALL-ZERO WORD. 
*         THUS, ITS LENGTH IS =  2*(NARGS)+1
  
  
* T.FILE  TABLE  =,TS.DAT 
  
  
 FNAM     DEFINE 18,7*CHAR   FILE NAME
  
 FEQU     DEFINE 59          EQUIVALENCED FILE FLAG 
 FBUF     DEFINE 36,18       BUFFER TAG 
 FFIT     DEFINE 18,18       FIT ADDRESS
 FLEN     DEFINE  0,18       BUFFER LENGTH
 L.BTRB   EQU    4           WIDTH OF RELOCATION BYTE 
 L.LIST   EQU    3           LENGTH OF *Q8NTRY* *LIST* AP-LIST
 L.FIT1   EQU    10          RELATIVE POSITION OF 2ND HALF FIT TO FIT RA
 L.REPI   EQU    3           LENGTH OF REPL TABLE 
 BTBFS    DEFINE 0,18        FIT *BFS* (CIRC BUFFER SIZE) FIELD 
 BTWSA    DEFINE 0,18        FIT *WSA* FIELD
 BTMRL    DEFINE 36,24       FIT *MRL* FIELD
 BTRA     DEFINE 0,18        REPL SOURCE AND DESTINATION FIELDS 
 BTRI     DEFINE 27,18       REPL DESTINATION INCREMENT 
 BTRC     DEFINE 42,18       REPL REPLICATION COUNT 
 BTCN     DEFINE 48,12       CODE NUMBER
 BTWC     DEFINE 36,12       WORD COUNT 
 BTRL     DEFINE 18,9        RELOCATION BASE
 BTYP     DEFINE 17          BLOCK TYPE (PIDL DESCRIPTORS)
 FREC     DEFINE 36,18       WSA TAG
 FRCL     DEFINE 0,18        MRL
 BTXRL    DEFINE 0,9         XLINK RELOCATION BASE
 BTXSZ    DEFINE 18,6        XLINK ADDRESS FIELD LENGTH 
 BTXPS    DEFINE 24,6        XLINK ADDRESS FIELD POSITION 
 BTXRA    DEFINE 30,24       XLINK RELATIVE ADDRESS 
 L.STLF   EQU    30          LENGTH OF WEAK EXT. TABLE FIELD
****
 TT.REF   SPACE  4,30 
****      TT.REF - CROSS REFERENCE TABLE. 
  
  
* TT.REF  TABLE  4
  
 TAG      DEFINE 42,18       TAG
 CRLIN    DEFINE 6,22        LINE NUMBER OF REFERENCE 
 CRUSE    DEFINE  0,6        USAGE LETTER 
* 
*         POSSIBLE ENTRY CONDITIONS TO TT.REF 
* 
  
*         STATEMENT NUMBERS 
  
 CR.FMT   EQU    1RF
 CR.LAB   EQU    1RL
 CR.AGN   EQU    1RA
 CR.GOTO  EQU    1R 
 CR.DO    EQU    1RD
 CR.IFN   EQU    1RC         CONDITIONAL USAGE. 
  
*         VARIABLES/FUNCTIONS 
  
 CR.REF   EQU    1R 
 CR.STR   EQU    1R=         STORE
 CR.PAR   EQU    1RA
 CR.CALL  EQU    1RA         CALL ARGUMENT. 
 CR.DEC   EQU    1RD         DECLARATIVE STATEMENT
 CR.DAT   EQU    1RI         DATA INITIALIZED 
 CR.VGOTO EQU    1RG         VARIABLE USED IN GOTO. 
 CR.INF   EQU    1RA         INSIDE FUNCTION. 
 CR.INP   EQU    1RR         INPUT  STATEMENT 
 CR.NTR   EQU    1RE         ENTRY POINT
 CR.ARY   EQU    1RS         SUBSCRIPT
 CR.OUT   EQU    1RW         OUTPUT STATEMENT 
 CR.SUB   EQU    1RX
 CR.DOI   EQU    1RC         DO LOOP CONTROL
 CR.IF    EQU    1RF
****
 TS.BLK   SPACE  4,8
****      TS.BLK - COMMON BLOCK NAME TABLE. 
*         CONTAINS COMMON BLOCK NAMES AND LENGTHS.
*         ZEROTH ENTRY IS NOT USED:  IT IS A PSUEDO-BLOCK FOR PROGRAM-
*                RELATIVE ADDRESS GAMES.
  
  
* TS.BLK  TABLE  1,2*2
  
 SYM      DEFINE 18,42       BLOCK NAME 
 CTAG     DEFINE 42,18       ECS/LCM POINTER TAG
 LVLFLD   DEFINE 38,4        LEVEL DOPE 
 CNFL     DEFINE 41          LEVEL CONFLICT BIT 
 DFLT     DEFINE 40          LEVEL DEFAULT BIT
 BLVL     DEFINE 38,2        BLOCK LEVEL
 BLEN     DEFINE 0,24        BLOCK LENGTH 
  
**        THERE IS 1 POINTER WORD FOR EACH ECS/LCM COMMON BLOCK.
*         IT IS REFERENCED VIA THE PROGRAM TAG STORED IN *CTAG*.
*         THE CNFL BIT IS ON IF NAMES IN THE COMMON BLOCK ARE ASSIGNED
*                TO CONFLICTING LEVELS. 
*         THE DFLT BIT IS ON IF ONE OR MORE NAMES ARE DEFAULTED TO THE
*                LEVEL ESTABLISHED FOR THE BLOCK. 
  
****
 TS.ENT   SPACE  4,8
****      TS.ENT - ENTRY POINT TABLE. 
  
  
* TS.ENT  TABLE  1
  
 SYM      DEFINE 18,42       NAME 
 EORD     DEFINE 0,18        ORDINAL INTO TT.NAM
****
 TT.FILL  SPACE  4,15 
****      TT.FILL - TABLE TO ACCUMULATE *FILL* BYTES FOR BINARY OUTPUT. 
  
  
* TT.FILL TABLE  =,TT.COMM
****
 TT.LINK  SPACE  4,15 
****      TT.LINK - TABLE TO ACCUMULATE *LINK* BYTES FOR BINARY OUTPUT. 
  
  
* TT.LINK TABLE  =,TS.EQU 
****
 TN.EXT   SPACE  4,8
****      TT.XFIL - TABLE TO ACCUMULATE *XFILL* WORDS FOR BINARY OUTPUT 
  
  
* TT.XFIL TABLE  =,TT.SCR 
****
          SPACE  4,8
****      TN.EXT - TEMPORARY TABLE OF EXTERNAL NAMES. 
*         USED ONLY BY VARIABLE MAP ROUTINES. 
  
  
* TN.EXT  TABLE  =,TP.EQU 
****
 TN.BLK   SPACE  4,8
****      TN.BLK - TEMPORARY TABLE OF BLOCK NAMES.
*         USED ONLY BY VARIABLE MAP ROUTINES. 
*         CONTAINS NAMES ONLY, ONE WORD PER NAME.  // ADDED.
*         ORDERED BY BLOCK NUMBER.
  
  
* TN.BLK  TABLE  =,TT.LF     BLOCK NAMES. 
****
 T.END    SPACE  4,8
****      T.END - MUST BE THE LAST TABLE. 
  
  
* T.END   TABLE  0           DUMMY FOR MANAGER
****
          EJECT 
 DEF      SECT   (SYMBOL DEFINITIONS.),1
 CBSS     SPACE  4,8
**        CBSS - MACRO TO COMPILE A *BSS* OPERATION 
* 
*         CBSS   LOC,SIZE,REG 
* 
*         *LOC*  = LOCATION TAG TO BE DEFINED (= 1 FOR FORCE UPPER ONLY)
*         *SIZE* = AMOUNT OF SPACE TO RESERVE (= 0 FOR DEFINITION ONLY) 
*         *REG*  = REGISTER TO COMPILE FROM (*X7* ASSUMED IF OMITTED) 
*                  IF OMITTED, INSTRUCTION WILL BE FORMED IN THE
*                  SPECIFIED REGISTER, BUT WILL NOT BE STORED TO CORE.
  
  
 CBSS     MACRO  LOC,SIZE,REG 
 A        MICRO  1,, X7 
          IFC    NE,*REG**,1
 A        MICRO  1,, REG
          R=     "A",LOC
          IFC    EQ,*REG**,1
          WCODE  X7 
 CBSS     ENDM
  
  
**        CRJ -  COMPILE CALL TO *CRJ* TO COMPILE *RJ* TO EXTERNAL
* EXAMPLES--- 
* 
*    1.-- CRJ 
*         SX1    B1          ALLOW TRACE INFORMATION TO BE COMPILED 
*         RJ     CRJ
* 
*    2.-- CRJ    ALLOW
*         SX1    B1          ALLOW TRACE INFORMATION TO BE COMPILED 
*         RJ     CRJ
* 
*    3.-- CRJ    NONE 
*         SX1    B0          DO NOT COMPILE TRACE INFORMATION 
*         RJ     CRJ
* 
*    4.-- CRJ    MUST 
*         SX1    -B1         MUST COMPILE TRACE INFORMATION 
*         RJ     CRJ
  
  
 CRJ      MACRO  TYPE 
 A        MICRO  1,1, TYPE
.1        IFC    EQ,**"A"*
          =X1    1
.1        ENDIF 
 .2       IFC    EQ,*A*"A"* 
          =X1    1
 .2       ENDIF 
 .3       IFC    EQ,*N*"A"* 
          BX1    0
 .3       ENDIF 
 .4       IFC    EQ,*M*"A"* 
          =X1    -1 
 .4       ENDIF 
          RJ     CRJ
 CRJ      ENDM
 DRITE    SPACE  4,8
**        DRITE - MACRO TO BE USED FOR CHECKING DELAYED STORE ACTIVITY
*                ARGUMENT *CONTROL* MAY BE -- 
*                  A.  *DEACTIVATE = DEACTIVATES ANY DELAYED STORE IN 
*                                    PROGRESS.
*                  B.  *X1-X7*     = DEACTIVATE DELAYED STORE ONLY IF 
*                                    (X1-X7) = (DRITE). 
  
  
 DRITE    MACRO  CONTROL
.1        IFC    EQ,*CONTROL*DEACTIVATE*
          BX0    0
.1        ELSE
 .2       IFC    NE,*CONTROL*X0*
          BX0    CONTROL
 .2       ENDIF 
.1        ENDIF 
          RJ     =XCDS
 DRITE    ENDM
 WCODE    SPACE  4,8
**        WCODE - WRITE INTERMEDIATE CODE FILE. 
* 
*         WCODE   REG,RETURN
* 
*         REG =   ANY *X* REGISTER, (X7)
*         RETURN = RETURN ADDRESS.  *+1 ASSUMED IF OMITTED. 
*                            (B2) IS NATURAL REGISTER.
* 
*         USED FOR WRITING *ALL* INTERMEDIATE CODE TO INTERMEDIATE FILE 
* 
*         CALLS  WIN
  
  
 WCODE    MACRO  R,RETURN 
          IFC    NE,/X7/R/,1
          BX7    R
 +        =B2    RETURN   *+1 
          JP     =XWIN
 WCODE    ENDM
 ERRTYP   SPACE  4,8
          EJECT 
  
 C.SCR    EQU    10BS12      SCRATCH TAG FOR STATUS OF OPERANDS IN
                             TT.SCR DURING PASS *2* PROCESSING. 
 C.BASE   EQU    20BS12 
 C.DIF    EQU    2BS12
  
 C.VAR    EQU    20BS12      TAG FOR ALL SYMBOLS IN TS/TT.NAM 
 C.SYM    EQU    C.VAR
  
 C.STN    EQU    24BS12      TAG FOR ALL STATEMENT NUMBERS. 
 C.STAT   EQU    C.STN       ** TEMP ** 
  
****      C.PRO - *PROGRAM* TAGS FOR GENERATED LABELS.
* 
*         THIS TYPE OF TAG IS GENERATED IN THE FOLLOWING SITUATIONS --
*                LOCAL *DO* LOOP LABELS.
*                ACTUAL PARAMETER LIST LABELS.
*                TARGET FOR IMPLIED *IF* JUMP.
*                LABEL FOR I/O BUFFER OF EACH OBJECT-PROGRAM FILE.
*                LABEL FOR WORKING STORAGE AREA OF OBJECT-PROGRAM FILE. 
*         WHEN A NEW *PROGRAM* TAG IS NEEDED, INCREMENT THE (*TG.PRO*)
*                AND THE NEW VALUE IS THE TAG TO USE.  THAT IS, THE 
*                CONTENTS OF *TG.PRO* ALWAYS CONTAINS THE LAST TAG USED,
*                *NOT* THE NEXT TO BE USED. 
*         THE FIRST FEW OF THESE TAGS HAVE PRE-DEFINED MEANINGS.  THEY
*                ARE LISTED HERE. 
  
  
 C.PRO    EQU    26BS12      PROGRAM-LOCAL TAGS 
 C.APL    EQU    C.PRO       ACTUAL PARAMETER LIST TAGS ARE THE SAME
  
  
 CT.TRAC  EQU    C.PRO       *TRACE.* = THE TRACEBACK WORD. 
 CT.TPA0  EQU    CT.TRAC+1   *TEMPA0.* = (A0) SAVED HEREIN. 
 CT.SVA0  EQU    CT.TPA0+1   *SAVEA0.* = (A1) SAVED IN THIS ONE.
 CT.TPA1  EQU    CT.SVA0
 CT.FILE  EQU    CT.SVA0+1   *FILE.* = THE *Q8NTRY* FILE VECTOR.
 CT.INIT  EQU    CT.FILE+1   SUBPROGRAM INITIALIZATION CODE.
 CT.BEGIN EQU    CT.INIT+1   FIRST INSTRUCTION IN A SUBPROGRAM. 
 CT.RETN  EQU    CT.BEGIN+1  SUBPROGRAM *RETURN* CODE.
 CT.RJS   EQU    CT.RETN+1   DUMMY RJT FOR RJSUB-ING
 CT.LAST  EQU    CT.RJS 
****                         FILE BUFFER TAGS ARE NEXT. 
 C.VDIM   EQU    30BS12      VARIABLE DIMENSION TAGS
 C.TEM    EQU    32BS12      TEMPORARY TAG
 C.CON    EQU    34BS12      TAG FOR ALL CONSTANTS IN TS/TT.CON.
 C.END    EQU    C.CON
          EJECT 
  
*         NOTE  THESE EQUATES ARE USED AS ORDINALS INTO THE CHARMAP 
*         TABLE.  IF THE STRUCTURE OF THAT TABLE CHANGES, THESE EQUATES 
*         MUST BE MODIFIED
  
 O.DEF    EQU    0
 O.EOS    EQU    0
 O.HOLL   EQU    1
 O.CONS   EQU    2
 O.VAR    EQU    3
 O.PL     EQU    4
 O.SEP    EQU    O.PL 
 O.MIN    EQU    5
 O.STAR   EQU    6
 O.MULT   EQU    O.STAR 
 O.SLASH  EQU    7
 O.DIV    EQU    O.SLASH
 O.LP     EQU    8
 O.(      EQU    O.LP 
 O.RP     EQU    9
 O.)      EQU    O.RP 
 O.=      EQU    10 
 O.COMMA  EQU    11 
 O.SDEF   EQU    O.COMMA
 O.LT     EQU    12 
 O.LE     EQU    13 
 O.EQ     EQU    14 
 O.NE     EQU    15 
 O.GE     EQU    16 
 O.GT     EQU    17 
 O.NOT    EQU    18 
 O.AND    EQU    19 
 O.XOR    EQU    20 
 O.OR     EQU    21 
 O.EXP    EQU    22 
 O.UMIN   EQU    23 
 O.TRUE   EQU    24 
 O.FALSE  EQU    25 
 O.SLP    EQU    26 
 O.FLP    EQU    O.SLP
 O.ILP    EQU    O.SLP
 O.ALP    EQU    O.SLP
 O.S(     EQU    O.SLP
 O.ANDN   EQU    27 
 O.XORN   EQU    28 
 O.ORN    EQU    29 
 O.$      EQU    30 
 O.PERIOD EQU    31 
 O.ASFA   EQU    32 
 O.IF     EQU    33 
 O.SPACE  EQU    34 
 O.DOB    EQU    35 
 O.DOC    EQU    36 
 O.DOC1   EQU    37 
 O.DOC2   EQU    38 
 O.ARY    EQU    39 
 O.BSS    EQU    40 
 O.ARG1   EQU    41 
 O.ARG2   EQU    42 
 O.RJ     EQU    43 
 O.MXP    EQU    44 
 O.NTR    EQU    45 
 O.RANF   EQU    46 
 O.SHF    EQU    47 
 O.NOOP   EQU    48 
 O.ASSN   EQU    49 
 O.GOTO   EQU    50 
 O.GOTC   EQU    51 
 O.GOAS   EQU    52 
 O.MODC   EQU    53 
 O.PLUG   EQU    54 
 IO.DOC   EQU    55 
 IO.DOB   EQU    56 
 O.OTR    EQU    57 
 O.XMIT   EQU    58 
 LG.SYM   EQU    60 
          EJECT 
**        SB -   MICROS DEFINING POSITIONS OF CELLS IN THE STRING BUFFER
  
  
 SB.HEAD  EQU    6           NUMBER OF HEADER CELLS ON *SB* 
 SB.LN    MICRO  1,, A0+1 
 SB.STN   MICRO  1,, A0+2 
 SB.KEY   MICRO  1,, A0+3 
 SB.FWA   MICRO  1,, A0+SB.HEAD 
 SB.BOS   MICRO  1,, CST.BOS
  
 L.CDPC   EQU    7*CHAR      LENGTH OF CHARACTER *DPC* FOR OPERATOR.
**        ALL GLOBAL MICROS.
  
  
 CCRMOD   BITMIC (M.REAL,M.INT,M.UNIV)
 CCROPS   BITMIC (O.PL,O.MIN,O.STAR,O.SLASH,O.UMIN) 
 C$*      LETMIC C$*         BIT MASK FOR CONTINUATION CARDS. 
 LETHLR   LETMIC HLR         BIT MASK FOR LETTERS *H L R* 
 NUM09    LETMIC 0123456789  BIT MASK FOR NUMBERS *0 - 9* 
  
 INT      LETMIC IJKLMN 
 REAL     LETMIC ABCDEFGHOPQRSTUVWXYZ 
  
 FMTSEP   BITMIC (1R/,1R(,1R),1R*,(1R,),1R",1R#,1R')
 FMTSEP2  BITMIC ((1R,),1R))
 FMTSEP3  BITMIC (1R+,1R-)
 IOSEP    BITMIC (O.EOS,O.COMMA)
 SPOP     BITMIC (O.SLP,O.LP) 
 SUBOPS   BITMIC (O.PL,O.MIN,O.STAR)
 SUBOPS1  BITMIC (O.PL,O.MIN) 
 SUBOPS2  BITMIC (O.PL,O.MIN,O.STAR,O.ARY)
  
 ATYP     DECMIC P.ATYP 
 AP=SIZ   DECMIC AP=SIZ 
 AP=CON   DECMIC AP=CON 
 AP=TEM   DECMIC AP=TEM 
 AP=UIOC  DECMIC AP=UIOC
  
 ANS.CONT DECMIC ANS.CONT 
 MAX.BLK  DECMIC MAX.BLK
 MAX.DIM  DECMIC MAX.DIM
 MAX.SARG DECMIC MAX.SARG 
 MAX.PARG DECMIC MAX.PARG 
  
 O.BOS    EQU    0           BEGINNING OF STATEMENT MARKER
 O.BOS    MICRO  1,, B0 
          IFEQ   O.HOLL,1,1 
 O.HOLL   MICRO  1,, B1 
  
 M.CON    BITMIC (O.LP,O.MIN,O.PL,O.CONS,O.HOLL,O.PERIOD,O.TRUE,O.FALSE)
 M.SEP    BITMIC (O.COMMA,O.SLASH,O.RP) 
 M.SEP1   BITMIC (O.COMMA,O.SLASH,O.LP) 
  
 LEGT     BITMIC (O.LE,O.GT)
 PREUNAR  BITMIC (O.=,O.COMMA,O.LP,O.LT,O.LE,O.NE,O.EQ,O.GE,O.GT,O.AND,O
,.NOT,O.OR,O.XOR,O.SLP) 
 REGFILE  EJECT  4,20 
**        DEFINITION OF REGISTERS TO USE FOR CLASS OF REGISTER
  
  
 RUSE     DEFINE 0,9         USE COUNT
 RLOCK    EQU    1S8         LOCK REGISTER BIT
 A        DECMIC L.RUSE 
 MAX.USEC EQU    1S"A"-1     MAXIMUM USE COUNT
  
 RGTYP    DEFINE 0,18        TYPE OF REGISTER (ORDINAL INTO RGFILE) 
 RGNUM    DEFINE 18,18       NUMBER OF REGISTERS IN REGISTER SCAN WORD
 RGMSK    DEFINE 36,18       MASK TO USE FOR REGISTER SCAN WORD.
 RGINS    DEFINE 54,6        6 BIT OP-CODE TO LOAD REGISTER 
 P.RLOCK  EQU    16 
 RHUSE    EQU    1S15        HIGHEST VALUE FOR USE COUNT ON A REGISTER
          SPACE  4
* 
*         NOTE -- THESE EQUATES ARE USED TO INDEX INTO THE REGISTER 
*         FILE.  IF THE ACTUAL CELLS ARE TO BE ADDRESSED, CHECK THE NEW 
*         NAMES IN THE REGISTER FILE. 
* 
 RGFILE   EQU    0           STARTING OFFSET FOR REGISTER FILE
 R.B0     EQU    0
 R.B1     EQU    1
 R.B2     EQU    2
 R.B3     EQU    3
 R.B4     EQU    4
 R.B5     EQU    5
 R.B6     EQU    6
 R.B7     EQU    7
 REG.B    EQU    R.B0        *B* REGISTERS
  
 R.A0     EQU    8
 R.A1     EQU    9
 R.A2     EQU    10 
 R.A3     EQU    11 
 R.A4     EQU    12 
 R.A5     EQU    13 
 R.A6     EQU    14 
 R.A7     EQU    15 
 REG.A    EQU    R.A0        *A* REGISTERS
  
 R.X0     EQU    16 
 R.X1     EQU    17 
 R.X2     EQU    18 
 R.X3     EQU    19 
 R.X4     EQU    20 
 R.X5     EQU    21 
 R.X6     EQU    22 
 R.X7     EQU    23 
 REG.X    EQU    R.X0        *X* REGISTERS
  
 L.RGFILE EQU    23 
 PBLK     DEFINE 8           BLOCKDATA
 PFNC     DEFINE 9           FUNCTION 
 PSUB     DEFINE 10          SUBROUTINE 
 PPRO     DEFINE 11          PROGRAM
          SPACE  4
*         CONTROLS ACTIONS OF TABLE MANAGER 
  
 PASS=AFS EQU    0           0 = MORE ROOM NEEDED FOR CONTINUATION CARDS
 PASS=PAR EQU    1           1 =  PARSE.
 PASS=ARI EQU    2           2 =  ARITH, OR ANY-TIME (A7) _ LONG FILE.
 PASS=PIG EQU    3           3 =  DURING *PIG* PROCESSING.
 PASS=END EQU    4           4 =  *END* PROCESSING. 
 PASS=MAP EQU    5           5 =  DURING REF-MAP PROCESSING.
  
 SATAG    DEFINE 42,18       TAG FOR ARRAY PROCESSING.
          EJECT 
****      DEFINITIONS OF CELL/VARIABLE S USED BY TS COMPILER
  
  
 L.PSTACK EQU    3           LENGTH OF LOCAL PAREN STACK
                             SUB-FIELD SET IN ARGMODE.
 AMAD     DEFINE 0,18        AGMODE JUMP ADDRESS FOR PROCESSING PARENS
                             OR COMMAS WHILE PARSING STATEMENT. 
 AMC      DEFINE 18,18       ADDRESS FOR PROCESSING COMMA OPERATOR ABOUT
                             TO BE POPPED DURING PARSING. 
                             VALUE CONTAINED IN THIS FIELD IS ALWAYS
                             REPRESENTED AS A C=XXX, WHICH DEFINES THE
                             ROUTINE TO JP TO WHEN IN THE APPROPRIATE 
                             ARGMODE. 
 AMATR    DEFINE 36,12       ATTRIBUTES FOR THIS ARGMODE
 AMFUN    DEFINE P.AMATR     ALLOW FUNCTION REFERENCE WITHOUT *(* 
 AMEOS    DEFINE P.AMATR+1   EOS UNARY CHECK
 AMRP     DEFINE P.AMATR+2   SPECIAL CHECK ON ILLEGAL RPAREN
 AMADDR   DEFINE P.AMATR+3   ADDRESS REQUESTED (VERSUS VALUE) 
 AMWHOL   DEFINE P.AMATR+4   ALLOW MULTI-WORD HOLLERITH CONSTANTS 
 AMEQ     DEFINE P.AMATR+5   ALLOW *=*
  
 AMR      DEFINE 48,12       VALUE FOR REFERENCES TO SYMBOL FOR ZERO
                             LEVEL SYMBOLS FOUND WHILE PARSING STATEMENT
  
                             DEFINED SUBFIELDS IN ARGCOMA 
 ACC      DEFINE 0,18        DEFINED ARGUMENT COUNT FOR FUNCTION, 
                             SUBROUTINE.
 ACM      DEFINE 18,18       DEFINED ARGUMENT MODE FOR ARGUMENTS TO 
                             FUNCTION, SUBROUTINE, ARRAY..
  
  
****      PASS 2 - DEFINITION OF AN OPERAND WITHIN A *TURPLE* 
  
 2TAG     DEFINE P.TAG,L.TAG       TAG
 2BIAS    DEFINE 24,18
 2CLAS    DEFINE 9,6
  
 2FPNO    DEFINE 18,6 
 2STAT    DEFINE 15,3 
 USTAT    DEFINE 0+P.2STAT   STATUS OF UPPER HALF OF TAG
 LSTAT    DEFINE 1+P.2STAT   STATUS OF LOWER HALF OF TAG
 TYPE     DEFINE 2+P.2STAT    TYPE OF TAG (FOR REGISTER FILE USE) 
  
 2MODE    DEFINE P.MODE,L.MODE
  
*         *ARE* BIT IS FOR COMMUNICATION BETWEEN PAR AND IO.
  
 LCF      DEFINE 6           LOCF ARGUMENT
 ARE      DEFINE 7           ENTIRE ARRAY REFERENCED
  
 PTAGU    DEFINE P.2TAG,L.2TAG         UPPER  18 BIT TAG
 PTAGM    DEFINE P.2TAG-L.2TAG,L.2TAG  MIDDLE 18 BIT TAG
 PTAGL    DEFINE 0,L.2TAG              LOWER  18 BIT TAG
  
**        VARIOUS BIT DEFINITIONS FOR *2CLAS* FIELD SET DURING PARSING
*         OF A STATEMENT FOR PASS *2* PROCESSING OF A TAG.
  
 INTR     DEFINE 0+P.2CLAS   INTERMEDIATE.
 ADDR     DEFINE 1+P.2CLAS   SET = ADDRESS, OFF = VALUE.
 SHORT    DEFINE 2+P.2CLAS   SHORT CONSTANT.
 MSHORT   DEFINE P.2BIAS,6   SHORT CONSTANT THAT IS WILL BE GENERATED BY
                             *MASK* INSTRUCTION.
                             REPRESENTED BY A *TAG* OF *0* AND A SHIFT
                             COUNT IN *MSHORT* FIELD. 
 SMULT    DEFINE 3+P.2CLAS   SUBSCRIPT MULTIPLIER DURING PASS *1* 
 2PRO     DEFINE 3+P.2CLAS   TAG IS PROGRAM TAG 
 2EQUIV   DEFINE 4+P.2CLAS
 2ARY     DEFINE 5+P.2CLAS
  
  
**        LAYOUT OF *TURPLE* TAG AS DEFINED BY ABOVE DEFINITIONS. 
* 
**T PASS2 18/2TAG,18/2BIAS,6/2FPNO,3/2STAT,6/2CLAS,6/0,3/M
* 
*         M = 2MODE 
****
          EJECT 
****      FIELD DEFINITIONS FOR OPERATOR CELL.
  
  
 SBPR     DEFINE 0,18        *SB*  PRIORITY.
 STPR     DEFINE 18,9        STACK PRIORITY.
 MODC     DEFINE P.STPR,L.STPR     MODE CONVERSION BITS (SET WHEN POP)
 DMOD     DEFINE 27,4        DOMINANT MODE POINTER. 
 ATTR     DEFINE 31,11       ATTRIBUTE OF OPERATOR. 
  
*         ATTRIBUTE SUB-FIELD BIT DEFINITIONS.
  
 AS       DEFINE P.ATTR      ASSOCIATIVE PROPERTY OPERATOR. 
 COM      DEFINE P.AS+1      COMMUTATIVE PROPERTY OPERATOR. 
 DIS      DEFINE P.COM+1     DISTRIBUTIVE PROPERTY OPERATOR.
 MODLS    DEFINE P.DIS+1     MODELESS OPERATOR. 
 UNAR     DEFINE P.MODLS+1   UNARY OPERATOR.
 NSQEZ    DEFINE P.UNAR+1    IF OPERATOR IS NOT SQUEEZABLE. 
 NONSTD   DEFINE P.NSQEZ+1   IF OPERATOR NOT A STANDARD - PROCESSED EXT.
 OPADDR   DEFINE P.NONSTD+1  DEFINE OPERATOR RESULTS IN A ADDRESS 
 OPVAL    DEFINE P.OPADDR    =0 IF VALUE REQUESTED
  
 JPAD     DEFINE 42,18       ADDRESS OF OPERATOR PROCESSOR. 
****
 SETOP    EJECT  4,20 
****      LGR -  LETTER GROUP TABLE FOR STATEMENT RECOGNIZERS.
* 
*                THE *LGR* TABLE SERVES THREE FUNCTIONS --
*         (1) =  DESCRIBES THE KEYWORD OF THE STATEMENT (IF ANY), 
*         (2) =  INDICATES ANY SPECIAL ATTRIBUTES, AND
*         (3) =  DEFINES WHERE A STATEMENT MAY OCCUR. 
* 
*                SYNTACTICALLY RECOGNIZED STATEMENTS ARE NOT PART OF THE
*         *LGR* TABLE PROPER, BUT RATHER FAKE ENTRIES DESCRIBING THEIR
*         PROPERTIES ARE APPENDED TO THE END OF THE TABLE (PAST THE 
*         LENGTH INDICATED BY *LG.LGR*).
  
  
 SKEY     DEFINE 36,4*CHAR   FIRST FOUR CHARACTERS OF KEYWORD.
                             0L FORMAT.  IS = -1 FOR SYNTACTICALLY
                             RECOGNIZED STATEMENTS. 
  
 SCPM     DEFINE 31,5        ORDINAL OF STAGE VECTOR, DESCRIBED BELOW.
  
 SATTR    DEFINE 25,6        SPECIAL ATTRIBUTES, DESCRIBED BELOW. 
  
 SLEN     DEFINE 18,7        NUMBER OF BITS, MINUS ONE, IN THE ENTIRE 
                             KEYWORD. 
  
 SJMP     DEFINE 0,18        ADDRESS OF THE STATEMENT PROCESSOR.
  
  
**        SPECIAL ATTRIBUTES AND THEIR MEANINGS ARE --
  
 SBKD     DEFINE 0+P.SATTR   LEGAL IN BLOCKDATA SUBPROGRAMS.
  
 SCDS     DEFINE 1+P.SATTR   MUST DEACTIVATE ANY DELAYED STORE BEFORE 
                             PROCESSING STATEMENT.
  
 SGEN     DEFINE 2+P.SATTR   ADDRESS APPEARS ON LISTING (I.E.-- 
                             GENERATES OBJECT CODE).
  
 SLBL     DEFINE 3+P.SATTR   STATEMENT LABEL IS ALLOWED AND PROCESSED 
                             NORMALLY (BY *GSN*). 
  
 SNIF     DEFINE 4+P.SATTR   ILLEGAL AS OBJECT OF ONE-BRANCH *IF*.
  
 SDON     DEFINE 5+P.SATTR   ILLEGAL AS TERMINATOR OF A *DO*
****
  
 LG.STN   EQU    5           NUMBER OF DIGITS TO ASSEMBLE FOR STMT. NO. 
          EJECT 
 HEREIF   MACRO  KEY
 A        MICRO  5,3,/KEY/
 D        MICRO  8,,/KEY/ 
 B        MICRO  1,6,/KEY/
          VFD    42/0L"D",18/0L"A"
 "B"_=    BSS    0
          ENTRY  "B"_=
 HEREIF   ENDM
  
  
**        SATTR - MACRO TO DESCRIBE STATEMENT ATTRIBUTES. 
*                CALLED BY NON-KEYWORD STATEMENTS, AND BY *HEREIF* (TO
*         FORCE MICRO EVALUATION).  ALL *SATTR* SOURCE-LEVEL CALLS MUST 
*         APPEAR AFTER *LG.LEN* IS DEFINED. 
* 
* LOC     SATTR  KEY,ADDR,STAGE,(ATTR),LEN
* 
*         (KEY)  = FIRST FOUR CHARACTERS OF KEYWORD OR -1 
*         (LOC)  = NAME TO BE GIVEN TO /JUMPTO./ ORDINAL. 
*         (ADDR) = ADDRESS OF STATEMENT PROCESSOR.
*         (STAGE)= NAME OF STAGE VECTOR (ROW) 
*         (ATTR) = NAME(S) OF ATTRIBUTE BIT(S)
*         (LEN)  = LENGTH (IN CHARACTERS) OF KEYWORD
  
  
          MACRO  SATTR,LOC,KEY,ADDR,STAGE,ATTR,LEN
 LOC      VFD    L.SKEY/KEY,L.SCPM/CPM=STAGE
.1        IFC    NE,//ATTR/        NECESSARY UNTIL COMPASS FIXED. 
          IRP    ATTR 
          POS    P.S_ATTR+1 
          VFD    1/1         (ATTR) 
          IRP 
.1        ENDIF 
          POS    P.SATTR
.1        IFC    NE,//LEN/
          VFD    L.SLEN/LEN*CHAR-1,L.SJMP/=X_ADDR 
.1        ELSE
          VFD    L.SLEN/,L.SJMP/=X_ADDR 
.1        ENDIF 
 SATTR    ENDM
          EJECT 
 LG.VAR   EQU    7           NUMBER OF CHARACTERS TO ASSEMBLE FOR 
                             TABBING PROCESS. 
 S=NLST   EQU    -3          FLAG VALUE FOR *NAMELIST* I/O STATEMENT
 S=END    EQU    -1          =-1   USED BY *SPR* TO INDICATE WHO CALLED 
 S=RET    EQU    S=END       =-1
 S=PAU    EQU    S=END+1     = 0
 S=STOP   EQU    S=PAU+1     =+1
  
 MODE     DEFINE 0,3               FUNCTION MODE. 
 FARGC    DEFINE 3,L.ARGC    ARGUMENT COUNT.
 FARGM    DEFINE 9,3               ARGUMENT MODE. 
 FJPAD    DEFINE 12,9              JUMP ADDRESS/SHIT COUNT FIELD. 
 FANSI    DEFINE 21,1              IF ANSI = 1. NON ANSI = 0. 
 FBEF     DEFINE 22,1              INDICATE *BEF* VS INTRINSIC. 
 FDPC     DEFINE 24,36             *DPC* FOR FUNCTION.
****
  
**        REGISTER FIELDS IN PARSED FILE
  
 UREG     DEFINE 0,6         LOAD REGISTER UPPER PART.
 LREG     DEFINE 6,6         LOAD REGISTER LOWER PART.
  
  
          END 
