*        704726   SIGMA 5/7         BPM M:PASS1
         SYSTEM   SIG7FDP
MODE     EQU      1
CFU      EQU      1
BPMLIB   EQU      0                 1=BUILD BPM LIB UNDER CP-V
*BPMLIB=1 MUST BE USED ONLY WITH MODE=1 AND THEN JUST TO
*FORM A LOADER TO USE IN BUILDING BPM LIBRARIES UNDER CP-V.
         CSECT    1
         DEF      MCP1
MCP1     EQU      %
         REF      M2,M3,M4,M5,M6,M7,M8,M15,M16,M17,M20,M32,MN1,MN2,;
                  MN3,MN4,MN8,MN9,MN16,M826,MSKFTYPE,Y1,Y2,Y4,Y8,Y01,;
                  Y02,Y08,Y0C,Y0F,Y001,Y002,Y004,Y008,Y00C,;
                  Y001F,Y00FFFF,Y0001,Y0002,Y0003,Y0004,Y0005,Y0006,;
                  Y0007,Y0008,Y000B,;
                  Y0301,Y0303,Y0343,Y0304,Y0405,Y0502,;
                  Y00FF,YFF00FFFF,Y000F,YFFF0FFFF,TXF:,TXM:,;
                  TXLIB,TX6F4:,TXASTL,TXHEAD,;
                  HEADWD,TXTREE,STK2,RFDFSTK2,PASSCODE
         REF      Y000C
         REF      TXBLNK
         REF      READBILI,2BNUM,3BNUM,12BNUM,4BNUM,GBYTE,GETSEG
         REF      DECLSTK,DECLSTK1,DECLBAS,RFDFBAS,RFDFSTK,;
                  RFDFSTK1,EXPRSTK,EXPRSTK1,EXPRBAS,BSEG1,BSEG2,;
                  CSEG1,CSEG2,CROM1,CROM2,CRFDF1,CRFDF2,CURBYTE,;
                  RCDSIZE,SEQNUM,SEVLEV,XSL,LASTCARD,BUF,BUF2,;
                  BFR,TEMPPTR,TREEPTR,FCOUNT,FTABLE,;
                  ERRTAB,ERRSTK,TCBSIZE,TCBPTR,FTAB,RSEG00,;
                  RSEG01,RSEG10,RREL00,RREL01,RREL10,CSEG00,;
                  CREL00,CREL01,CREL10,MAX00,;
                  MAX01,MAX10,DLOC,PLOC,SLOC,LOC,START,LOCCT,;
                  LOADBAS,MODBAS,RELDBAS,MBIAS,FBIAS,BIAS,;
                  RDIG,MODSIZ,NOTLLM,MAXRFDF,MAXEXPR,TOPOMEM,;
                  OPENEF,PLIB,LIB,LOCWD
         REF      TEMPSIZE,DECLSIZE,EXPRDIS,;
                  RFLOADIS,RFDFDIS,NXROMDIS,SBLNKDIS,ROM1DIS,;
                  TMPSZDIS,NUNSTDIS,00DIS,01DIS,10DIS,NRWACCT,;
                  TREESIZE,TREEDIS,BIASDIS,LOWLIMDS,FCOMDIS,;
                  ERRDIS,LMNDIS,USACTDIS,LMPASS,LMEXPDIS,;
                  RDACT1,ROMSIZE,TCBBLNK
         REF      READLM,WRITELM,CLOSE,M:LL,M:EF,M:LM,M:DIC,READEF
         DEF      PASS1
         REF      ER11,ER8,ERC
         REF      ER14
         REF      TXM:DO
         REF      TXM:STAR
         REF      MXRFDFSG
         REF      ER21
         REF      ER22
         REF      PBUF,OPENDIC,READDIC
         REF      CSECFLG
         REF      FCOMSIZ
         REF      Y03
         REF      USID
         REF      LIBER
         DO       MODE=1
         REF      CORELIB
         REF      M:XX
         REF      M:UC
         REF      MREFLAG,MREFTAB,RFLDTBSZ,Y05
         FIN
         REF      KICKOUT
         REF      FIRSTF,LASTF
         REF      DECLCHK
         REF      BLANKER
         REF      PRINT
         REF      CODE
         REF      ER1X,ERAX
         REF      M24
         REF      Y006
         PAGE
BGEZ     EQU      X'681'
BE       EQU      X'683'
BNEZ     EQU      X'693'
BGE      EQU      X'681'
BL       EQU      X'691'
BAZ      EQU      X'684'
BCR8     EQU      X'688'
BCR10    EQU      X'68A'
BLE      EQU      X'682'
BEZ      EQU      X'683'
BNC      EQU      X'688'
         REF      MESSAGE
*        QUIT     ERROR,CONDITION,OUTPUT
QUIT     CNAME
         PROC
LF       EQU      %
         DO       NUM(AF)=3
         DO       AF(2)~=0
         GEN,12,20  AF(2),%+4+MODE
         FIN
         STW,AF(3) CODE
         ELSE
         DO       AF(2)~=0
         GEN,12,20  AF(2),%+3+MODE
         FIN
         FIN
         LI,R3    AF(1)
         DO       MODE=1
         LI,R4    AF(3)=SR3
         FIN
         B        MESSAGE
         PEND
SNAPIT   CNAME
         PROC
LF       CAL1,3   %+1
         DATA     0
         GEN,1,31 AFA(1),AF(1)
         GEN,1,31 AFA(2),AF(2)
         DATA     AF(3),AF(4)
         NOP
         PEND
         PAGE
*                 SYMBOLIC REGISTER DEFINITIONS.
R0       EQU      0
R1       EQU      1
R2       EQU      2
R3       EQU      3
R4       EQU      4
R5       EQU      5
R6       EQU      6
R7       EQU      7
SR1      EQU      8
SR2      EQU      9
SR3      EQU      10
SR4      EQU      11
D1       EQU      12
D2       EQU      13
D3       EQU      14
D4       EQU      15
         PAGE
*                 IMMEDIATE CONSTANTS FOR LOADER.
K0       EQU      0
K1       EQU      1
K2       EQU      2
K3       EQU      3
K4       EQU      4
K5       EQU      5
K6       EQU      6
K7       EQU      7
K8       EQU      8
K9       EQU      9
KA       EQU      X'A'
KB       EQU      X'B'
KC       EQU      X'C'
KD       EQU      X'D'
KE       EQU      X'E'
KF       EQU      X'F'
K10      EQU      X'10'
K11      EQU      X'11'
K12      EQU      X'12'
K15      EQU      X'15'
K16      EQU      X'16'
K17      EQU      X'17'
K19      EQU      X'19'
K1C      EQU      X'1C'
K1E      EQU      X'1E'
K1F      EQU      X'1F'
K20      EQU      X'20'
K22      EQU      X'22'
K24      EQU      X'24'
K30      EQU      X'30'
K39      EQU      X'39'
K3C      EQU      X'3C'
K3F      EQU      X'3F'
K40      EQU      X'40'
K43      EQU      X'43'
K6C      EQU      X'6C'
K78      EQU      X'78'
K80      EQU      X'80'
KFF      EQU      X'FF'
K100     EQU      X'100'
K120     EQU      X'120'
K1FF     EQU      X'1FF'
K200     EQU      X'200'
K202     EQU      X'202'
K256     EQU      X'256'
K800     EQU      X'800'
KC00     EQU      X'C00'
K2000    EQU      X'2000'
K3FFF    EQU      X'3FFF'
K7FFF    EQU      X'7FFF'
K8000    EQU      X'8000'
K10000   EQU      X'10000'
K1FFFF   EQU      X'1FFFF'
K20000   EQU      X'20000'
K30000   EQU      X'30000'
KN1      EQU      -1
KN2      EQU      -2
KN3      EQU      -3
KN4      EQU      -4
KN8      EQU      -8
KN16     EQU      -16
KN100    EQU      -100
KTE      EQU      'E'
KTR      EQU      'R'
         PAGE
MESP     CNAME
         PROC
         AWM,CF(2)  EXPRSTK1
         LCW,CF(2)  CF(2)
         AWM,CF(2)  EXPRSTK
         LW,CF(2)  RFDFSTK
         CW,CF(2)  EXPRSTK
         BL       %+3
         LI,R3    ER8
         B        MESSAGE
         PEND
         SPACE    10
MRSP     CNAME
         PROC
         MSP,CF(2)  RFDFSTK
         LW,CF(2)  RFDFSTK
         AND,CF(2) M17
         STW,CF(2)  RFDFSTK
         CW,CF(2)  EXPRSTK
         BL       %+3
         LI,R3    ER8
         B        MESSAGE
         PEND
         PAGE
PASS1    EQU      %
         PSW,SR4  *R0
*                                   INITIALIZE TO THE ROOT SEGMENT.
FIRSTSEG LI,D1    K0
         STW,D1   CSEG1
         STW,D1   BSEG1
         B        RFDFPTR
*                                   PICK UP THE SEGMENTS FIRST ROM
*                                   TABLE ENTRY.
*
FIRSTROM LW,R4    CSEG1
         AI,R4    ROM1DIS
         LW,R4    *R1,R4
         LH,R4    R4
*
NEXTROM  STW,R4   CROM1
*                                   OPEN THE ELEMENT FILE. RETURN IS +1
*                                   IF IT WAS A LIBRARY MODULE (WE'RE
*                                   DONE WITH IT) OR +2 IF ITS A ROM.
*
         BAL,SR4  LOCROM
         B        GETROM                                                726
*                                   GO PROCESS THE OBJECT MODULE.
*
CALLP1   LCI      K3
         PSM,R1   *R0
         BAL,SR4  LP1
         LCI      K3
         PLM,R1   *R0
*
*                                   CHECK FOR ANOTHER ROM IN THE SAME
*                                   FILE, RETURN +1 IF NO MORE, ELSE +2.
NUTHER   BAL,SR4  READBILI
         B        NEWROM
         BAL,SR4  CHECKROM
         B        NUTHER
         B        CALLP1
*                                   CLOSE THE ELEMENT FILE. CHECK THE
*                                   ROM TABLE FOR MORE FILES IN
*                                   THIS SEGMENT.
*
NEWROM   EQU      %
         LI,R5    M:EF
NEWROM1  CAL1,1   CLOSE
GETROM   LW,R4    CROM1
         AI,R4    NXROMDIS
         LW,R5    *R4,R2
         AI,R4    7-2               ROMSIZE-NXROMDIS
         CI,R5    X'40'
         BANZ     NEXTROM
*                                   SATISFY PREF'S
         BAL,SR4  SATREF
*                                   PURSUE OVERLAY STRUCTURE
*
         LI,R5    BSEG1
         LI,R4    CSEG1
         LW,D1    CSEG1
         BAL,SR4  GETSEG
*                                   SUB-LINK
         B        RFDFPTR
*                                   OVERLAY-LINK
         B        OLP2
*                                   BACK TO ROOT-SEG
         LI,R4    K0
         STW,R4   CSEG1
         B        OLP2
*                                   THIS ROUTINE ESTABLISHES THE REF/
*                                   DEF AND EXPRESSION STACK ADDRESSES
*                                   IN THE TREE TABLE AND FORCES THE
*                                   STACK TO AN EVEN BOUNDARY FOR EACH
*                                   SEGMENT.
*
RFDFPTR  LW,R4    CSEG1
         AI,R4    RFDFDIS
         CI,R4    RFDFDIS
         BNEZ     %+3
         LW,R6    RFDFBAS
         B        RFDFPTR1
         LW,R6    RFDFSTK
         AI,R6    K1
         CI,R6    K1
         BAZ      RFDFPTR1
         AI,R6    K1
         LI,R7    K1
         MRSP,R7
RFDFPTR1 SLS,R6   -1
         LW,R7    M16
         STS,R6   *R1,R4
*
         LW,R5    CSEG1
         AI,R5    EXPRDIS
         LW,R6    EXPRSTK
         AI,R6    KN1
         CI,R6    K1
         BAZ      RFDFPTR2
         LW,R7    Y018
         STW,R7   *R6
         AI,D1    EXPRDIS
         LI,R7    X'10000'
         AWM,R7   *D1,R1
         AI,R6    KN1
         LI,R7    K1
         MESP,R7
RFDFPTR2 SLS,R6   -1
         STW,R6   *R1,R5
         B        FIRSTROM
