*                SIGMA 5/7         BPM M:FINISH
         SYSTEM   SIG7FDP
MODE     EQU      1
         CSECT    1
         DEF      MCFN
MCFN     EQU      %
         DEF      FINISH
         DEF      MAPER,TX%%
         DEF      WRTCLR,LLBUF,SAVESEG,CSEGNO
         DEF      CLRBUF
         REF      TXBLNK
         REF      PBUF
         REF      TXASTD
         REF      OPENDIC,USID,MODIFY,ER11,LIB
         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      Y00F1
         REF      BREFERR
         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
         REF      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      BINTOHEX,BLANKER,PRINT
         REF      READLM,WRITELM,M:LM,M:LL,M:EF,M:DIC,CLOSE,READEF
         REF      Y00008,M1,M10
         REF      VAL%SW
         REF      LIBFLG,ROOTFLG
         REF      LMNSW
         REF      CODE
         DO       MODE=1
         REF       CHKLM
         REF      Y03
         FIN
         REF      M24
         PAGE
*   VARIABLES AND SCRATCH AREA USED BY MAPER ROUTINE
NOIDD    EQU      LIB
RFOFLSVL EQU      X'F'             SEVERITY ASSIGNED TO RFLD TABLE OVRFLW
NBREFSVL EQU      X'3'
RFDFADR  EQU      RFDFBAS
HICORE   EQU      TOPOMEM
LLBUF    EQU      BUF
TREEADR  EQU      PBUF+8
FBRS     EQU      PBUF+9
NXTDISP  EQU      PBUF+10
NSK      EQU      PBUF+11
CSEGADR  EQU      PBUF+12
CSEGNO   EQU      PBUF+13
COLINDX  EQU      PBUF+14
MAPCHAIN EQU      PBUF+15
ENDRFDF  EQU      PBUF+16
LISK     EQU       ENDRFDF
ERRSW1   EQU      PBUF+17
LSTDEF   EQU      PBUF+18
SAVESEG  EQU      PBUF+19
SEGHI    EQU      RSEG00
SEGLO    EQU      RREL00
SEGSZ    EQU      CSEG00
         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
R8,SR1   EQU       8
R9,SR2   EQU       9
R10,SR3  EQU       10
R11,SR4  EQU       11
R12,D1   EQU       12
R13,D2   EQU       13
R14,D3   EQU       14
R15,D4   EQU       15
* * * * * * * * * * * * * * * *
%R0      EQU       0
%R1      EQU       4
%R2      EQU       8
%R3      EQU       12
%R4      EQU       16
%R5      EQU       20
%R6      EQU       24
%R7      EQU       28
%R8,%SR1 EQU       32
%R9,%SR2 EQU       36
%R10,%SR3 EQU      40
%R11,%SR4 EQU      44
%R12,%D1 EQU       48
%R13,%D2 EQU       52
%R14,%D3 EQU       56
%R15,%D4 EQU       60
         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'
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'
K26      EQU      X'26'
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'
KF0      EQU      X'F0'
KF1      EQU      X'F1'
KF2      EQU      X'F2'
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'
KFF00   EQU      X'FF00'
K8000    EQU      X'8000'
K1FFFF   EQU      X'1FFFF'
K20000   EQU      X'20000'
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
         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
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'
         PAGE
***********************
***** FILBUF PROC *****
***********************
*
*        FILBUF,RN   BA(SOURCE),SRCDSPL,SRCSIZ,BA(DESTN)
*    (OR INDIRECT)   *WADDR1,SRCDSPL,*WADDR2,*WADDR3
* (INDIRECT,INDEXED) (*WADDR1,X1),SRCDSPL,*WADDR2,(*WADDR3,X3)
*
*                                   R12,R13 VOLATILE
FILBUF   CNAME                   **MOVE BYTE STRING TO BUFFER**
         PROC
         LOCAL    R,RU1,RFADR,I8
LF       EQU       %
R        SET       CF(2)           REGISTERS
RU1      SET       R+1
         DO        AFA(3)          IS SIZE INDIRECT
RFADR    SET       AF(3)
         LW,R12    RFADR           YES
         ELSE
         LI,R12    AF(3)           NO
         FIN
         DO        AFA(4,1)        IS DESTIN ADDR INDIRECT(,INDER12ED)
RFADR    SET       AF(4,1)         YES
         LW,RU1    RFADR,AF(4,2)
         ELSE
         LI,RU1    AF(4)           NO
         FIN
         DO        CF(2)=0
         LB,R13    AF(2)
         STB,R13   0,RU1
         AI,RU1    1
         BDR,R12   %-2
         GOTO      I8
         FIN
         DO        AFA(1,1)        IS SOURCE ADDR INDIRECT(,INDER12ED)
RFADR    SET       AF(1,1)
         LW,R      RFADR,AF(1,2)   YES
         DO        AF(2)~=0
         AI,R      AF(2)
         FIN
         ELSE
         LI,R      AF(1)+AF(2)     NO
         FIN
         LB,R13    0,R
         STB,R13   0,RU1
         AI,R      1
         AI,RU1    1
         BDR,R12   %-4
I8       EQU       %
         PEND
*  MOVE WORDS - SOURCE & DESTINATION RANGES DISJOINT, R11 VOLATILE
*        MOVE,RS  RC,RD    /  (RS)=SRCEADDR,(RC)=CNT,(RD)=DESTADDR
MOVE     CNAME
         PROC
LF       EQU      %
         AI,CF(2) KN1
         AI,AF(2) KN1
         LW,R11   *CF(2),AF(1)
         STW,R11  *AF(2),AF(1)
         BDR,AF(1) %-2
         PEND
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
         PAGE
FINISH   EQU      %
*                                   FINISH COMPUTES AND PRINTS THE
*                                   FINAL SEVERITY LEVEL, PERFORMS ANY
*                                  MODIFICATIONS PER MODIFY CARDS, AND
*                                   GENERATES THE LOAD MAP.
         PSW,SR4  *R0
         INT,SR1  BREFERR
         LI,R4    RFOFLSVL
         CI,SR2   0
         BNEZ     UPDSEV
CHKNBREF EQU      %
         LI,R4    NBREFSVL
         CI,SR1   0
         BEZ      CHECKSEV
UPDSEV   EQU      %
         CW,R4    SEVLEV
         BLE      CHECKSEV
         STW,R4   SEVLEV
CHECKSEV BAL,SR4  BLANKER
         LW,R7    SEVLEV
         BEZ      MODNMAP
         PSW,R1   *R0
*                                   PRINT NON-ZERO SEVERITY LEVELS.
*
         BAL,SR4  BINTOHEX
         LCI      3
         LM,SR4   SVL
         LCI      5
         STM,SR4  PBUF+1
         LI,R5    PBUF
         CAL1,2   PRINT
         LI,SR3   ERRTEXT
         LW,SR4   MESCONST
         STW,SR4  PBUF
         LI,R4    -2
         INT,SR1  BREFERR
BUILDMES EQU      %
         LW,R7    10,R4
         BEZ      NEXTERR
         BAL,SR4  BINTOHEX
         STW,D4   PBUF+1
         LCI      5
         LM,SR4   *SR3
         STM,SR4  PBUF+2
         CAL1,2   PRINT
NEXTERR  AI,SR3   5
         BIR,R4   BUILDMES
         PLW,R1   *R0
MODNMAP  EQU      %
         BAL,SR4  MOD               PROCESS ANY MODIFY CARDS & PRINT MAP
         CW,R5    SEVLEV
         QUIT     ER11,BGE
CLOSEIT  EQU      %
         LI,R5    M:LM              CLOSE AND SAVE THE FILE.
         CAL1,1   CLOSE
         DO       MODE=1
         LW,R6    LOCWD
         CI,R6    X'4000'
         BAZ      DONTDEL
         MTW,0    LOADBAS           (IF BIAS=0, 1ST REC GOOD).
         BEZ      DONTDEL           OTHERWISE,
         CAL1,1   OPNLM             IN XMEM, RE-OPEN LMN FILE
         CAL1,1   DELZEREC          INOUT TO ALLOW DELREC
         CAL1,1   CLOSE             OF 1ST REC OF ZEROES
         FIN
DONTDEL  EQU      %
         LI,R5    M:LL
         CAL1,1   CLOSE
         MTW,0    NOIDD
         BNEZ     EXIT
         CAL1,1   CLSDIC            CLOSE & RELEASE MODIFY FILE
EXIT     EQU      %
*                                   ALL DONE!
         PLW,SR4  *R0
         B        *SR4
CLSDIC   GEN,8,24 X'15',M:DIC
         DATA     X'80000000',1
         DO       MODE=1
OPNLM    GEN,8,24 X'14',M:LM
         DATA     X'1000001',4
DELZEREC GEN,8,24 X'D',M:LM
         DATA     X'80000000',Y03
         FIN
         PAGE
*                                   THIS ROUTINE PROCESSES ANY !MODIFY
*                                   CARDS ENCOUNTERED BY CCI AND OUT-
*                                   PUTS THE LOAD MAP. THE MODIFY CARDS
*                                   ARE NOW RECORDS IN A FILE NAMED
*                                   SYSID D. THE M:DIC DCB IS USED.
*                                   INITIALIZE TREE & PNTRS FOR MAPER
MOD      PSW,SR4  *R0
         MTW,-1   -1,R1
         LW,R5     -1,R1            CLEAR LAST WORD IN EACH TREE
         AW,R5    R1                FOR DISPLACED DEFS FLAG
         LI,R7    0
         LW,R4    R1
         STW,R7   10,R4
         AI,R4    11
         CW,R4    R5
         BL       %-3
         STW,R7   NOIDD             RESET MODIFY FLAG
         LW,R5    TOPOMEM
         STW,R5   NXTDISP
         LH,R5    LOCWD
         AND,R5   M8
         PSW,R5   *R0
         CW,R5    SEVLEV
*                                   CHECK SEVERITY LEVEL.
         BL       NOMOD
