*COMDECK PFPACK 
          TITLE  MSTADR 
**        MSTADR
*                SUBROUTINE TO COMPUTE MST ADDRESS
* 
*                ENTRY-MST =MST ORDINAL 
*                EXIT- ACC= ABSOLUTE ADDRESS
*                USES-D.Z1-D.Z4 
*                CALLED BY - DROPIL,PICKDEV,1PK FUNCTIONS(4,6,8)
  
  
MSTADR    ENM    X
          LDN    P.MST
          CRD    D.Z1 
          LDD    D.Z1+C.MST        GET FWA/8
          SHN    3
          DUP    LE.MST,1 
          ADM    MST
          SBN    LE.MST 
          UJN  MSTADRX
          TITLE  PICKRBR
**        PICKRBR 
* 
*         SUBROUTINE TO FIND THE CM RBR ORDINAL OF A DEVICE GIVEN ITS 
*                EST ORDINAL. 
* 
*         ENTRY  (MEST) = EST ORDINAL.
* 
*         EXIT   (CMRBR) = RBR ORDINAL. 
* 
*         USES   D.Z1-D.Z7, D.T0-D.T2, D.FNT-D.FNT+9, CMRBR.
* 
*         CALLS  ERROR (FOR SYSTEM ERROR 10). 
* 
*         CALLED BY PICKDEV, 1PK FUNCTIONS 4,5,8
  
  
CURBR     EQU    D.Z3 
NRBR      EQU    D.Z4 
LCURBR    EQU    D.Z5 
PICKRBR   ENM    X
          LDK    P.RBT
          CRD    D.Z6              GET START OF RBR 
          LDN    P.NRBR 
          CRD    D.Z1 
          LDD    D.Z6+C.RBRAD 
          LPN    77B
          STD    D.Z6 
          LDN    0
          STD    CURBR
          STD    NRBR 
PICKRBR2  ADD    D.Z6 
          SHN    12 
          ADD    D.Z7 
          CRM    D.FNT,TWO         IF MULTIPLE RBRS ARE TO
          LDD    D.Z1+C.NRBR       BE HANDLED THIS CODE MUST
          SBM    CURBR             BE OK (11/17/74) 
          ZJN  PICKRBR3 
          LDD    D.FNT+4
          STM    RBSIZE      SAVE PRU/RB
          LDD    D.FNT+5*W.RBRLAV+C.RBREST
          LMW    MEST                                                   1546 132
          NJN  PICKNEXT 
          AOD    NRBR              BUMP NUMBER OF RBRS
          LDD    CURBR
          STD    LCURBR            SAVE LAST CM RBR ORDINAL FOR EST 
PICKNEXT  AOD    CURBR
  
          SHN    7
          UJN  PICKRBR2 
  
PICKRBR3  BSS    0
          LDD    NRBR 
          ZJN  BADRBR              JUMP,  NO RBR FOUND
          STM    CMRBRN            NUMBER OF RBRS FOR DEVICE
          SOD    NRBR              NUMBER OF EXTRA RBRS 
          LDD    LCURBR 
          SBD    NRBR 
          STM    CMRBR             DEVICE 1ST RBR ORDINAL 
          SHN    7
          ADD    D.Z6 
          SHN    12 
          ADD    D.Z7 
          CRM    D.FNT,TWO         1ST RBR HEADER 
          LJM  PICKRBRX 
BADRBR    BSS    0
          LDN    SYSER5            BAD RBR ORDINAL
          RJM  ERROR
          TITLE  RDLABEL
**        RDLABEL 
*                SUBROUTINE TO READ LABEL 
* 
*                ENTRY-SKELETON STACK REQUEST IN STACK
* 
*                EXIT - LABEL IN BUFFER 
* 
*                USES-RBNUM,STACK-STACK+9,BUFFER-BUFFER+9,D.T0-D.T4 
  
  
RDLABEL   ENM    X
          LDM    ESTORD 
          STD    MEST 
          RJM  PICKRBR             GET RBR ORDINAL
          LDN    1                 LOOK AT FIRST RB 
          STM    RBNUM
          LDD    D.PPMES1 
          STM    STACK+5+C.STPMS
          LDC    4000B+O.RDP       ** INSTRUCTION MAY BE MODIFIED **
RDLABELA  EQU    *-1
          STM    STACK+C.STO
RDLABEL9  LDN    0
          STM    STACK+C.STPPRU 
RDLABEL3  LDC    STACK             READ A PRU 
          RJM  R.READP
          IF     DEF,ONEEV,3
          RJM  GETSTS 
          MJN  RDLABEL3 
          SKIP   8
          LDD    D.PPMES1 
          ADN    W.RWPPCW 
          CRD    D.T0              READ STACK REQUEST REPLY WORD
          LDD    D.T3 
          LPN    77B
          SHN    12 
          ADD    D.T4 
          SHN    -9 
          ZJN  RDLABELB            NO ERROR STATUS RETURNED 
          LCN    0
          LJM  RDLABELX            ERROR DETECTED ON READ 
  
RDLABELB  BSS    0
          LDD    D.T0+C.RWPPWT
          LMC    64*5 
          NJN  RDLAB1              JUMP, SHORT PRU READ 
          LDM    BUFFER 
          LMC    2RDE              CHECK FOR DEV INDICATOR
          NJN  RDLAB1 
          LDM    BUFFER+1 
          LMC    2RV1 
          NJN  RDLAB1 
          LDM    BUFFER+2 
          SHN    -6 
          SBN    2
          ZJN    RDLAB2            IF TYPE 2 LABEL
          SBN    1
          ZJN    RDLAB2            IF TYPE 3 LABEL