Y018     DATA     X'01800000'
         DO       MODE=1
TXGPHGP  TEXTC    'GPHGP'
TXMREF   TEXTC    'MREF'
MREFEXPR DATA     X'04032202'
         FIN
*                                   WRITE OUT  REF/DEF STACK IF NOT ROOT
*                                   SEGMENT AND INVERT AND WRITE OUT
*                                   EXPRESSION STACK. SAVE MAX REF/DEF
*                                   AND EXPR STACK SIZE FOR PASS 2
*                                   MEMORY ALLOCATION
*
OLP2     XW,D1    CSEG1
OLP23    EQU      %
         LW,R7    CSEG1
         BNEZ     CHKPREF           CHECK FOR PREFS IN HIGHER SEGMENT
OLP234   EQU      %
         AW,R7    R1
         MTB,1    *R7
         LB,R6    *R7
         LI,R5    K0
         STB,R5   *R7,R6
         LW,R5    CSEG1
         AI,R5    RFDFDIS
         LW,R5    *R5,R1
         LH,R6    R5
         SLS,R6   2
        SLS,R5   1
         LW,R4    RFDFSTK1
         AND,R4   M15
         CW,R4    MAXRFDF
         BLE      %+4
         STW,R4   MAXRFDF
         LW,R4    CSEG1
         STW,R4   MXRFDFSG
         LW,R4    CSEG1
         BEZ      OLP29
         CAL1,1   WRITELM
         SLS,R6   -2
         LCW,R6   R6
         MSP,R6   RFDFSTK
         LW,R5    RFDFSTK
         AND,R5   M17
         STW,R5   RFDFSTK
OLP29    LI,R5    K1
         LB,R6    *R7
         STB,R5   *R7,R6
         LW,R5    CSEG1
         AI,R5    EXPRDIS
         LW,R5    *R5,R1
         LH,R6    R5
         AND,R5   M16
         SLS,R5   1
         SW,R5    R6
         LW,D4    R5
         AI,D4    K1
         LW,SR3   R6
         BEZ      OLP2G
OLP27   LW,D3    *R5,R6
         XW,D3    *D4
         STW,D3   *R5,R6
        BIR,D4   %+1
         BDR,R6   %+1
         ANLZ,D2  OLP27
         CW,D2    D4
         BG       OLP27
OLP2G    EQU      %
         AI,R5    K1
         LW,R6    SR3
         SLS,R6   2
         CAL1,1   WRITELM
         MTB,-1   *R7
         LW,R4    EXPRSTK1
         AND,R4   M15
         CW,R4    MAXEXPR
         BLE      %+2
         STW,R4   MAXEXPR
         SLS,R6  -2
         LCW,R6   R6
         MESP,R6
         LW,D2    CSEG1
         CI,D1    K0
         BNE      OLP25
         AI,D2    SBLNKDIS
         LW,R6    CSEG1
         BNEZ     OLP26
STANDARD EQU      %
*                                   THIS ROUTINE SEARCHES THE REF/DEF
*                                   STACK FOR PREF'S TO AN F: OR M:
*                                   NAME.
         LW,D2    LOCWD
         CI,D2    X'10'
         BANZ     OVRGAP
         LW,D2    RFDFSTK
         AI,D2    1
         INT,R7   6,R1
         LW,D1    6,R1
         LH,D1    D1
         SLS,R7   1
         AW,D1    R7
         LW,R7    RFDFBAS
NXTABS   EQU      %
         LB,R6    *R7
         CI,R6    X'03'
         BE       NAKITUP1
         LW,R6    Y00FFFF
         AND,R6   3,R7
         CW,R6    TXF:
         BE       FNDFILE0
         CW,R6    TXM:
         BE       ADDCBTBL
         LI,SR1   7
         CW,SR1   SEVLEV
         BLE      NAKITUP1          IF SEVLEV IS LESS THAN 7,
         LW,R6    0,R7              CHECK FOR NON-DCB PREFS
         AND,R6   Y000F
         CW,R6    Y0002
         BNE      NAKITUP1
         STW,SR1  SEVLEV
         B        NAKITUP1
*                                   IF ONE IS FOUND THE PREF IS CHANGED
*                                   TO A 01 PROTECTION TYPE DUMMY
*                                   SECTION TO-BE-BUILT WITH X'8'
*                                   DOUBLE WORDS AND THE SIZE IS
*                                   ACCOUNTED FOR IN THE TREE TABLE.
ADDCBTBL EQU      %
         DO       MODE=1
         LCI      2
         LM,8     3,7
         AND,9    YFF
         OR,9     340S
         LI,6     2
         CD,8     SPECDCBS-2,6
         BE       SPECREF
         BDR,6    %-2
         DO       CFU=1
         CW,8     TXM:STAR          THE M* DCB IS A SPECIAL
         BNE      FNDFILE0            CASE CONSISTING OF 41 WDS
         LI,R6    K2                  OF ZEROES
         AWM,R6   FCOUNT
         LI,R6    X'15'
         B        FNDFILE3
         FIN
         FIN
FNDFILE0 EQU      %
         AI,R7    3
         LB,R6    *R7
         BNEZ     %+3
         AI,R7    KN3
         B        NAKITUP1          SKIP IF A 'TRANSPARENT' DEF
         AI,R6    8                 SIZE DCBTABLE ENTRY IS
*                                   NO OF TEXT WORDS+1 WORD DCB POINTER
         SLS,R6   -2
         AI,R7    KN3
         LW,SR1   Y000F
         AND,SR1  0,R7
         CW,SR1   Y0002             CHECK FOR A PREF
         BE       %+3
         CW,SR1   Y0003             OR A DSECT
         BNE      NAKITUP1          DO NOT ADD ANYTHING ELSE TO TABLE
         AWM,R6   FCOUNT            NO, ALLOW ROOM IN DCB NAME TABLE
         CW,SR1   Y0002             IS IT A PREF
         BNE      NAKITUP1
FNDFILE1 EQU      %
         DO       MODE+BPMLIB=1
         LI,R6    X'1A'             34 WORDS FOR CP-V (FOR EXPIRE)
         ELSE
         LI,R6    X'18'             30 WORDS FOR BPM
         FIN
         DO       MODE=1
         DO       CFU=1