*                                   OPEN THE DEBUG FILE.
         LW,R4    TXASTD
         AW,R4    USID
         STW,R4   OPENDIC+9
         LI,R5    K200
         STS,R5   OPENDIC+8
         LI,R5    K4
         STW,R5   OPENDIC+7
         LW,R4    LOCCT
         LCI      2
         LM,R5    13,R4
         STM,R5   OPENDIC+12
         LI,R5    MOD1
         STW,R5   OPENDIC+2
         LI,R5    NOMOD
         STW,R5   OPENDIC+3
         LW,R4    LOCWD
         DO       MODE=0
         CI,R4    X'4000'           IN XMEM FOR BPM, M:DIC
         BAZ      %+3               WAS USED TO WRITE
         LI,R5    M:DIC             CONCATENATED LMN.
         CAL1,1   CLOSE
         FIN
         CAL1,1   OPENDIC
         CAL1,1   PRECORD
         CI,R4    X'4010'
         BAZ      MOD8
         LCI      5
         PSM,SR2  *R0
         BAL,SR4  BLANKER
         LCI      6
         LM,SR1   NOMODMSG
         STM,SR1  PBUF
         LW,R4    LOCWD
         CI,R4    X'10'
         BANZ     %+4
         LCI      4                 XMEM
         LM,SR1   XMEMMSG
         B        %+3
         LCI      4                 LIBRARY LMN
         LM,SR1   LIBMSG
         STM,SR1  PBUF+6
         LI,R5    PBUF
         CAL1,2   PRINT
         CAL1,1   CLSDIC
         LCI      5
         PLM,SR2  *R0
         LW,R5    TOPOMEM
         STW,R5   NXTDISP
         B        NOMOD
*                                   THE NECESSARY TABLE FOR THE MODIFY
*                                   ROUTINE IS BUILT IN PBUF.
MOD8     AW,R7    R1
         STW,R7   PBUF+2
         LI,SR1   K0
         STW,SR1  SAVESEG
MOD0     LI,D1    PBUF+4
         LI,D2    00DIS
         LI,R5    K0
         STW,R5   PBUF+1
         BAL,SR4  RDRFDF            READ THIS SEGMENTS RFDF STK
         LW,D3    R5
         SLS,D3   15
         STW,D3   PBUF+3
         LW,D3    TOPOMEM
         SLS,D3   15
         STW,D3   PBUF+7
         MTB,2    *R7,R4
*                                   READ IN THE PROTECTION TYPES FOR THE
*                                   SEGMENT AND THE RELOCATION DICT.
MOD4     SLS,R6   -2
         AW,R5    R6
         AI,R5    K1
         SLS,R5   -1
         SLS,R5   16
         STW,R5   *D1
         SLS,R5   -15
         LW,R6    *D2,R7
         SLS,R6   -16
         CI,R6    K0
         BE       MOD2
         LW,SR4   LOCWD
         CI,SR4   K100
         BANZ     MOD9
         STW,R5   OPENDIC+7
         CI,SR1   K0
         BE       %+3
         CAL1,1   WRITELM
         B        MOD2
         DO       MODE=1
         BAL,SR4  CHKLM
         FIN
         CAL1,1   READLM
MOD2     MTB,1    *R7,R4
         AI,R6    K7
         SLS,R6   -2
         AND,R6   MN1
         AW,R5    R6
         AI,R5    K1
         SLS,R5   -1
         AWM,R5   *D1
         SLS,R5   1
         LW,R6    *D2,R7
         AND,R6   MN16
         SLS,R6   -13
         CI,R6    K0
         BE       MOD3
         CI,SR1   K0
         BE       %+3
         CAL1,1   WRITELM
         B        MOD3
         DO       MODE=1
         BAL,SR4  CHKLM
         FIN
         CAL1,1   READLM
MOD3     AI,D1    K1
         AI,D2    K2
         MTB,1    *R7,R4
         CI,D2    10DIS
         BLE      MOD4
         CI,SR1   K0
         BNE      MOD7
         LI,D3    K0
         STW,D3   EXPRDIS,R7
         SLS,R6   -2
         AW,R5    R6
MOD6     STW,R5   PBUF
         CW,R5    NXTDISP           OVERFLOW INTO DISPLACED DEF STK
         BLE      MOD6A             B IF NOT
         LW,R6    TOPOMEM
         STW,R6   NXTDISP           REINITIALIZE DISPL. DEF STK
MOD6A    EQU      %
         LW,SR2   R7
         LB,R6    *SR2
         LI,R7    K0
         STB,R7   *SR2,R6
         B        %+2
*                                   READ THE DEBUG FILE WITH THE
*                                   KEY EQUAL TO THE SEGMENT NAME
*                                   CONCATENATED WITH 0,1,2....
MOD5     MTB,1    *SR2,R6
         CAL1,1   RDDBUG
         LB,R7    *R5
         CI,R7    K2
         BNE      MOD5
         ANLZ,R7  MOD6
         LCI      4
         PSM,R1   *R0
*                                   DO THE MODIFICATION.
         BAL,SR4  MODIFY
         LCI      4
         PLM,R1   *R0
         B        MOD5
*                                   LAST DEBUG FOR THE SEGMENT HAS BEEN
*                                   PROCESSED, GO WRITE THE SEGMENT.
MOD1     LW,R7    PBUF+2
         MTB,-1   *R7
         LI,SR1   K1
         B        MOD0
MOD7     MTB,-1   *R7
         B        MAP1
NOMOD    MTW,1    NOIDD             SET FLAG FOR NO MODIFY CARDS
         LI,SR1   0
         LW,D4    LOCWD
         CI,D4    K10
         BAZ      MAP
         STW,D4   LIBFLG       SET LIBRARY FLAG.
         LW,R4    MBIAS             IF A LIBRARY LOAD MODULE,
         STW,R4   RFDFDIS,R1        POINT TO ORIGINAL RFDFSTK IN TREE
         AW,R7    R1
         B        MAP1
MOD9     LI,SR4   MOD10
         STW,SR4  PBUF+1
         B        MOD2
MOD10    LB,R5    R0
         AI,R5    K4
         LW,R5    *R7,R5
         SLS,R5   1
         STS,R2   *R5,R1
         B        *SR4
         PAGE
*                                   MAP EACH SEGMENT AFTER IT HAS BEEN
*                                   MODIFIED.
MAP      EQU      %
         AW,R7    R1
         BAL,SR4  RDRFDF
         MTB,-1   *R7
MAP1     BAL,SR4  MAPER
         AI,R7    11
         SW,R7    R1
         CW,R7    -1,R1
         BGE      MODEXIT
         LW,R5    NOIDD
         BNEZ     MAP               MAP NEXT SEGMENT IF NO MODS
         B        MOD8              ELSE PROCESS MODS FOR NEXT SEGMENT
MODEXIT  EQU      %
         LW,R9    LOCWD        TEST TO DETERMINE IF REF/DEF
         AND,R9   Y008         WAS SHORTENED.
         BEZ      NO%WR
         LW,R5    R1           PLACE TREE ADDRESS INTO R5.
         AI,R5    -1           POSITION R5 TO TREE COUNT.
         LW,R6    *R5          PLACE TREE LENGTH INTO R6.
         AI,R6    1
         STW,R6   *R5
         SLS,R6   2
         LI,R7    TXTREE
         CAL1,1   WRITELM      WRITE OUT TREE FOR THIS LOAD MODULE.
NO%WR    EQU      %
         PLW,R5   *R0
         PLW,SR4  *R0
         B        *SR4
RDRFDF   EQU      %
         MTB,1    *R7
         LB,R4    *R7
         LI,R5    0
         STB,R5   *R7,R4
         LW,R5    RFDFBAS
         LW,R6    RFDFDIS,R7
         AND,R6   MN16
         SLS,R6   -14
         CI,SR1   0
         BNE      NOREAD            B IF WRITE MODE SET
         DO       MODE=1
         PSW,SR4  *R0
         BAL,SR4  CHKLM
         PLW,SR4  *R0
         FIN
         CAL1,1   READLM
NOREAD   B        *SR4
RDDBUG   GEN,8,24 X'10',M:DIC
         DATA     X'38000010'
         DATA     X'80000005',140,X'80000009'
PRECORD  GEN,8,24 X'1D',M:DIC
         DATA     X'C0000000'
         DATA     1
         DATA     NOMOD
MESCONST DATA     X'1B40E77D'
ERRTEXT  TEXT     ''' NON-BRANCHING REFS'
         TEXT     ''' BRANCHING REFS     '
SVL      TEXT     ' SEV. LEV.'
NOMODMSG DATA     X'2540D4D6'
         TEXT     'DIFY COMMANDS IGNORE'
XMEMMSG  TEXT     'D IN XMEM       '
LIBMSG   TEXT     'D FOR LIB LMN   '
         PAGE
**************************************
***** REGISTER USAGE CONVENTIONS *****
**************************************
*
*  MAJOR PROCESSING ROUTINES:   BAL,R15  MAJOR
*                                        ARGUMENTS IN ANY REGISTER
*  UTILITY ROUTINES         :   BAL,R11  UTILITY
*                                        ARGUMENTS/RESULTS IN R5-R10
*                                        R0-R4 UNUSED
*                                        R11 LINK
*                                        R12-R15 UNUSED
*  I/O REQUESTS:  R5 <-- BUFFER ADDRESS
*                 R6 <-- BUFFER SIZE
*                 R7 <-- RECORD KEY ADDRESS
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
         PAGE
**************************************
***** LOAD MAP PROCESSOR CONTROL *****
**************************************
*
*  NOTES: 1. THIS SECTION IS THE CONTROL PORTION OF THE PROCESSOR.
*            ALL OTHER MAJOR ROUTINES ARE CALLED FROM HERE.
*
**********************************
***** OUTPUT BUFFER POINTERS *****
**********************************
BALLBUF  EQU       BA(LLBUF)         BA(M:LL DCB BUFFER)
BFL%%    EQU       BA(LLBUF)+0       TRIM LEFT  =28
BFR%%    EQU       BA(LLBUF)+71      TRIM RIGHT
BFHDNGS  EQU       BA(LLBUF)+30      HEADINGS
BFACN    EQU       BA(LLBUF)+39      ACN
BFROOT   EQU       BA(LLBUF)+49      '<ROOT>'
BFTYPLM  EQU       BA(LLBUF)+57      LM TYPE
BFLMN    EQU       BA(LLBUF)+39      LMN
BFBIAS   EQU       BA(LLBUF)+62      BIAS
BFSGN    EQU       BA(LLBUF)+39      SEG NAME
BFSGSZ   EQU       BA(LLBUF)+62      SEGSIZE
BFDEFS   EQU      BA(LLBUF)+20  DESCRIPTION OF DEFS.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
***************************
***** TEXT DATA SIZES *****
***************************
SZ%%     EQU       31
SZHDNGS  EQU       42
SZTYPLM  EQU       11
SZROOT   EQU       6
SZDEFS   EQU      61
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
         PAGE