RDLAB1    LJM    RDLABEL1          NOT A VALID NOS/BE LABEL, SEARCH ON
  
 RDLAB2   LDC    BUFFER 
          STD    D.T0 
          LDM    BUFFER+5*W.LBCKS+C.LBCKS 
          STD    D.T1              SAVE OLD CHECKSUM
          LDN    0
          STD    D.T2              NEW CHECKSUM 
          STM    BUFFER+5*W.LBCKS+C.LBCKS 
RDLABEL4  LDI    D.T0              NEXT BYTE OF LABEL 
          RAD    D.T2 
          SHN    -12
          RAD    D.T2 
          AOD    D.T0              ADVANCE BYTE ADDRESS 
          LMC    BUFFER+500B
          NJN  RDLABEL4            NOT END OF LABEL 
          LDD    D.T1 
          STM    BUFFER+5*W.LBCKS+C.LBCKS    RESTORE OLD CHECKSUM 
          SBD    D.T2 
RDLABL1   NJN  RDLABEL1            BAD CHECKSUM 
          LJM  RDLABELX 
  
          SPACE 
RDLABEL1  AOM    STACK+C.STPPRU    BUMP PRU COUNT 
          SBM    RBSIZE 
          ZJN  RDLABEL6 
          LJM  RDLABEL3 
  
RDLABEL6  AOM    RBNUM             BUMP RB COUNT
          SBN    N.LBRBLM    LIMIT FOR SCAN 
          PJN  RDLABEL2 
          LJM  RDLABEL9 
  
          SPACE 
RDLABEL2  LCN    0
          LJM  RDLABELX 
  
STACK     BSS    0
RBNUM     BSSZ   1                 RB NUMBER
ESTORD    BSSZ   1                 EST ORDINAL
PRUNUM    BSSZ   1                 PUR NUMBER 
          VFD    6/40B,6/O.RDP     DIRECT BIT,ORDER CODE
          VFD    12/0              C.STCPU
          VFD    12/0,12/0         C.STPWC,C.STPMS
          VFD    12/BUFFER,12/1600B C.STPFW,C.STFB
          VFD    12/BUFFER+477B    C.STPLW
          TITLE  SMTREAD
**        SMTREAD 
* 
*         SUBROUTINE TO VERIFY THAT A GIVEN VSN IS A MEMBER OF A SET. 
* 
*         ENTRY  (VSN-VSN+2) = VSN. 
* 
*         EXIT   (A) = -0 IF VSN IS NOT FOUND IN SMT. 
*                OTHERWISE
*                (A) = 0. 
*                (DRBR) = DAM ORDINAL.
* 
*         USES   D.T0-D.T4, D.T6, ESTORD, NPK, RBNUM, PRUNUM, 
*                            BUFFER-BUFFER+500B.
* 
*         CALLS  MSTADR, RDLABEL, R.READP.
* 
*         CALLED BY EVICT AND 1PK FUNCTION 4. 
  
  
SMTREAD   ENM    X
          RJM  MSTADR 
          ADN    W.MSPTR
          CRD    D.T0 
          LDD    D.T0+C.MSEST 
          STM    ESTORD 
SMTREAD6  RJM  RDLABEL
          MJN  SMTREADX 
          LDM    BUFFER+5*W.LBMEM+C.LBMEM 
          STM    NPK
          LDM    BUFFER+5*W.LBSMT+C.LBSMT 
          STM    RBNUM
SMTREAD0  LDC    STACK       FWA OF S.R.
          RJM  R.READP
          IF     DEF,ONEEV,2
          RJM  GETSTS 
          MJN  SMTREAD6 
          LDN    0
          STD    D.T6 
SMTREAD1  LDM    BUFFER+W.SMTVSN*5+C.SMTVSN,D.T6
          ZJN  SMTREAD2 
          LMW    VSN                                                    1546 134
          NJN    SMTREAD2 
          LDM    BUFFER+W.SMTVSN*5+C.SMTVSN+1,D.T6
          LMW    VSN+1                                                  1546 136
          NJN  SMTREAD2 
          LDM    BUFFER+W.SMTVSN*5+C.SMTVSN+2,D.T6
          LMW    VSN+2                                                  1546 138
          ZJN    SMTREAD3 
  
SMTREAD2  SOM    NPK
          ZJN  SMTREAD4            SMT EXHAUSTED  THEN JUMP 
          LDN    LE.SMT*5 
          RAD    D.T6 
          ADC    -500B
          MJN  SMTREAD1 
          AOM    PRUNUM 
          UJK    SMTREAD0    READ NEXT PRU
  
SMTREAD4  LCN    0
SMTREAD5  LJM  SMTREADX 
  
SMTREAD3  BSS    0
          LDM    BUFFER+W.SMTVSN*5+C.SMTFRO,D.T6
          STW    DRBR                                                   1546 140
          LDN    0
          UJN  SMTREAD5 
TSTOVFL   IF     -DEF,ONEPK 
TSTOVFL   EJECT 
**        TSTOVFL - TEST FOR OVERFLOW WORD PAIR 
* 
*         ENTRY  RBTWRD - RBTWRD+4  CONTAINS FIRST WORD OF A WORD PAIR
* 
*         EXIT   (A) = 0   IF IT IS AN OVERFLOW WORD PAIR 
  
TSTOVFL   ENM    X                 ENTRY / EXIT 
  
          LDW    RBTWRD+C.RBTDRB
          SHN    -S.RBTDRB
          LMC    777B 
          UJN  TSTOVFLX 
TSTOVFL   ENDIF 