FNDFILE3 EQU      %
         FIN
         FIN
         OR,R6    0,R7
         DO       MODE=0[BPMLIB=1
         OR,R6    Y004B
         ELSE
         OR,R6    Y008B
         FIN
         STW,R6   0,R7
         SLS,R6   16
         DO       MODE=0[BPMLIB=1
          PSW,R7  *R0
         BAL,SR4  TM100
         PLW,R7   *R0
         AWM,R6   7,R1              01 SIZE
         ELSE
         AWM,R6   9,R1
         FIN
NAKITUP1 LB,R6    *R7
         AW,R7    R6
         CW,R7    D1
         BL       NXTABS
OVRGAP   EQU      %
         PLW,SR4  *R0
         B        *SR4
OLP25    AI,D2    SBLNKDIS
         INT,R6   *D2,R1
         CW,R7    D1
         BE       OLP24
OLP26    AI,D2    3-4               ROM1DIS-SBLNKDIS
         INT,R6   *D2,R1
         STW,R7   CSEG1
         B        OLP23
OLP24    STW,D1   CSEG1
         B        RFDFPTR
         DO       MODE=1
SPECREF  EQU      %                 IF A PREF TO M:XX OR M:UC
         LW,SR1   Y000F
         AND,SR1  0,R7
         CW,SR1   Y0002             SKIP IF NOT A PREF
         BNE      NAKITUP1
         EXU      VALDCB-1,6        CHANGE TO DEF BY SATISFYING
         STW,8    1,R7              FROM :J0
         LW,8     DEFWD
         STW,8    0,R7
         LI,8     X'100'
         STW,8    2,R7
         B        NAKITUP1
VALDCB   LI,8     M:UC
         LI,8     M:XX
DEFWD    DATA     X'06100001'
 FIN
340S     DATA     X'404040'
         DO       MODE~=0
Y008B    DATA     X'8B0000'
         BOUND    8
SPECDCBS TEXTC    'M:UC'
         TEXTC    'M:XX'
         FIN
         PAGE
*                                   THIS ROUTINE CHECKS FOR PREFS IN
*                                   HIGHER SEGMENTS UNLESS SEVLEV IS >= 7
CHKPREF  EQU      %
         LI,R6    7
         CW,R6    SEVLEV
         BLE      OLP234
         LW,R5    CSEG1
         AI,R5    RFDFDIS
         LW,R5    *R5,R1
         LH,R6    R5
         SLS,R5   1
         AW,R6    R5
CHKPREF1 LW,R4    0,R5
         AND,R4   Y000F
         CW,R4    Y0002
         BE       CHKPREF2          FOUND A PREF - UPDATE SEVLEV
         LB,R4    *R5
         AW,R5    R4
         CW,R5    R6
         BL       CHKPREF1
         B        OLP234
CHKPREF2 LI,R6    7
         STW,R6   SEVLEV
         B        OLP234
         PAGE
*                                   THIS ROUTINE OPENS M:EF TO THE
*                                   APPROPRIATE FILE (DISC OR LABELED
*                                   TAPE). IT THEN READS THE 1ST RECORD
*                                   (1ST CARD OR 'HEAD' AND GOES
*                                   TO CHECKROM.)
LOCROM   PSW,SR4  *R0
         LW,D2    CROM1
         AW,D2    R2
         LI,R6    K2
         CW,R6    *D2,R6
         BANZ     %+2
         LI,R6    K1
         LI,R7    3
         STS,R6   OPENEF+1
         LI,D1    OPENEF+8
         BAL,SR4  MOVER
         MTW,1    D1
         LI,R7    K2
         BAL,SR4  MOVER
         LW,R7    *D2
         CI,R7    K0
         BE       LOCROM2
         MTW,1    D1
         LI,R7    K2
         BAL,SR4  MOVER
*
LOCROM3  EQU      %
         CAL1,1   OPENEF
         DO       MODE=1
         MTW,0    MREFLAG           IF MREF MODE,
         BEZ      LOCROM3B            UPON FINDING ROM GPHGP
         MTW,0    MREFTAB           FORCE CSECT & DEF
         BNEZ     LOCROM3B          R/D ENTRIES & EXPR
         LW,R3    *R4,R2            FOR THE DEF FOR THE
         CW,R3    TXGPHGP           MREF TABLE.
         BNE      LOCROM3B
         LW,R3    R2
         AI,R3    K1
         LW,R5    *R4,R3
         CW,R5    TXGPHGP+1
         BNE      LOCROM3B
         LCI      6
         PSM,R2   *R0
         LW,R2    RFLDTBSZ
         AWM,R2   RFLDTBSZ          2 WDS PER MREF TABLE ENTRY
         SLS,R2   16
         AWM,R2   00DIS,R1
*                                   BUILD CSECT & DEF ENTRIES
*                                     FOR MREF
         SLS,R2   -16               SIZE IN DOUBLEWDS
         AW,R2    Y0304             CSECT:  WD 0
         LW,R7    RFDFSTK
         LI,R3    K0                        WD 1, VALUE WD
         LI,R4    K1                        WD 2, RES
         LI,R5    K8
         MRSP,R5
         LW,R5    Y0008
         AWM,R5   RFDFDIS,R1        UPDATE R/D SIZE IN TREE
         LCI      3
         STM,R2   1,R7              ADD CSECT ENTRY TO R/D STK
         AI,R7    K2
         LW,R2    Y05               DEF:  WD 0
         LW,R5    TXMREF                  WDS 3-4, NAME
         LW,R6    TXMREF+1
         LCI      5
         STM,R2   2,R7              ADD DEF ENTRY TO R/D STK
         SW,R7    RFDFBAS
         STW,R7   MREFTAB           SAVE POINTER TO VALUE WD.
         LW,R5    MREFEXPR          ADD DEFINING EXPR
         LW,R4    R7                FOR THE MREF DEF TO
         AI,R4    K2                THE EXPR STK.
         LI,R3    K100
         LW,R2    R7
         AI,R2    KN1
         LW,R7    EXPRSTK
         LI,R6    4
         MESP,R6
         LW,R6    Y0004
         AWM,R6   EXPRDIS,R1
         LCI      4
         STM,R2   -4,R7
         LCI      6
         PLM,R2   *R0
LOCROM3B EQU      %
         FIN
         LW,D2    PASSCODE
         STW,D2   OPENEF+14
         LI,R4    K0
         STW,R4   PBUF
*
         LI,R4    K0
         STW,R4   SEQNUM
         BAL,SR4  READBILI
         B        ER1X
         B        CHCKROM1
LOCROM2  LW,D2    Y0301
         STW,D2   *D1
         B        LOCROM3
*                                   THIS ROUTINE USES GBYTE TO RUN THE
*                                   APPROPRIATE CHECKS ON THE RECORD
*                                   READ (SEQUENCE,CHECKSUM,ETC.). THEN
*                                   IF THE 1ST BYTE IS NOT -C (ROM) IT
*                                   CALLS ADLDMD, ELSE RETURNS.
*
CHECKROM PSW,SR4  *R0
CHCKROM1 LI,R4    KN1
         STW,R4   CURBYTE
         STW,R4   SEQNUM
         LI,R4    K0
         STW,R4   LASTCARD
         BAL,SR4  GBYTE
         MTW,-1   CURBYTE
         LW,R5    BUF
         AND,R5   Y0F
         CW,R5    Y0C
         BNE      ADLDMD
         PLW,SR4  *R0
         AI,SR4   K1
         B        *SR4
         PAGE
*                                   THIS ROUTINE 1ST READS THE TREE OF
*                                   THE LOAD MODULE IN RIGHT ABOVE THE
*                                   REF/DEF STACK.
ADLDMD   EQU      %
         PSW,R2   *R0
         LI,R5    K0
         STW,R5   CSECFLG
         LI,R5    K1
         STW,R5   LIB
         LI,R5    PBUF
         MTB,4    *R5
         LB,R7    *R5
         LI,R6    K4
         LB,D1    TXTREE,R6
         STB,D1   *R5,R7
         BDR,R7   %+1
         BDR,R6   %-3
         LW,R4    RFDFSTK
         AI,R4    K1
         LI,R6    K30
         DO       MODE=1
         REF      CHKLM
         XW,R4    R5
         BAL,11   CHKLM
         XW,R5    R4
         FIN
         CAL1,1   READEF
*                                   IT THEN READS IN THE EXPRESSION
*                                   STACK TO ITS APPROPRIATE PLACE
*                                   AND INVERTS IT.
         LW,D2    R4
         LCI      3
         LM,SR1   1,R4
         STM,SR1  *R5
         MTB,1    *R5
         AI,D2    EXPRDIS+1
         LB,R6    *R5
         LI,R7    K1
         STB,R7   *R5,R6
         LW,D1    *D2
         LW,R4    CSEG1
         AI,R4    EXPRDIS
         AND,D1   MN16
         BNEZ     %+3
         LW,R4    EXPRSTK
         B        NOEXPR
         AW,D1    Y0003             ADD SPECIAL EXPR ENTRY SIZE TO TREE
         AWM,D1   *R4,R1
         SLS,D1   -14
         LW,R6    D1
         LI,D1    K3                SIZE OF SPECIAL EXPR STACK ENTRY
         MESP,D1
         LW,R4    EXPRSTK
         LW,SR2   Y038402           PREFACE LIB LMN'S EXPR STACK WITH
         STW,SR2  2,R4                SPECIAL 3-WD ENTRY
         LI,SR2   K100                (SIZE=3, DISP=4, EVALUATED)
         STW,SR2  0,R4              WD RESOLUTION
         LW,SR2   R4
         AI,SR2   K1
         STW,SR2  KICKOUT           SAVE POINTER TO 2ND WD OF ENTRY
         LH,D1    *D2
         LW,R4    EXPRSTK
         SW,R4    D1
         MESP,D1
         LH,D1    *D2                                                   726
         CI,R6    0
         BE       NOEXPR
         DO       MODE=1
         XW,R4    R5
         BAL,11   CHKLM
         XW,R5    R4
         FIN
         CAL1,1   READEF
NOEXPR   EQU      %
         LH,R6    *D2
         LW,SR2   R4
         LW,SR4   SR2
         AW,SR4   R6
         LW,SR3   SR2
         AI,SR3   KN1
         LH,R6    *D2                                                   726
         BEZ      ADLDMD1                                               726
ADLDMD2  LW,SR1   *SR2
ADLDMD3  XW,SR1   *SR3,R6
         STW,SR1  *SR2
         BIR,SR2  %+1
         BDR,R6   %+1
         ANLZ,R7  ADLDMD3
         CW,R7    SR2
         BG       ADLDMD2
*                                   ALL EXPRESSIONS ARE MASKED AS
*                                   UNEVALUATED.
         AI,SR4   KN1
         LW,SR2   SR4
CLREXPR  LI,R6    K0
         LW,R7    Y008
         STS,R6   *SR4
         LW,SR1   *SR4                                                  726
         CW,SR1   Y004                                                  726
         BAZ      CLREXPR1                                              726
*                                   IF THE EXPRESSION IS A CORE
*                                   EXPRESSION THE DESTINATION WORD
*                                   IS ADJUSTED TO BE RELATIVE TO THE
*                                   LOAD  MODULE BASE.
         LH,R7    *SR4                                                  726
         AND,R7   M6                                                    726
         AI,R7    -2                                                    726
         LCW,R7   R7                                                    726
         LW,SR1   *SR4,R7                                               726
         LW,R6    BUF+2
         AND,R6   M16                                                   726
         SLS,R6   1                                                     726
         SW,SR1   R6                                                    726
         STW,SR1  *SR4,R7                                               726
CLREXPR1 LB,SR1   *SR4                                                  726
         SW,SR4   SR1
         CW,SR4   SR3
         BG       CLREXPR
*                                   IT THEN READ IN THE REF/DEF STACK
*                                   IMMEDIATELY BELOW THE EXPRESSION
*                                   STACK.
ADLDMD1  AI,D2    -2
         LH,D3    *D2
         SW,R4    D3
         LW,R6    RFDFSTK
         AI,R6    X'11'             STACK+1+C FOR TREE + 3 FOR CONT.SECT
         CW,R6    R4                IS THERE ROOM TO READ THE RFDF.
         QUIT     ER22,BL,D3
         LI,R7    K0
         LB,R6    *R5
         STB,R7   *R5,R6
         LW,R6    D3
         SLS,R6   2
         DO       MODE=1
         XW,4     5
         BAL,11   CHKLM
         XW,5     4
         FIN
         CAL1,1   READEF
         MTB,-1   *R5
*                                   A SPECIAL CONTROL SECTION IS ADDED
*                                   TO THE FRONT OF THE REF/DEF STACK.
*                                   THIS CONTROL SECTION WILL REFLECT
*                                   THE SIZE OF THE ENTIRE MODULE
*                                   AND IN PLACE OF A VALUE WILL HAVE
*                                   THE RELATIVE POSITION AND # OF
*                                   WORDS OF THIS MODULE EXPRESSION
*                                   STACK.
         AI,R4    KN3
         LW,R7    Y0304
         STW,R7   *R4
         LW,R7    CSEG1
         AI,R7    EXPRDIS                                               726
         LW,R7    *R1,R7                                                726
         AND,R7   M16                                                   726
         SLS,R7   1                                                     726
         LW,D4    EXPRSTK
         SW,D4    R7                                                    726
         LCW,D4   D4                                                    726
         AI,D4    1                                                     726
         SW,D4    D1                                                    726
         STH,D1   D4                                                    726
         STW,D4   2,R4                                                  726
         LI,R7    K0                                                    726
         STW,R7   1,R4
         AI,D2    KN1
FNDSIZ   LH,D4    *D2                                                   726
         BNEZ     FNDSIZ1
         AI,R7    K1
         AI,D2    K2
         CI,R7    K3
         BNE      FNDSIZ
         B        FNDSIZ2
FNDSIZ1  SLS,R7   22
         OR,R7    D4
         STS,R7   *R4
FNDSIZ2  LW,SR3   R4
         LI,SR1   KN3
         LW,D1    RFDFDIS,R1
         AND,D1   M16
         SLS,D1   1
         DO       MODE=1
         LI,R3    0
         STW,R3   PBUF+4
         FIN
         LW,R5    KICKOUT           SET 2ND WD OF SPECIAL EXPR ENTRY
         BEZ      ADRFDF              TO POINT TO SPECIAL REF/DEF
         LW,D4    RFDFSTK1            CONTROL SECTION
         AND,D4   M15
         STW,D4   *R5
         LI,R5    K0
         STW,R5   KICKOUT
*                                   ADRFDF TAKES EACH REF/DEF ENTRY
*                                   AND ADDS IT TO THE REF/DEF STACK,
*                                   THEN CHANGES ALL THE EXPRESSION
*                                   STACK POINTERS TO AGREE WITH
*                                   THE NEW RELATIVE LOCATION OF THE
*                                   ENTRY IN THE REF/DEF STACK. IN
*                                   MOST CASES (NON-SYSGEN GENERATED
*                                   LOAD MODULES) THIS IS MERELY
*                                   A MATTER OF FOLLWOING A CHAIN
*                                   FROM THE REF/DEF ENTRY THRU
*                                   THE EXPRESSION STACK.
ADRFDF   LW,D3    R1
         LW,D4    RFDFSTK
         LW,R5    CSEG1
         AW,R5    R1
         AI,R5    RFDFDIS
         INT,R7   *R5
         LH,R6    *R5
         SLS,R7   1
         AW,R7    R6
         AI,R7    -1
         SW,R7    D4
         MRSP,R7
         LW,D4    RFDFSTK
         DO       MODE=1
         MTW,0    PBUF+4
         BNEZ     %+2
         STW,D4   PBUF+4
         FIN
         LB,R4    *SR3
         LW,R6    SR3
         AI,R6    KN1
*                                   MOVE THE ENTRY TO THE TOP OF THE
*                                   REF/DEF STACK.
ADRFDF2  LW,R5    *R6,R4
         STW,R5   *D4,R4
         BDR,R4   ADRFDF2
         AI,D4    K1
ADLDMD4  LI,R4    K0
         LI,R5    BUF
         LB,R5    *R5
         CI,R5    X'83'
         BE       %+3
         LW,R5    Y001
         STS,R4   *D4
         LW,R2    *D4
         AND,R2   Y0007
         CW,R2    Y0005
         BNE      %+3
*                                   IF ITS A FORWARD REFERENCE MARK
*                                   IT 'USED'.
         LW,R5    Y0007
         STS,R5   *D4
         CI,R2    K0
*                                   FLAG AND ADD DEF'S.
         BE       LIBDEF
         LB,R2    *D4
         CI,R2    1
         BE       NEXTRFDF
         CI,R2    K3
*                                   ADD PREF'S AND REF'S
         BNE      ADRFDF3
         LW,R2    CSECFLG
*                                   LEAVE ALL BUT THE SPECIAL CONTROL
*                                   SECTION AS THEY ARE. THEY HAVE
*                                   TYPE 06 (USED CONTROL SECTION SO
*                                   PASS 2 WILL NOT SEE THEM).
         BNEZ     ADCSEC
*                                   ACCOUNT FOR THE SPECIAL CSECT SIZE.
         MTW,1    CSECFLG
         LW,R4    Y0014                                                 726
         LW,R5    Y0017                                                 726
         STS,R4   *D4
         LW,R6    D4                INITIALIZE
         LW,R3    CSEG1
         AI,R3    RFDFDIS           FORWARD REFERENCE
         LW,R3    *R3,R1
         AND,R3   M16               SEARCH BOUNDARIES.
         SLS,R3   1
         SW,R6    R3
         STW,R6   FIRSTF
         STW,R6   LASTF
         INT,R4   *D4
         SLS,R4   -6
         AND,R4   M2
         LW,R6    LOCWD
         CI,R6    X'1000'
         BAZ      ADLDMD7
         CI,R4    K0                IF CSEC1 SPECIFIED AND
         BNE      ADLDMD7             P.T. =0, FORCE CORE
         LW,R4    *D4                 IMAGE REC INTO P.T. 01,
         EOR,R4   Y006                AND FORCE P.T. OF R/D
         STW,R4   *D4                 ENTRY = 1.  ALSO SET
         LI,R4    K1                  BIT 10 OF ENTRY = 1.
ADLDMD7  EQU      %
         SLS,R5   17
         LW,R6    R5
         SLS,R6   -1
         BAL,SR4  TM100
         LW,R2    CSEG1
         AI,R2    00DIS
         SLS,R4   1
         AW,R2    R4
         AWM,R6   *R2,R1
         B        ADCSEC2
*                                   ADD THE CONTROL SECTION TO THE
*                                   STACK
ADCSEC   LW,R2    LOCWD
         CI,R2    X'1000'
         BAZ      ADCSEC2
         LW,R2    *D4
         AND,R2   Y00C
         BNEZ     ADCSEC2
         LW,R5    Y004
         STS,R5   *D4
ADCSEC2  LI,R2    3
         MRSP,R2
         LI,R2    K3
*                                   INSURE MAX RFDF IS O.K.
         BAL,SR4  CHKMRF
         LI,R2    K30000
         LW,R4    CSEG1
         AI,R4    RFDFDIS
         LW,R7    *R4,R1
         AWM,R2   *R4,R1
         SLS,R7   -16
         LW,R2    CSEG1
         SLS,R2   16
         AW,R7    R2
         LW,SR4   SR2
         LW,R4    RFDFSTK
         AI,R4    -2
         B        WHEXSTK
*                                   FLAG LDEF'S
LIBDEF   LI,R5    K1
         STS,R5   *D4
ADRFDF3  LW,R2    CSEG1
*                                   IF THE NAME IS ALREADY IN THE
*                                   REF/DEF STACK PICK UP A POINTER
*                                   TO IT, OTHERWISE ADD IT TO THE
*                                   STACK AND RETURN THE POINTER.
         LW,D2    RFDFSTK
         BAL,SR4  CHKRFDF
         LH,R5    R7
         AW,R5    R1
         INT,R5   RFDFDIS,R5
         SLS,R5   1
         LW,R2    R7
         AND,R2   M16
         AW,R5    R2
         LW,R4     D4
         LI,SR4   K1
         AND,SR4  *D4
         STS,SR4  *R5
         LW,R2    RFDFSTK
         SW,R2    D2
         LH,D4    *D4
         AND,D4   M4
         CI,D4    KB                IS THIS A LOADER-BUILT DCB
         BNE      CHKTY3
         LW,D4    YFFF0FFFF         YES--FORCE AN SREF SO THE LOADER
         AND,D4   *R5               WON'T PROCESS IT AGAIN
         AI,D4    K10000
         STW,D4   *R5
         B        ADRFDF4
CHKTY3   EQU      %
         CI,D4    K3                IS IT A DSECT (TYPE 03)
         BNE      ADRFDF4           NO
         LW,D4    Y001              YES  -  SET DEFINED BIT
         STS,D4   *R5
         LI,D4    K0                AND INITIALIZE VALUE FIELD
         STW,D4   1,R5              OF ENTRY WITH ZERO
         LW,D4    LOCWD
         CI,D4    X'1000'
         BAZ      ADRFDF4
         LW,D4    *R5
         AND,D4   Y00C
         BNEZ     ADRFDF4
         LW,D4    Y004
         STS,D4   *R5
ADRFDF4  BAL,SR4  CHKMRF
         LW,SR4   SR2
*                                   "81" FOR A TYPE MEANS SYSGEN
*                                   GENERATED IT. "82" MEANS THE LOADER
*                                   DID AND THE STACKS ARE CHAINED.
WHEXSTK  LI,R5    BUF
         LB,R5    *R5
         CI,R5    X'82'
         BNE      OLEXSTK
         LW,R5    1,R4
          LCW,R4   R5
          BEZ      NEXTRFDF
         LW,R5    *SR2,R4
         STW,R7   *SR2,R4
         B        %-4
*                                   THIS LOGIC DECODES OLD   (SYSGEN)
*                                   EXPRESSIONS AND SEES IF THEY WERE
*                                   POINTING TO THIS REF/DEF ENTRY.
*                                   IF SO THE POINTER IS CORRECTED.
OLEXSTK  AW,R7    Y8
         CW,SR2   EXPRSTK
         BE       NEXTRFDF                                              726
FXEXPPTR LH,D4    *SR2
         AND,D4   M6
         LW,R5    SR2
         SW,R5    D4
         LW,D4    R5
         AI,D4    K2
         LW,D2    *D4
         CW,SR1   D2
         BNE      %+2
         STW,R7   *D4
         LW,R6    SR2
         SLS,R6   2
         AI,R6    K2
NEXTEC   LB,D3    0,R6
         CI,D3    K1
         BL       ADCONST1
         BE       ADCONST
         CI,D3    K2
         BE       EXPREND
         CI,D3    K30
         BGE      ADCONST1
         LW,D3    *R5
         CW,SR1   D3
         BNE      ADCONST
         STW,R7   *R5
ADCONST  AI,R5    KN1
ADCONST1 AI,R6    K1
         CI,R6    K3
         BANZ     NEXTEC
         AI,R6    KN8
         B        NEXTEC
EXPREND  LB,R6    *SR2
         SW,SR2   R6
         CW,SR2   EXPRSTK
         BG       FXEXPPTR
NEXTRFDF LW,SR2   SR4
NXTRFDF1 LB,R4    *SR3
         AW,SR3   R4
         AW,SR1   R4
         CW,SR3   EXPRSTK
         BL       ADRFDF
ADLDMDEX PLW,R2   *R0
*                                   CLOSE THE ELEMENT FILE IF IT
*                                   IS NOT FROM THE LIBRARY, RESET
*                                   THE LIBRARY FLAG AND EXIT.
         LW,R5    CROM1
         AW,R5    R2
         LW,R5    2,R5
         CI,R5    X'20'
         BANZ     %+3
         LI,R5    M:EF
         CAL1,1   CLOSE
         LI,R5    0
         STW,R5   LIB
         PLW,SR4  *R0
         B        *SR4
*                                   THIS ROUTINE ADD R2, THE SIZE
*                                   OF THE CURRENT REF/DEF ENTRY,
*                                   TO MAX RFDF IF THE CURRENT
*                                   SEGMENT IS ON THE PATH WITH THE
*                                   LONGEST REF/DEF STACK.
CHKMRF   EQU      %
         LW,R5    CSEG1
         BEZ      ADDMRD
         LW,R5    MXRFDFSG
CHKMRF1  CW,R5    CSEG1
         BE       ADDMRD
         AI,R5     3
         LW,R5    *R5,R1
         AND,R5   M16
         BEZ      *SR4
         B        CHKMRF1
ADDMRD   AWM,R2   MAXRFDF
         B        *SR4
Y0014    DATA     X'140000'                                             726
Y0017    DATA     X'170000'                                             726
M1       DATA     1
Y038402  DATA     X'03840200'       SPECIAL EXPR ENTRY CONTROL WORD
         PAGE
*
*        LP1
*
LP1      EQU      %
*                                   THIS ROUTINE PROCESSES AN OBJECT
*                                   MODULE, DECODING THE OBJECT
*                                   LANGUAGE AND BUILDING THE
*                                   NECESSARY ENTRIES IN THE REF/
*                                   DEF AND EXPR STACK FOR PASS 2.
         PSW,SR4  *R0
         LW,D1    CSEG1
         AI,D1    RFDFDIS
         LW,D1    *D1,R1
         AND,D1   M16
         SLS,D1   1
         LW,D2    DECLBAS
         LW,D3    R1
*                                   MAKE A REF/DEF ENTRY FOR CSEC
*                                   0 AND DECLARE IT.
         LW,R4    RFDFSTK
         AI,R4    K1
         LI,R1    K3
         MRSP,R1
         LW,R5    CSEG1
         AI,R5    RFDFDIS
         AW,R5    D3
         MTH,3    *R5
         LW,R5    Y0304
         LI,R6    0
         LI,R7    K0
         LCI      K3
         STM,R5   *R4
         LW,R1    DECLBAS
         SW,R1    DECLSTK
         MSP,R1   DECLSTK
         LW,R1    RFDFSTK
         AI,R1    KN2
         LW,R2    CSEG1
         SW,R1    D1
         STH,R2   R1
         LW,R2    DECLSTK
         STW,R1   *R2
         AND,R1   M16
         STW,R1   FIRSTF            INITIALIZE FORWARD REFERENCE BOUNDS.
         STW,R1   LASTF
*                                   THIS ROUTINE FETCHES AN OBJECT
*                                   MODULE CONTROL BYTE AND BRANCHES
*                                   TO THE APPROPRIATE ROUTINE.
LDR1     BAL,SR4 GBYTE
         CI,R5    K80
         BGE      LSREL
         CI,R5    X'13'
         BLE      ITEMV,R5
         CI,R5    X'1E'
         BE       PSECT
         LW,R1    R5
         SLS,R1   -4
         CI,R1    K4
         BE       LABS
         CI,R1    K5
         BE       LLREL
         B        ERAX
ITEMV    B        LDR1              00
         B        ERAX
         B        ERAX
         B        DDNAM             03
         B        ORG               04
         B        DPNAM             05
         B        DSNAM             06
         B        FIELD             07
         B        DFREF             08
         B        DDSECT            09
         B        DDEF              0A
         B        DCS0              0B
         B        DCS               0C
         B        DSTRT             0D
         B        MODEND            0E
         B        RLOAD             0F
         B        DFREFH
         B        SD11
         B        SD12
         B        SD13
         PAGE
SD11     BAL,11   GBYTE
         BAL,11   12BNUM
         B        LDR1
SD12     BAL,11   GBYTE
         BAL,11   SKNAME
         BAL,11   EXPRSKP
         B        LDR1
SD13     BAL,11   SKNAME
         BAL,11   2BNUM
         B        LDR1
SKNAME   PSW,11   *R0
         BAL,11   GBYTE
         LW,1     5
         BAL,11   GBYTE
         BDR,1    %-1
         PLW,11   *R0
         B        *11
         PAGE
*                                   DECLARE DEF NAME: ENTER THE NAME
*                                                      AND DECLARATION.
DDNAM    LI,R4    K0
         BAL,SR4  ENNAM
         BAL,SR4  ENDECL
         B        LDR1
         SPACE    10
*                                   ORIGIN:  SKIP THE EXPRESSION
*                                              UNTIL PASS 2.
ORG      BAL,SR4  EXPRSKP
         B        LDR1
         SPACE    10
*                                   DECLARE PREF NAME: ENTER NAME AND
*                                                       DECLARATION
DPNAM    LW,R4    Y0002
         BAL,SR4  ENNAM
         BAL,SR4  ENDECL
         B        LDR1
         SPACE    10
*                                   DECLARE SREF NAME: ENTER NAME
*                                                     AND DECLARATION.
DSNAM    LW,R4    Y0001
         BAL,SR4  ENNAM
         BAL,SR4  ENDECL
         B        LDR1
         SPACE    10
*                                   FIELD:  SKIP SIZE AND LOC,
*                                            SKIP EXPRESSION.
FIELD    BAL,SR4  2BNUM
         BAL,SR4  EXPRSKP
         B        LDR1
         SPACE    10
*                                   DEFINE FORWARD REF AND HOLD:
*                                     FIND FORWARD REF AND FLAG IT
*                                     WITH A X'F0' IN THE HIGH ORDER
*                                     BYTE SO WE CAN RELEASE IT AT
*                                     MODULE END. THE EXPRESSION IS
*                                     READ AND ADDED TO THE EXPR STACK.
DFREFH   BAL,SR4  2BNUM
         BAL,SR4  CHKFREF
         AI,R5    3
         LI,R6    X'F0'
         STB,R6   *R5
         MTW,1    RSEG00            FLAG THE DFREFH EXPR FOR EXPRIN
         BAL,SR4  EXPRIN
         LI,R6    0
         STW,R6   RSEG00            RESET FLAG
         B        LDR1
         SPACE    10
*                                   DEFINE FORWARD REF: THE FORWARD
*                                     REF IS LOCATED, MARKED 'USED'
*                                     WITH A X'FF' IN THE HIGH ORDER
*                                     BYTE AND THE DEFINING EXPRESSION
*                                     IS ADDED.
DFREF    BAL,SR4  2BNUM
         BAL,SR4  CHKFREF
         AI,R5    K3
         LI,R6    KFF
         STB,R6   *R5
         BAL,SR4  EXPRIN
         B        LDR1
         SPACE    10
*                                   DEFINE DUMMY SECTION: THE DECLAR-
*                                     ATION # IS FETCHED, THE DSECT
*                                     IS DECLARED, TH TYPE AND SIZE
*                                     ARE FETCHED AND THE SIZE
*                                     ACCOUNTED FOR.
DDSECT   BAL,SR4  12BNUM
         BAL,SR4  DECLCHK
         LW,R6    *D2,R7
         LW,R7    R6
         BAL,SR4  ENDECL
         BAL,SR4  3BNUM
         BAL,SR4  FIXSIZE
         B        LDR1
         PAGE
*                                   THIS ROUTINE CHECKS THE  REF/DEF
*                                   ENTRY POINTED TO BY THE DECLAR-
*                                   ATION # GIVEN. IF ANYTHING OTHER
*                                   THAN A CSECT OR DSECT THE TYPE IS
*                                   CHANGED TO DSECT.
FIXSIZE  INT,R4   R6
         STW,R4   D4
         AI,R4    RFDFDIS
         LW,R4    *D3,R4
         AND,R4   M16
         SLS,R4   1
         AW,R4    R5
         LH,R6    *R4
         AND,R6   M4
         CI,R6    4
         BE       FIXSIZE5
         CI,R6    3
         BE       FIXSIZE5
         CI,R6    X'C'
         BE       FIXSIZE5
         LW,R6    *R4
         AND,R6   YFF
         AW,R6    Y0003
         STW,R6   *R4
*                                   THE SIZE AND PROTECTION TYPE ARE
*                                   FOUND AND CHECKED.
FIXSIZE5 EQU      %
         AI,R7    K7
         LI,R6    K0
         SLD,R6   10
         LW,R5    LOCWD
         CI,R5    X'1000'
         BAZ      %+2
         LI,R6    1
         CI,R6    2
         BL       %+2
         LI,R6    1
         LB,R5    *R4
         CI,R5    3
         BE       FIXSIZE7
         LW,R5    3,R4
         DO       MODE+BPMLIB=1
         LB,SR2   R5
         CI,SR2   2
         BLE      FIXSIZE7
         FIN
         CW,R5    TX6F4:
         BNE      %+2
         LI,R6    0
         DO       MODE+BPMLIB=1
         AND,R5   Y00FFFF
         CW,R5    TXF:
         BE       %+3
         CW,R5    TXM:
         BNE      FIXSIZE7
         LI,R6    2                 CHNG PROT. TYPE TO 10 IF DCB DSECT
         FIN
FIXSIZE7 EQU      %
         SLS,R7   -3
         SLD,R6   22
         LI,R5    K0
         LW,R7    Y00C
         CS,R6    *R4
         BE       FIXSIZE6
         LW,R7    M16
         LS,R7    *R4
*                                   ALL DSECTS WITH THE SAME NAME MUST
*                                   HAVE THE SAME PROTECTION TYPE.
         BEZ      FIXSIZE6
         LW,R6    3,R4
         LW,R7    4,R4
         SLD,R6   8
         QUIT     ER14,,R6
FIXSIZE6 EQU      %
         LW,R7    M16
         CS,R6    *R4
         BLE      FIXSIZE1
*                                   INSERT PROTECTION TYPE IN ENTRY.
         STS,R6   R5
         INT,R1   *R4
         SW,R5    R1
         SLS,R5   16
         AW,R7    Y00C
         STS,R6   *R4
         LB,SR2   *R4
         CI,SR2   3
         BE       FIXSIZE1
FIXSIZE3 EQU      %
         LW,R7    3,R4
         CW,R7    TX6F4:
         BNE      FIXSIZE1
*                                   IF 1ST BLANK COMMON; SAVE SIZE.
         SLS,R6   1
         AND,R6   M17
         STW,R6   FCOMSIZ
FIXSIZE1 EQU      %
FIXSIZE2 LW,R6    R5
         PSW,SR4  *R0
         BAL,SR4  TM100
         PLW,SR4  *R0
         LB,R5    *R4
         CI,R5    3
         BE       %+4
         LW,R5    3,R4
         CW,R5    TX6F4:
         BE       *SR4
*                                   IF NOT BLANK COMMON ACCOUNT FOR
*                                   SIZE OF C OR DSECT IN TREE.
FIXSIZE4 EQU      %
         LW,R5    R6
         LI,R6    K0
         LW,R7    Y00C
         LS,R6    *R4
         SLS,R6   -21
         AW,R6    D4
         AI,R6    00DIS
         LW,R7    *D3,R6
         AW,R7    R5
         QUIT     X'31',BNC
         STW,R7   *D3,R6
         B        *SR4
*                                   THIS ROUTINE ADJUSTS THE SIZE UP
*                                   ACCORDING TO M10 OR M100. INPUT IS
*                                   IN R6 IN LEFT HALF OF WORD IN
*                                   # OF DOUBLE WORDS.
TM100    EQU      %                 IF PSECT,ADJUST SIZE UP
         LW,R7    *R4                 TO M200 FOR PAGE.
         AND,R7   Y000F
         CW,R7    Y000C             PSECT
         BNE      TM100B            NO
         AW,R6    Y00FF
         AND,R6   YFF00FFFF
         B        TM1
TM100B   EQU      %
         LW,R7    LOCWD
         CI,R7    K40
         BAZ      TM10
         AW,R6    Y007F
         AND,R6   YFF80FFFF
TM10     CI,R7    K20
         BAZ      TM1
         AW,R6    Y0007
         AND,R6   YFFF8FFFF
TM1      B        *SR4
YFF      DATA     X'FF000000'
Y007F    DATA     X'7F0000'
YFF80FFFF  DATA   X'FF80FFFF'
YFFF8FFFF DATA    X'FFF8FFFF'
         SPACE    10
*                                    DEFINE DEF: FETCH THE DECLAR-
*                                     ATION # AND ADD THE DEFINING
*                                     EXPRESSION.
DDEF     BAL,SR4  12BNUM
         BAL,SR4  DECLCHK
         LW,R7    *D2,R7
         BAL,SR4  EXPRIN
         B        LDR1
         SPACE    10
*                                   AND SIZE AND FIX ENTRY.(DECLAR # 0)
*                                   DECLARE CONTROL SECT 0: FETCH TYPE
DCS0     LW,R6    *D2
         BAL,SR4  3BNUM
         BAL,SR4  FIXSIZE
         B        LDR1
         SPACE    10
*                                   PSECT:  BUILD CSECT
*                                     ENTRY WITH WD 0, BIT 10 = 1
PSECT    LW,R5    Y030C
         B        DCS1
Y030C    DATA     X'030C0000'
         SPACE    10
DCS      LW,R5    Y0304
DCS1     LW,R6    CSEG1
*                                    DECLARE CONTROL SECTION: ENTER
*                                     DECLARATION, MAKE 3 WORD ENTRY
*                                     IN REF/DEF STACK, FETCH TYPE
*                                     AND SIZE AND FIX ENTRY.
         LW,R4    RFDFSTK
         AI,R4    K1
         LW,R7    R4
         SW,R7    D1
         STH,R6   R7
         PSW,R5   *R0
         BAL,SR4  ENDECL
         PLW,R5   *R0
         LI,R6    K3
         MRSP,R6
         LW,R6    CSEG1
         AI,R6    RFDFDIS
         AW,R6    D3
         MTH,3    *R6
         LI,R6    0
         LI,R7    K0
         LW,R4    RFDFSTK
         AI,R4    -2
         LCI      K3
         STM,R5   *R4
         LW,R6    DECLSTK
         LW,R6    *R6
         BAL,SR4  3BNUM
         BAL,SR4  FIXSIZE
         B        LDR1
         SPACE    10
*                                   DEFINE START: SKIP EXPRESSION.
DSTRT    BAL,SR4  EXPRSKP
         B        LDR1
         SPACE    10
*                                   MODULE END: FETCH SEVERITY LEVEL
*                                               AND CHECK.
MODEND   BAL,SR4  GBYTE
         LW,R1    LOCCT
         LH,R1    *R1
         AND,R1   M8
         CW,R1    R5
         QUIT     ER11,BGE,R5
         CW,R5    SEVLEV
         BLE      %+2
         STW,R5   SEVLEV
*                                   SHOULD BE LAST CARD.
         LW,R1    LASTCARD
         QUIT     ERC,BNEZ
*                                   LP1 EXIT.
         PLW,SR4  *R0
         B        *SR4
         SPACE    10
*                                   REPEAT LOAD: FETCH REPEAT COUNT,
*                                     FETCH NEXT BYTE AND TRANSFER
*                                     TO ROUTINE FOR APPROPRIATE
*                                     LOAD TIME.
RLOAD    BAL,SR4  2BNUM
         LW,SR1   R7
         BAL,SR4  GBYTE
         LW,R1    R5
         SLS,R1   -4
         CI,R1    K8
         BGE      LSREL
         CI,R1    K4
         BE       LABS
         CI,R1    K5
         BE       LLREL
        B        ERAX
         SPACE    10
*                                   LOAD ABSOLUTE ITEM: IF THE COUNT
*                                     IS 0 ASSUME X'10'. SKIP THAT MANY
*                                     BYTES.
LABS     AND,R5   M4
         BNEZ     LABS1
         LI,R5    K10
LABS1    STW,R5   R6
LABS2    BAL,SR4  GBYTE
         BDR,R6   LABS2
         B        LDR1
         SPACE    10
*                                   LOAD RELOCATABLE LONG FORM: SKIP 1
*                                     OR 2 BYTE DECLARATION #, THEN SKIP
*                                     4 BYTE #.
LLREL    LW,R6    R5
         CI,R5    K8
         BAZ      LLREL2
         BAL,SR4  GBYTE
         LW,R7    R5
         B        LLREL3
LLREL2   BAL,SR4  2BNUM
LLREL3   EQU      %
LLREL1   BAL,SR4  4BNUM
         B        LDR1
         SPACE    10
*                                   LOAD RELOCATABLE SHORT FORM: SKIP
*                                     4 BYTES.
LSREL    EQU      LLREL1
         PAGE
*                                   THIS ROUTINE DECODES AN EXPRESSION AND
*                                   MAKES AN ENTRY IN THE EXPR STACK. R7
*                                   HAS THE REF/DEF STACK POINTER.
EXPRIN   PSW,SR4  *R0
         LI,SR2   K0
*                                   FIRST INITIALIZE THE ENTRY TO 030300
*                                   DEST 0.
         LW,D4    EXPRSTK
         AI,D4    KN3
         STW,SR2  *D4
         AI,D4    K1
         STW,R7   *D4
         LW,R6    Y0303
         AI,D4    K1
         STW,R6   *D4
         LI,R6    K1                BYTE POINTER
EXPRIN1  BAL,SR4  GBYTE             GET THE EC
         CI,R5    K0
         BE       EXPRIN1
PUTBYTE  AI,R6    K1                PUT EC AWAY
         LI,R1    K3
         AND,R1   R6                DO WE NEED A NEW WORD FOR EC'S-
         BNEZ     PUTBYTE1          NO
*                                   THIS MOVES WORDS DOWN TO MAKE ROOM
*                                   FOR ANOTHER WORD FOR EXPRESSION
*                                   CONTROL BYTES.
         LW,D4    EXPRSTK
         AI,D4    KN1
         LW,R7    D4
         LH,R2    *D4
         AND,R2   M6                DISP IN R2
         SW,R7    R2
         AI,R7    K3                BASE FOR MOVING WDS IN R7
         LB,R1    *D4               # OF WDS TO BE MOVED
         SW,R1    R2                IS # OF WDS IN EXPR - DISP + 2
         AI,R1    K2
         LCW,R1   R1                -(NO. OF WDS TO BE MOVED)
         MTB,1    *D4               INC. # OF WDS IN EXPR
         MTH,1    *D4               INC. DISP
         LW,R2    R7
         AI,R2    KN1
         AI,R6    KN8
PUTBYTE2 LW,R4    *R7,R1
         STW,R4   *R2,R1
         BIR,R1   PUTBYTE2
*                                   THE EC BYTE IS SAVED.
PUTBYTE1 STB,R5   *D4,R6
*                                   AND INTERPRETED.
WHATEC   CI,R5    K1
         BE       ADCON1
         CI,R5    K2
         BE       EXPREND1
         LW,R1    R5
         SLS,R1   -2
         CI,R1    KE
         BE       SUBABS
         CI,R1    K8
         BE       ADDECL1
         CI,R1    K9
         BE       ADFREF1
         CI,R1    KA
         BE       SBDECL1
         CI,R1    KB
         BE       SBFREF1
         CI,R1    KC
         BE       CHGRES1
         CI,R1    KD
         BE       ADDABS
         B        ERAX
*                                   ADD DECLARATION: THE 1 OR 2 BYTE
*                                     DECLARATION # FETCHED. THE DECLAR-
*                                     ATION STACK ENTRY IS SAVED.
ADDECL1  BAL,SR4  12BNUM
         BAL,SR4  DECLCHK
         LW,R7    *D2,R7
         MTW,0    SR2
         BEZ      PTWRD
         B        EXPRSKP1
SBDECL1  EQU      ADDECL1
*                                   ADD FORWARD REF: THE FORWARD REF #
*                                     IS FOUND. THE FORWARD REF IS
*                                     LOCATED IN THE REF/DEF STACK OR
*                                     ADDED IF NOT PRESENT AND THE
*                                     POINTER TO IT IS SAVED.
ADFREF1  BAL,SR4  2BNUM
         MTW,0    SR2
         BNEZ     EXPRSKP1
         BAL,SR4  CHKFREF
         MTW,0    RSEG00            IS THIS A DFREFH EXPRESSION
         BEZ      PTWRD             BRANCH IF NOT
         LW,R3    Y002              OTHERWISE. . .
         STS,R3   *R5               SET BIT 10 OF THE FREF R/D ENTRY FOR SQZ
         B        PTWRD
SBFREF1  EQU      ADFREF1
*                                   ADD CONSTANT: THE 4-BYTE CONSTANT IS
*                                     SAVED.
ADCON1   BAL,SR4  4BNUM
         MTW,0    SR2
         BNEZ     EXPRSKP1
*                                   THIS ROUTINE SAVES A CONSTANT IN
*                                   REF/DEF POINTER IN THE EXPRESSION.
PTWRD    LW,D4    EXPRSTK
         AI,D4    KN1
         LB,R1    *D4
         MTB,1    *D4
         LCW,R1   R1
         STW,R7   *D4,R1
         B        EXPRIN1
SUBABS   EQU      ADDABS
*                                   ADD ABSOLUTE: THE RESOLUTION FROM
*                                     THE BYTE IS DETERMINDED AND ADDED
*                                     TO THE RESOLUTION WORD.
ADDABS   LW,R1    R5
         AND,R1   M2
         AI,R1    K1
         MI,R1    KN8
         LI,R2    1
         AND,R1   D27F
         S,R2     *R1
         CI,R5    K4
         BAZ      %+2
         LCW,R2   R2
         LW,R5    EXPRSTK
         AI,R5    -1
         LH,R4    *R5
         AND,R4   M5
         SW,R5    R4
         AWM,R2   1,R5
*                                   CHANGE RESOLUTION: IS IGNORED.
CHGRES1  MTW,0    SR2
         BNEZ     EXPRSKP1
         B        EXPRIN1
EXPREND1 MTW,0    SR2
*                                   EXPRESSION END: THE EXPRESSION
*                                     IS ADDED TO THE STACK AND THE
*                                     ROUTINE EXITS.
         BNEZ     EXPREND2
         LB,R7    *D4
         LW,R1    CSEG1
         AI,R1    EXPRDIS
         STW,R7   R2
         SLS,R2   16
         AWM,R2   *D3,R1
         MESP,R7
EXPREND2 PLW,SR4  *R0
         B        *SR4
*                                   EXPRSKP SKIPS OVER AN EXPRESSION
*                                   RATHER THAN ADDING AN ENTRY. A
*                                   FLAG IS SET FOR THE REST OF THE
*                                   EXPRIN LOGIC.
EXPRSKP  PSW,SR4  *R0
         LI,SR2   K1
EXPRSKP1 BAL,SR4  GBYTE
         B        WHATEC
D27F     DATA     X'27F'
         PAGE
*                                   THIS ROUTINE ENTERS DEF,S- AND
*
*                                   THIS ROUTINE SEARCHES THE REF/DEF
*                                   STACK FOR A GIVEN FORWARD REF #.
*                                   IF IT IS NOT PRESENT THE FORWARD
*                                   REF IS ADDED.
*                 R7 CONTAINS FREF NO, RETURNS PTR TO ENTRY IN R7
*                 AND ABS LOC. IN R5
CHKFREF  EQU      %
         PSW,R6   *R0
         LW,R4    CSEG1
         AI,R4    RFDFDIS
         LW,R5    *D3,R4
         AND,R5   M16
         SLS,R5   1
         PSW,R5   *R0    SAVE CSEGS R/D BASE
         AWM,R5   FIRSTF    CONVERT FORWARD SEARCH BOUNDS TO ADDRESSES.
         AWM,R5   LASTF
         LW,R5    FIRSTF
         LI,R3    0                 SET FORWARD FLAG
CHKFLOOP LW,R6    *R5
         AND,R6   MSKFTYPE
         CW,R6    Y0005
         BNE      CHKFREF2
         LW,R6    R5
         AI,R6    K3
         LB,D4    *R6               HAS THIS FORWARD BEEN
         CI,D4    X'FF'             DEFINED.
         BE       CHKFREF2
         MTW,0    R3                NO,IS THIS THE FIRST NON-DEFINED.
         BNEZ     CHKFREF1
         STW,R5   FIRSTF            YES.UPDATE LOWER BOUND ON SEARCH.
         LI,R3    -1                SET FLAG.
CHKFREF1 LW,D4    *R6
         AND,D4   M28               IS THIS THE FORWARD WE'RE
         CW,R7    D4                LOOKING FOR.
         BE       FREFIN
CHKFREF2 LB,R6    *R5
         AW,R5    R6
         CW,R5    LASTF
         BLE      CHKFLOOP
*                                   FREF IS NOT PRESENT -ADD IT.
FREFNIN  LW,R4    RFDFSTK
         AI,R4    K1
         LW,R5    R4
         LI,R1    K4
         MRSP,R1
         LW,D4    CSEG1
         AI,D4    RFDFDIS
         AW,D4    D3
         MTH,4    *D4
         LW,D4    Y0405
         STW,D4   *R4
         STW,R4   LASTF             UPDATE UPPER BOUND ON SEARCH.
         LW,D4    CSEG1
         AI,R4    K1
         STW,D4   *R4
         AI,R4    K1
         LI,R6    K0
         STW,R6   *R4
         AI,R4    K1
         STW,R7   *R4
*                                   FREF IS (AT LEAST NOW) IN-RETURN
*                                   POINTER.
FREFIN   EQU      %
         STW,R5   R7
         PLW,R6   *R0               GET CSEG R/D BASE.
         LCW,R3   R6
         AWM,R3   FIRSTF            CONVERT BOUNDS TO DISPLACEMENTS.
         AWM,R3   LASTF
         SW,R7    R6
         LW,R6    CSEG1
         STH,R6   R7
         PLW,R6   *R0
         B        *SR4
M28      DATA     X'FFFFFFF'
         PAGE
*                                   ENTRY POINT FROM ADD LOAD MODULE
*                                   TO LOCATE OR ADD A REF/DEF ENTRY.
CHKRFDF  PSW,SR4  *R0
         LW,D1    R1
         AI,D1    RFDFDIS
         LW,D1    *D1,R2
         AND,D1   M16
         SLS,D1   1
*                                 INSURE TRAILING BLANKS IN LIBRARY
*                                 REF/DEFS SINCE CHRFDF1 EXPECTS THEM.
         LI,R5    X'4040'
         LI,R3    12
         LB,R4    *D4,R3            PICK UP BYTE COUNT OF NAME
         CI,R4    2
         BG       CHKRFDF1          72 MEANS FIRST WORD IS FULL
         BL       %+4
         LI,R3    15
         STB,R5   *D4,R3            1 TRAILING BLANK
         B        CHKRFDF1
         LI,R3    7
         STH,R5   *D4,R3            2 TRAILING BLANKS
         B        CHKRFDF1
*                                   P-REF NAMES INTO THE REF/DEF STACK
*                                   IF THEY ARE NOT ALREADY PRESENT. R4
*                                   TELLS WHICH KIND OF ENTRY WE HAVE
*                                   (0-DEF,1-SREF,2-PREF). R7 WILL
*                                   RETURN A POINTER TO THE ENTRY.
ENNAM    PSW,SR4  *R0
*                                   THE NAME IS MOVED TO THE 3RD WORD
*                                   ABOVE THE REF/DEF STACK LEAVING
*                                   ROOM FOR THE FIXED 3 WORDS.
         BAL,SR4  GBYTE
         LW,D4    RFDFSTK
         AI,D4    K4
         LW,R3    TXBLNK            INITIALIZE FIRST WORD
         STW,R3   *D4               OF NAME WITH BLANKS
         STB,R5   *D4
         LW,R6    R5
         LI,R7    K1
ENNAM1   BAL,SR4  GBYTE
         STB,R5   *D4,R7
         AI,R7    K1
         BDR,R6   ENNAM1
*                                   THE REST OF THE ENTRY IS SET UP.
         LB,R1    *D4
         LI,R2    K0
         AI,D4    KN1
         STW,R2   *D4
         LW,R2    CSEG1
         AI,D4    KN1
         STW,R2   *D4
         AI,R1    K4
         SLS,R1   -2
         AI,R1    K3
         STB,R1   R4
         AI,D4    KN1
         STW,R4   *D4
*                                   THE STACK SEARCH IS INITIALIZED.
CHKRFDF1 STW,R2   CSEG2
         AI,R2    RFDFDIS
         LW,R4    *D3,R2
         SLS,R4   -16
         INT,R5   *D3,R2
         SLS,R5   1
         AW,R4    R5
         AI,D4    K3
         LW,R3    *D4
RFDFLOOP EQU      %
         CW,R3    3,R5
         BNE      CHKRFDF3
         LW,R7    R5
         AI,R7    K3
         LB,R6    *D4               GET BYTE COUNT
CHKRNAME LB,R2    *D4,R6
         CB,R2    *R7,R6
         BNE      CHKRFDF3
         BDR,R6   CHKRNAME
         LB,R2    *R5
         CI,R2    3
         BE       CHKRFDF3
*                                   FOUND ONE WITH SAME NAME BRANCH
*                                   ACCORDING TO WHAT TYPE WE STARTED
*                                   WITH.
         LW,R2    LIB
         BEZ      XXXX
         LI,R2    BUF
         LB,R2    *R2
         CI,R2    X'83'
         BNE      XXXX
* DEFCOM OUTPUT HERE, MERGE ENTRY INTO STACK
         LW,R2    Y0007
         AND,R2   -3,R7
         BEZ      XXXX
         LW,R2    D4
         LW,R6    Y000F
         AND,R6   -3,R2
         CW,R6    Y000B             IS THIS A LOADER-BUILT DCB
         BNE      NLDRDCB
         PLW,SR4  *R0               YES - DO NOT ADD IT TO THE STACK
         B        NXTRFDF1          (FROM A DEFCOM LMN)
NLDRDCB  EQU      %
         LW,R6    -1,R2
         STW,R6   -1,R7
         LW,R6    -2,R2
         STW,R6   -2,R7
         LW,SR4   Y001
         STS,SR4  -3,R7
XXXX     EQU      %
         LW,R2    CSEG2
         AI,D4    KN3
         LH,R6    *D4
         AND,R6   M3
         BEZ      DEF
         CI,R6    K3
         BE       DSEC
*                                   WE HAVE A REF.
         LH,R7    *R5
         AND,R7   M3
*                                   WE FOUND A DEF-MARK IT USED.
         BEZ      SUDEF
         CI,R7    K1
         BNE      RETPTR
*                                   IF WE FOUND A SREF CHANGE ITS TYPE
*                                   TO WHAT WE HAVE (SREF OR PREF).
         LW,R7    Y0007
         STH,R6   R6
         STS,R6   *R5
         B        RETPTR
SUDEF    LI,R7    K2
         STS,R7   *R5
*                                   RETURN WITH A POINTER-THE LEFT HALF
*                                   IS  SEGMENT # AND THE RIGHT IS THE
*                                   RELATIVE DISPLACEMENT OF THE ENTRY
*                                   IN THAT SEGMENTS REF/DEF STACK.
RETPTR   LW,R7    R5
         LW,R6    R2
         AI,R6    RFDFDIS
         LW,R6    *D3,R6
         SLS,R6   1
         SW,R7    R6
         STH,R2   R7
         PLW,SR4  *R0
         B        *SR4
*                                   WE HAVE A DSEC. ZERO TYPE AND BYTE
*                                   COUNT OF FOUND ENTRY TO MAKE IT
*                                   'TRANSPARENT' TO FURTHER SEARCH.
DSEC     LI,R6    K0
         LW,R7    M20
         STS,R6   *R5
         STW,R7   2,R5              MAKE RES NON-STD (WON'T
*                                   APPEAR IN MAP)
         AI,R5    K3
         STB,R6   *R5
         B        ENNAM4
*                                   WE HAVE A DEF HERE
DEF      LH,R6    *R5
         AND,R6   M3
*                                   WE FOUND A DEF - DOUBLE DEF.
         BEZ      DUBDEF
         CI,R6    K2
         BG       RETPTR
*                                   WE FOUND A REF-MAKE IT A DEF AND
*                                   MARK IT USED.
         LH,R6    *R5
         AND,R6   MN3
         STH,R6   *R5
         LW,R7    CSEG1
         SLS,R7   2                                                     726
         STS,R7   *R5                                                   726
         DO       MODE=1
         LW,R6    CORELIB           CHECK FOR DEF TO 9INITIAL OR 9DBINITIAL
         BLEZ     SUDEF             B IF CORELIB IS NOT TO BE LOADED
         CW,R6    Y4
         BANZ     SUDEF             B IF CORELIB HAS ALREADY BEEN LOADED
         AI,D4    K3
         LCI      2
         LM,R6    *D4
         AI,D4    KN3
         CD,R6    TX9INITIA
         BE       %+3
         CD,R6    TX9DBINIT
         BNE      SUDEF
         CW,R6    CORELIB           IS DEF SAME AS REF'D NAME IN CORELIB
         BNE      SUDEF             IF NOT, LEAVE CORELIB TRIGGER ON
         LW,R7    Y8
         STS,R7   CORELIB
         FIN
         B        SUDEF
*                                   FLAG THE DEF AS A DDEF UNLESS IT
*                                   CAME FROM THE LIBRARY.
DUBDEF   EQU      %
         LW,R7    PLIB
         CI,R7    K2
         BE       RETPTR
         LW,R7    LIB
         BEZ      DUBDEF2
         LI,R6    0                 SINCE ORIGINAL DEF CAME
         LI,R7    K1                FROM PRIMARY, NON-LIB INPUT,
         STS,R6   *D4               TURN LIB BIT OFF.
         B        RETPTR
DUBDEF2  EQU      %
         LW,R7    Y0008
         STS,R7   *R5
*                                   SEVERITY LEVEL IS AT LEAST 4 NOW.
         LI,R7    K4
         CW,R7    SEVLEV
         BLE      RETPTR
         STW,R7   SEVLEV
         B        RETPTR
*                                   THIS ROUTINE MOVES ALL M: AND F:
*                                   NAMES TO THE ROOT SEGMENT (TO FORCE
*                                   DCB'S INTO THE ROOT). IT INSURES
*                                   THAT THE ENTRY HAS AN EVEN # OF
*                                   WORDS.
CHKINSRT LW,R6    *D4
         AND,R6   Y00FFFF
         LI,R7    K2
CHECK:   CW,R6    TXF:-1,R7
         BE       RSEG
         BDR,R7   CHECK:
         LW,R6    *D4
         CW,R6    TX6F4:
         DO       MODE=0
         BNE      ENNAM3
         ELSE
         BE       RSEG
         LW,R6    CORELIB
         BNEZ     ENNAM3
         LW,R6    D4
         LW,R2    -3,R6
         AND,R2   MSKFTYPE          TYPE OF NEW ENTRY
         CW,R2    Y0001
         BE       ENNAM3            B IF AN SREF
         LCI      2
         LM,R6    *D4
         CD,R6    TX9INITIA
         BE       %+3
         CD,R6    TX9DBINIT
         BNE      ENNAM3
         STW,R6   CORELIB
         CI,R2    0
         BNE      ENNAM3            B IF NOT A DEF
         LW,R7    Y8
         STS,R7   CORELIB           SET IT DEF.
         FIN
RSEG     LW,D4    RFDFSTK
         AI,D4    K1
         LB,R6    *D4
         CI,R6    K1
         BAZ      %+3
         AI,R6    K1
         STB,R6   *D4
         LW,R4    CSEG1
         CI,R4    0
         BE       %+2
         AW,D1    R6
         AWM,R6   MAXRFDF
         LI,R4    RFDFDIS
         INT,R5   *D3,R4
         LW,R4    *D3,R4
         LH,R4    R4
         SLS,R5   1
         AW,R4    R5
         LW,R7    D4
         AW,R7    R6
         SW,R7    R4
         AI,R4    KN1
         LW,R5    R4
         AW,R5    R6
         LB,R2    *D4
INSRFDF1 LW,SR4   *R4,R7
         STW,SR4  *R5,R7
         BDR,R7   INSRFDF1
         AI,D4    KN1
         AW,D4    R6
INSRFDF2 LW,R7    *D4,R6
         STW,R7   *R4,R6
         BDR,R6   INSRFDF2
         AI,D4    K1
         AI,R4    K1
         LW,R7    R4
         SW,R7    RFDFBAS
         LW,R4    D3
         LW,R4    -1,R4
         LI,R6    17
         AW,R6    D3
         SLS,R2   -1
         B        %+3
FIXBASES AWM,R2   *R6
         AI,R6    TREESIZE
         CW,R6    R4
         BL       FIXBASES
         LI,R6    K0
         B        ENNAM5
*                                   THIS IS THE LOOP IN THE REF/DEF
*                                   SEARCH.
CHKRFDF3 LB,R6    *R5
         AW,R5    R6
         CW,R5    R4
         BL       RFDFLOOP
*                                   IF THIS STACK IS EXHAUSTED CHECK FOR
*                                   SEGMENTS BELOW IT.
         LW,R2    CSEG2
         BEZ      ENNAM2
         AI,R2    ROM1DIS
         LW,R2    *D3,R2
         AI,D4    KN3
         AND,R2   M16
         B        CHKRFDF1
ENNAM2   LW,R2    CSEG1
         STW,R2   CSEG2
         B        CHKINSRT
*                                   NOT IN THE REF/DEF STACK ADD IT
*                                   AND RETURN POINTER.
ENNAM3   AI,D4    KN3
ENNAM4   LW,R7    RFDFSTK
         AI,R7    K1
         SW,R7    D1
         LW,R6    CSEG2
         STH,R6   R7
ENNAM5   LB,R2    *D4
         MRSP,R2
         AI,R6    RFDFDIS
         LB,R2    *D4
         SLS,R2   16
         AWM,R2   *D3,R6
         PLW,SR4  *R0
         B        *SR4
         PAGE
*                                   THIS ROUTINE PUSHED A DECLARATION
*                                   INTO THE DECLARATION STACK. IF A
*                                   STACK OVERFLOW OCCURS IT MOVES ALL
*                                   OTHER STACKS UP AND INCREASES THE
*                                   DECLARATION STACK BY X'40' WORDS.
*                                   THEN IT REPUSHES.
ENDECL   EQU      %
         PSW,R7   DECLSTK
         BCR,8    PUSHOK
         PSW,6    *0
DCSTKOVF LW,R1    EXPRSTK
         SW,R1    RFDFSTK
         CI,R1    K40
         BL       STOVF1
         LI,R1    K40
STOVF1   LW,R2    R1
         LW,R4    RFDFSTK1
         AND,R4   M15
         LW,R5    RFDFBAS
         AW,R5    R1
         LW,R6    RFDFBAS
         AI,R6    KN1
         AI,R5    KN1
STKMOVE  LW,D4    *R6,R4
         STW,D4   *R5,R4
         BDR,R4   STKMOVE
         SLS,R2   16
         AWM,R2   DECLSTK1
         LCW,R2   R2
         AWM,R2   RFDFSTK1
         AWM,R1   D1
         AWM,R1   RFDFSTK
         AWM,R1   RFDFBAS
         LI,R6    RFDFDIS
         AW,R6    D3
         SLS,R1   -1
         LI,R2    KN1
STKMOVE1 AWM,R1   *R6
         AI,R6    TREESIZE
         CW,R6    *D3,R2
         BL       STKMOVE1
         PLW,6    *0
         B        ENDECL
PUSHOK   EQU      %
         B        *SR4
         PAGE
SATREF   EQU      %
*                                   THIS ROUTINE SATISFIES PREF'S.
         PSW,SR4  *R0
         LW,R3    LOCCT
         LW,R4    NUNSTDIS,R3
         AND,R4   M16
*                                   EXIT IF NO ACCOUNTS SPECIFIED.
         DO       MODE+BPMLIB=1
         BNEZ     INITACCT
         BAL,R6   STCORELIB
         B        SATEXIT1
         ELSE
         BEZ      SATEXIT
         FIN
INITACCT INT,R6   NRWACCT,R3
         SLD,R6   1
         LW,D2    LOCCT
         AW,D2    R6
         AW,D2    R7
         AI,D2    RDACT1
         DO       MODE=1
         LCI      2
         LM,D3    *D2
         CD,D3    TX:SYS
         BNE      NXTUNSAT
         PSW,D2   *R0
         PSW,R4   *R0
         BAL,R6   STCORELIB
         PLW,R4   *R0
         PLW,D2   *R0
         FIN
         PAGE
NXTUNSAT PSW,R4   *R0
*                                   OPEN THE DICTIONARY
         LI,SR3   0
         LCI      2
         LM,D3    *D2
         STM,D3   OPENDIC+12        STORE LIBRARY ACCOUNT
         DO       MODE=1
         LW,D4    MN12              IS THIS A CORE LIBRARY
         CS,D3    TX:P0
         BNE      ITSACN
         MTW,0    CSEG1             YES, IS THIS THE ROOT.
         BNEZ     GOTOBDR
         LW,SR1   CORELIB           YES, HAS A CORE LIBRARY BEEN LOADED
         BLZ      GOTOBDR
         CW,SR1   Y4
         BANZ     GOTOBDR
         SLS,D3   -8
         LI,SR1   3
         STB,SR1  D3
         STW,D3   CORELIB
         LI,R6    GOTOBDR0
         PSW,D2   *R0
         PSW,R6   *R0
         B        GETCORELIB        GET THE LIBRARY
GOTOBDR0 PLW,D2   *R0
GOTOBDR  LI,SR3   -1
         B        SATEREX1
ITSACN   EQU      %
         FIN
         LI,R5    UNSAT5            ADDR IF NO SUCH KEY
         STW,R5   OPENDIC+2
         LI,R5    SATEREX1
         STW,R5   OPENDIC+3
         LI,R5    1
         STW,R5   OPENDIC+7
         CAL1,1   OPENDIC
UNSAT    EQU      %
         LCI      3                 PUSH R2,3,4
         PSM,R2   *R0
UNSAT1   LW,R3    Y01               SET NAME TO HIGHEST
         LI,SR1   0                 INIT STACK
UNSAT2   BAL,R6   PREFNX            GET NEXT PREF
         B        UNSAT4            END OF STACK
         LW,R5    *SR1              GET NOT IN LIB FLAG
         CI,R5    1
         BANZ     UNSAT2            NOT IN LIB
         AI,SR1   3                 POINT TO NAME
         LCI      2
         LM,R5    *SR1              LOAD NAME
         AND,R5   M24               MASK COUNT
         CW,R3    R5                IS NEW NAME HIGHER
         BL       UNSAT3            YES
         BG       %+3               NO, LOWER
         CW,R4    R6                EQUAL, CHECK WORD 2
         BLE      UNSAT3            HIGHER
         LW,R3    R5                LOWER, REPLACE
         LW,R4    R6
         LW,R2    SR1               SAVE POINTER TO NAME
UNSAT3   AI,SR1   -3                RESET POINTER
         B        UNSAT2
UNSAT4   CW,R3    Y01               ANY PREF LEFT
         BE       UNSAT6            NO
         LW,SR1   R2                YES, GET NAME POINTER
         LCI      3                 PULL REGS
         PLM,R2   *R0
         LB,D3    *SR1              IS THE DEF GREATER
         CI,D3    X'B'              THAN KEY MAX (11)
         BLE      CALRDDIC
         LI,R5    X'B'              YES, TRUNCATE.
         STB,R5   *SR1
CALRDDIC EQU      %
         LI,R5    BUF               BUF ADDR
         LW,R6    SR1
         CAL1,1   READDIC           READ DIC
         STB,D3   *R6               RESTORE KEY BC IN RD STACK
         B        ADDLLM            NAME IN DIX
UNSAT5   LW,SR1   R6                NOT IN DIC
         STB,D3   *R6
         AI,SR1   -3
         LI,R6    1
         AWM,R6   *SR1              SET FLAG
         B        UNSAT             DO NEXT
UNSAT6   LI,SR1   0                 INIT STACK
UNSAT7   BAL,R6   PREFNX            GET NEXT PREF
         B        UNSAT8            END OF STACK
         LW,R6    *SR1
         AND,R6   MN1               RESET FLAG
         STW,R6   *SR1
         B        UNSAT7
UNSAT8   LCI      3                 PULL REGS
         PLM,R2   *R0
         B        SATEND            DONE
*  STACK SEARCH SUBR
PREFNX   CI,SR1   0                 START STACK
         BNE      PREFNX1           NO
         LW,SR1   CSEG1             YES, SET UP BASE AND TOP
         AI,SR1   RFDFDIS
         INT,SR2  *SR1,R1
         LW,SR1   *SR1,R1
         LH,SR1   SR1
         SLS,SR2  1
         AW,SR1   SR2
         XW,SR1   SR2
         B        PREFNX2
PREFNX1  LB,R5    *SR1              TO NEXT ITEM
         AW,SR1   R5
         CW,SR1   SR2               END OF STACK
         BGE      *R6
PREFNX2  LW,R5    *SR1              NO
         AND,R5   Y0007
         CW,R5    Y0002             IS IT PREF
         BNE      PREFNX1           NO, GET NEXT
         AI,SR1   3
         LW,R5    *SR1
         AI,SR1   -3
         CW,R5    TXM:STAR
         BE       PREFNX1           DON'T SEARCH FOR M:*
         AND,R5   Y00FFFF
         CW,R5    TXM:
         BE       PREFNX1
         CW,R5    TXF:
         BE       PREFNX1
         AI,R6    1                 YES, RETURN
         B        *R6
SATEND   EQU      %
         LW,R5    M:EF
         CW,R5    Y002
         BAZ      %+3
         LI,R5    M:EF
         CAL1,1   CLOSE
         LI,R5    M:DIC                                                 726
         CAL1,1   CLOSE
SATEREX1 AI,D2    K4
         PLW,R4   *R0
         CI,SR3   0
         BE       SATEXIT
*                                   CONTINUE THRU ALL UNSAT ACCT #'S.
         BDR,R4   NXTUNSAT
SATEREX  EQU      %
SATEXIT  EQU      %
         DO       MODE=1
         LW,R3    Y4
         AND,R3   CORELIB
         BNEZ     SATEXIT1
         BAL,R6   STCORELIB
SATEXIT1 EQU      %
         FIN
         PLW,SR4  *R0
         LI,R5    4
         STW,R5   OPENDIC+7
         B        *SR4
*                                   FOUND THE NAME IN THE DICTIONARY
*                                   ADD THE LOAD MODULE NAME TO THE
*                                   END OF THE APPROPRIATE SEGMENTS
*                                   ROM TABLE. THIS REQUIRES MOVING ANY
*                                   OF THE ROM TABLE WHICH IS HIGHER IN
*                                   MEMORY AND ALL STACKS UP 8
*                                   LOCATIONS, AND CHAGING ALL
*                                   POINTERS TO THESE TABLES.
ADDLLM   LW,R4    CSEG1
         AI,R4    ROM1DIS
         LW,R4    *R4,R1
         LH,R4    R4
         LI,R7    K40
FNDLSTRM AI,R4    NXROMDIS
         LW,D4    *R4,R2
         LW,R5    *R4,R2
         STS,R7   *R4,R2
         AI,R4    5
         CI,R5    X'40'
         BAZ      MOVEROMT
         B        FNDLSTRM
MOVEROMT EQU      %
         AND,D4   MFD
         CI,D4    X'20'
         BANZ     %+2
         AI,D4    X'20'
         STS,D4   BUF+2
         LW,R5    RFDFSTK
         SW,R5    R4
         LW,R6    R4
         AI,R6    ROMSIZE+1
         ANLZ,R7  MOVROMT1+1        WILL MOVE CAUSE A COLLISION
         CW,R7    EXPRSTK         WITH THE EXPRESSION STACK.
         BL       NOCRASH
         SW,R7    EXPRSTK           # OF WDS THAT OVERFLOW IN R7
         QUIT     ER21,,R7          PRINT ERROR AND R7
NOCRASH  EQU      %
         LW,R7    R5
         SW,R7    R2
         AI,R7    K1
MOVROMT1 LW,D3    *R4,R5
         STW,D3   *R6,R5
         BDR,R5   %+1
         BDR,R7   MOVROMT1
         ANLZ,D1  MOVROMT1
         LW,R4    BUF+2
MOVROMT3 CI,R4    K40
         BAZ      MOVROMT2
         LW,R7    R2
         LW,D3    R2
         AI,D3    7
         LW,R4    R6
         AI,R4    -1
MOVROMT4 LW,R5    *R6,R7
         STW,R5   *R4,R7
         AI,R7    1
         CW,R7    D3
         BNE      MOVROMT4
         AI,R6    7
         AW,R4    R2
         LW,R4    2,R4
         B        MOVROMT3
MOVROMT2 LW,R4    R1
         LW,R4    -1,R4
         LW,R6    CSEG1
         AW,R6    R1
         AI,R6    TREESIZE
         LI,R5    ROM1DIS
         LW,D3    Y0008
         AW,R5    R1
         LI,R7    K4                (ROMSIZE+1)/2
FXROMPTR CW,R5    R4
         BG       ADROMENT
         CW,R5    R6
         BL       FIXRDPTR
         AWM,D3   *R5
FIXRDPTR AI,R5    3                 RFDFDIS-ROM1DIS
         AWM,R7   *R5
         AI,R5    8                 TREESIZE-RFDFDIS+ROM1DIS
         B        FXROMPTR
ADROMENT LI,R7    ROMSIZE+1
         AWM,R7   DECLBAS
         AWM,R7   DECLSTK
         AWM,R7   RFDFSTK
         AWM,R7   RFDFBAS
         AW,SR1   R7
         AW,SR2   R7
*                                   OPEN M:EF TO :LIB TO READ THE
*                                   MODULES.
         AI,D1    K1
         LCI      2
         LM,R5    TXLIB
         STM,R5   OPENEF+8
         LCI      3
         LM,R5    BUF
         STM,R5   *D1
         PSW,D2   *R0
         AI,D1    K3
         LCI      2
         LM,D3    *D2
         STM,D3   *D1
         STM,D3   OPENEF+12
         AI,D1    K2
         AI,D2    K2
         LCI      2
         LM,D3    *D2
         STM,D3   *D1
         STM,D3   OPENEF+15
         LI,D1    1
         LI,D2    3
         STS,D1   OPENEF+1
         LW,R5    M:EF
         CW,R5    Y002
         BANZ     LIBOPEN
         CAL1,1   OPENEF
LIBOPEN  EQU      %
*                                   READ THE HEADER.
         LI,R4    BUF
         LCI      3
         LM,D1    BUF
         STM,D1   PBUF
         ANLZ,R5  %-1
         MTB,4    *R5
         LB,R7    *R5
         LI,R6    K4
         LB,D1    TXHEAD,R6
         STB,D1   *R5,R7
         BDR,R7   %+1
         BDR,R6   %-3
         DO       MODE=0
         LI,R6    X'18'
         ELSE
         LI,R6    X'30'
         FIN
         CAL1,1   READEF
         MTB,-4   *R5
         LCI      3
         PSM,SR1  *R0
*                                   GO TO CHECK THE HEADER AND ADD THE
*                                   LOAD MODULE STACKS.
         BAL,SR4  CHECKROM
         LCI      3
         PLM,SR1  *R0
         PLW,D2   *R0
*                                   GO BACK FOR THE NEXT PREF.MUST START
*                                   AT TOP OF STACK AGAIN IN CASE A SREF
*                                   HAS BECOME A PREF.
         B        UNSAT
MOVER    LW,R6    *D2
         STW,R6   *D1
         MTW,1    D1
         MTW,1    D2
         BDR,R7   MOVER
         B        *SR4
Y43      DATA,4   X'43000000'
Y004B    DATA,4   X'4B0000'
GPSETDCB GEN,8,24 6,M:EF
         GEN,1,31 1,0
         GEN,1,31 1,R6
MFD      DATA     X'FD'
         PAGE
         DO       MODE=1
*                 THIS ROUTINE GETS AND ASSOCIATES A CORE
*                                  LIBRARY IN :SYS ACCOUNT.  THE
*                 LIBRARY NAME IS IN WORD CORELIB.
         DEF      STCORELIB
STCORELIB EQU     %
         LW,SR1   CORELIB
         BLEZ     *R6
         CW,SR1   Y4                HAS A CORE LIBRARY BEEN LOADED
         BANZ     *R6               BRANCH IF YES
         PSW,R6   *R0
         LW,R6    TXC:P1
         AND,SR1  M8
         CI,SR1   'N'
         BE       CORETRIG
         LW,R6    TXC:P0
CORETRIG EQU      %
         STW,R6   CORELIB
GETCORELIB EQU    %
         LW,R3    CORELIB
         LCI      5                 PREPARE PRINT BUFFER FOR :PN MESSAGE
         PSM,SR3  *R0
         BAL,SR4  BLANKER
         LCI      5
         LM,SR3   CMESS
         STM,SR3  PBUF
         PLM,SR3  *R0
         STB,R3   PBUF+1
         LI,R5    PBUF              PRINT :PN ASSOCIATED
         CAL1,2   PRINT
         STW,R3   OPENEF+8          LIBRARY NAME
         AND,R3   M8
         STW,R3   CORELIB
         LD,R4    TX:SYS
         STD,R4   OPENEF+12
         LI,R3    0
         STW,R3   OPENEF+15         PASSWORD.
         STW,R3   OPENEF+16
         LI,D1    1
         LI,D2    3
         STS,D1   OPENEF+1
         LI,D1    ABNCORE
         STW,D1   OPENEF+3
         CAL1,1   OPENEF            OPEN CORE LIBRARY
         LI,R5    TXHEAD            KEY
         LI,R4    BUF
         LI,R6    X'30'             SIZE OF HEAD
         CAL1,1   READEF            READ HEAD.
         LW,R6    BUF+7             GET CORE LIB 00 SIZE.
         AI,R6    7                 BOUND TO DOUBLEWORDS.
         SLS,R6   -3
         SLS,R6   16
         AWM,R6   CORELIB
         LW,R3    Y4
         STS,R3   CORELIB
         LI,R3    0
         STW,R3   PBUF
         BAL,SR4  CHECKROM
         LW,R4    PBUF+4            SET DUMMY CONTROL SECTION
         LW,R3    Y0006             FOR CORE LIBRARY TO
         STS,R3   1,R4              TYPE 06 SO PASS2 WILL IGNORE.
         LI,R3    LIBER             RESTORE ABNORMAL RETURN
         STW,R3   OPENEF+3          TO OPENEF P LIST.
         PLW,R6   *R0
         B        *R6
         BOUND    8
TX9INITIA DATA    X'08F9C9D5'
         TEXT     'ITIA'
TX9DBINIT TEXTC   '9DBINIT'
         BOUND    8
TX:SYS   TEXT     ':SYS    '
TXC:P1   TEXTC    ':P1'
TXC:P0   TEXTC    ':P0'
MN12     DATA     X'FFFFF000'
TX:P0    TEXT     ':P0 '
CMESS    TEXTC    ' :P  ASSOCIATED.'
ABNCORE  QUIT     X'27',,SR3
         FIN
         END