MAPER    EQU      %
         LCI       0                 SAVE THE REGISTERS
         PSM,R0   *R0
         STW,R1   TREEADR           PNTR TO 1ST WD OF TREE TABLES
         STW,R7   CSEGADR           PNTR TO 1ST WD OF THIS SEG'S TREE
         LW,R9    LOCWD        CHECK IF UNUSED DEFS ARE TO BE
         AND,R9   Y008         REMOVED.
         BEZ      DO%MAP
         LB,D4    HEADWD
         CI,D4    X'82'
         BE       WR%MES       LIBRARY LM--CANNOT SHORTEN REF/DEF STACK.
         CI,D4    X'85'
         BNE      DEL%DEF
WR%MES   EQU      %
         LCI      12
         PSM,R4   *R0          SAVE REGISTERS.
         LCI      12
         LM,R4    RDEF%MSG     WRITE OUT ERROR MESSAGE TO INDICATE
         STM,R4   PBUF         AN ERROR WHEN AN ATTEMPT IS MADE TO
         LI,R5    PBUF         TO SHORTEN THE REF/DEF STACK ON A
         CAL1,2   PRINT        LIBRARY LOAD MODULE.
         LCI      12
         PLM,R4   *R0          RESTORE REGISTERS.
         B        DO%MAP
DEL%DEF  EQU      %
         LW,R8    RFDFBAS      SET REGISTERS 6 AND 7 TO BEGINNING
         LW,R9    RFDFBAS      OF REF/DEF STACK.
         LW,D2    CSEGADR
         AI,D2    6
         LH,R3    *D2   R3=SIZE OF REF/DEF TABLE.
         STW,R3   ENDRFDF      SAVE SIZE
         LI,R2    0
         LI,R3    0
NXT%ENT  EQU      %
         LB,R4    *R8          LOAD NUMBER OF WORDS INTO R4
         LW,R5    *R8
         AND,R5   Y000F        PERFORM CHECK TO DETERMINE
         SLS,R5   -16          IF THE ENTRY IN THE REF/DEF
         CI,R5    8            STACK IS A DEF ENTRY.
         BE       CHK%DEF      DEF FOUND.
         CI,R5    0
         BNE      MVE%ENT      NOT DEF
         AI,R8    1            CHECK FOR ADEF.
         LW,R5    *R8
         AI,R8    -1
         CI,R5    0
         BE       MVE%ENT      ADEF FOUND
CHK%DEF  EQU      %
         LW,R5    *R8
         AND,R5   M10          IS IT UNUSED DEF.
         BEZ      UP%R6        YES--UNUSED DEF ENCOUNTERED.
MVE%ENT  EQU      %
         STB,R4   R9
         SLS,R9   2
         SLS,R8   2
         MBS,R8   0
         SLS,R9   -2
         SLS,R8   -2
         AW,R2    R4
         B        TST%END
UP%R6    EQU      %
         AW,R8    R4
TST%END  EQU      %
         AW,R3    R4
         CW,R3    ENDRFDF      HAVE WE REACHED END OF STACK.
         BL       NXT%ENT      NO.
         LW,R4    R7
         AI,R4    6            PLACE NEW RFDFSTACK SIZE
         STH,R2   *R4          INTO THE TREE TABLE.
         MTB,1    *R7
         LB,R4    *R7
         LI,R5    0
         STB,R5   *R7,R4
         LW,R5    RFDFBAS      BASE OF REF/DEF STACK.
         LW,R6    RFDFDIS,R7
         AND,R6   MN16
         SLS,R6   -14
         CAL1,1   WRITELM
DO%MAP   EQU      %
         LW,R3    RFDFDIS,R7
         LH,R3    R3
         AW,R3    RFDFADR
         STW,R3   ENDRFDF           END OF RFDFSTK + 1
         SW,R7    R1
         STW,R7   CSEGNO            DISP OF SEG'S TREE INTO TABLES
         BAL,R11  CLRBUF            INIT LL BUFFER
         PAGE
         LW,R2    LOCWD
         AND,R2   Y003
         BEZ      LINE3
* * * * * * * * * * * * * * * * * *
LINE0    LW,R2    CSEGNO            PRINT LINES 0,1 IF ROOT
         BNEZ     LINE2
LINE01   BAL,R11   MOVE%%            SET UP FOR LINE 0
         FILBUF,R4 BA(TXLN0),0,SZHDNGS,BFHDNGS    LINE 2 HEADING TO BUF
         LI,R4    '1'
         STB,R4   LLBUF
         BAL,R11   WRTCLR
         LW,R4    LIBFLG
         BEZ      LINE11       NOT LIBRARY LM
         LI,R4    0            **SET SPECIAL LIBRARY ITEMS**
         STW,R4   ROOTFLG      RESET ROOT FLAG
         LI,R2    2            R2 <--LM TYPE INDEX
         B        LINE11+1
         B        LINE11
* * * * * * * * * * * * * * * * * *
MOVE%%  FILBUF,R6  BA(TX%%),0,SZ%%,BFL%%
         FILBUF,R6  BA(TX%%),0,SZ%%,BFR%%
         B        *R11
* * * * * * * * * * * * * * * * * *
LINE11   EQU      %
         BAL,R11   MOVE%%
         FILBUF,R4 BA(TXLN1),0,SZHDNGS,BFHDNGS
         LW,R2    LOCCT
         AI,R2    USACTDIS
         SLS,R2   2                 ACCT NO. - BYTE RES.
         FILBUF,R4 *R2,0,8,BFACN          'ACCTNMBR' TO LLBUF
         FILBUF,R4 BA(TXROOT),0,SZROOT,BFROOT     '<ROOT>' TO LLBUF
         LW,R7    START
         BAL,R11  BINHEX
         BAL,R11  LJADDR
         FILBUF,R4 %R8,0,SZADDR,BFBIAS  /  START ADDR TO LLBUF
         BAL,R11   WRTCLR          **WRITE LINE 1**
LINE2    BAL,R11   MOVE%%          **SET UP AND PRINT LINE 2**
         LW,R2    CSEGNO
         BEZ      LINE21
         LI,R4     '1'               ELSE NEW PAGE
         STB,R4    LLBUF
LINE21   FILBUF,R4 BA(TXLN2),0,SZHDNGS,BFHDNGS  /  HEADING TO LLBUF
         LW,R2    LOCCT
         LW,R7    BIASDIS,R2
         AND,R7   M17               GET BIAS FROM LOCCT
         CI,R7    K0
         BNE      %+3
         LD,R8    TX0
         B        LINE21B
         BAL,R11   BINHEX
         BAL,R11   LJADDR
LINE21B  EQU      %
         FILBUF,R4 %R8,0,SZADDR,BFBIAS          /  BIAS TO LLBUF
         AI,R2    LMNDIS
         LB,R3    *R2
         SLS,R2   2                 LMN NAME, BYTE RES.
         FILBUF,R4 *R2,1,*R3,BFLMN
         BAL,R11   WRTCLR
* * * * * * * * * * * * * * * * * *
LINE3    BAL,R11   MOVE%%          **SET UP AND PRINT LINE 3**
         FILBUF,R4 BA(TXLN3),0,SZHDNGS,BFHDNGS  /  HEADING TO LLBUF
LINE31   LW,R2    CSEGADR
         SLS,R2    2                 CURRENT SEG TREE ADR
         LB,R3    *CSEGADR
         FILBUF,R4 *R2,1,*R3,BFSGN              /  SEG NAME TO LLBUF
         LI,R2     10              **DETERMINE SEGMENT SIZE**
         LI,R5     0
LINE32   AH,R5    *CSEGADR,R2       ACCUM SUM OF PT SIZES FROM TREE
         AI,R2     4
         CI,R2     18
         BLE       LINE32
         SLS,R5    1                 DW SIZE TO WORDS
         LI,R4     0
         DW,R4    D1024             SEG SIZE IN R5
         STW,R5    R7                WHOLE 'K' TO R7
         SLD,R4   -32
         DW,R4    D103              FRACTION 'K' IN R5  (DEC)
         LB,R5     BNHX%TAB,R5
         STB,R5    R5                SET UP SIZE AS DECIMAL QTY=XXX.X
         LI,R3     3                 CONVERT WHOLE K TO DECIMAL
LINE33   LI,R6     0
         DW,R6    D10
         LB,R6     BNHX%TAB,R6
         STB,R6    R4,R3
         BDR,R3    LINE33
         LI,R6     '.'               INSERT DEC PT
         STB,R6    R4
         SCS,R4    8                 XXX.X IN R4R5
         FILBUF,R6 %R4,0,5,BFSGSZ               /  SEG SIZE TO LLBUF
         BAL,R11   WRTCLR          **WRITE LINE 3**
         LW,R4    LOCWD
         AND,R4   Y003         CK BITS 10 AND 11 OF LOCCT.
         BEZ      LINE4        B IF MAP OPTION NOT SPECIFIED.
LINE3A   LW,R4    CSEGNO
         BNEZ     LINE4             PRNT FLG DEFINITIONS IF ROOT
         FILBUF,R4 BA(TXLN3A),0,SZDEFS,BFDEFS
         BAL,R11  WRTCLR            WRITE SYMBOL DEFINITIONS
* * * * * * * * * * * * * * * * * *
LINE4    FILBUF,R4 BA(TXPTLN4),0,72,BALLBUF     /  SUMMARY HDNG TO LLBUF
         BAL,R11   WRTCLR
* * * * * * * * * * * * * * * * * *
LINE567  LI,R2     'A'             **DOUBLE SPACE TO LINE 5**
         STB,R2    LLBUF
         BAL,R15   SEGEVAL         **EVALUATE SEG SUMMARY DATA**
         LI,R2     3
NEXT567  EQU      %
         BAL,R11   VALMOVE           MOVE TEXT & SUMMARY DATA
         CI,R2    1
         BNE       %+3               NOT LINE 7
         LI,R3     'A'
         STB,R3    LLBUF             DOUBLE SPACE ON LINE 7
         BAL,R11   WRTCLR            WRITE THE LINE
         BDR,R2    NEXT567           DO NEXT LINE
* * * * * * * * * * * * * * * * * *
REFORM   BAL,R15   PREPROC         **PREPROCESS THE RFDF STACK**
         LI,R2     3                 SET PSMA INDEX
         BAL,R15   PSMALIST        **LIST PREF'S, SREF'S, DDEF'S**
         BDR,R2    %-1
         LW,R2    LOCWD
         AND,R2   Y003
         BEZ      ENDMAP            BRANCH IF MAP NOT SPECIFIED.
         LI,R2     4
         BAL,R15   PSMALIST          LIST THE ADEF'S
         LW,R2    LIBFLG
         BEZ      NONLIB
         BAL,R15  LIBCHAIN     LIBRARY LM
         B        DOMAP
NONLIB   BAL,R15   SORTMAP         **SORT AND CHAIN RFDF FOR MAP**
* * * * * * * * * * * * * * * * * *
DOMAP    BAL,R15   MAPLIST         %%%%%PRINT THE MAP AND TTFN!%%%%%
         BAL,R11   WRTCLR            CLEAR REMAINS IN LLBUF
         LW,R15   VAL%SW
         BEZ      ENDMAP
         LW,R15   LOCWD        SET NAME BIT IN LOCCT TO ZERO.
         STW,R15  VAL%SW       SAVE LOCCT FOR NEXT SEGMENT.
         AND,R15  SRT%DEL
         STW,R15  LOCWD
         LW,R4    ENDRFDF
         LW,R5    NXTDISP      MOVE REF/DEF FOR
NXT%1    EQU      %            VALUE SORT.
         LW,R12   *R5
         STW,R12  *R4
         AI,R4    -1
         AI,R5    -1
         CW,R4    RFDFADR
         BGE      NXT%1
         BAL,R15  SORTMAP
         BAL,R15  MAPLIST
         BAL,R11  WRTCLR
         LW,R15   VAL%SW
         STW,R15  LOCWD        RESTORE ORIGINAL LOCCT FOR NEXT SEGMENT.
         LI,R15   0
         STW,R15  VAL%SW
ENDMAP   EQU      %
         LCI      0
         PLM,R0   *R0
         B        *SR4
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
TX%%     TEXT      ' ******************************'
TXLN0    TEXT      '****  SIGMA 5/6/7/9  LOAD MODULE MAP  ****'
TXLN1    TEXT      '*** ACN=                  START=       ***'
TXLN2    TEXT      '**  LMN=                   BIAS=        **'
TXLN3    TEXT      '*   SGN=                   SIZE=     K   *'
TXLN3A   TEXT     '"+"=DBLE DEF "-"=LIB DEF "*"=UNUSED DEF ',;
                  '"@"=UNUSED LIB DEF   '
TXPTLN4  TEXT     'A ******** PROTECTION TYPES:'
         TEXT     '  00 DATA        01 PROCEDURE   10 STATIC   '
TXHILN5  TEXT     'SEGHI-0        SEGHI-1        SEGHI-2'
TXLOLN6  TEXT     'SEGLO-0        SEGLO-1        SEGLO-2'
TXSZLN7  TEXT     '00 SIZE=       01 SIZE=       10 SIZE='
TXROOT   TEXT     '<ROOT>'
SOFM     TEXTC    ' OUT OF ROOM TO SORT NAMES-SOME DELETED. USE',;
                  ' (MAP,VALUE)'
GOFM     TEXT     'DISPLACED DEF DELETED:  '
         BOUND    8
TX0      DATA,8   X'40404040F0404040'
         PAGE
***************************************
***** REF/DEF STACK PREPROCESSING *****  BAL,R15  PREPROC
***************************************           NO ARGUMENTS
*
*  NOTES: 1. IRRELEVANT ENTRIES (TO MAP) ARE DELETED(IE: SET TYPE=X'F')
*              EG: -ENTRIES <3 WORDS IN LENGTH
*                  -RESOLUTION NOT ONE IN %RESOL TABLE
*                  -DEF'S WITH POINTERS TO ANOTHER TREE TABLE
*                     (THESE ARE ALSO MOVED TO DISPLACED DEF STACK)
*                  -C/DSEC ENTRIES WITH SIZE=0
*                  -ENTRIES OTHER THAN TYPES 0,1,2,3,6,8,B.
*         2. VALUES ARE RESOLVED TO BYTE DISPL & WORD ADDR (X'0B0AAAAA')
*         3. CONTROL WORD IS RE-FORMATTED
*              EG: -BIT 11 IS RESET (0)
*                  -BIT 10 IS SET FOR ADEF'S
*                                  **RESOLUTION TABLE**
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
%RESOL   DATA      X'01000000'       BYTE -  SLD,R  -2
         DATA      X'00010000'       HALF -  SLD,R  -1
         DATA      X'00000100'       WORD -  SLD,R   0
         DATA      X'00000001'       DBL  -  SLD,R   1
         DATA      X'0'              ABS
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
%TYPE    B         %DEF            **PROCESSING CONTROL TABLE**
         B         %PREF
         B         %SREF
         B         %DSEC
         B         %DELETE
         B         %DELETE
         B         %CSEC
         B         %DELETE
         B         %DDEF
         B         %DELETE
         B         %DELETE
         B         %DSEC
         B         %DELETE
         B         %DELETE
         B        %PSEC
         B         %DELETE
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
%RESOLVE SLD,R4   -2               **RESOLVE VALUE EXU'S**
         SLD,R4   -1
         SLD,R4    0
         SLD,R4    1
         SLD,R4   0
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
PREPROC  EQU       %               **ENTERED HERE**
         PSW,R15  *R0
         LW,R1     RFDFADR         R1 <--ADDR OF CURRENT RFDF ENTRY
* * * * * * * * * * * * * * * * * *
PRCLOOP  LB,R2    *R1              **CHECK FOR IRRELEVANT ENTRY**
         CI,R2     2
         BLE       %DELETE           <3 WORD ENTRY
         LW,R4     2,R1              GET RESOL WORD
         LI,R3     5
         CW,R4     %RESOL-1,R3       CHECK RESOLUTION
         BE        PRCOK           R3 <-- RESOLUTION INDEX
         BDR,R3    %-2
         B        %DELETE0
PRCOK    LW,R6    *R1              **RES & SIZE OK - GET TYPE**
         AND,R6   Y000F
         SLS,R6   -16              R6 <-- ENTRY TYPE
         B         %TYPE,R6        **GO TO RESPECTIVE TYPE PROC**
* * * * * * * * * * * * * * * * * *
%DEF     EQU       %               **DEF'S, DDEF'S, & ADEF'S**
%DDEF    EQU       %
         LW,R4    *R1          HAVE WE ENCOUNTERED
         AND,R4   M1           A LIBRARY DEF--?
         BEZ      RESET        NO
         LW,R4    LOCWD        ARE LIB DEFS
         AND,R4   Y00008       TO BE PRINTED?
         BEZ      %DELETE      NO.
         LW,R4    *R1          HAVE WE ENCOUNTERED
         AND,R4   M10          A UNUSED DEF.
         BNEZ     RESET        NO.
         LW,R4    LOCWD
         AND,R4   M1           ARE UDEFS TO BE PRINTED?
         BEZ      %DELETE           NO
RESET    EQU      %
         LW,R4    *R1                GET CONTROL WORD
         AND,R4   YFFCFFFFF         RESET ADEF AND LISTED BITS
         CI,R3     5
         BE        %ADEF             ADEF (RES WD =0)
         STW,R4   *R1              R4 <--CONTROL WORD
         BAL,R11   PRCRESLV          RESOLVE VALUE, SET ROSOL WD ZERO
         B         %DSPLCHK
* * * * * * * * * * * * * * * * * *
%ADEF    OR,R4    Y002              SET THE ADEF BIT
         STW,R4   *R1              R4 <--CONTROL WORD
         LI,R5     0
         STW,R5    2,R1              RESET RESOL WD TO ZERO
         B         %DSPLCHK
* * * * * * * * * * * * * * * * * *
%DSPLCHK AND,R4   XFFFC             **CHECK FOR DISPL DEF**
         BEZ       PRCNXT            NO
         LW,R3     TREEADR         **YES - MOVE DEF AND FLAG TREE TABLE*
         LW,R5    -1,R3
         CI,R5    KC
         BLE      %DELETE           DON'T FLAG DISPLACED DEFS
         SLS,R4   -2
         AW,R3     R4                POINTER TO DEF'S TREE
         LW,R4    M32
         STW,R4    10,R3           **SET FLAG IN TREE**
         LW,R4     R1
         LW,R5     NXTDISP           WA(NEXT DISPL DEF LOC)
         SW,R5     R2                BUILD DISPL DEF STACK FROM TOP DOWN
         STW,R5    NXTDISP           UPDATE NXTDISP POINTER
         CW,R5     ENDRFDF
         BG        PRCDDD
         LI,R15    %DELETE
         B         PRCDSP4
PRCDDD   EQU       %
         MOVE,R4  R2,R5
         B         %DELETE           DELETE ENTRY FROM CURRENT STACK
* * * * * * * * * * * * * * * * * *
%PSEC    EQU      %                 **PSECTS,**
%CSEC    EQU       %               **CSEC'S & DSEC'S HERE**
%DSEC    EQU       %
         LW,R4    *R1                GET SIZE
         AND,R4   M16
         BEZ       %DELETE           DELETE ZERO SIZE ENTRY
         LI,R4     0
         LW,R5    Y003
         STS,R4   *R1
         BAL,R11   PRCRESLV          RESOLVE VALUE & SET RES WD ZERO
         B         PRCNXT
* * * * * * * * * * * * * * * * * *
%PREF    EQU       %               **SKIP PREF'S  **
%SREF    EQU       %               **SKIP SREF'S  **
PRCNXT   EQU       %               **GET NEXT ENTRY*
         AW,R1     R2
         CW,R1     ENDRFDF          CHECK END RFDF STACK
         BGE       PRCDISPL         END - GO AND GET ANY DISPLACED DEFS
         B         PRCLOOP
* * * * * * * * * * * * * * * * * *
%DELETE0 LH,R6    *R1               GET TYPE
         AND,R6   M8
         CI,R6    K2                PREF
         BNE      %DELETE           NO
         STW,R3   2,R1              SET RESOLUTION WD=0
         B        %PREF
%DELETE  LW,R5    Y003F             **IRRELEVANT ENTRIES DELETED HERE**
         STS,R5   *R1                ENTRY DELETED
         B         PRCNXT
* * * * * * * * * * * * * * * * * *
PRCRESLV LI,R5     0               **RESOLVE VALUE WORD**
         LW,R4     1,R1
         EXU       %RESOLVE-1,R3     SHIFT VALUE AS REQUIRED TO WA
         SCS,R5    2                 BYTE DISPL
         STB,R5    R4                VALUE FORMAT = X'0B0AAAAA'
         STW,R4    1,R1            **NEW VALUE**
         LI,R4     0
         STW,R4    2,R1            **RESOL = 0**
         LW,R4     0,R1              RESTORE CONTROL WORD TO R4
         B        *R11
* * * * * * * * * * * * * * * * * *
PRCDISPL LW,R3    TREEADR           DON'T MOVE DISPLACED DEFS TO
         LW,R4    -1,R3               HIGH CORE
         CI,R4    KC
         BLE      PRCEXIT
         LW,R3    CSEGADR           **CHK FOR ANY DISPL DEF'S**
         LW,R4     10,R3           **AND RETRIEVE IF ANY, ELSE EXIT**
         BEZ       PRCEXIT
         LW,R1     NXTDISP         R1 <--CURRENT DISPL DEF
         LW,R3     CSEGNO
         SLS,R3    2               R3 <--CURR SEG TREE DISPL *4
PRCDSP1  LW,R6     ENDRFDF           R2 <- NEXT AVAIL REF/DEF LOC
         LW,R8     0,R1              NEXT TREE POINTER FROM DEF
         AND,R8   XFFFC             TREE DISPL MASK
         LB,R2     *R1                 SIZE ENTRY
         CW,R8     R3
         BNE       PRCDSP2           NOT FROM CURRENT SEGMENT
         LW,R4     R1
         LW,R5     R6                  WA(NEXT RFDF LOC)
         AW,R5     R2
         CW,R5     NXTDISP
         BLE       PRCDSP3
         LI,R15    PRCDSP2
         B         PRCDSP4
PRCDSP3  EQU       %
         LW,R5    R2
         MOVE,R4  R5,R6
         AWM,R2    ENDRFDF             UPDATE ENDRFDF ADDR
PRCDSP2  AW,R1     R2                  UPDATE DISPL DEF POINTER
         CW,R1    HICORE               END OF DISPL DEFS
         BGE       PRCEXIT           YES
         B         PRCDSP1           NO
* * * * * * * * * * * * * * * * * *
PRCEXIT  EQU      %
         LW,R15   NXTDISP
         STW,R15  LMNSW
         PLW,R15  *R0
         B        *R15
PRCDSP4  EQU       %
PRCDSP5  EQU       %
         FILBUF,R6 BA(GOFM),0,24,BALLBUF
         FILBUF,R6 %R4,0,*R2,BFSYM  /  PRINT DELETED DEF
        BAL,R11  WRTCLR
         B         *R15
         PAGE
**********************************
***** SORT AND CHAIN REF/DEF *****  BAL,R15  SORTMAP
***** STACK FOR DEF MAP      *****           NO ARGUMENTS
**********************************
*                                        1            2          3
*     REF/DEF ENTRY FORMATS |01234567|89|0|1|2345|67890123456789|0|1|
*     (AFTER PRE-PROCESSING | NO OF  |PT|A|F|TYPE| POINTER TO   |U|L|
*            BY 'PREPROC')  | WORKS  |RY|D|L|F,O,| PROPER TREE  |S|I|
*                           |  IN    |OP|E|A|1,2,|              |D|B|
*                           | ENTRY  |TE|F|G|3,6,|------------------|
*                                    |  | | |8   | DW SIZE OF C/DSEC|
*
*                           VALUE = X'0B0AAAAA'  RESOL = X'00000000'
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
SORTMAP  EQU       %               **ENTER HERE**
         PSW,R15  *R0
         LCI      12
         PSM,R4   *R0          SAVE REGISTERS.
         LW,R5    LOCWD
         AND,R5   Y001         IS MAP BY NAME--
         BEZ      SORTMAP1     NO
         LW,R5    LOCWD
         AND,R5   Y002         IS MAP BY NAME AND VALUE--
         BEZ      SORTMAP1     NO
         LW,R4    ENDRFDF      MOVE REF/DEF STACK
         LW,R5    NXTDISP      TO TOP OF MEMORY
NXT%ONE  EQU      %            TO SAVE FOR VALUE
         LW,R12   *R4          SORT
         STW,R12  *R5
         CW,R4    RFDFADR
         BE       SORTMAP1     REF/DEF IS MOVED.
         AI,R4    -1
         AI,R5    -1
         STW,R5   LMNSW        SAVE LOCATION OF LAST ENTRY IN REF/DEF STACK.
         CW,R5    ENDRFDF
         BNE      NXT%ONE
         LW,R15   LOCWD        SET INDICATOR TO MAP ON
         AND,R15  VAL%DEL      VALUE ONLY.
         STW,R15  LOCWD
         LCI      12
         LM,R4    MAP%MSG
         STM,R4   PBUF         PRINT MESSAGE IF THERE IS
         LI,R5    PBUF         NOT ENOUGH ROOM FOR BOTH NAME MAP AND
         CAL1,2   PRINT        VALUE MAP AT ONE TIME.
SORTMAP1 EQU      %
         LCI      12
         PLM,R4   *R0          RESTORE REGISTERS.
         LI,R12    X'1FFFF'        R72<-- CHAIN LINK (SRTLINK, SRTEXIT)
         LI,R7     0
         STW,R7   LSTDEF
         STW,R7    NSK
         LW,R7     LISK
SRTLOOP  LW,R3     RFDFADR         R3 <-- NEXT RFDF ENTRY (FROM SRTNXT)
         LI,R14    0               R14<-- CURRENT MAX (SRTVALU, SRTLINK)
         LI,R13    X'1FFFF'        R13<-- POINTER TO CURRENT MAX ENTRY
SRTLOOP1 LW,R2     R3              R2 <-- CURRENT ENTRY
         LW,R6     0,R2            **PROCESS RFDF ENTRY IF TYPE OK**
         AND,R6   Y0027             TYPE MASK
         BEZ       SRTVALU           DEF/DDEF ENTRY
         SLS,R6   -16
         CI,R6     7
         BGE       SRTNXT            ADEF OR DELETED ENTRY
         CI,R6     2
         BLE       SRTNXT            PREF OR SREF
SRTVALU  LI,R3     8               **CHECK RESOL WORD**
         LB,R4    *R2,R3             GET IT
         CI,R4     X'FF'
         BE        SRTNXT            ALREADY CHAINED
         LI,R3     1               **CHECK VALUE IF UNCHAINED**
         LW,R10   *R2,R3             GET IT (OMIT BYTE DISPL)
         AND,R10  M17
         CW,R10    R14
         BL        SRTNXT            NOT NEW MAX
         BG        SRTNUMAX          NEW MAX
         CI,R6     0                 EQUAL TO CURRENT MAX
         BNEZ      SRTNXT            REPLACE CURRENT MAX ON DEF/DDEF ONLY
SRTNUMAX STW,R2    R13             **SAVE POINTER TO NEW MAX ENTRY**
         STW,R10   R14               SAVE NEW VALUE
* * * * * * * * * * * * * * * * * *
SRTNXT   LB,R3    *R2              **GET NEXT RFDF ENTRY**
         AW,R3     R2
         CW,R3     ENDRFDF
         BGE       SRTLINK           END OF RFDF STACK - ADD CHAIN LINK
         B         SRTLOOP1          PROCESS NEXT RFDF ENTRY
* * * * * * * * * * * * * * * * * *
SRTLINK  CI,R13    X'1FFFF'        **SAVE CHAIN LINK IN MAX VAL ENTRY**
         BE        SRTEXIT           NO NEW MAX - EXIT
         LI,R15   X'FF'
         STB,R15  R12               CHAIN FLAG IN NEW RES WD
         LW,R3    LOCWD
         AND,R3   Y001
         BNEZ     NAMSRT       B IF DEFS ARE TO BE SORTED BY NAME.
         LI,R3     2                 STORE CHAIN LINK IN RESOL WORD
         STW,R12  *R13,R3              OF CURRENT MAX ENTRY
         STW,R13   R12               SAVE ENTRY POINTER AS NEW LINK
         B         SRTLOOP
         PAGE
*                                   THIS ROUTINE LINKS CSECTS, THE 1ST
*                                   DEF IN EACH CSECT(IF ANY), & DSECTS.
*                                   THE LAST MAX SECT IS REMEMBERED IN
*                                   R12, THE LAST MAX DEF, IN LSTDEF.
NAMSRT   EQU      %
         LH,R6    *R13
         AND,R6   M3
         CI,R6    0
         BEZ      SRTDEF            B IF NEW MAX IS A DEF
         CI,R6    6
         BNE      SRTDSCT           B IF NEW DEF IS A DSECT
         LI,R6    2
         LW,R3    LSTDEF
         BNEZ     CHNDEF            B IF DEFS    IN THIS CSECT
         STW,R12  *R13,R6           CHAIN LAST SECT TO NEW ONE
         B        SVSECT
CHNDEF   STW,R12  2,R3              CHAIN LAST SECT TO LAST DEF
         STB,R15  R3                MARK CHAIN FLG IN LSTDEF
         STW,R3   *R13,R6           CHAIN LAST DEF TO NEW CSECT
         LI,R3    0
         STW,R3   LSTDEF            CLEAR LSTDEF FOR NEXT CSECT
SVSECT   STW,R13  R12               SAVE NEW CSECT FOR NEXT LINK
         B        SRTLOOP
SRTDSCT  LI,R6    2
         STW,R12  *R13,R6           LINK LAST SECT TO NEW DSECT
         STW,R13  R12               SAVE NEW DSECT FOR NEXT LINK
         B        BLDKEYS           BUILD KEY FOR DSECT NAME
SRTDEF   AI,R13   2
         STB,R15  *R13              MARK CHAIN FLAG IN DEF
         AI,R13   -2
         STW,R13  LSTDEF            SAVE PNTR TO DEF FOR POS CHAINING
BLDKEYS  EQU      %                 BUILD SORT KEYS FOR SSSUBR
         AI,R7     1
         CW,R7    LMNSW        OUT OF CORE.
         BLE       SRTLNK1              NO
         AI,R7     -1
         LW,R3     ERRSW1
         BNEZ      SRTLNK1
         LI,R5    SOFM
         CAL1,2   PRINT
         STW,R7    ERRSW1
         B         SRTLOOP
SRTLNK1  EQU       %
         AI,R13   3
         STW,R13   -1,R7             CREATE SORT KEY
         AI,R13    -3
         B         SRTLOOP
* * * * * * * * * * * * * * * * * *
SRTEXIT2 EQU       %
         CW,R7     LISK
         BE        *R15
         SW,R7     LISK
         STW,R7    NSK
         PSW,R15  *R0
         BAL,R15   SSSUBR            SORT LIST
         PLW,R15  *R0
         B         *R15
SRTEXIT  EQU       %
         LW,R15   VAL%SW
         BNEZ     SRTEXIT1     VALUE SPECIFIED FOR MAP.
         LW,R15    LOCWD
         AND,R15  Y001
         BEZ      SRTEXIT1     MAP ON VALUE SPECIFIED.
         LW,R15   LOCWD
         AND,R15  Y002         CHECK FOR MAP ON VALUE.
         BEZ      %+2          B IF VALUE IS NOT SPECIFIED.
         MTW,1    VAL%SW
         BAL,R15   SRTEXIT2          PERFORM SORT
SRTEXIT1 EQU       %
         AND,R12  M17
         STW,R12   MAPCHAIN        **SAVE FIRST CHAIN LINKAT MAPCHAIN**
         PLW,R15  *R0
         B        *R15               EXIT
*******************************
***** CHAIN LIBRARY LIST  *****  BAL,R15 LIBCHAIN
***** ENTRIES FOR LISTING *****          NO ARGUMENTS
*******************************
*
*  REF/DEF STACK FORMAT: (AS FOR MAP 'SORT'
*  CHAINING TECHNIZUE  : 1. CHAIN CSEC/DSEC ENTRIES IN ORDER FOUND
*                           UNTIL A DEF/DDEF IS FOUND WHILE NIL BACK-LOG
*                        2. SAVE POINTER TO DEF AND THEN LOCATE ITS
*                           CSEC/DSEC AT END OF A STRING OF DEF'S.
*                        3. LINK THE CSEC/DSEC AND SET BYTE 0 OF
*                           RESOLUTION WORD TO X'FF' SO THAT IT WILL
*                           BE BYPASSED AFTER DEF'S ARE LINKED.
*                        4. CONTINUE AS IN 1.
*                        5. SET VALUE WORDS IN CSEC/DSEC ENTRIES.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
LIBCHAIN EQU      %            **ENTER HERE AND SAVE REGISTERS.
         LCI      15
         PSM,R1   *R0          SAVE REGISTERS
         LI,R14   0            R14<--VALUE FOR NEXT CSEC
         LI,R13   MAPCHAIN-2   R13<--POINTER TO LAST LINKED ENTRY
         LW,R3    RFDFADR      R3 <--POINTER TO NEXT RFDF ENTRY
         LI,R12   0            R12<-- SET BACK-LOG OF DEF'S TO NIL
         LI,R10   -1           R10<--SET DEF BY-PASS FLAG
LBCSRCH  LW,R1    R3           **SEARCH FOR NEXT DEF/DDEF  **
         LW,R8    0,R1         **OR C/DSECT ENTRY (LINK ALL **
         AND,R8   =X'00270000'   TYPE MASK
         BEZ      LBCDEF       **C/DSEC'S UNTIL DEF IS FOUND**
         SLS,R8   -16
         CI,R8    7
         BGE      LBCNXT       ADEF OR DELETED--SKIP
         CI,R8    2
         BLE      LBCNXT
         LI,R4    8
         LB,R4    *R1,R4
         CI,R4    X'FF'
         BE       LBCEND       ALREADY LINKED - END OF DEF BACKLOG
         LI,R4    1
         LH,R5    *R1,R4       GET SIZE.
         SLS,R5   1
         STW,R14  *R1,R4       SET VALUE IN C/DSEC ENTRY
         AW,R14   R5           INCR VALUE BY CSEC SIZE FOR NEXT
         BAL,R11  LBCLINK      LINK THE CSEC
         CI,R12   0            CHECK BACK-LOG
         BEZ      LBCNXT       NO BACK-LOGOF DEF'S - CONTINUE
         LW,R3    R12          DEF BACK-LOG - GO LINK THEM
         LI,R10   0            RESET DEF BY-PASS FLAG
         B        LBCSRCH
* * * * * * * * * * * * * * * * * * * * * * * * *
LBCDEF   CI,R10   0            **LINK DEF'S IF BYPASS FLAG RESET**
         BEZ      LBDCF1       FLAG RESET -LINK DEF
         CI,R12   0
         BNEZ     LBCNXT       BY PASS TO NEXT C/DSEC
         STW,R1   R12          **FIRST DEF IN NEW C/DSEC
         B        LBCNXT       SAVE POINTER AND FIND CSEC ENTRY
LBDCF1   BAL,R11  LBCLINK      **LINK CURRENT DEF**
         B        LBCNXT
* * * * * * * * * * * * * * * * * * * * * * * * * *
LBCLINK  LI,R4    X'FF'        **STORE CURRENT ENTRY POINTER**
         AI,R13   2
         STW,R1   *R13         LAST LINKED ENTRY
         STB,R4   *R13
         LW,R13   R1           SET LAST LINK TO NEW LAST LINK
         B        *R11
* * * * * * * * * * * * * * * * * * * * * * * * * *
LBCNXT   LB,R3    *R1          **GET NEXT SEQUENTIAL RFDF ENTRY**
         AW,R3    R1
         CW,R3    ENDRFDF
         BGE      LBCEXIT      END OF RFDF STK
         B        LBCSRCH
* * * * * * * * * * * * * * * * * * * * * * * * * * *
LBCEND   LI,R12   0            **COMES HERE AT END OF DEF BACK-LOG
         LI,R10   -1           RESET BACK-LOG FLAG AND SE BYPASS
         B        LBCNXT
* * * * * * * * * * * * * * * * * * * * * * * * * *
LBCEXIT  AI,R13   2            **END OF RFDF STACK**
         LW,R4    =X'FF01FFFF'    SET LAST ENTRY FLAG X'FF01FFFF'
         STW,R4   *R13
         LCI      15
         PLM,R1   *R0
         B        *R15
         PAGE
********************************
***** LIST REF/DEF ENTRIES *****  BAL,R15  PSMALIST
***** SPECIFIED BY TYPE    *****           R2 <-- PSMA TYPE INDEX
********************************
*
*  NOTES: 1. PREF'S, SREF'S, DDEF'S, & ADEF'S ARE LISTED HERE
*         2. TYPE IS SPECIFIED IN R2 ON ENTRY
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
TXPREF TEXT 'A ******** PREF - PRIMARY REFERENCES NOT LOCATED  ********'
TXSREF TEXT 'A ******** SREF - SECONDARY REFERENCES NOT LOADED ********'
TXDDEF TEXT 'A ******** DDEF - DOUBLE/MULTIPLY DEFINED SYMBOLS ********'
TXADEF TEXT 'A ******** ADEF - ABSOLUTE SYMBOL VALUES          ********'
SZTITLE  EQU       58
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
TXTITLE  DATA      BA(TXDDEF),BA(TXSREF),BA(TXPREF)
         DATA     BA(TXADEF),BA(TXDEF)
         DATA      BA(TXSEC)
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
PSMATAB  DATA      X'00080000'     DDEF
         DATA     X'00010000'     SREF
         DATA     X'00020000'     PREF
         DATA      X'00200000'     ADEF
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
PSMALIST EQU       %               **THEY ALL COME IN HERE**
         PSW,R15  *R0
         PSW,R2   *R0
         LI,R7     0
         STW,R7    NSK
         LW,R7     LISK
         LW,R1     RFDFADR         R1  <--CURRENT ENTRY POINTER
* * * * * * * * * * * * * * * * * *
PSMA1ST  BAL,R11   PSMAGET         **GET FIRST RFDF ENTRY OF TYPE**
*                                    NEVER RETURNS IF NONE
         FILBUF,R4 (*TXTITLE-1,R2),0,SZTITLE,BALLBUF   /  TYPE HEADER
         BAL,R11   WRTCLR            WRITE HEADER
         LW,R7     LISK
         LI,R11    PSMAREST+1
         B         PSMAREST+1
PSMAREST BAL,R11   PSMAGET         **GET REST OF ENTRIES & LIST**
         AI,R1     +3
         AI,R7     1
         CW,R7     NXTDISP         OUT OF CORE
         BLE       PSM1               NO
         AI,R7     -1
         LW,R3     ERRSW1
         BNEZ      PSM2
         LI,R5    SOFM
         CAL1,2   PRINT
         STW,R7    ERRSW1
         B         PSM2
PSM1     EQU       %
         STW,R1    -1,R7
PSM2     EQU       %
         AI,R1     -3
         B         PSMANXT           LOOP UNTIL END OF RFDF STACK
* * * * * * * * * * * * * * * * * *
PSMAGET  LW,R12    0,R1            **GET NEXT ENTRY OF TYPE SPEC**
         AND,R12  Y002F
         CW,R12    PSMATAB-1,R2
         BE       *R11               RETURN TO CALL POINT IF CORRECT
PSMANXT  LB,R3    *R1              **CHECK END OF RFDF**
         AW,R1     R3
         CW,R1     ENDRFDF
         BE        PSMAEXIT          YES - EXIT
         B         PSMAGET           NO  - GET NEXT ENTRY
* * * * * * * * * * * * * * * * * * *
PSMAEXIT EQU       %
         BAL,15    SRTEXIT2          PERFORM SORT
         BAL,15    MAPFIN3           PERFORM LISTING
         LI,R15    0
         STW,R15   ERRSW1          RESET ERROR SWITCH
         LW,R3     COLINDX           CHECK BUFFER
         BEZ       %+2
         BAL,R11   WRTCLR            CLEAR IT IF USED
         PLW,R2   *R0
         PLW,R15  *R0
         B        *R15
* * * * * * * * * * * * * * * * * *
         PAGE
******************************************
***** LIST LOAD MAP OR LIBRARY DEF'S *****  BAL,R15  MAPLIST
******************************************           NO ARGUMENTS
*
*  NOTES:    ROUTINE PRINTS THE APPROPRIATE HEADING AND THEN
*            FOLLOWS THE REF/DEF STACK CHAIN STARTING AT  *MAPCHAIN.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
TXDEF  TEXT  'A *******  DEF - PROGRAM DEFINITIONS MAP           ******'
TXRDEF  TEXT 'A *******  RELOCATABLE DEFINITIONS SORTED BY NAME  ******'
TXSEC   TEXT 'A *******  SECT - PROGRAM SECTIONS MAP             ******'
RDEF%MSG TEXTC    '*REF/DEF STACK CANNOT BE SHORTENED',;
                  ' ON A LIB LM* '
MAP%MSG  TEXTC    ' REF/DEF STACK TOO BIG FOR NAME AND VAL',;
                  'UE MAP '
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MAPLIST  EQU       %               **THINGS START TO HAPPEN HERE**
         PSW,R15  *R0
         BAL,R11   WRTCLR          **CLEAR BUFFER & MOVE IN HEADINGS**
         LW,R6    LOCWD
         AND,R6   Y001
         BNEZ     NMAP         B IF DEFS ARE TO BE SORTED BY NAME.
         LW,R5    LIBFLG       **CHECK IF LIB LM**
         BNEZ     PYEXIT       YES--IGNORE VALUE OF DEF.
         LI,R6    0                 SORT DEFS BY VALUE
         BAL,R14  RMAP2
         B        MAPFIN1
NMAP     LI,R6    1
         BAL,R14  RMAP2             MAP CONT SECTS BY VALUE
         B        MAPFIN4           THEN SORT NAMES AND MAP
RMAP2    EQU      %
         FILBUF,R4 (*TXTITLE+4,R6),0,SZTITLE,BALLBUF
RMAP1    EQU       %
         LW,R4     MAPCHAIN          R4 <--NEXT ENTRY POINTER
         BAL,R11   WRTCLR            WRITE HEADING (OR SECT TYPE 2)
* * * * * * * * * * * * * * * * * *
MAPLOOP CI,R4      X'1FFFF'          EXIT IF NEXT ENTRY POINTER =1FFFF
         BE         MAPFIN
         LW,R1      R4             R1 <--CURRENT ENTRY POINTER
         LW,R4     2,R1            R4 <-- NEXT ENTRY POINTER
         AND,R4   M17
         LW,R12    0,R1              GET TYPE
         AND,R12  Y0007
         BNEZ      MAPSEC
MAPDEF   EQU       %
         BAL,R15   PROCNTRY          **PROCESS DEF (MOVE TO CUR BUFF)
         B         MAPLOOP
*
MAPSEC   CI,R4     X'1FFFF'        **PROCESS C/DSEC'S HERE**
         BE        %+4               LAST ENTRY IN CHAIN (TYPE 2)
         LW,R12    0,R4              CHECK NEXT ENTRY TYPE
         AND,R12  Y0007
         BEZ      MAPSC2
         LI,R2     2                 SEC --> NO DEFS (TYPE 2)
MAPSC2   EQU       %                 PROCESS NEW C/DSECT
         PSW,R4   *R0
         BAL,R15   NUSECT            BUILD C/DSECT CHAIN
         PLW,R4   *R0
         CI,R2     2
         BE        MAPLOOP-1         PRINT TYPE 2 LINE NOW
         B         MAPLOOP
* * * * * * * * * * * * * * * * * *
MAPFIN   EQU       %
         BAL,R11   WRTCLR            FLUSH BUFFER
         B         *R14
MAPFIN4  EQU       %
         LW,R5     NSK
         BEZ       MAPFIN1
         FILBUF,R4 BA(TXRDEF),0,SZTITLE,BALLBUF
         BAL,R11   WRTCLR            WRITE SORTED BY NAME HEADING
         BAL,R15   MAPFIN3         PERFORM LISTING
MAPFIN1  EQU       %
         PLW,R15   *R0             GET LINK AND EXIT
         B         *R15
MAPFIN3  EQU       %
         LW,R4     LISK              GET TOURNAMENT AREA LOCATION
         LW,R5     NSK                  AND NUMBER OF SORT KEYS
         BEZ       *R15
         PSW,R15  *R0
MAPFIN2  EQU       %
         LW,R1     0,R4
         AI,R1     -3                COMPUTE INITIAL LOCATION DEF ENTRY
         BAL,R15   PROCNTRY        **PROCESS DEF (MOVE TO CURRENT BUFF)
         LW,R3    Y001
         STS,R3    *R1               SET ENTRY LISTED BIT IN CNTRL WD
         AI,R4     1
         BDR,R5    MAPFIN2
         BAL,R11   WRTCLR            FLUSH LAST LINE
         PLW,R15  *R0
         B         *R15            EXIT
* * * * * * * * * * * * * * * * * *
         PAGE
************************************
***** START NEW CSEC/DSEC LINE *****  BAL,R15  NUSECT
***** FOR DEF MAP OR LDEF LIST *****           R1 <-- RFDF ENTRY ADDR
************************************           R2 <-- USER/LIBR/UNKN FLG
*                                                     =0   =1   =2
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
TXCSECT  TEXT     'CSECT'
TXDSECT  TEXT     'DSECT'
TXLDCB   TEXT     'LDCB '
TXPSECT  TEXT     'PSECT'
TXTYPE   DATA     BA(TXCSECT),BA(TXDSECT),BA(TXLDCB),BA(TXPSECT)
TXSZLN   TEXT     '-      WDS'
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
SZADDR   EQU       5
SZRTHDG  EQU      10
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
BFLSCTAD EQU       BA(LLBUF)+1       LEFT SECTION ADDR
BFLSCTYP EQU       BA(LLBUF)+7       LEFT 'C' OR 'D' CHAR (SECTION)
BFLPROT  EQU       BA(LLBUF)+13      LEFT PROTECTION TYPE IND
BFRTHDG  EQU       BA(LLBUF)+97      SECTION HEADING ON RIGHT OF PAGE
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
NUSECT   EQU       %
         PSW,R15  *R0
         LW,R3     COLINDX           CHECK IF BUFFER USED
         BEZ       %+2               YES, ELSE
         BAL,R11   WRTCLR            WRITE & CLEAR LLBUF
* * * * * * * * * * * * * * * * * *
*                                  **MOVE TEXT DATA TO LLBUF**
         LI,R2    0
         LW,R3    0,R1
         AND,R3   Y000F
         CW,R3    Y0003
         BNE      %+2
         BIR,R2   NUSECT5
         CW,R3    Y000B
         BNE      %+3
         LI,R2    2
         B        NUSECT5
         AND,R3   Y0008
         BEZ      NUSECT5
         LI,R2    3
NUSECT5  EQU      %
         FILBUF,R4 (*TXTYPE,R2),0,5,BFLSCTYP  /CNTRL SECT TYPE TO  LS PAGE
         FILBUF,R4 BA(TXSZLN),0,SZRTHDG,BFRTHDG /  CNTRL SECT SIZE ON RS
* * * * * * * * * * * * * * * * * *
         LW,R3     0,R1            **MOVE PROT TYPE TO LLBUF**
         AND,R3   Y00C              GET PT FROM CONTROL WORD
         SLS,R3   -22
         LB,R3     BNHX%TAB,R3
         LI,R4     BFLPROT
         STB,R3    0,R4              PT ON LS PAGE
* * * * * * * * * * * * * * * * * *
         LW,R7     1,R1            **ADDRESS VALUE TO LLBUF**
         BAL,R11   BINHEX
         BAL,R11   LJADDR            HEX ADDR IN R8R9
         FILBUF,R6 %R8,0,SZADDR,BFLSCTAD  /  TO LS PAGE
* * * * * * * * * * * * * * * * * *
         LW,R7     0,R1            **SECTION SIZE TO LLBUF**
         AND,R7   M16
         SLS,R7    1                 NO OF WORDS
         BAL,R11   BINHEX
         BAL,R11   LJADDR            HEX SIZE IN R8R9
         FILBUF,R6 %R8,0,SZADDR,BFRTHDG+1  /  TO RS PAGE SUMMARY
* * * * * * * * * * * * * * * * * *
         LW,R3     0,R1            **PROCESS AS CSEC OR DSEC**
         AND,R3   Y0007             TYPE FROM CONTROL WORD
         CW,R3    Y0006
         BE        NSEXIT            EXIT IF CSECT
         BAL,R15   PROCNTRY        **PROCESS SYMBOL IN DSECT ENTRY**
NSEXIT   PLW,R15  *R0
         B        *R15
         PAGE
***************************************
***** ENTER CURRENT REF/DEF IN LL *****  BAL,R15  PROCNTRY
***** BUFFER & WRITE IF FULL      *****           R1 <-- RFDF ENTRY ADDR
***************************************           R5-R7  VOLATILE
*
*                  REF/DEF VALUE = 0B0AAAAA       B = BYTE DISPL
*                                             AAAAA = WORD ADDR
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
BFADDR   DATA     BA(LLBUF)+16,BA(LLBUF)+37,BA(LLBUF)+58,BA(LLBUF)+79
BFBYTE   DATA     BA(LLBUF)+22,BA(LLBUF)+43,BA(LLBUF)+64,BA(LLBUF)+85
BFFLG    DATA     BA(LLBUF)+24,BA(LLBUF)+45,BA(LLBUF)+66,BA(LLBUF)+87
BFSYM    DATA     BA(LLBUF)+25,BA(LLBUF)+46,BA(LLBUF)+67,BA(LLBUF)+88
BFVAL    DATA     BA(LLBUF)+15,BA(LLBUF)+36,BA(LLBUF)+57,BA(LLBUF)+76
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
PROCNTRY EQU       %
         PSW,R15  *R0
         LCI      5
         PSM,R1   *R0
         LI,R4     12
         LB,R4    *R1,R4             BYTE COUNT FOR SYMBOL IN R4
         LW,R3     R4                  1-11 -- 1 COL  12-31 -- 2 COL
         AI,R3     8                  32-51 -- 3 COL  52-63 -- 4 COL
         DW,R3    D20
         AI,R3     1               R3 <-- NO LLBUF COLS REQD
         LW,R5     COLINDX
         AW,R5     R3
         CI,R5     4               **CHECK IF REQD COLS AVAIL**
         BLE       PYAVAIL           YES
         BAL,R11   WRTCLR            NO - CLEAR LLBUF
PYAVAIL  LW,R2     COLINDX         R2 <-- COLUMN INDEX
* * * * * * * * * * * * * * * * * *
         LW,R5     R1              **MOVE SYMBOL TO LLBUF**
         SLS,R5    2                 BA(RFDF ENTRY) IN R5
         FILBUF,R6 *R5,13,*R4,(*BFSYM,R2)  /  SYMBOL TO LLBUF
* * * * * * * * * * * * * * * * * *
         LW,R4     0,R1            **CHECK ENTRY TYPE**
         LW,R7     R4
         AND,R7   Y0003
         CW,R7    Y0003             DSECT
         BE        %+3                  YES
         CW,R4    Y0007             R4 <-- RFDF ENTRY CONTROL WORD
         BANZ      PYEXIT            NO VALUE (PREF OR SREF)
         LW,R7     1,R1
         BAL,R11   BINHEX            R8R9 <-- HEX VALUE '0B0AAAAA'
         CW,R4    Y002              CHECK IF ABS
         BAZ       PYDEF             NO
         BAL,R11   ABSVAL            YES - CLEAR HI ORDER ZEROES
         FILBUF,R6 %R8,0,8,(*BFVAL,R2)
         B        FLAGS
PYDEF    EQU      %
         LW,R5    LIBFLG       **CHECK IF LIB LM**
         BNEZ     PYEXIT       YES--IGNORE VALUE OF DEF.
         LH,R5     R8              **MOVE VALUE TO LLBUF**
         LW,R6     BFBYTE,R2
         STB,R5    0,R6              BYTE DISPL 'B' TO LLBUF
         BAL,R11   LJADDR            LEFT JUST ADDR IN R8R9
PYVALMV  FILBUF,R6 %R8,0,5,(*BFADDR,R2)  'AAAAA'/0B0AAAAA' TO LLBUF
* * * * * * * * * * * * * * * * * *
FLAGS    EQU      %
         CW,R4    Y0003
         BANZ     PYEXIT            DON'T FLAG IF A DSECT
         LI,R7     C'*'
         LW,R5     BFFLG,R2          BA(FLAG IN LLBUF)
         CI,R4    2
         BAZ      UNU%FLG
         LI,R7     C' '              USED FLAG
         CW,R4    Y001
         BAZ       %+2
         LI,R7     C'+'              DDEF FLAG
         CI,R4    1
         BAZ      %+2
         LI,R7    C'-'              MARK LIB DEF
         B        ST%FLG
UNU%FLG  EQU      %
         CI,R4    1            IS THIS UNUSED LIB DEF--
         BAZ      ST%FLG       NO
         LI,R7    C'@'         PLACE SYMBOL FOR LIB DEF--
ST%FLG   EQU      %
         STB,R7    0,R5              MOVE FLAG TO LLBUF
* * * * * * * * * * * * * * * * * *
PYEXIT   AWM,R3    COLINDX         **INCR COLUMN INDEX - OMIT CHECK**
         LCI      5
         PLM,R1   *R0
         PLW,R15  *R0
         B        *R15               EXIT
         PAGE
**************************************
***** BIN/HEX CONVERSION ROUTINE *****  BAL,R11  BINHEX
**************************************
*                                                R7 <-- DATA TO CONV (BIN)
*                                                R8 <-- 1ST HALF HEX
*                                                R9 <-- 2ND HALF HEX
*                                                R11<-- LINK
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
BNHX%TAB TEXT      '0123456789ABCDEF'
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
BINHEX   EQU       %
         LI,R5    -8
BNHX1    LI,R6     0               ** CONVERT DIGIT TO CHAR **
         SLD,R6    4
         LB,R6     BNHX%TAB,R6
         STB,R6    R10,R5
         BIR,R5    BNHX1
         B        *R11
********************************************
***** LEFT JUSTIFY BIN/HEX ADDR RESULT *****  BAL,R11  LJADDR
********************************************           R8R9 <-- HEX VALU
*                                                      R11  <-- LINK
*
LJADDR   SLD,R8    24              **ENTER HERE FOR  DEF OR DDEF**
ABSVAL   LI,R5    -8               **ENTER HERE FOR ADEF**
LJAD1    LB,R6     R10,R5
         CI,R6     C'0'
         BNE      *R11
         LI,R6     C' '              REPLACE HIGH ZEROES WITH BLANKS
         STB,R6    R10,R5
         CI,R5    -2                 EXIT BEFORE LOW ORDER DIGIT
         BE       *R11
         BIR,R5    LJAD1
*********************************************
***** WRITE CONTENTS OF LLBUF AND CLEAR *****
*********************************************
*                                    BAL,R11  WRTCLR
*                                             NO ARGUMENTS
WRTCLR   EQU       %
         CAL1,1   WRTLL
CLRBUF   LI,R7    -14               CLEAR THE OUTPUT BUFFER
         LW,R8    TXBLNK
         LW,R9    TXBLNK
         STD,R8   LLBUF+29,R7
         BIR,R7   %-1
         STW,R8   LLBUF
         LI,R10    0                 RESET COLUMN INDEX
         STW,R10   COLINDX
         B        *R11
WRTLL    GEN,8,24 X'11',M:LL
         DATA     X'30000010',LLBUF,112
         PAGE
****************************************
***** SEGMENT SUMMARY CALCULATIONS *****  BAL,R15  SEGEVAL
****************************************           R1 <--CURRENT SEG ADR
*
*  HI & LO BOUNDARIES FOR EACH PROT TYPE & PROT TYPE SIZES
*  ARE EVALUATED AND STORED IN TSTACK
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
SEGEVAL  EQU       %               **ENTERS HERE**
         LI,R2     9                 10 POINTER
         LI,R3     3                 STORE HEX INDEX
SGLNXT   LW,R4    *CSEGADR,R2       SIZE AND BASE ADDR
         INT,R13   R4                LO BOUND IN R13
         SLS,R4   -16
         CI,R4    0
         BEZ       SGLZERO
         SLS,R4    1                 SIZE IN WORDS
         SLS,R13   1                 DA(LO BOUND)
         LW,R7     R13
         AW,R7     R4
         AI,R7    -1                 HI BOUND IN R7
SEGSTOR  STW,R7   SEGHI-1,R3        SAVE HI BOUND
         STW,R13  SEGLO-1,R3        SAVE LO BOUND
         STW,R4   SEGSZ-1,R3        SAVE SIZE
         AI,R2    -2
         BDR,R3    SGLNXT          **PROCESS NEXT PROT TYPE**
         B        *R15
* * * * * * * * * * * * * * * * * *
SGLZERO  LW,R7    R13
         B        SEGSTOR
* * * * * * * * * * * * * * * * * *
         PAGE
*********************************************
*****MOVE REQUESTED SUMMARY TO LL BUFFER*****  BAL,R1  VALMOVE
*********************************************          R5 <-- LINE INDEX
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
BFSGDATA DATA      BA(LLBUF)+38,BA(LLBUF)+53,BA(LLBUF)+68
TXSGINFO DATA      WA(SEGSZ),WA(SEGLO),WA(SEGHI)
TXHDG567 DATA      BA(TXSZLN7),BA(TXLOLN6),BA(TXHILN5)
SZH567   EQU      38
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
VALMOVE  EQU       %               **ENTER HERE**
         PSW,R11  *R0
         FILBUF,R3 (*TXHDG567-1,R2),0,SZH567,BFHDNGS   /  TEXT TO LLBUF
         LI,R1    3
         LW,R15   TXSGINFO-1,R2
         AI,R15   -1
VMNEXT   LW,R7    *R15,R1
         BAL,R11  BINHEX
         BAL,R11  LJADDR
         FILBUF,R3 %R8,0,5,(*BFSGDATA-1,R1)  /  MOVE TO LLBUF
         BDR,R1   VMNEXT            DO NEXT PROT. TYPE
         PLW,R11  *R0
         B        *R11               EXIT
* * * * * * * * * * * * * * * * * *
         PAGE
******************************************************************
*  SHELL SORT SUBROUTINE
*     CALLING SEQUENCE
*      BAL,R15 SSSUBR
*        WHERE
*LISK  EQU    INITIAL LOCATION - TOURNAMENT AREA
*NSK   EQU    NUMBER OF SORT KEYS
SSSUBR    EQU       %
         PSW,D4   *R0
         LW,D4    M24
          LW,SR1    LISK              INITIAL SORT KEY LOC
          LW,SR2    NSK            NUMBER OF SORT ITEMS
         AI,SR1    -1
          LW,SR3    SR2                 N TO M
          BEZ       SSSXIT           EXIT, N = 0
SSR3      EQU       %
          SLS,SR3  -1                 M/2 TO M
         CI,SR3   0
         BE       SSSXIT            EXIT - SORT FINISHED
          LW,SR4    SR2                 N - M TO K
          SW,SR4    SR3
          LI,R3     1                   1 TO J
SSR4      EQU       %
          LW,R1     R3                  J TO I
SSR2      EQU       %
          LW,R2     R1
          AW,R2     SR3                 I + M
          LW,R4     SR1
          AW,R4     R1                  LOCATION SORT KEY I
          LW,R5     SR1
          AW,R5     R2                  LOCATION SORT KEY I + M
          LW,R6     0,R4
          LW,R7    0,R5
         LS,D3    0,R6
         CS,D3    0,R7              COMPARE FIRST 3 CHARACTERS
         BG       SSR5
         BL       SSR1
         LB,D2    *R6               EQUAL - PREPARE TO COMPARE REST
         CB,D2    *R7               FIND LENGTH OF SHORTEST STRING
         BL       %+2
         LB,D2    *R7
         AI,D2    3
         SLS,D2   -2                ROUND TO FULL WORDS
SSR6     EQU      %
         AI,R6    1
         AI,R7    1
         LW,D3    0,R6
         CW,D3    0,R7
         BE       SSR7
         BL       SSR1
SSR5     EQU      %
          LW,R6     0,R4                EXCHANGE ITEMS
         XW,R6     0,R5
         STW,R6    0,R4
          SW,R1     SR3                 I - M TO I
         BGZ       SSR2            I > 0
SSR1      EQU       %
         AI,R3     1               J + 1 TO J
          CW,R3     SR4
          BG        SSR3              J > K
          B         SSR4                J < OR = K
SSR7     BDR,D2   SSR6
         B        SSR1
SSSXIT    EQU       %
         PLW,D4   *R0
         B        *D4
Y003     DATA     X'00300000'
YFFCFFFFF DATA    X'FFCFFFFF'
SRT%DEL  DATA     X'FF2FFFFF'
VAL%DEL  DATA     X'FF1FFFFF'
XFFFC    DATA     X'0000FFFC'
Y003F    DATA     X'003F0000'
Y0027    DATA     X'00270000'
Y002F    DATA     X'002F0000'
D20      DATA,4   X'14'
D1024    DATA     X'400'
D103     DATA     X'67'
D10      DATA     X'A'
         END

