MSM 
          IDENT  CMS,OBOV-2 
          PERIPH
          BASE   M
          SST 
 QUAL$    EQU    1           DEFINE UNQUALIFIED COMMON DECKS
*COMMENT  MSM - ON LINE MASS STORAGE MANAGER. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  MSM/CMS - MASS STORAGE MANAGER.
 CMS      SPACE  4
*****     MSM - MASS STORAGE MANAGER. 
* 
*         J. L. WARDELL.     73/02/15.
*         P. D. HAAS.        74/09/09.
*         S. L. BETH.        74/12/20.
*         R. M. DESSEL       82/12/15.
*         P. C. SMITH.       94/03/21.
          SPACE  4,10 
***              *CMS* SURVEYS ALL MASS STORAGE DEVICES AND VERIFIES
*         THAT THE PROPER PHYSICAL DEVICES ARE MOUNTED OR MAKES THEM
*         AVAILABLE FOR USER ACCESS IF POSSIBLE.
* 
*         ON LINE VERIFICATION OCCURS EVERY 60D SCHEDULER 
*         CYCLES.  TO ENABLE/DISABLE THIS USE *DSD* COMMAND 
*         *ENABLE/DISABLE REMOVABLE PACKS*. 
          SPACE  4,10 
**        PROGRAMMING NOTE. 
*                DIRECT CELLS *LA* AND *EE* (*RG* AND *RG+1*) 
*         ARE USED DURING LEVEL 3 RECOVERY IN OVERLAY *4DB* IF
*         EXECUTING ON A CENTRAL MEMORY EXTENSION MAINFRAME.
          SPACE  4
**        CALL. 
* 
*T,       18/ CMS,6/,12/ R,24/
* 
*         R = POSITION IN EQUIPMENTS FOR UNLOAD INTERLOCK.
          SPACE  4
***       DAYFILE MESSAGES. 
* 
*         SEE *4DA* DOCUMENTATION.
          SPACE  4
***       ERROR LOG MESSAGES. 
* 
*         *ETXXX, UYY,PS=ZZZZZZ.* = A NEW DEVICE HAS BEEN INTRODUCED ON 
*         EST ORDINAL *XXX* OF TYPE *ET*.  UNIT *YY* OF THE DEVICE HAS
*         A PACK SERIAL NUMBER OF *ZZZZZZ*. 
* 
*         SEE *4DB* DOCUMENTATION FOR ADDITIONAL MESSAGES.
          SPACE  4
***       ACCOUNT FILE MESSAGES.
* 
*         *ADDU, XXX, FFFFFFF, DD.* = EST ORDINAL XXX WITH FAMILY NAME
*         FFFFFFF AND DEVICE NUMBER DD HAS BEEN UNLOADED. 
* 
*         *ADPD, XXX, PPPPPPP, UUUUUUU.* = EST ORDINAL XXX WITH 
*         PACKNAME PPPPPPP HAS BEEN DISMOUNTED.  IF PRESENT, UUUUUUU
*         INDICATES THAT THE PACK WAS A PRIVATE PACK BELONGING TO 
*         THAT USER.
* 
*         SEE *4DA* DOCUMENTATION FOR ADDITIONAL MESSAGES.
          SPACE  4
***       OPERATOR MESSAGES.
* 
*         *ERROR ON ACTIVE DEVICES.* = LABEL CHECKING HAS DETECTED
*         A DEVICE WITH ACTIVE FILES AS HAVING SOME TYPE OF ERROR (SEE
*         E,M DISPLAY FOR ERROR TYPE ). THIS IS AN ABNORMAL SITUATION 
*         AND SHOULD BE CORRECTED IMMEDIATELY.
* 
*         SEE E,M DISPLAY (DSD DOCUMENTATION) FOR ERROR TYPES POSSIBLE. 
* 
*         SEE *4DB* DOCUMENTATION FOR ADDITIONAL MESSAGES.
          SPACE  4
**        ROUTINES CALLED.
* 
*         0PI - LIST PACK SERIAL NUMBERS. 
*         5ME - FORMAT ERROR MESSAGES.
          SPACE  4
*CALL     COMPMAC 
*CALL     COMSACC 
*CALL     COMSCPS 
*CALL     COMSDSL 
*CALL     COMSEVT 
*CALL     COMSHIO 
*CALL     COMSIOQ 
*CALL     COMSLSD 
*CALL     COMSMLS 
 MMF$     EQU    1           INITIALIZE COMSMMF DIRECT CELLS
*CALL     COMSMMF 
*CALL     COMSMSC 
*CALL     COMSMSP 
*CALL     COMSPFM 
*CALL     COMSPIM 
*CALL     COMSSSD 
*CALL     COMSWEI 
*CALL     COMSZOL 
          SPACE  4,10 
          LIST   X
*CALL     COMSMST 
          SPACE  4,10 
          LIST   *
          TITLE  MACRO DEFINITIONS. 
          SPACE  4
**        MACRO  DEFINITIONS. 
 COMMON   SPACE  4,10 
**        COMMON - COMMON CODE FOR *CMS* AND *RMS.
* 
*         THIS MACRO PROVIDES IDENTICAL CODE FOR *CMS* AND *RMS*
*         WHICH MAY BE CALLED BY THE OVERLAYS COMMON TO THESE TWO 
*         ROUTINES. 
  
  
 COMMON   MACRO 
          QUAL
          SPACE  4,10 
*         COMMON WORKING STORAGE. 
  
  
 ECLT     CON    0           EXTENDED MEMORY LABEL TRACK
 LDMP     CON    0           LINK DEVICE MST POINTER
          SPACE  4,10 
*CALL     COMPC2D 
*CALL     COMPIFR 
*CALL     COMPTGB 
 LRA      SPACE  4,15 
**        LRA - LOAD REFERENCE ADDRESS. 
* 
*         ENTRY  (LRAB) = RA/100 OF FREE AREA.
*                (TA) = RA/100 OF FREE AREA FOR NON-CME.
*                     = 4000 IF CME PRESENT.
*                (LRAA) = MODIFIED FOR DESIRED OPERATION. 
*                (LRAC) = MODIFIED FOR DESIRED OPERATION. 
* 
*         EXIT   (A) = REFERENCE ADDRESS. 
*                *R* REGISTER LOADED IF NECESSARY.
* 
*         USES   RG, RG+1.
  
  
 LRA1     LDC    0           LOAD RA INTO *R* REGISTER
 LRAB     EQU    *-1
          STD    RG+1 
          SHN    -14
          STD    RG 
          LRD    RG 
 LRA2     LDD    RA          SET RA 
 LRAC     EQU    *-1
*         LDD    TA 
          SHN    6
  
 LRA      SUBR               ENTRY/EXIT 
 LRAA     UJN    LRA2        SET RA 
*         UJN    LRA1        (CME PRESENT)
 PTA      SPACE  4,10 
**        PTA - PRESET FIRST WORD ADDRESS OF TRT. 
* 
*         ENTRY  (FN - FN+4) = EST ENTRY OF DEVICE. 
* 
*         EXIT   (STAA) = FWA OF TRT. 
* 
*         USES   CM - CM+4. 
  
  
 PTA      SUBR               ENTRY/EXIT 
          LDD    FN+4        GET FWA OF TRT 
          SHN    3
          ADN    TRLL 
          CRD    CM 
          LDD    CM+3        SET FWA OF TRT 
          LPN    77 
          LMC    LDCI 
          STM    STAA-1 
          LDD    CM+4 
          STM    STAA 
          UJN    PTAX        RETURN 
 STA      SPACE  4,10 
**        STA - SET FIRST WORD ADDRESS OF TRT.
* 
*         ENTRY  (STAA) = FWA OF TRT. 
  
  
 STA      SUBR               ENTRY/EXIT 
          LDC    0
 STAA     EQU    *-1         (FWA TRT)
          UJN    STAX        RETURN 
          QUAL   *
          ENDM
          SPACE  4
**        UJMF - GENERATE LIST OF INSTRUCTIONS TO BE MODIFIED 
*                IF RECOVERING MMF SYSTEM.
* 
*         UJMF   TAG
  
  
 UJMF     MACRO  TAG
          LOCAL  A
          MACREF UJMF 
 A        UJN    TAG
 L"QUAL"  RMT 
          CON    A
          RMT 
 UJMF     ENDM
          SPACE  4
**        MMTE - GENERATE MACHINE MASK TABLE ENTRY. 
* 
*         MMTE   ADDR 
*                ADDR = INSTRUCTION ADDRESS.
  
  
 MMTE     MACRO  L
          LOCAL  B
          MACREF MMTE 
 B        EQU    L
 T"QUAL"  RMT 
          CON    B
          RMT 
 MMTE     ENDM
          TITLE  DIRECT LOCATION ASSIGNMENTS. 
          SPACE  4
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 RG       EQU    15 - 16     *R* REGISTER LOADING TEMP CELLS
 RI       EQU    16 - 17     RANDOM INDEX FOR *CRA* 
 T8       EQU    16          SCRATCH
 T9       EQU    17          SCRATCH
 QF       EQU    17          FIRST TRACK OF INACTIVE QUEUE FILE 
 SN       EQU    17          SECTOR NUMBER DURING LABEL PROCESSING
 FS       EQU    20 - 24     CM WORD BUFFER (5 LOCATIONS) 
 TA       EQU    25          REFERENCE ADDRESS (LEVEL 3 RECOVERY) 
 CD       EQU    25          CHECKPOINT DEVICE (4DA, 4DK) 
 TW       EQU    26          CONSTANT TWO 
 QT       EQU    27          QUEUED FILE TRACK (4DA)
 CN       EQU    30 - 34     CM WORD BUFFER (5 LOCATIONS) 
 QS       EQU    35          QUEUED FILE SECTOR (4DA) 
 QI       EQU    36          QUEUE INDEX (4DA)
 EC       EQU    37          ERROR CODE 
 CR       EQU    37          CM BUFFER ADDRESS (4DA)
 FN       EQU    40 - 44     EST ENTRY
 RD       EQU    FN+3 - FN+7 DEVICE RECOVERY STATUS INFORMATION 
 TS       EQU    FN+5        MST TRACKS FOR MMF SHARED DEVICES
 RE       EQU    FN+6        EQUIPMENT RECOVERY STATUS INFORMATION
 AL       EQU    FN+7        CM ADDRESS FOR MST LABEL DATA
 EQ       EQU    IR+3        EST ORDINAL
 RS       EQU    IR+4        RECOVERY STATUS
 AM       EQU    57          ACCESS MODE FLAG 
 RC       EQU    60          DEVICE RECOVERY COUNT
 CF       EQU    60          CONTROL POINT FOR MESSAGES (*1RF*/*4DA*) 
 LO       EQU    61          LAST MASS STORAGE ORDINAL + 1
 UC       EQU    62          UNIT COUNT 
 DI       EQU    62          DAT INDEX
 ET       EQU    62          EOI TRACK
 ES       EQU    63          EOI SECTOR 
 SL       EQU    63          SECTOR LIMIT 
 EF       EQU    63          ERROR FLAG 
 CA       EQU    64 - 65     CENTRAL ADDRESS
 P1       EQU    66          SCRATCH
 P2       EQU    67          SCRATCH
****
          SPACE  4,10 
*         DEFINE QUAL BLOCK ORDER.
  
  
          QUAL   CMS
          QUAL   RMS
          QUAL   RDA
          QUAL   ISD
          QUAL   RDC
          QUAL   RDD
          QUAL   RDG
          QUAL   RDI
          QUAL
          SPACE  4
**        CONSTANTS.
  
  
 FLRC     EQU    1100        FIELD LENGTH FOR TRT RECOVERY
          SPACE  4
**        INTERNAL BUFFERS AND TABLES.
  
  
 BAEI     EQU    PPFW        *BAET* IMAGE 
  
 DLPB     EQU    BAEI+5      LABEL PARAMETER BLOCK (PFGL + PUGL)
  
 OBOV     EQU    DLPB+5*2    BASE OVERLAY ORIGIN
          SPACE  4,10 
**        DEVICE RECOVERY STATUS TABLE. 
* 
*         THE DEVICE RECOVERY TABLE IS CONTAINED IN *MSM-S* 
*         FL.  IT CONSISTS OF ONE WORD ENTRIES FOR EACH MASS
*         STORAGE EQUIPMENT.  THE FORMAT IS AS FOLLOWS -
*T,       12/ DT,12/ MT,12/ TS,12/ RE,12/ AL
* 
*         DT = DEVICE TYPE. 
*         MT = MST/10B. 
*         TS = MST TRACKS FOR MMF SHARED DEVICES. 
*         RE = EQUIPMENT RECOVERY STATUS INFORMATION. 
*              WHERE RE IS DEFINED AS:  
*              1/M,1/S,1/V,1/R,1/C,1/U,1/D,1/I,1/A,1/T,1/E,1/L
*              M = MASS STORAGE DEVICE. 
*              S = SYSTEM/ASL/LINK DEVICE.
*              V = SHARED DEVICE. 
*              R = REMOVABLE DEVICE.
*              C = DEVICE CLEARED FOR RECOVERY. 
*              U = UNAVAILABLE DEVICE.
*              D = INCORRECT FULL TRACK ACCESS. 
*              I = DEVICE INITIALIZATION SELECTED.
*              A = ACCESSED PREVIOUSLY (DAP) BY THIS MF (SHARED 
*                  DEVICES).
*              T = ECS TRACK FOR MST/TRT REQUIRED (MMF SHARED 
*                  DEVICES).
*              E = DEVICE ACCESSED PREVIOUSLY (DAP) BY SOME MF
*                  (SHARED DEVICES ONLY). 
*              L = LABEL STATUS (0 = LABEL IMAGE PRESENT).
*         AL = CM ADDRESSES FOR MST LABEL DATA. 
          TITLE  COMMON WORKING STORAGE AND SUBROUTINES.
 CMS      SPACE  4
          QUAL   CMS
          ORG    OBOV-2 
          LJM    PRS         PRESET *CMS* 
          SPACE  4,10 
          LIST   M
          COMMON
          LIST   *
          TITLE  MAIN ROUTINE.
**        CMS - MAIN PROGRAM. 
  
  
  
 CMS      EXECUTE  4DB
          LDC    LCMS        ENABLE MMF RECOVERY ROUTINES 
          RJM    EMF
 CMS1     LDC    RDL         READ LABELS
          RJM    MRL
 CMS2     LDD    RC 
          ZJN    CMS3        IF NO REDEFINITION REQUESTS
          LJM    CIR1        PROCESS DEVICE REDEFINITION
  
 CMS3     EXECUTE  4DD       LOAD VERIFICATION ROUTINES 
          LDC    CAD         VERIFY ACTIVE DEVICES
          RJM    MRL
 CMSB     LDC    CID         CHECK INACTIVE DEVICES 
*         UJN    CMS4        (DEADSTART SEQUENCING IN EFFECT) 
          RJM    MRL
 CMS4     LDN    0           CLEAR RECOVERY COUNT 
          STD    RC 
          EXECUTE  4DE       LOAD UNAVAILABLE DEVICE ROUTINES 
          LDC    CUD         CHECK UNAVAILABLE DEVICES
          RJM    MRL
          LDD    RC 
          ZJN    CMS7        IF NO EQUIPMENT TO RECOVER 
          UJMF   CMS5 
          RJM    GDT         LOAD DEVICE ACCESS TABLE 
 CMS5     EXECUTE  4DG       LOAD RECOVERY ROUTINES 
          LDD    HN          DO NOT CLEAR UNAVAILABLE 
          RAM    /RDG/EMTB
          LDC    RCD         RECOVER DEVICES
          RJM    MRL
          UJMF   CMS6 
          RJM    UMT         UPDATE MMF TABLES
 CMS6     EXECUTE  4DC       VERIFY PF SYSTEM 
          RJM    RPF         RELEASE DA INTERLOCKS
 CMS7     RJM    CIR         CHECK FOR INITIALIZE REQUESTS
 CMSD     LDN    0
          ZJN    DPP         IF NO ACTIVE DEVICE ERRORS 
          LDN    NCPL 
          CRD    CM 
          AOD    CM+1        DISPLAY MESSAGE AT SYSTEM CP 
          SHN    7
          ADN    MS2W 
          CWM    CMSE,TR
  
*         DROP PP.
  
 DPP      UJN    DPP1        DEADSTART SEQUENCING NOT IN EFFECT 
*         LDN    CIRD-CIRB   (DEADSTART SEQUENCING) 
*         LDN    CIRE-CIRB   (DEADSTART SEQUENCING- RECOVERY DEADSTART) 
 DPPB     EQU    *-1
          RAM    CIRA 
          LDN    CIRF        NUMBER OF COMMANDS 
*         LDN    CIRF-1      (RECOVERY DEADSTART) 
 DPPC     EQU    *-1
          LJM    CIR5        WRITE COMMAND BUFFER 
  
 DPP1     MONITOR  DPPM 
          LJM    PPR
  
 CMSE     DATA   C* ERROR ON ACTIVE DEVICES.* 
          TITLE  SUBROUTINES. 
 RPF      SPACE  4
**        RPF - RELEASE DIRECT ACCESS INTERLOCKS. 
* 
*         ENTRY  (RE) SET FOR DEVICES RECOVERED.
* 
*         EXIT   INTERLOCKS FOR DA FILES ON DEVICES RECOVERED, CLEARED. 
*                *IQFT* BUILT IF QUEUED FILES FOUND.
*                PACK SERIAL NUMBERS LISTED FOR DEVICES RECOVERED.
* 
*         USES   T5, EQ, CR, FN - FN+4. 
* 
*         CALLS  IFR, LSN, 4DA. 
* 
*         MACROS EXECUTE, SFA, UJMF.
  
  
 RPF1     LDD    RA 
          SHN    6
          ADD    T5 
          CRD    RD 
          LDD    RE          DETERMINE IF DEVICE RECOVERED
          SHN    21-7 
          PJN    RPF2        IF DEVICE NOT RECOVERED
          SFA    EST,T5      READ EST ENTRY 
          ADK    EQDE 
          CRD    FN 
          RJM    /RDA/LSN    LIST PACK SERIAL NUMBERS 
          LDN    0           INDICATE NO INITIALIZE 
          RJM    /RDA/RDA    RECOVER PRESERVED FILES
 RPF2     AOD    EQ          ADVANCE TO NEXT EQUIPMENT
 RPF3     STD    T5 
          LMD    LO 
          NJN    RPF1        IF NOT END OF MS ENTRIES 
 RPF4     UJMF   RPFX 
 RPFB     LDN    0
          NJN    RPFX        IF DATI SET FOR INITIALIZATION 
          LCN    DATI        CLEAR FLAG REGISTER INTERLOCK
          RJM    IFR
  
 RPF      SUBR               ENTRY/EXIT 
          LDD    RC 
          ZJN    RPF4        IF NO EQUIPMENT RECOVERED
          EXECUTE 4DA        LOAD DA INTERLOCK ROUTINES 
          LDD    CA+1        SET *IQFT* BUFFER ADDRESS
          STD    CR 
          LDN    NOPE        INITIALIZE EST ORDINAL FOR SEARCH
          STD    EQ 
          UJN    RPF3 
 CIR      SPACE  4
**        CIR - CHECK FOR INITIALIZE REQUESTS.
* 
*         EXIT   *MSI* CALLED IF ANY INITIALIZE REQUESTS FOUND. 
* 
*         USES   EQ, P2, RC, FS - FS+4, FN - FN+4, CN - CN+4. 
* 
*         CALLS  IFR. 
* 
*         MACROS NFA, SFA, UJMF.
  
  
 CIR6     LDD    FN 
          SHN    0-13 
          ZJN    CIR7        IF NOT MASS STORAGE
          LDD    FN 
          LPN    2
          NJN    CIR10       IF DEVICE OFF OR DOWN
          LDD    FN+4        READ *STLL*
          SHN    3
          ADN    STLL 
          CRD    FS 
          SBN    STLL-DULL
          CRD    CM 
          LDD    FS+1 
          LMN    STNR 
          LPN    77 
 CIR7     ZJN    CIR10       IF EQUIPMENT NOT READY 
          LDD    FS 
          LPC    MLFPR+MLUNL+MLIRP
          LMN    MLIRP
          NJN    CIR10       IF INITIALIZE NOT TO BE PROCESSED
          LDD    FS 
          SHN    -7 
          ZJN    CIR9        IF PERMANENT FILES NOT INVOLVED
          LPN    MLIAL/1S7
          NJN    CIR8        IF DEADSTART INITIALIZE
          LDD    CM+4        CHECK ACTIVITY 
          LPC    3777 
          ADD    CM+1 
          ADD    FS+3 
          NJN    CIR10       IF ACTIVE FILES ON DEVICE
 CIR8     AOD    RC          INCREMENT RECOVERY COUNT 
 CIR9     AOD    P2          ADVANCE INITIALIZATION COUNT 
 CIR10    AOD    EQ          ADVANCE TO NEXT EQUIPMENT
          LMD    LO 
          ZJN    CIR11       IF END OF MASS STORAGE DEVICES 
          SFA    EST,EQ 
          ADK    EQDE 
          CRD    FN 
          LJM    CIR6 
  
 CIR11    LDD    P2          CHECK INITIALIZE STATUS
          NJN    CIR2        IF INITIALIZE REQUESTS PRESENT 
  
 CIR      SUBR               ENTRY/EXIT 
          LDN    0           PRESET EQUIPMENT INDEX 
          STD    RC          CLEAR INITIALIZE COUNT 
          STD    P2 
          LDN    NOPE-1      INITIALIZE EST ORDINAL FOR SEARCH
          STD    EQ 
          UJN    CIR10       ENTER LOOP 
  
*         ENTERED HERE EXTERNALLY.
  
 CIR1     LDN    CIRC-CIRB   CHANGE COMMAND CALL TO *CONFIG.* 
          RAM    CIRA 
 CIR2     UJMF   CIR4 
          LDD    RC 
          ZJN    CIR4        IF NO REQUESTS INVOLVING PF DESCRIPTION
          LDC    MMFL        READ MMF STATUS WORD 
          CRD    CN 
          LDD    CN+2        CHECK DATI STATUS
          LMC    4000 
          ZJN    CIR3        IF DAT INTERLOCKED 
          STD    CN+2        SET DAT INTERLOCKED
          SHN    0-13 
          ZJN    CIR4        IF INTERLOCKED BY THIS MACHINE 
          LDN    DATI        GET FLAG REGISTER INTERLOCK
          RJM    IFR
          ZJN    CIR3        IF DAT INTERLOCKED 
          LJM    GDT1        RECALL *CMS* 
  
 CIR3     LDD    RC          SET INITIALIZATION COUNT 
          RAD    CN+2 
          LDC    MMFL 
          CWD    CN 
  
*         SET UP COMMAND TO INITIATE *MSI*. 
  
 CIR4     LDN    1
  
*         ENTERED HERE FROM *DPP*.
*         (A) = NUMBER OF COMMAND WORDS.
  
 CIR5     STD    T1          NUMBER OF COMMAND WORDS
          LDD    CP          READ COMMAND POINTER WORD
          ADN    CSPW 
          CRD    CM 
          LDC    CSBN        SET FWA OF COMMANDS
          STD    CM+3 
          SBD    T1          SET LIMIT OF COMMANDS
          STD    CM+4 
          LDD    CP          WRITE *CSPW* 
          ADN    CSPW 
          CWD    CM 
          NFA    CSBN        STORE COMMANDS 
          CWM    CIRB,T1
 CIRA     EQU    *-1
          LJM    DPP1        DROP PPU 
  
  
 CIRB     VFD    60/0LMSI.
 CIRC     VFD    60/0LCONFIG. 
  
 CIRD     BSS    0
          DATA   C*CLDT.* 
          CON    0
 CIRE     DATA   C*$ISF(FM=0,SJ,SP)*
*         DATA   C*$ISF(FM=0,SJ)*      (RECOVERY DEADSTART) 
          CON    0
 CIRF2    EQU    *-CIRD 
 CIRF     EQU    CIRF2/5     CM LENGTH OF COMMANDS
          ERRNG  40-CIRF     COMMAND BUFFER OVERFLOW
 GDT      SPACE  4
**        GDT - GET DEVICE ACCESS TABLE.
* 
*         EXIT   DEVICE ACCESS TABLE LOADED.
*                TO *RCL* IF DAT BUSY.
* 
*         USES   P2, CN - CN+4. 
* 
*         CALLS  CLK, IFR, LDT. 
* 
*         MACROS EXECUTE. 
  
  
 GDT3     RJM    LDT         LOAD DEVICE ACCESS TABLE 
          LDD    P2          SET *DATI* STATUS FOR *RPF*
          RAM    RPFB 
  
 GDT      SUBR               ENTRY/EXIT 
          LDC    MMFL        READ MMF STATUS WORD 
          CRD    CN 
          LDD    CN+2        CHECK DATI STATUS
          SHN    -6 
          STD    P2 
          LMN    40 
          ZJN    GDT3        IF DAT INTERLOCKED 
          LDN    DATI        GET DAT INTERLOCK
          RJM    IFR
          ZJN    GDT3        IF INTERLOCK SET 
  
*         ENTERED HERE EXTERNALLY.
  
 GDT1     LDD    CP 
          ADN    MS2W 
          CWM    GDTA,TR
          LDN    FIRR        FLAG REGISTER INTERLOCK REJECT 
          LJM    RCL         RECALL CMS 
  
 GDTA     DATA   C*$WAITING - RECOVERY INTERLOCK.*
 RCL      SPACE  4,10 
**        RCL - RECALL PP.
* 
*         ENTRY  (A) = RECALL STACK REASON CODE.
* 
*         EXIT   TO *PPR*.
* 
*         USES   LA, CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 RCL      STD    CM          SET REASON CODE
          LDK    ZERL 
          CRD    CM+1 
          LDD    MA          ENTER PP RECALL REQUEST
          CWM    RCLA,ON
          CWD    CM 
          MONITOR  RECM 
          LJM    PPR         EXIT TO PP RESIDENT
  
 RCLA     VFD    60/0LCMS 
  
*         CODE BEYOND THIS POINT MAY BE OVERLAID. 
  
 SDVR     EQU    *
 IAM      SPACE  4
**        IAM - ISSUE ACCOUNTING MESSAGE. 
* 
*         ENTRY  (EQ) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   MESSAGE ISSUED TO ACCOUNTING DAYFILE.
* 
*         USES   T1, CM - CM+4, CN - CN+4.
* 
*         CALLS  ACS, C2D, DFM. 
  
  
 IAM      SUBR               ENTRY/EXIT 
          LDC    IAMB        SET ADDRESS OF ASSEMBLY BUFFER 
          STD    T1 
          LDD    EQ          CONVERT UPPER TWO DIGITS OF EST ORDINAL
          SHN    -3 
          RJM    C2D
          STD    CM 
          LDD    EQ          CONVERT LOWER DIGIT OF EST ORDINAL 
          LPN    7
          ADN    1R0
          SHN    6
          STD    CM+1 
          LDN    CM          ADD EST ORDINAL TO MESSAGE 
          RJM    ACS
          LDC    =C*, *      ADD SEPARATOR TO MESSAGE 
          RJM    ACS
          LDD    FN+4        GET DEVICE DESCRIPTION 
          SHN    3
          ADN    PFGL 
          CRD    CM 
          ADN    PUGL-PFGL   READ USER NAME 
          CRD    CN 
          LDD    CM+3        EXTRACT DEVICE NUMBER
          LPN    77 
          ZJN    IAM1        IF AUXILIARY DEVICE
          RJM    C2D         CONVERT TO DISPLAY CODE
          STD    CN 
          LDD    CM+3        SET END OF FAMILY NAME 
          SCN    77 
          STD    CM+3 
          LDC    2RDU&2RPD
 IAM1     LMC    2RPD        SET MESSAGE PREFIX 
          STM    IAMA+1 
          LDN    CM          ADD FAMILY/PACKNAME TO MESSAGE 
          RJM    ACS
          LDD    CN 
          ZJN    IAM2        IF NO USER/DEVICE NUMBER 
          LDC    =C*, * 
          RJM    ACS
          LDD    CN+3        SET END OF USER NAME 
          SCN    77 
          STD    CN+3 
          LDN    CN          ADD USER/DEVICE NUMBER TO MESSAGE
          RJM    ACS
 IAM2     LDC    =C*.*       SET MESSAGE TERMINATOR 
          RJM    ACS
          LDC    IAMA+ACFN   ISSUE MESSAGE TO ACCOUNT FILE
          RJM    DFM
*         LDN    0           CLEAR ASSEMBLY BUFFER
          STM    IAMB 
          LJM    IAMX        RETURN 
  
 IAMA     DATA   6HADPD,
 IAMB     BSSZ   15          ASSEMBLY BUFFER
 RCD      SPACE  4
**        RCD - RECOVER DEVICES.
* 
*         ENTRY  (RE) = EQUIPMENT TO RECOVER. 
*                (AL) = CM ADDRESS CONTAINING LABEL MST.
*                (RC) = RECOVERY COUNT. 
*                (EQ) = (T5) = EST ORDINAL. 
*                (CA+1) = CM ADDRESS OF TRT BUFFER. 
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   DEVICES RECOVERED OR SET UNAVAILABLE.
*                (A) .LT. 0 IF RECOVERY INFORMATION NOT TO
*                BE REWRITTEN TO CM UPON RETURN TO *MRL*. 
* 
*         USES   CA, EC, T1, CN - CN+4. 
* 
*         CALLS  CSD, DFM, IES, SEC, UDT. 
* 
*         MACROS SMSTF, UJMF. 
  
  
 RCD9     SCN    2           CLEAR INTERNAL SHARED STATUS 
          SHN    7+1
          STD    RE 
  
 RCD      SUBR               ENTRY/EXIT 
          SHN    21-7 
          PJN    RCD9        IF DEVICE NOT BEING RECOVERED
          SMSTF  LPTU        PROHIBIT TRT UPDATE BY *1RU* 
          RJM    SEC         SET PROPER EQUIPMENT CONFIGURATION 
          UJMF   RCD3        NON MMF TRANSFER 
          LDD    RA          GET DEVICE NAME FROM LABEL MST 
          SHN    6
          ADD    AL 
          ADN    PFGL 
          CRD    CN 
          RJM    CSD         CHECK SHARED DEVICE STATUS 
          NJN    RCD1        IF *DAT* CONFLICT
          LDD    RS 
          NJN    RCD2        IF CONTINUATION OF RECOVERY DEADSTART
          LDD    RE 
          LPN    10 
          ZJN    RCD2        IF NOT ACCESSED BY THIS MACHINE
          LDC    CSDC 
 RCD1     RJM    DFM         ISSUE MESSAGE TO DAYFILE 
          LDN    STCE        SET CONFIGURATION ERROR
          UJN    RCD5        ENTER ERROR STATUS 
  
 RCD2     RJM    UDT         UPDATE DEVICE ACCESS TABLE 
          NJN    RCD1        IF MST/TRT TRACK UNAVAILABLE 
 RCD3     LDD    RE          CHECK STATUS OF LABEL READ 
          LPN    40 
          ZJN    RCD4        IF VALID ACCESS MODE 
          LDN    STLE        SET LABEL ERROR
          UJN    RCD5        ENTER ERROR STATUS 
  
*         READ AND EDIT TRT.
  
 RCD4     RJM    RTT
          ZJN    RCD6        IF RECOVERY COMPLETE 
  
*         ERROR  IN RECOVERY OF DEVICE. 
  
 RCD5     STD    EC          SET ERROR STATUS 
          SOD    RC          DECREMENT RECOVERY COUNT 
          RJM    IES         INITIALIZE EQUIPMENT STATUS
*         LCN    0           (*MRL* REWRITE RECOVERY TABLE FLAG)
 RCD6     LJM    RCDX        RETURN 
 RQS      SPACE  4
**        RQS - REQUEST STORAGE.
* 
*         ENTRY  (A) = STORAGE REQUIRED.
* 
*         EXIT   STORAGE ASSIGNED.
*                TO *RCL* IF REQUEST PENDING. 
* 
*         CALLS  RSI. 
  
  
 RQS      SUBR               ENTRY/EXIT 
          RJM    RSI         REQUEST STORAGE INCREASE 
          ZJN    RQSX        IF ASSIGNED
          LDN    CFIR        CM FL INCREASE PENDING 
          LJM    RCL         RECALL *CMS* 
 UMT      SPACE  4
**        UMT - UPDATE MMF TABLES IN EXTENDED MEMORY. 
* 
*         ENTRY  (RC) = NUMBER OF EQUIPMENTS RECOVERED. 
* 
*         CALLS  *4DF*, MRL.
  
  
 UMT      SUBR               ENTRY/EXIT 
          LDD    RC 
          ZJN    UMTX        IF NO EQUIPMENT RECOVERED
          EXECUTE 4DF 
          LDC    UER         UPDATE EXTENDED MEMORY RESIDENT
          RJM    MRL
          UJN    UMTX        RETURN 
          SPACE  4
**        COMMON DECKS. 
  
  
*CALL     COMPACS 
*CALL     COMPRSI 
  
  
          USE    LITERALS 
          TITLE  PRESET.
 PRS      SPACE  4
**        PRS - PRESET. 
* 
*         EXIT   DEVICE STATUS TABLE IN *MSM-S* FL SET WITH 
*                RECOVERY STATUS INFORMATION AND CM ADDRESSES 
*                FOR MST LABEL DATA.
  
  
 PRS      BSS    0
          LDD    CP          CHECK ORIGIN OF CALL 
          ADN    JCIW 
          CRD    CM 
          ADN    SNSW-JCIW
          CRD    CN 
          LDD    CM+2 
          LMC    MSSI 
          ZJP    PRS2        IF VALID SUBSYSTEM CALL
          LMN    DSSI&MSSI
          NJP    PRS3        IF NOT DEADSTART SEQUENCING PRIORITY 
          ISTORE CMSB,(UJN CMS4)  SET DEADSTART SEQUENCING STATUS 
          ISTORE DPPB,(LDN CIRD-CIRB) 
          LDD    CP          SET SYSTEM USER NAME/INDEX 
          ADN    UIDW 
          CWM    PRSA,ON
          LDN    DSSL        SET RECOVERY LEVEL 
          CRD    CM 
          LDD    CM+4        SET RECOVERY STATUS
          LPN    3
          STD    T1 
          ZJN    PRS1        IF NOT RECOVERY DEADSTART
          LDC    100*1R)     PREVENT *SYSPROC* CALL 
          STM    CIRE+6 
          LDN    0
          STM    CIRE+7 
          SOM    DPPC        PREVENT *CLDT* CALL
          LDN    CIRE-CIRD
          RAM    DPPB 
 PRS1     LDM    TRCO,T1
 PRS2     UJN    PRS5        SET RECOVERY STATUS
  
 PRS3     LDC    PRSB        ISSUE * INCORRECT CMS CALL.* 
          RJM    DFM
 PRS4     LDC    MMFL        READ MMF STATUS WORD 
          CRD    CN 
          LDD    CN+2        CHECK RECOVERY INTERLOCK 
          SHN    0-13 
          ZJN    ABT         IF DAT NOT INTERLOCKED 
          LCN    DATI        RELEASE RECOVERY INTERLOCK 
          RJM    IFR
          STD    CN+2        CLEAR INTERLOCK STATUS 
          LDC    MMFL 
          CWD    CN 
 ABT      MONITOR ABTM
          LJM    PPR
  
 PRS5     STD    RS 
          PAUSE              CHECK ERROR FLAG 
          LDD    CM+1 
          NJN    PRS4        IF ERROR FLAG SET
          LDD    CN+3        CLEAR PAUSE BIT
          SCN    1
          STD    CN+3 
          LDD    CP 
          ADN    SNSW 
          CWD    CN 
          ADN    PFCW-SNSW   SWITCH TO NULL FAMILY
          CRD    CN 
          LDD    CN+3 
          STD    CM+1 
          LMN    NEEQ        CHECK FOR NULL FAMILY
          ZJN    PRS6        IF NULL FAMILY 
          LDN    DFCS 
          STD    CM+3 
          MONITOR  SMDM 
          LDN    NEEQ        SET NULL FAMILY IN *PFCW*
          STD    CN+3 
          LDD    CP 
          ADN    PFCW 
          CWD    CN 
 PRS6     LDN    ESTP        READ EST POINTER 
          CRD    CM 
          LDN    2           SET CONSTANT TWO 
          STD    TW 
          LDD    CM+3        SET LAST MASS STORAGE ORDINAL + 1
          STD    LO 
          ADN    7           SET INDEX INTO MST TABLE 
          SCN    7
          STD    CA 
          ADN    70 
          SHN    -6 
          STD    T1 
          SBD    FL 
          MJN    PRS7        IF ENOUGH STORAGE AVAILABLE
          LDD    T1 
          RJM    RQS
  
*         INITIALIZE TABLES.
  
 PRS7     RJM    IET         INITIALIZE TABLES
  
*         CHECK FOR MULTI-MAINFRAME SYSTEM. 
  
          LDC    MMFL        READ MMF STATUS WORD 
          CRD    CM 
          LDD    CM+1 
          LPC    777
          ZJN    PRS10       IF NOT MMF ENVIRONMENT 
          STD    EQ 
          LDD    RA          GET LINK DEVICE
          SHN    6
          ADD    EQ 
          CRD    RD 
          LDD    RE          ASSIGN SYSTEM STATUS TO LINK DEVICE
          LPC    5500 
          LMC    2000 
          STD    RE 
          LDD    RA          STORE LINK DEVICE RECOVERY INFORMATION 
          SHN    6
          ADD    EQ 
          CWD    RD 
          LDD    FN+4        SET EXTENDED MEMORY MST POINTER
          STM    LDMP 
          SHN    3           GET ALLOCATION WORD FROM MST 
          ADN    ALGL 
          CRD    CN 
          LDD    CN+1        SET EXTENDED MEMORY LABEL TRACK
          STM    ECLT 
          LDN    10-1        ADVANCE FL AS NEEDED FOR *DAT* TABLE 
          RAM    PRSC 
 PRS10    ZJN    PRS12       IF STAND ALONE SYSTEM
  
*         SET FL REQUIRED FOR LABEL MSTS. 
  
 PRS12    LDD    CA          SET ADDRESS OF TRT BUFFER
          STD    CA+1 
          ADN    77 
          SHN    -6 
          ADC    FLRC/100+1  REQUEST FL FOR LABELS, MSTS AND TRT EDIT 
 PRSC     EQU    *-1
          RJM    RQS
          LJM    CMS         RETURN 
  
  
 PRSA     VFD    42/0LSYSTEMX,18/SYUI 
 PRSB     DATA   C* INCORRECT CMS CALL.*
 IET      SPACE  4,10 
**        IET - INITIALIZE TABLES.
* 
*         EXIT   DEVICE RECOVERY STATUS TABLE INITIALIZED.
* 
*         USES   TS, RE, AL, EQ, UC, CM - CM+4, FN - FN+4, FS - FS+4. 
* 
*         MACROS SFA. 
  
  
 IET3     LDN    ZERL        CLEAR RECOVERY TABLE ENTRY 
          CRD    RD 
 IET4     LDD    RA          STORE RECOVERY TABLE INFORMATION 
          SHN    6
          ADD    EQ 
          CWD    RD 
          AOD    EQ          ADVANCE EST ORDINAL
          LMD    LO 
          NJN    IET1        IF NOT END OF MASS STORAGE EQUIPMENTS
          STD    RC 
  
 IET      SUBR               ENTRY/EXIT 
          LDN    NOPE-1      INITIALIZE EST ORDINAL FOR SEARCH
          STD    EQ 
 IET1     SFA    EST,EQ      READ EST ENTRY 
          ADK    EQDE 
          CRD    FN 
          LDD    FN          CHECK EST ENTRY
          LPC    7500        PRESET RECOVERY TABLE
          STD    RE 
          SHN    21-13
          PJN    IET3        IF NOT MASS STORAGE ENTRY
          LDD    CA          SET ADDRESS OF MST FOR FIRST UNIT
          STD    AL 
          LDD    FN+4        READ *STLL*
          SHN    3
          ADN    STLL 
          CRD    FS 
          ADN    DDLL-STLL   READ *DDLL*
          CRD    CM 
          LDD    CM          CHECK ORIGINAL UNIT COUNT
          SHN    -3 
          LPN    7
          STD    UC 
 IET2     LDN    MSTL        ADVANCE INDEX IN MST TABLE 
          RAD    CA 
          SOD    UC          DECREMENT UNIT COUNT 
          PJN    IET2        IF MORE UNITS THIS EQUIPMENT 
          LDD    FS          ASSIGN SYSTEM STATUS TO ASR DEVICE 
          LPN    MRASD
          SHN    12-RASD+RASD/12D*12D 
          RAD    RE 
          LJM    IET4        INITIALIZE DEVICE RECOVERY INFORMATION 
 TRCO     SPACE  4,10 
**        TRCO - TABLE OF RECOVERY OPTIONS. 
  
  
 TRCO     BSS    0
          LOC    0
          CON    0
          CON    FLTB+SYTB
          CON    FLTB 
          CON    0
  
          LOC    *O 
          EJECT 
          TTL    MSM/RMS - RECOVER MASS STORAGE.
          IDENT  RMS,OBOV-2 
*COMMENT  MSM - MASS STORAGE RECOVERY MANAGER.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***              *RMS* SURVEYS ALL MASS STORAGE DEVICES AND RECOVERS
*         ANY DEVICE POSSIBLE.  UPON COMPLETION, *REC* IS CALLED
*         INTO THIS PP TO PROCEED WITH SYSTEM RECOVERY. 
          SPACE  4
***       ENTRY CONDITIONS. 
* 
*         (IR+3) = CPUMTR MMF INITIALIZATION STATUS-
*                LINK DEVICE LABEL TRACK IF NO ERROR. 
*                ERROR MESSAGE NUMBER IF ERROR. 
*         (IR+4) = RECOVERY STATUS. 
          SPACE  4
***       OPERATOR MESSAGES.
* 
* 
*         REFER TO OPERATORS GUIDE FOR INFORMATION AS TO CAUSE OF 
*         ERROR AND RECOMMENDED CORRECTIVE ACTION.
* 
*         *DEVICE ACTIVE IN DAT.*  (MMF)
* 
*         *END OF DAT TRACK CHAIN.*  (MMF)
* 
*         *EQXXX EQYYY CONFLICTING DN.* 
* 
*         *EQXXX EQYYY CONFLICTING PN.* 
* 
*         *EQXXX EQYYY CONFLICTING UM.* 
* 
*         *EQXXX, DEVICE ACCESS ERROR.* 
* 
*         *ERROR ON DEVICE WITH ACTIVE FILES.*
* 
*         *ERROR ON SYSTEM DEVICE.* 
* 
*         *EXTENDED MEMORY LABEL TRACK NOT FOUND.*  (MMF) 
* 
*         *EXTENDED MEMORY READ/WRITE PARITY ERRORS.*  (MMF)
* 
*         *INSUFFICIENT MEMORY FOR CM RECOVERY.*
* 
*         *LABEL TRACK CONFLICT.* 
* 
*         *LINK DEVICE SIZE ERROR.*  (MMF)
* 
*         *LOCAL AREA SECTOR ERROR.*
* 
*         *MAXIMUM NUMBER MIDS ACTIVE.*  (MMF)
* 
*         *MID UNDEFINED IN EXTENDED MEMORY.*  (MMF)
* 
*         *MID CURRENTLY ACTIVE IN EXTENDED MEMORY.*  (MMF) 
* 
*         *MMF DEVICE ACCESS ERROR.*  (MMF) 
* 
*         *NON-SHARED DEVICE ACTIVE IN DAT.*  (MMF) 
* 
*         *PF LINKAGE ERROR.* 
* 
*         *PRESET NOT ALLOWED.*  (MMF)
* 
*         *REMOVABLE DEVICE CONFLICT.*  (MMF) 
* 
*         *SHARED DEVICE ACTIVE IN DAT.*  (MMF) 
* 
*         *TRT LENGTH ERROR.* 
* 
*         *UNMATCHED SYSTEM DEVICES.* 
          SPACE  4
**        ROUTINES CALLED.
* 
*         0MF - PRESET MMF LINK DEVICE. 
*         0SD - SPIN UP/DOWN ISMD DRIVES. 
          TITLE  COMMON WORKING STORAGE AND SUBROUTINES.
 RMS      SPACE  4
          QUAL   RMS
          ORG    OBOV-2 
          LJM    PRS         PRESET *RMS* 
          SPACE  4,10 
          LIST   M
          COMMON
          LIST   *
          TITLE  MAIN ROUTINE.
**        RMS - MAIN PROGRAM. 
  
  
 RMS1     EXECUTE 4DB        LOAD RECOVERY ROUTINES 
          RJM    RLD         RECOVER MMF LINK DEVICE
          LDC    0           SET UEM EQUIPMENT FOR SPECIAL PROCESSING 
 RMSE     EQU    *-1
          STM    MRLC 
          LDC    ZJNI-ZJNI   SET JUMP TO PROCESS OR IGNORE UEM
*         LDC    NJNI-ZJNI   (IF PROCESSING ONLY UEM) 
 RMSH     EQU    *-1
          RAM    MRLD 
          LDC    RDL         READ LABELS
          RJM    MRL
 RMSA     LDN    0
          ZJN    RMS2        IF NO DEVICE INITIALIZATION
          EXECUTE  4DD       LOAD VERIFICATION ROUTINES 
          EXECUTE  4DH       LOAD INITIALIZATION ROUTINES 
          LDC    IMS         PROCESS DEVICE INITIALIZATION
          RJM    MRL
 RMS2     EXECUTE  4DD       LOAD VERIFICATION ROUTINES 
          EXECUTE  4DG       LOAD RECOVERY ROUTINES 
 RMSB     UJN    RMS3        IF NOT CM RECOVERY 
*         PSN 
          LDC    CAD         CHECK ACTIVE DEVICES 
          RJM    MRL
          LDC    RMR         UPDATE MRT TABLES
          RJM    MRL
          RJM    UMT         UPDATE MMF TABLES
          UJN    DPP         CALL *REC* 
  
 RMS3     LDC    CDS         CHECK DEVICE STATUS
          RJM    MRL
          LDD    RC 
          ZJN    RMS4        IF NO EQUIPMENTS TO RECOVER
          LDC    RCD         RECOVER DEVICES
          RJM    MRL
          RJM    REM         RESTORE UEM (LEVEL 1 OR 2 AND UEM PRESENT) 
          LDC    **          WRITE DAYFILE RECOVERY SELECTIONS BACK 
 RMSC     EQU    *-1
          CWM    RMSF,ON
 RMS4     RJM    UMT         UPDATE MMF TABLES
          EXECUTE  4DC       VERIFY PF SYSTEM 
  
 DPP      LDC    DSCP*200+MS1W  STORE *RECOVERY* MESSAGE
          CWM    RMSG,ON
          LDD    IA          CALL *REC* INTO THIS PP
          CWM    RMSD,ON
          LJM    PPR
  
 RMSD     VFD    18/3LREC,6/DSCP,36/0 
 RMSF     BSS    5           DAYFILE RECOVERY SELECTIONS
 RMSG     DATA   C*RECOVERY*
          TITLE  CM RECOVERY ROUTINES.
 CAD      SPACE  4
**        CAD - CHECK ACTIVE DEVICES (CM RECOVERY). 
* 
*         ENTRY  (EQ) = (T5) = EST ORDINAL. 
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) .LT. 0 IF RECOVERY INFORMATION NOT TO
*                BE REWRITTEN TO CM UPON RETURN TO *MRL*. 
* 
*         USES   T5 - T7, FN - FN+4,  FS - FS+4.
* 
*         CALLS  ATC, CTD, EBP, IES, VLP. 
  
  
 CAD      SUBR               ENTRY/EXIT 
          SHN    21-6 
          MJN    CADX        IF DEVICE UNAVAILABLE
          SHN    6-0
          MJN    CADX        IF LABEL NOT READ
          LDD    FN+4        READ PF DESCRIPTION
          SHN    3
          ADN    PFGL 
          CRM    DLPB,TW
          ADN    STLL-PFGL-2 READ STATUS (STLL) 
          CRD    FS 
          UJMF   CAD2 
          RJM    RDE         READ *DAT* ENTRY 
          LDM    DATB+11     CHECK ACCESS BY THIS MACHINE 
          LPC    0
 CADA     EQU    *-1
          NJN    CAD1        IF DEVICE SET
          LDC    =C*MMF DEVICE ACCESS ERROR.* 
          LJM    HNG         DISPLAY MESSAGE AND HANG 
  
 CAD1     LDN    10          SET ACCESS BY THIS MACHINE 
          RAD    RE 
 CAD2     RJM    EBP         ENABLE BST/BAT PROCESSING, IF REQUIRED 
          RJM    VLP         VERIFY LABEL PARAMETERS
          MJN    CAD3        IF NOT FIRST EQUIPMENT IN CHAIN
          NJN    CAD4        IF ERRORS FOR THIS EQUIPMENT 
          RJM    ATC         ADJUST TRACK COUNT (AND CLEAR INTERLOCKS)
          LDD    FN 
          LPN    20 
          ZJN    CAD3        IF NOT ISHARED DEVICE
          LDD    RE 
          LPN    10 
          ZJN    CAD3        IF CURRENT TRT NOT IN THIS MACHINE 
          LCN    2
          RAD    RE 
          RJM    CTD
*         LDN    0           (*MRL* REWRITE RECOVERY TABLE FLAG)
 CAD3     LJM    CADX        RETURN 
  
*         ERROR IN LABEL DETECTED.
  
 CAD4     LDD    FN 
          SHN    21-10
          PJN    CAD5        IF NOT REMOVABLE DEVICE
          LDD    FN+4        CHECK ACTIVITY 
          SHN    3
          ADN    DULL 
          CRD    CM 
          LDD    CM+4 
          LPC    3777 
          ADD    FS+3 
          NJN    CAD5        IF ACTIVE FILES ON DEVICE
          RJM    IES         INITIALIZE EQUIPMENT STATUS
*         LCN    0           (*MRL* REWRITE RECOVERY TABLE FLAG)
          UJN    CAD3 
  
 CAD5     LDC    =C*ERROR ON DEVICE WITH ACTIVE FILES.* 
*         LJM    HNG
 HNG      SPACE  4
**        HNG - DISPLAY ERROR AND HANG PP.
* 
*         ENTRY  (A) = ADDRESS OF MESSAGE.
* 
*         USES   T2.
* 
*         CALLS  IFR. 
* 
*         MACROS UJMF.
  
  
 HNG      STM    HNGA 
          UJMF   HNG1 
          LCN    DATI        CLEAR FLAG REGISTER INTERLOCK
          RJM    IFR
 HNG1     LDN    4
          STD    T2 
          LDC    CPAS+MS2W   SET MESSAGE IN RECOVERY MESSAGE BUFFER 
          CWM    *,T2 
 HNGA     EQU    *-1
          UJN    *           STOP 
 SEM      SPACE  4
**        SEM - SET EQUIPMENT MESSAGE.
* 
*         ENTRY  (EQ) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  C2D. 
  
  
 SEM      SUBR               ENTRY/EXIT 
          LDN    1R 
          STD    CM 
          LDN    0           SET END OF ASSEMBLY
          STD    CM+4 
          LDD    FN+3        ENTER EQUIPMENT MNEMONIC 
          STD    CM+1 
          LDD    EQ          CONVERT UPPER TWO DIGITS OF EST ORDINAL
          SHN    -3 
          RJM    C2D
          STD    CM+2 
          LDD    EQ          CONVERT LOWER DIGIT OF EST ORDINAL 
          LPN    7
          ADN    1R0
          SHN    6
          STD    CM+3 
          LDC    CPAS+MS1W+1
          CWD    CM 
          ADN    MS2W-MS1W-1 CLEAR SECOND LINE OF MESSAGE 
          CWD    CM+4 
          UJN    SEMX 
          TITLE  NON - CM RECOVERY ROUTINES.
 CDS      SPACE  4,20 
**        CDS - CHECK DEVICE STATUS (LEVEL 0, 1, 2 RECOVERY). 
* 
*         ENTRY  (EQ) = (T5) = EST ORDINAL. 
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (RC) = COUNT OF EQUIPMENTS TO RECOVER. 
*                (RE) = SET WITH RECOVERY INFORMATION.
*                (A) .LT. 0 IF RECOVERY INFORMATION NOT TO
*                BE REWRITTEN TO CM UPON RETURN TO *MRL*. 
* 
*         USES   FN - FN+4, FS - FS+4, T4 - T7, RC, EQ, EC. 
* 
*         CALLS  CSD, CSE, HNG, IES, UDT, VLP.
* 
*         MACROS UJMF.
  
  
 CDS12    LDN    0           INHIBIT FURTHER PROCESSING OF DEVICE 
          STD    RE 
  
 CDS      SUBR               ENTRY/EXIT 
          SHN    21-4 
          MJN    CDSX        IF INITIALIZATION SPECIFIED
          LDD    FN 
          LPN    2
          NJN    CDS12       IF DEVICE OFF OR DOWN
          LDD    RA          READ LABEL DATA
          SHN    6
          ADD    AL 
          ADN    PFGL        READ DEVICE DESCRIPTION
          CRD    CN 
          ERRNZ  PUGL-PFGL-1 ADJUST IF *PUGL* POSITION CHANGES
          ERRNZ  MDGL-PFGL-2 ADJUST IF *MDGL* POSITION CHANGES
          CRM    DLPB,TW
          LDD    FN+4        READ STLL
          SHN    3
          ADN    STLL 
          CRD    FS 
          SBN    STLL-MDGL
          CRD    CM+3 
          RJM    CSE         CHECK SYSTEM EQUIPMENT 
  
*         VERIFY LABELS FOR THIS EQUIPMENT. 
  
 CDS1     UJMF   CDS2 
          LDD    CN+4 
          LPN    70 
          NJN    CDS2        IF NOT FIRST UNIT OF EQUIPMENT 
          RJM    CSD         CHECK SHARED DEVICE STATUS 
          NJN    CDS7        IF DAT CONFLICT
 CDS2     RJM    VLP         VERIFY LABEL PARAMETERS
          MJN    CDS4        IF NOT FIRST EQUIPMENT IN CHAIN
          NJN    CDS6        IF ERROR ON ANY LABEL
          UJMF   CDS3        NON MMF TRANSFER 
          RJM    UDT         UPDATE DEVICE ACCESS TABLE 
          NJN    CDS7        IF EXTENDED MEMORY TRACK UNAVAILABLE 
 CDS3     LDD    RE          CHECK INCORRECT MODE CHANGE
          LPN    40 
          NJN    CDS5        IF FULL TRACK ACCESS SET 
          LDC    200         SET EQUIPMENT RECOVERY 
          RAD    RE 
          AOD    RC          ADVANCE RECOVERY COUNT 
 CDS4     LJM    CDSX        RETURN 
  
 CDS5     LDN    STLE        SET LABEL ERROR STATUS 
          STD    EC 
  
*         ERROR IN LABEL VERIFICATION.
  
 CDS6     LDD    RE 
          SHN    21-10
          MJN    CDS10       IF REMOVABLE DEVICE ERROR
          SHN    21-12+22-21+10 
 CDSA     PJN    CDS9        IF NOT DEVICE WITH SYSTEM STATUS 
*         PJN    CDS11       (LVL0 - IF NOT DEVICE WITH SYSTEM STATUS)
          LDC    =C*ERROR ON SYSTEM DEVICE.*
 CDS7     LJM    HNG         DISPLAY ERROR AND HANG 
  
*         NON REMOVABLE DEVICE ERROR. 
  
 CDS9     LDC    =C*ERROR ON DEVICE WITH ACTIVE FILES.* 
          UJN    CDS7        DISPLAY ERROR AND HANG 
  
*         REMOVABLE DEVICE ERROR. 
  
 CDS10    LDD    EC          CHECK ERROR CODE 
*         UJN    CDS11       (LEVEL 0 DEADSTART)
 CDSB     EQU    *-1
          LMN    STLE 
          ZJN    CDS11       IF LABEL ERROR 
          LMN    STNR&STLE
          ZJN    CDS11       IF NOT READY 
          LDD    RA          CHECK LABEL COPY OF *STLL* 
          SHN    6
          ADD    AL 
          ADN    DULL 
          CRD    CM 
          ADN    STLL-DULL
          CRD    CN 
          LDD    CM+4        CHECK ACTIVITY 
          LPC    3777 
          ADD    CN+3 
          NJN    CDS9        IF ACTIVE FILES ON DEVICE
 CDS11    RJM    IES         INITIALIZE EQUIPMENT STATUS
*         LCN    0           (*MRL* REWRITE RECOVERY TABLE FLAG)
          LJM    CDSX        RETURN 
 CSE      SPACE  4,10 
**        CSE - CHECK SYSTEM EQUIPMENT. 
* 
*         ENTRY  (FN - FN+4) = EST ENTRY. 
*                (CM+3 - CM+7) = MDGL WORD OF MST.
* 
*         EXIT   TO *HNG* IF MISMATCHED SYSTEM DEVICES. 
  
  
 CSE2     LDD    FN+3        SET SYSTEM DEVICE TYPE 
          STM    CSEA 
          LDD    CM+7        SET MAXIMUM SECTOR LIMIT 
          STM    CSEA+1 
  
 CSE      SUBR               ENTRY/EXIT 
          LDD    FN 
          SHN    21-12
          PJN    CSEX        IF NOT SYSTEM DEVICE 
          LDM    CSEA 
          ZJN    CSE2        IF FIRST SYSTEM DEVICE 
          LMD    FN+3        COMPARE DEVICE TYPE
          NJN    CSE1        IF NO MATCH WITH FIRST SYSTEM DEVICE 
          LDM    CSEA+1      CHECK SECTOR LIMIT 
          LMD    CM+7 
          ZJN    CSEX        IF MATCHING TRACK SIZE 
 CSE1     LDC    =C*UNMATCHED SYSTEM DEVICES.*
          LJM    HNG
  
 CSEA     CON    0,0
 RCD      SPACE  4,20 
**        RCD - RECOVER DEVICE. 
* 
*         ENTRY  (A) = (RE) = EQUIPMENT RECOVERY STATUS INFORMATION.
*                (EQ) = (T5) = EST ORDINAL. 
*                (RC) = RECOVERY COUNT. 
*                (CA+1) = CM ADDRESS OF TRT BUFFER. 
*                (FN - FN+4) = EST ENTRY. 
*                (RE) SET WITH DEVICE RECOVERY INFORMATION. 
*                (AL) = CM ADDRESS CONTAINING LABEL MST.
* 
*         EXIT   DEVICE RECOVERED OR LEFT AS UNAVAILABLE. 
*                (A) .LT. 0 IF RECOVERY INFORMATION NOT TO
*                BE REWRITTEN TO CM UPON RETURN TO *MRL*. 
* 
*         USES   CA, EC, P1, T1.
* 
*         CALLS  CDC, HNG, IES, RDY, SEC. 
  
  
 RCD6     RJM    RDY         RECOVER DAYFILES 
          LDN    0
  
 RCD      SUBR               ENTRY/EXIT 
          SHN    21-7 
          PJN    RCDX        IF EQUIPMENT NOT BEING RECOVERED 
          SMSTF  LPTU        PROHIBIT TRT UPDATE BY *1RU* 
          RJM    SEC         SET EQUIPMENT CONFIGURATION
  
*         READ TRT FOR THIS DEVICE. 
  
          RJM    RTT
          ZJN    RCD6        IF RECOVERY COMPLETE 
  
*         ERROR IN DEVICE RECOVERY. 
  
          STD    EC          SET ERROR CODE 
          LMN    STTL 
          ZJN    RCD1        IF LENGTH ERROR
          LDN    RCDB-RCDA
 RCD1     ADC    RCDA        SET ERROR MESSAGE ADDRESS
          STD    P1 
 RCDC     LDD    FN 
*         UJN    RCD4        (LEVEL 0 DEADSTART)
          SHN    21-10
          PJN    RCD5        IF NOT REMOVABLE DEVICE
          LDM    MBUF+5*STLL+3
          NJN    RCD4        IF ACTIVE USERS
 RCD2     SOD    RC          DECREMENT RECOVERY COUNT 
          RJM    IES         INITIALIZE EQUIPMENT STATUS
*         LCN    0           (*MRL* REWRITE RECOVERY TABLE FLAG)
 RCD3     UJP    RCDX        RETURN 
  
 RCD4     LDD    RE 
          SHN    21-12
          PJN    RCD2        IF NOT SYSTEM DEVICE 
 RCD5     LDD    P1 
          LJM    HNG         DISPLAY MESSAGE AND HANG 
  
  
 RCDA     DATA   C*TRT LENGTH ERROR.* 
 RCDB     DATA   C*PF LINKAGE ERROR.* 
 RDY      SPACE  4,10 
**        RDY - RECOVER DAYFILES. 
* 
*         ENTRY  (MBUF) = MST.
* 
*         USES   P1.
* 
*         CALLS  CDC, *4DG*, *4DJ*. 
* 
*         MACROS EXECUTE. 
  
  
 RDY      SUBR               ENTRY/EXIT 
          LDM    MBUF+5*ACGL+4
          LPC    MGLAP
          ZJN    RDYX        IF NO SECTOR OF LOCAL AREAS
          LDN    EXDF        SET NUMBER OF EXCESS DAYFILES
          STD    P1 
 RDY1     SOD    P1 
          MJN    RDYX        IF END OF DAYFILES 
          LDM    MBUF+5*DALL,P1 
          ZJN    RDY1        IF NO TRACK ASSIGNED 
          EXECUTE  4DJ       LOAD DAYFILE RECOVERY ROUTINES 
          RJM    CDC         CHASE DAYFILE CHAIN
          EXECUTE  4DG       RELOAD RECOVERY ROUTINES 
          UJN    RDYX        RETURN 
 REM      SPACE  4,10 
**        REM - RESTORE UEM FROM CHECKPOINT FILE IF LEVEL 1 OR 2
*              DEADSTART AND UEM IS PRESENT.
* 
*         USES   LO.
* 
*         CALLS  4DK. 
* 
*         MACROS EXECUTE. 
  
  
 REM1     STM    MRLC        RESTORE PROCESSING OF ALL EQUIPMENTS 
  
 REM      SUBR               ENTRY
          SOM    REMA 
          ZJN    REM1        IF UEM NOT TO BE RESTORED THIS PASS
          EXECUTE  4DK       RESTORE UEM
  
*         *4DK* DOES NOT RETURN CONTROL HERE.  IT EXITS TO *RMS1*.
  
 REMA     CON    1           IF ZERO, *4DK* WILL NOT BE CALLED
 RLD      SPACE  4,15 
**        RLD - RECOVER LINK DEVICE.
* 
*         ENTRY  (FN - FN+4) = EST ENTRY FOR LINK DEVICE. 
*                (RD - RD+4) = RECOVERY INFORMATION FOR LINK DEVICE.
* 
*         USES   EQ, P1, P2, RC, RE, T5, CM - CM+4, CN - CN+4.
* 
*         CALLS  CDS, EMF, IMS, LDT, LRA, RCD, RDL, SEM, *0MF*, *4DB*,
*                *4DD*, *4DG*, *4DH*. 
* 
*         MACROS EXECUTE, MONITOR.
  
  
 RLD2     LDD    RE 
          SHN    21-4 
          PJN    RLD3        IF INITIALIZE NOT SPECIFIED
          EXECUTE  4DD       LOAD VERIFICATION ROUTINES 
          EXECUTE  4DH       LOAD INITIALIZATION ROUTINES 
          LCN    0           INITIALIZE LINK DEVICE 
          RJM    IMS
          SOM    RMSA        DECREMENT INITIALIZATION COUNT 
          UJN    RLD4        CHECK LABEL TRACK
  
 RLD3     LDN    PSNI        FORCE LINK DEVICE SIZE VERIFICATION
          STM    WMTC 
          RJM    RDL         READ DEVICE LABEL
          EXECUTE  4DD       LOAD VERIFICATION ROUTINES 
          EXECUTE  4DG       LOAD RECOVERY ROUTINES 
          RJM    LDT         LOAD DEVICE ACCESS TABLE 
          LDD    EQ 
          STD    T5 
          LDN    0           CHECK DEVICE STATUS
          RJM    CDS
          LDD    EQ 
          STD    T5 
          LDD    RE 
          RJM    RCD         RECOVER DEVICE 
 RLD4     LDM    LDMP        GET DEVICE ALLOCATION WORD FROM MST
          SHN    3
          ADN    ALGL 
          CRD    CN 
          LDD    CN+1        CHECK LABEL TRACK
          LMM    ECLT 
          ZJN    RLD5        IF SAME AS FOUND BY *CPUMTR* 
          MONITOR  HNGM      HANG PP
  
 RLD5     STD    RC 
          LDD    RE          SAVE LINK DEVICE RECOVERY STATUS 
          STM    UMTA 
          LDC    **          *PRESET* COUNT 
 RLDA     EQU    *-1
          ZJN    RLD6        IF PRESET NOT SPECIFIED
          STD    P1 
          LDC    **          BUFFERED DEVICE *PRESET* COUNT 
 RLDC     EQU    *-1
          STD    P2 
          EXECUTE 0MF,PRS 
          LDN    0           CLEAR LINK DEVICE RECOVERY STATUS
          STM    UMTA 
 RLD6     STD    RE          CLEAR RECOVERY FOR LINK DEVICE 
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    EQ 
          CWD    RD 
          EXECUTE 4DB        RELOAD *4DB* 
          LDC    LRMS        ENABLE MMF RECOVERY
          RJM    EMF
  
 RLD      SUBR               ENTRY/EXIT 
 RLDB     LDN    0
*         LDN    1           (LINK DEVICE ALREADY RECOVERED)
          NJN    RLDX        IF LINK DEVICE ALREADY RECOVERED 
          AOM    RLDB 
          LDC    **          (LINK DEVICE EST ORDINAL)
 RLDD     EQU    *-1
          ZJN    RLDX        IF STAND-ALONE SYSTEM
          STD    T5 
          STD    EQ 
 RLDE     LDC    LRMS        ENABLE MMF RECOVERY
*         UJN    RLD1        (PRESET SELECTED)
          RJM    EMF
 RLDF     STM    WMTB        ENABLE LINK DEVICE RECOVERY
*         UJN    RLDX        (CM RECOVERY)
 RLD1     RJM    SEM         SET EQUIPMENT MESSAGE
          LJM    RLD2        CHECK FOR INITIALIZATION 
 UMT      SPACE  4
**        UMT - UPDATE MMF TABLES IN EXTENDED MEMORY. 
* 
*         CALLS  IFR, LRA, MRL, UIS, 4DF. 
  
  
 UMT1     LDC    UIS         UPDATE ISD TABLES
          RJM    MRL
  
 UMT      SUBR               ENTRY/EXIT 
          EXECUTE  4DF
          UJMF   UMT1 
          LDC    0
 UMTB     EQU    *-1         (LINK DEVICE EST ORDINAL)
          STD    T5 
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    T5 
          CRD    RD 
          LDC    *           RESTORE LINK DEVICE RECOVERY STATUS
 UMTA     EQU    *-1
          STD    RE 
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    T5 
          CWD    RD          RESTORE RECOVERY TABLES
          LDC    UER         UPDATE EXTENDED MEMORY RESIDENT
          RJM    MRL
 UMTC     LCN    DATI        CLEAR FLAG REGISTER INTERLOCK
*         UJN    UMTX        (LEVEL 0 DEADSTART OR CM RECOVERY) 
          RJM    IFR
          LJM    UMTX        RETURN 
          SPACE  4
          USE    LITERALS 
          TITLE  PRESET PROGRAM.
 PRS      SPACE  4
**        PRS - PRESET. 
* 
*         EXIT   (RS) = RECOVERY STATUS.
*                (TW) = CONSTANT 2. 
*                (LM) = EXTENDED MEMORY MST POINTER IF MMF SYSTEM.
*                (LO) = LAST MASS STORAGE ORDINAL + 1.
*                (FN - FN+4) = EXTENDED MEMORY EST ENTRY IF MMF SYSTEM. 
*                (CA+1) = FWA FOR CM TRT BUFFER.
*                DEVICE RECOVERY STATUS TABLE IN *MSM-S* FL SET WITH
*                RECOVERY STATUS INFORMATION AND CM ADDRESSES FOR MST 
*                LABEL DATA.
* 
*         USES   CA, CA+1, LO, P1, RE, RS, TA, TW, T5, CM - CM+4, 
*                CN - CN+4, FN - FN+4, RD - RD+4. 
* 
*         CALLS  CRE, CUR, IET, IFR, LCM, SUD.
* 
*         MACROS SFA. 
  
  
 PRS      BSS    0
          LDN    JSCL        READ SCHEDULER CONTROL 
          CRD    CM 
          LDD    CM          SET SCHEDULER ACTIVE 
          LPC    3777 
          LMC    4000 
          STD    CM 
          LDN    JSCL        STORE SCHEDULER CONTROL
          CWD    CM 
          LDN    2           DEFINE CONSTANT 2
          STD    TW 
          LDN    ESTP        READ EST POINTER 
          CRD    CM 
          LDD    CM+3        SET LAST MASS STORAGE ORDINAL + 1
          STD    LO 
          ADN    7           SET INDEX IN MST TABLE 
          SCN    7
          STD    CA 
          STD    CA+1 
          LDD    IR+4        SET RECOVERY STATUS
*         STD    RS 
          STM    RMSD+4      STORE IN *REC* CALL
          NJN    PRS0        IF NOT LEVEL 0 DEADSTART 
          ISTORE CDSA,(PJN CDS11) 
          ISTORE CDSB,(UJN CDS11) 
          ISTORE RCDC,(UJN RCD4)
          ISTORE UMTC,(UJN UMTX)
 PRS0     LDD    RS 
          LPN    FLMK 
          LMN    FLCM 
          STD    P1 
          NJN    PRS1        IF NOT CM RECOVERY 
          IFGT   TA,RA
          LDN    RA-TA
          ELSE   1
          LCN    RA-TA
          RAM    LRAC 
          RJM    LCM         FIND FREE AREA 
          LDK    MABL        CHECK MAINFRAME TYPE 
          CRD    CM 
          LDD    CM+1 
          SHN    21-13
          MJN    PRS1        IF CME NOT PRESENT 
          LDC    4000 
          STD    TA 
          LDC    0
          ORG    *-1
          LOC    LRAA 
          UJN    LRA1        SET *R* REGISTER 
          LOC    *O 
          STM    LRAA 
 PRS1     RJM    IET         INITIALIZE EQUIPMENT TABLE 
          LDD    P2 
          NJN    PRS2        IF NOT ALL-ISD CONFIGURATION 
          LDK    CFGL 
          CRD    CM 
          LDD    CM+3 
          LPC    7377 
          ADC    400         SET ALL-ISD FLAG 
          STD    CM+3 
          LDK    CFGL 
          CWD    CM 
 PRS2     LDD    CA          SET ADDRESS OF TRT BUFFER
          STD    CA+1 
          LDC    CPAS+MS1W   ISSUE *SPINNING UP DRIVES* MESSAGE 
          CWM    PRSE,TR
          LDN    0           SPIN UP ISMD DRIVES
          RJM    SUD
          LDN    0           WAIT - SPIN UP COMPLETE
          RJM    SUD
          LDC    CPAS+MS1W   ISSUE RECOVERY MESSAGE 
          CWM    PRSA,TW
          LDD    P1 
          NJN    PRS3        IF NOT CM RECOVERY 
          STM    RMSB 
          RJM    LCM         CHECK FIELD LENGTH 
          RJM    CRE         CHECK RECOVERY 
 PRS3     LDN    DFPP 
          CRD    CM 
          LDD    CM          SET FWA OF DAYFILE POINTERS
          SHN    14 
          ADD    CM+1 
          CRD    CM 
          LDD    CM          SET ADDRESS OF DAYFILE RECOVERY SELECTIONS 
          RAM    RMSC-1 
          LPN    37 
          SHN    14 
          ADD    CM+1 
          STM    RMSC 
          CRM    RMSF,ON     READ DAYFILE RECOVERY SELECTIONS 
          RJM    CUR         CHECK FOR UEM RECOVERY REQUIRED
          LDK    MMFL        CHECK MMF STATUS WORD
          CRD    CN 
          LDD    CN+1        GET LINK DEVICE EST ORDINAL
          LPC    777
          STM    RLDD 
          NJN    PRS5        IF NOT STAND ALONE SYSTEM
 PRS4     LDC    DSCP*200+MS1W  STORE RECOVERY MESSAGE
          CWM    PRSF,TW
          LJM    RMS1        EXIT TO MAIN ROUTINE 
  
 PRS5     STD    T5 
          STM    UMTB 
          SFA    EST         READ LINK DEVICE EST ENTRY TO (FN - FN+4)
          ADK    EQDE 
          CRD    FN 
          LDD    IR+3        CHECK FOR INITIALIZE ERROR FROM *CPUMTR* 
          STM    ECLT 
          SHN    21-13
          MJN    PRS6        IF NO ERROR
          LDM    PRSB-1,IR+3 DISPLAY ERROR CONDITION
          LJM    HNG
  
 PRS6     LDD    CN+3        SET MACHINE MASK 
          STM    CADA 
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    T5 
          CRD    RD 
          LDD    RE          ASSIGN SYSTEM STATUS TO LINK DEVICE
          LPC    5520 
          LMC    2000 
          STD    RE 
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    T5          RESTORE LINK DEVICE INFORMATION
          CWD    RD 
          LDD    FN+4        SET LINK DEVICE MST POINTER
          STM    LDMP 
          LDK    DSCL        CHECK PRESET REQUESTED 
          CRD    CM 
          LDD    CM+3 
          STM    RLDA 
          ZJN    PRS6.1      IF *PRESET* NOT SELECTED 
          ISTORE RLDE,(UJN RLD1)
 PRS6.1   LDD    CM+4 
          STM    RLDC 
          LDD    P1 
          NJN    PRS6.2      IF NOT CM RECOVERY 
          ISTORE RLDF,(UJN RLDX)
          ISTORE UMTC,(UJN UMTX)
          UJN    PRS8        STORE RECOVERY MESSAGE 
  
 PRS6.2   LDD    RS 
          NJN    PRS7        IF RECOVERY SELECTED 
          LDC    4000        SET DAT INTERLOCKED
          STD    CN+2 
          LDC    MMFL        STORE MMF STATUS WORD
          CWD    CN 
 PRS7     SBN    1           DELAY
          NJN    PRS7 
          LDC    CPAS+MS1W+1 STORE *WAITING* MESSAGE
          CWM    PRSC,ON
          ADN    MS2W-MS1W-2
          CWM    PRSD,TR
          LDN    DATI        GET FLAG REGISTER INTERLOCK
          RJM    IFR
          NJN    PRS7        IF DAT BUSY
 PRS8     LJM    PRS4        STORE RECOVERY MESSAGE 
  
 PRSA     DATA   C*RECOVERY,* 
  
 PRSB     CON    ERM1 
          CON    ERM2 
          CON    ERM3 
          CON    ERM4 
          CON    ERM5 
          CON    ERM6 
  
 ERM1     DATA   C*EXTENDED MEMORY LABEL TRACK NOT FOUND.*
 ERM2     DATA   C*MID UNDEFINED IN EXTENDED MEMORY.* 
 ERM3     DATA   C*MID CURRENTLY ACTIVE.* 
 ERM4     DATA   C*MAXIMUM NUMBER MIDS ACTIVE.* 
 ERM5     DATA   C*EXTENDED MEMORY READ/WRITE PARITY ERRORS.* 
 ERM6     DATA   C*PRESET NOT ALLOWED.* 
  
 PRSC     DATA   C*WAITING* 
 PRSD     DATA   C*MMF DEADSTART IN PROGRESS.*
 PRSE     DATA   C*SPINNING UP DRIVES.* 
 PRSF     DATA   C*RECOVERING*
 CRE      SPACE  4,10 
**        CRE - CHECK RECOVERY. 
* 
*         EXIT   TO *PPR* TO CALL *1CK* IF ONLY TO CHECKPOINT.
* 
*         USES   T1 - T6, CM - CM+4.
*         MACROS SFA. 
  
  
 CRE7     LDN    7           SET CHECKPOINT OF NON-BUFFERED DEVICES 
          STM    CREB+2 
 CRE8     LDN    NCPL        CALL *1CK* TO SYSTEM CP
          CRD    CM 
          AOD    CM+1 
          RAM    CREB+1 
          LDD    IA 
          CWM    CREB,ON
          EXECUTE  1CK,=
          LJM    PPR         EXIT TO PP RESIDENT
  
 CRE      SUBR               ENTRY/EXIT 
          LDD    IR+3 
          SHN    21-13
          MJN    CRE2        IF LABEL TRACK SPECIFICATION 
          SHN    13-21
          LPN    7
          ZJN    CRE1        IF NO MMF PRESET ERROR 
          LMN    2
          NJN    CREX        IF NOT *RECOVERY DS PREVENTED THIS MID.* 
 CRE1     LDD    IR+3 
          SHN    21-12
          MJN    CRE7        IF CHECKPOINT NON-BUFFERED DEVICES 
 CRE2     LDC    BIOL 
          CRD    CM 
          LDD    CM+1 
          SHN    14 
          LMD    CM+2 
          NJN    CRE2.1      IF BUFFERED I/O PRESENT
          LDD    IR+3 
          SHN    21-11
          MJP    CRE8        IF CHECKPOINT ALL DEVICES
          UJN    CREX        RETURN 
  
 CRE2.1   ADN    PUTP 
          CRD    T1 
          LDD    T1+3        CLEAR FLAGS
          LPN    77 
          STD    T1+3 
          LDC    CPAS+MS2W   ENTER MESSAGE
          CWM    CREA,TR
          LDN    ZERL        REQUEST FLUSH OF ALL WRITE BUFFERS 
          CRD    CM 
          LDC    BMFW*100+1 
          STD    CM+4 
          MONITOR  BFMM 
 CRE3     LDD    T1          SET NUMBER OF ENTRIES
          ADN    1
          STD    T6 
 CRE4     SOD    T6 
          ZJN    CRE5        IF ALL ENTRIES CHECKED 
          SHN    PUTLS       CHECK *PUT* FOR OUTSTANDING REQUESTS 
          ADD    T1+4 
          SHN    6
          ADD    T1+3 
          SHN    14 
          ADK    UNCT 
          CRD    CM 
          LDD    CM+3 
          ZJN    CRE4        IF NO REQUESTS OUTSTANDING 
          SFA    EST,CM+1 
          ADK    EQDE 
          CRD    CM 
          LDD    CM 
          LPN    3
          LMN    3
          ZJN    CRE4        IF DEVICE IS DOWN
          UJP    CRE3        WAIT FOR FLUSH TO COMPLETE 
  
 CRE5     STD    CM          CLEAR MESSAGE
          LDC    CPAS+MS2W
          CWD    CM 
          LDD    IR+3 
          SHN    21-13
          MJN    CRE6        IF LABEL TRACK SPECIFICATION 
          SHN    21-11-21+13
          PJN    CRE6        IF NO CHECKPOINT ABORT 
          LJM    CRE8        CHECKPOINT ALL DEVICES AND ABORT 
  
 CRE6     LJM    CREX        RETURN 
  
 CREA     DATA   C*FLUSHING BUFFERED DEVICES.*
 CREB     VFD    24/3L1CK,12/6,24/0 
 CUR      SPACE  4,10 
**        CUR - CHECK FOR UEM RECOVERY REQUIRED.
* 
*         ENTRY  (RS) = RECOVERY STATUS.
* 
*         USES   CM - CM+4. 
* 
*         MACROS SFA. 
  
  
 CUR      SUBR               ENTRY/EXIT 
          LDD    RS 
          LPN    FLMK 
          LMN    FLTB 
          NJN    CURX        IF NOT LEVEL 1 OR 2 RECOVERY 
          LDN    ESTP        SEARCH FOR UEM EQUIPMENT 
          CRD    T3 
          LDN    NOPE-1 
          STD    T5 
 CUR1     AOD    T5 
          LMD    T6 
          ZJN    CURX        IF NO UEM EQUIPMENT
          SFA    EST,T5 
          ADK    EQDE 
          CRD    CM 
          LDD    CM 
          SHN    21-13
          PJN    CUR1        IF NOT MASS STORAGE
          LDD    CM+4 
          SHN    3
          ADK    DILL 
          CRD    CM 
          LDD    CM+3        CHECK MEMORY TYPE
          SHN    -6 
          LPN    7
          LMN    4
          NJN    CUR1        IF NOT UEM 
          LDD    T5 
          STM    RMSE 
          AOM    REMA        ENABLE *4DK* CALL
          UJP    CURX        RETURN 
 IET      SPACE  4,10 
**        IET - INITIALIZE EQUIPMENT TABLE. 
* 
*         ENTRY  (CA) = CM ADDRESS OF MST TABLE.
* 
*         EXIT   (RC) = 0.
*                (P2) = 0 IF ALL ISD CONFIGURATION. 
*                (CA) = LWA OF MST TABLE IN CM. 
*                DEVICE RECOVERY INFORMATION IN CM INITIATED. 
* 
*         USES   T5, UC, CM - CM+4, FN - FN+4, FS - FS+4, RD - RD+4.
* 
*         CALLS  LRA. 
* 
*         MACROS SFA. 
  
  
 IET5     LDN    ZERL        CLEAR RECOVERY TABLE ENTRY 
          CRD    RD 
 IET6     RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    T5 
          CWD    RD 
          AOD    T5          ADVANCE EST ORDINAL
          LMD    LO 
          NJN    IET1        IF NOT END OF MASS STORAGE DEVICES 
          STD    RC 
  
 IET      SUBR               ENTRY/EXIT 
          LDN    0           SET ISD CONFIGURATION FLAG 
          STD    P2 
          LDN    NOPE-1      INITIALIZE EST ORDINAL FOR SEARCH
          STD    T5 
 IET1     SFA    EST,T5      READ EST ENTRY 
          ADK    EQDE 
          CRD    FN 
          LDD    FN          CHECK EST ENTRY
          LPC    7500        PRESET RECOVERY TABLE
          STD    RE 
          SHN    21-13
          PJN    IET5        IF NOT MASS STORAGE ENTRY
          LDD    CA          SET ADDRESS OF MST FOR FIRST UNIT
          STD    AL 
          LDD    FN+4        READ *STLL*
          SHN    3
          ADN    STLL 
          CRD    FS 
          ADN    DDLL-STLL   READ *DDLL*
          CRD    CM 
          LDD    CM          SET ORIGINAL UNIT COUNT
          SHN    -3 
          LPN    7
          STD    UC 
          LDD    FN+3        CHECK FOR ISD DEVICE 
          LMC    2RDE 
          ZJN    IET2        IF EXTENDED MEMORY 
          LMN    2RDD&2RDE
          ZJN    IET2        IF ISD 
          LMN    2RDG&2RDD
          ZJN    IET2        IF ISD 
          STD    P2          SET NON-ISD FLAG 
 IET2     LDN    MSTL        ADVANCE INDEX IN MST TABLE 
          RAD    CA 
          SOD    UC 
          PJN    IET2        IF MORE UNITS THIS EQUIPMENT 
          LDD    FS          ASSIGN SYSTEM STATUS TO ASR DEVICE 
          LPN    MRASD
          SHN    12-RASD+RASD/12D*12D 
          RAD    RE 
          LDD    FS 
          LPC    MLIAL
          ZJN    IET4        IF FULL INITIALIZE NOT SPECIFIED 
          LDN    20          SET INITIALIZE FLAG
          RAD    RE 
          AOM    RMSA        ADVANCE INITIALIZATION COUNT 
 IET3     LJM    IET6        STORE RECOVERY INFORMATION 
  
 IET4     LDD    FN 
          SHN    21-10
          PJN    IET3        IF NON-REMOVABLE DEVICE
          LDD    RS 
          LPN    FLMK 
          LMN    FLTB 
          NJN    IET3        IF FILES NOT RECOVERED FROM MASS STORAGE 
          LJM    IET5        DEFER RECOVERY TO *CMS*
 LCM      SPACE  4,10 
**        LCM - LOCATE CM FOR RECOVERY. 
* 
*         ENTRY  (A) = 0 IF RECHECKING FIELD LENGTH.
*                (CA+1) = MEMORY REQUIRED.
* 
*         EXIT   (LRAB) = RA OF FREE AREA.
*                (CN - CN+3) = PARAMETERS FROM *CMA*. 
* 
*         CALLS  CMA. 
  
  
 LCM      SUBR               ENTRY/EXIT 
          ZJN    LCM1        IF RECHECKING FIELD LENGTH 
          LDN    ZERL 
          CRD    CN 
          LDN    CN          FIND LARGEST FREE AREA 
          RJM    CMA
          LDD    CN+1        SAVE RA OF AREA
          STM    LRAB 
          STD    TA 
          LDD    CN 
          RAM    LRAB-1 
 LCM1     LDD    CN+2 
          NJN    LCMX        IF SUFFICIENT FL 
          LDD    CA+1 
          ADN    77 
          SHN    -6 
          SBD    CN+3 
          MJN    LCMX        IF SUFFICIENT MEMORY AVAILABLE 
          ZJN    LCMX        IF SUFFICIENT MEMORY AVAILABLE 
          LDC    LCMA        * INSUFFICIENT MEMORY FOR CM RECOVERY.*
          LJM    HNG         PROCESS ERROR
  
  
 LCMA     DATA   C* INSUFFICIENT MEMORY FOR CM RECOVERY.* 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPCMA 
*CALL     COMPSUD 
  
  
 OVL0     BSS    0           *0SD* LOAD ADDRESS 
          ERRNG  BFMS-OVL0-ZSDL  *0SD* OVERFLOW 
  
          QUAL
          TTL    MSM/1RF - RECOVER PRESERVED FILES. 
          TITLE 
          QUAL   RPF
          IDENT  1RF,PPFW 
*COMMENT  MSM - RECOVER PRESERVED FILES.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          QUAL   1RF
 RPF      SPACE  4,15 
***              *1RF* IS CALLED BY *REC* TO RECOVER PRESERVED
*         FILES ON A MASS STORAGE DEVICE.  WHEN *1RF* HAS FINISHED
*         WITH A DEVICE, IT INDICATES TO *REC* THAT IT IS COMPLETE. 
*         *REC* TELLS IT EITHER TO PROCESS ANOTHER DEVICE OR DROP.
 RPF      SPACE  4,15 
***       ENTRY CONDITIONS. 
* 
*         (IR+2) = EST ORDINAL. 
*         (IR+3) = CP NUMBER AT WHICH TO DISPLAY MESSAGES.
*         (IR+4) = RECOVERY STATUS. 
* 
*         WHEN *1RF* COMPLETES, IT SETS (IR+2) TO 0.  *REC* EITHER
*         REPLIES WITH ANOTHER EST ORDINAL OR 4000 WHICH INDICATES
*         THAT *1RF* SHOULD DROP. 
 RPF      SPACE  4,10 
**        ROUTINES CALLED.
* 
*         4DA - RECOVER PRESERVED FILES.
 RPF      SPACE  4,10 
          ORG    PPFW 
  
 RPF      BSS    0           ENTRY
          LDD    IR+3        SET *IQFT* BUFFER ADDRESS
          SHN    6
          STD    CR 
          SHN    7-6         SET MESSAGE CONTROL POINT
          STD    CF 
*         LDD    IR+4        SET RECOVERY STATUS
*         STD    RS 
          LDD    RS 
          NJN    RPF0        IF RECOVERY DEADSTART
          LDC    DSCP+ENRS   MOVE TO DEADSTART CONTROL POINT
          STD    CM+1 
          MONITOR  CCAM 
 RPF0     LDN    10 
          STD    T1 
          LDD    CF          SAVE CONTROL POINT MESSAGES
          ADK    MS1W 
          CRM    RPFC,T1
  
*         NOTE - *DSD* DOES NOT DISPLAY CONTROL POINT MESSAGES ON THE 
*         B-DISPLAY UNLESS THERE IS A NON-ZERO EJT ORDINAL PRESENT. 
  
          ADK    TFSW-MS1W-10 
          CRD    CM 
          LDD    CM          SAVE CURRENT EJT ORDINAL 
          STM    RPFB 
          LDN    DSEO        SET DEADSTART EJT ORDINAL
          STD    CM 
          LDD    CF 
          ADK    TFSW 
          CWD    CM 
          LDN    2
          STD    TW 
          EXECUTE 4DA        LOAD SYSTEM SECTOR CLEANUP ROUTINES
          LDC    LDDI+CF     FORCE MESSAGES TO CONTROL POINT *CF* 
          STM    /RDA/RDAK
          STM    /RDA/RDAL
          STM    /RDA/CUSA
          LDN    0
          SBN    1           DELAY FOR OTHER *4DA* LOADS TO COMPLETE
          NJN    *-1
 RPF2     LDD    IR+2        SET EST ORDINAL
          STD    T5 
          SFA    EST         FETCH MST POINTER FROM EST 
          ADK    EQDE 
          CRD    FN 
          LDD    FN+4        READ MST STATUS WORD 
          SHN    3
          ADN    STLL 
          CRD    CM 
          LDD    CM          EXTRACT FULL INITIALIZE FLAG 
          LPC    MLIAL
          RJM    /RDA/RDA    CLEAR PRESERVED FILE INTERLOCKS
          LDN    0
          STD    IR+2        INDICATE RECOVERY COMPLETE 
          LDD    IA 
          CWD    IR 
 RPF3     DELAY              WAIT 125 MICROSECONDS
          LDD    IA 
          CRD    IR          CHECK FOR REPLY FROM *REC* 
          LDD    IR+2 
          ZJN    RPF3        IF NO REPLY YET
          SHN    21-13
          PJN    RPF2        IF ANOTHER DEVICE TO PROCESS 
          LDN    10 
          STD    T1 
          LDD    CF          RESTORE CONTROL POINT MESSAGES 
          ADN    MS1W 
          CWM    RPFC,T1
          LDD    CF 
          ADK    TFSW 
          CRD    CM 
          LDC    0           RESTORE EJT ORDINAL
 RPFB     EQU    *-1
          STD    CM 
          LDD    CF 
          ADK    TFSW 
          CWD    CM 
 RPF4     MONITOR  DPPM 
          LJM    PPR         EXIT TO PP RESIDENT
  
  
 RPFC     BSS    0           CONTROL POINT MESSAGE SAVE AREA
          SPACE  4,10 
 SDVR     EQU    RPFC+10*5
          QUAL
          TTL    MSM/4DA - RECOVER PRESERVED FILES. 
          TITLE 
          IDENT  4DA,/RDA/RDEX
*COMMENT  MSM - RECOVER PRESERVED FILES.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***              *RDA* PERFORMS SYSTEM SECTOR CLEANUP ON ALL DIRECT 
*         ACCESS PERMANENT FILES AS WELL AS BUILDING THE *IQFT* 
*         ON LEVEL 0 DEADSTARTS.
          SPACE  4
***       ENTRY  CONDITIONS.
* 
*         (A) = 0, IF DEVICE IS NOT BEING INITIALIZED.
*         (CF) = MESSAGE CONTROL POINT ADDRESS (*1RF* CALL).
*         (CP) = CONTROL POINT ADDRESS (*CMS* CALL).
*         (CR) = RELATIVE ADDRESS OF *IQFT* BUFFER. 
*         (FN - FN+4) = EST ENTRY.
*         (RS) = RECOVERY STATUS. 
*         (T5) = EST ORDINAL. 
          SPACE  4
***       OPERATOR MESSAGES.
* 
*         *EQXXX, ANNNN TYYYY SZZZZ LINKAGE* = LENGTH / LINKAGE ERROR 
*         AT TRACK YYYY SECTOR ZZZZ OF PRESERVED FILE ON EST ORDINAL
*         XXX, FIRST TRACK AT NNNN.  OPERATOR INTERVENTION IS REQUIRED. 
*         IF THE OPERATOR ENTERS *GO*, EOI WILL BE WRITTEN AT THE 
*         LOCATION OF THE ERROR AND RECOVERY WILL PROCEED.  IF THE
*         OPERATOR ENTERS *PAUSE*, ERROR IDLE STATUS WILL BE SET AND
*         RECOVERY OPERATIONS ON THE DEVICE TERMINATED. 
* 
*         *RECOVER EQXXX, ANNNN TMMMM. = RECOVERING PRESERVED FILE ON 
*         EST ORDINAL XXX.  FIRST TRACK IS NNNN AND TRACK CURRENTLY 
*         BEING READ IS MMMM. 
          SPACE  4
***       DAYFILE MESSAGES. 
* 
*         *EQXXX, ERROR IDLE SET.* = THIS FOLLOWS THE *PF LENGTH ERROR* 
*         OR *QF LENGTH ERROR* MESSAGE IF ERROR IDLE WAS FORCED BY THE
*         SYSTEM OR THE OPERATOR ENTERED *PAUSE*. 
* 
*         *EQXXX NNNN DIRECT ACCESS FILE ERRORS.* = COUNT OF ERRORS 
*         DETECTED IN DIRECT ACCESS FILES ON EST ORDINAL XXX.  THE
*         COUNT SHOULD MATCH THE NUMBER OF ERROR MESSAGES PRODUCED. 
* 
*         *EQXXX NNNN DIRECT ACCESS FILES RECOVERED.* = COUNT OF DIRECT 
*         FILES RECOVERED ON EST ORDINAL XXX. 
* 
*         *EQXXX, FFFFFFF, DD RECOVERED.* = RECOVERY COMPLETE ON EST
*         ORDINAL XXX WITH FAMILY NAME FFFFFFF AND DEVICE NUMBER DD.
* 
*         *EQXXX NNNN PRESERVED FILE ERRORS.* = COUNT OF ERRORS 
*         DETECTED WHILE READING SYSTEM SECTORS ON EST ORDINAL XXX. 
* 
*         *EQXXX NNNN QUEUED FILE ERRORS.* = COUNT OF QUEUED FILE 
*         ERRORS DETECTED ON EST ORDINAL XXX.  THE COUNT SHOULD 
*         MATCH THE NUMBER OF ERROR MESSAGES PRODUCED.
* 
*         *EQXXX NNNN QUEUED FILES RECOVERED.* = COUNT OF QUEUED
*         FILES RECOVERED ON EST ORDINAL XXX. 
* 
*         *EQXXX NNNN QUEUED FILES IGNORED.* = COUNT OF QUEUED FILES
*         NOT WRITTEN TO THE *IQFT* FILE DUE TO LACK OF SPACE.
* 
*         *EQXXX, PF CATALOG SIZE ERROR.* = THE PERMANENT FILE CATALOGS 
*         ON EST ORDINAL XXX ARE THE WRONG SIZE FOR THE CURRENT SYSTEM. 
* 
*         *EQXXX, PPPPPPP RECOVERED.* = RECOVERY COMPLETE ON EST
*         ORDINAL XXX WITH PACKNAME PPPPPPP.
* 
*         *EQXXX, PRESERVED FILE RECOVERY INITIATED.* = PRESERVED FILE
*         RECOVERY WAS STARTED FOR EST ORDINAL XXX. 
* 
*         *EQXXX, TRACK LIMIT ON IQFT.* = NO TRACK AVAILABLE FOR IQFT.
* 
*         *EQXXX PF LENGTH ERROR UINDEX  FILENAME* = PERMANENT FILE 
*         LENGTH WAS INCORRECT. 
* 
*         *EQXXX QF LENGTH ERROR         FILENAME* = QUEUED FILE
*         LENGTH WAS INCORRECT. 
          SPACE  4
***       ACCOUNT FILE MESSAGES.
* 
*         *ADDR, XXX, FFFFFFF, DD, LVLL, LVLU.* = EST ORDINAL XXX 
*         WITH FAMILY NAME FFFFFFF, DEVICE NUMBER DD, LOWER SECURITY
*         ACCESS LEVEL LVLL AND UPPER SECURITY ACCESS LEVEL LVLU
*         HAS BEEN RECOVERED. 
* 
*         *ADPM, XXX, PPPPPPP, UUUUUUU, LVLL, LVLU.* = EST ORDINAL
*         XXX WITH PACKNAME PPPPPPP, LOWER SECURITY ACCESS LEVEL
*         LVLL AND UPPER SECURITY ACCESS LEVEL LVLU HAS BEEN MOUNTED. 
*         IF PRESENT, UUUUUUU INDICATES THAT THE PACK WAS A PRIVATE 
*         PACK BELONGING TO THAT USER.
          SPACE  4
***       ERROR LOG MESSAGES. 
* 
*         *EQXXX, ANNNN PF RECOVERY ERROR.* = SYSTEM SECTOR ERROR OR
*         UNIDENTIFIED FILE TYPE WHILE PROCESSING A PRESERVED FILE ON 
*         TRACK NNNN OF EST ORDINAL XXX.
* 
*         *EQXXX, ANNNN TYYYY SZZZZ LINKAGE ERROR.* = LENGTH / LINKAGE
*         ERROR AT TRACK YYYY SECTOR ZZZZ OF A PRESERVED FILE WHOSE BOI 
*         IS ON TRACK NNNN OF EST ORDINAL XXX.
* 
*         *EQXXX, ERROR IDLE SET.* = THIS FOLLOWS THE *PF LENGTH ERROR* 
*         OR *QF LENGTH ERROR* MESSAGE IF ERROR IDLE WAS FORCED BY THE
*         SYSTEM OR THE OPERATOR ENTERED *PAUSE*. 
* 
*         *EQXXX, PF CATALOG SIZE ERROR.* = THE PERMANENT FILE CATALOGS 
*         ON EST ORDINAL XXX ARE THE WRONG SIZE FOR THE CURRENT SYSTEM. 
* 
*         *EQXXX, TYYYY SZZZZ LINKAGE ERROR.* = THIS MESSAGE FOLLOWS
*         THE *PF LENGTH ERROR* AND *QF LENGTH ERROR* MESSAGES, GIVING
*         ADDITIONAL DETAILS ON THE LOCATION OF THE ERROR - EST ORDINAL 
*         XXX, TRACK YYYY, SECTOR ZZZZ. 
* 
*         *LI LENGTH ERROR         FILENAME* = LIBRARY FILE LENGTH
*         WAS INCORRECT.  THE *LINKAGE ERROR.* MESSAGE FOLLOWS THIS 
*         MESSAGE.
* 
*         *PF LENGTH ERROR UINDEX  FILENAME* = PERMANENT FILE LENGTH
*         WAS INCORRECT.  THE *LINKAGE ERROR.* MESSAGE FOLLOWS THIS 
*         MESSAGE.
* 
*         *QF LENGTH ERROR         FILENAME* = QUEUED FILE LENGTH WAS 
*         INCORRECT.  THE *LINKAGE ERROR.* MESSAGE FOLLOWS THIS 
*         MESSAGE.
          SPACE  4
 O4DA     MAX    /CMS/SDVR+5,/1RF/SDVR+5
  
          QUAL   RDA
          SPACE  4
*CALL     COMSJIO 
*CALL     COMSPFM 
*CALL     COMSSSE 
          SPACE  4,10 
**        ASSEMBLY CONSTANTS. 
  
  
 EQV$     EQU    1           DO NOT VERIFY EQUIPMENT IN *COMPRSS* 
 IRA$     EQU    1           RANDOM ACCESS PROCESSORS INITIALIZED 
 NSDF     EQU    5           NUMBER OF SPECIAL DAFS 
 SBUF     EQU    BFMS-502    SCRATCH BUFFER FOR EOI SECTOR
          SPACE  4
 DATB     EQU    O4DA-5      BUFFER FOR DEVICE ACCESS TABLE ENTRY 
  
          ORG    O4DA 
  
 RDE      SUBR               ENTRY/EXIT 
          TITLE  MAIN LOOP. 
 RDA      SPACE  4
**        RDA - MAIN ROUTINE. 
  
  
 RDA      SUBR   PRS         ENTRY/EXIT 
          ERRNZ  RDE+1-RDAX  CODE DEPENDS ON VALUE
          STD    T3          SAVE INITIALIZE FLAG 
          ZJN    RDA1        IF DEVICE NOT BEING INITIALIZED
          UJMF   RDAX 
 RDA1     LDD    T5          CONVERT UPPER TWO DIGITS OF EST ORDINAL
          SHN    -3 
          RJM    C2D
          STM    RDAD 
          STM    IQFB+1 
          STM    IDMC+1 
          STM    IRMB+1 
          STM    CPSB+1 
          STM    RDAI+1 
          STM    RDAJ+1 
          STM    PFEE+1 
          LDD    T5          CONVERT LOWER DIGIT OF EST ORDINAL 
          LPN    7
          SHN    6
          ADC    2R0, 
          STM    CPSB+2 
          STM    IQFB+2 
          STM    IRMB+2 
          STM    RDAD+1 
          STM    RDAI+2 
          STM    RDAJ+2 
          LMN    1R &1R,     REMOVE COMMA FROM MESSAGE
          STM    IDMC+2 
          STM    PFEE+2 
          LDD    T3 
          NJN    RDA1.1      IF DEVICE BEING INITIALIZED
          LDC    RDAJ+NMSN   *PRESERVED FILE RECOVERY INITIATED*
          RJM    DFM         ISSUE DAYFILE MESSAGE
 RDA1.1   LDD    FN+4        READ TDGL WORD OF MST
          SHN    3
          ADK    TDGL 
          CRD    CN 
          ADN    MDGL-TDGL   GET MASS STORAGE DRIVER WORD 
          CRD    T7 
          SBN    MDGL-ALGL   GET DAT TRACK ADDRESS
          CRD    CM 
          LDD    CM+4        SAVE DAT TRACK ADDRESS 
          STM    SPFD 
          LDD    T7          SAVE 16-WORD PFC FLAG
          SHN    -11
          LPN    1
          STD    T1 
          STM    CPSA 
          LDM    RDAH,T1     ENABLE / DISABLE DAF PROCESSING
          STM    RDAG 
          RJM    PTA         PRESET TRT ADDRESS 
          RJM    GDE         GET *DAT* ENTRY
          SETMS  IO,DF
*         LDN    0
          STD    CN+3        INITIALIZE TRACK SEARCH
 RDAA     UJN    RDA2        CONTINUE 
*         PSN                (LEVEL-0 RECOVERY) 
          RJM    IQF         INITIALIZE THE *IQFT* FILE 
          STM    CQFA 
          ZJN    RDA2        IF TRACK NOT ASSIGNED
          AOM    CQFC        FLAG *IQFT* INITIALIZED
          STM    TQFA 
  
*         LOOP FOR EACH TRACK ON DEVICE.
  
 RDA2     RJM    SPF         SEARCH FOR PRESERVED FILE
          NJP    RDA5        IF PRESERVED FILE FOUND
  
*         COMPLETE PROCESSING FOR THIS DEVICE.
  
          LDD    RS 
          NJN    RDA3        IF RECOVERY DEADSTART
          RJM    TQF         TERMINATE *IQFT* 
 RDA3     ENDMS              RELEASE CHANNEL
          RJM    IDM         ISSUE DAYFILE MESSAGES 
          RJM    WDE         UPDATE DAT ENTRY 
          LDC    0           SET ERROR IDLE IF NON-ZERO 
 RDAM     EQU    *-1
          ZJN    RDA4        IF NO ERROR IDLE TO BE SET 
          LDC    RDAI+NMSN   SEND ERROR IDLE MESSAGES 
          RJM    DFM
          LDC    RDAI+ERLN
          RJM    DFM
          SMSTF  GDEI        SET DEVICE ERROR IDLE STATUS 
          LDN    STEI 
          RJM    SES
          CMSTF  LCKP        CLEAR POSSIBLE CHECKPOINT REQUEST
 RDA4     LDN    0           CLEAR CONSOLE MESSAGE
          STD    CM 
 RDAK     LDD    CP 
*         LDD    CF          (*1RF* CALL) 
          ADN    MS2W 
          CWD    CM 
          RJM    CPS         CHECK PFC SIZE 
          RJM    CUS         CLEAR UNAVAILABLE STATUS 
          LJM    RDAX        EXIT 
  
*         CONVERT TRACK NUMBER AND DISPLAY MESSAGE. 
  
 RDA5     RJM    C2D
          STM    RDAE+1 
          LDD    T6 
          SHN    -6 
          RJM    C2D
          STM    RDAE 
 RDAL     LDD    CP 
*         LDD    CF          (*1RF* CALL) 
          ADN    MS2W 
          CWM    RDAC,TR
          SBN    1           SAVE ADDRESS FOR *RDC* MESSAGE 
          STM    RDCA 
          SETMS  POSITION 
*         LDN    0
          STD    CN          CLEAR FILE TYPE
          RJM    RSS         READ SYSTEM SECTOR 
          NJN    RDA6        IF ERROR 
  
*         DETERMINE TYPE OF PRESERVED FILE. 
  
          RJM    SFT         SET FILE TYPE
          NJN    RDA6        IF UNKNOWN FILE TYPE 
          LDD    RS 
          ZJN    RDA5.1      IF NOT RECOVERY DEADSTART
          RJM    VFR         VERIFY FILE FOR RECOVERY DEADSTART 
          UJN    RDA7        PROCESS NEXT TRACK 
  
 RDA5.1   LDD    CN          CHECK FILE TYPE
          NJN    RDA5.2      IF NOT QUEUED FILE 
          RJM    CQF         CREATE QUEUED FILE ENTRY 
          UJN    RDA7        PROCESS NEXT TRACK 
  
 RDA5.2   LMN    PMFT        CHECK FILE TYPE
          ZJN    RDA9        IF DIRECT ACCESS PERMANENT FILE
          LMN    FAFT&PMFT
          ZJN    RDA9        IF FAST ATTACH FILE
          LJM    RDA10       PROCESS SPECIAL PRESERVED FILE 
  
 RDA6     RJM    IEM         ISSUE ERROR LOG MESSAGE
 RDA7     LJM    RDA2        PROCESS NEXT TRACK 
  
*         RELEASE FILE. 
  
 RDA8     ENDMS 
          LDD    T5          DROP TRACK CHAIN FOR FILE
          LMC    4000        ADD CHECKPOINT REQUEST 
          STD    CM+1 
          LDD    T6 
          STD    CM+2 
          MONITOR DTKM
          UJN    RDA7 
  
*         PROCESS PERMANENT FILES.
  
 RDA9     LDM    CASS        CHECK FILE ACCESS
*         UJN    RDA7        (8-WORD PFC DEVICE)
 RDAG     EQU    RDA9 
          STD    CN+1        SET SYSTEM SECTOR REWRITE STATUS 
          SHN    21-5 
          MJN    RDA8        IF PURGE FLAG SET
          SHN    5-4
          MJN    RDA11       IF FILE CAN BE SHORTENED 
          LDM    UCSS+1 
          ADM    UCSS+2 
          ADM    UCSS+3 
          ADM    UCSS+4 
          ADM    FISS 
          RAD    CN+1        SET SYSTEM SECTOR REWRITE STATUS 
 RDA10    RJM    VFL         VERIFY FILE LENGTH 
          ZJN    RDA12       IF NO LENGTH ERROR 
 RDA11    RJM    RDC         READ DISK CHAIN
          ZJN    RDA12       IF NO LENGTH/LINKAGE/DISK ERROR
          RJM    CFL         CHANGE FILE LENGTH 
          LDD    CN 
          LMN    LIFT 
          ZJN    RDA15       IF LIBRARY TYPE FILE 
          UJN    RDA13       ISSUE FILE ERROR MESSAGE 
  
 RDA12    LDD    FS+1 
          LMM    SBUF+FTEI
          ZJN    RDA14       IF NO BOI/EOI ERROR
 RDA13    RJM    PFE         ISSUE FILE ERROR MESSAGE 
 RDA14    RJM    CTU         CLEAR USER COUNTS
 RDA15    ENDMS 
          LJM    RDA2        LOOP FOR NEXT TRACK
  
  
 RDAC     DATA   H*RECOVER EQ*
 RDAD     DATA   6HXXX, A 
 RDAE     DATA   4HNNNN 
 RDAF     CON    0
          DATA   C*F RECOVERY ERROR.* 
  
 RDAH     BSS    0           TABLE OF INSTRUCTIONS TO PLUG
          LOC    RDAG 
          UJN    RDA7 
          LOC    *O 
          CON    LDMI 
  
 RDAI     DATA   C*EQXXX, ERROR IDLE SET.*
  
 RDAJ     DATA   C*EQXXX, PRESERVED FILE RECOVERY INITIATED.* 
          TITLE  SUBROUTINES. 
 CFL      SPACE  4,15 
**        CFL - CHANGE FILE LENGTH. 
* 
*         ENTRY  (T6) = TRACK FOR EOI.
*                (T7) = SECTOR FOR EOI. 
*                (CN) = FILE TYPE.
*                (FS+4) = 0, IF EOI REWRITE REQUIRED. 
*                (BFMS) LOADED WITH SYSTEM SECTOR.
* 
*         EXIT   EOI IN TRT CHANGED.
*                EOI REWRITTEN, IF (FS+4) = 0.
*                ERROR FLAG SET IN SYSTEM SECTOR CATALOG IMAGE. 
*                (CN+1) NONZERO (SYSTEM SECTOR REWRITE FLAG). 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  CLF, WEI.
  
  
 CFL      SUBR               ENTRY/EXIT 
          RJM    CLF         CHANGE LENGTH OF FILE IN TRT 
          LDD    FS+4 
          NJN    CFL1        IF NO REWRITE OF EOI REQUIRED
          LDD    MA          COPY FNT/FST FROM SYSTEM SECTOR TO EOI 
          CWM    FNSS,TW
          SBN    2
          CRM    SBUF+FNEI,TW 
          RJM    WEI         WRITE EOI
 CFL1     LDD    CN          CHECK FILE TYPE
          LMN    LIFT 
          ZJN    CFLX        IF LIBRARY FILE
          LDM    CTSS+FCEC   SET ERROR FLAG IN SYSTEM SECTOR
          LPC    7077 
          LMC    400
          STM    CTSS+FCEC
          AOD    CN+1        SET SYSTEM SECTOR REWRITE STATUS 
          UJN    CFLX        RETURN 
 CPS      SPACE  4,10 
**        CPS - CHECK PFC SIZE. 
* 
*         ENTRY  (T5) = EST ORDINAL.
* 
*         CALLS  DFM, SES.
* 
*         MACROS CMSTF, SMSTF.
  
  
 CPS      SUBR               ENTRY/EXIT 
          LDC    *
*         LDC    0           (8-WORD PFC DEVICE)
 CPSA     EQU    *-1
          NJN    CPSX        IF NOT 8-WORD PFC DEVICE 
          LDC    CPSB        ISSUE DAYFILE MESSAGE
          RJM    DFM
          LDC    CPSB+ERLN   ISSUE MESSAGE TO ERROR LOG 
          RJM    DFM
          SMSTF  GDEI        SET GLOBAL ERROR IDLE FLAG 
          LDN    STCS        SET PF CATALOG SIZE ERROR STATUS 
          RJM    SES
          CMSTF  LCKP        CLEAR POSSIBLE CHECKPOINT
          UJN    CPSX        RETURN 
  
 CPSB     DATA   C*EQXXX, PF CATALOG SIZE ERROR.* 
 CQF      SPACE  4,20 
**        CQF - CREATE QUEUED FILE ENTRY. 
* 
*         CQF CREATES THE ENTRY REPRESENTING A QUEUED FILE IN 
*         THE INACTIVE QUEUED FILE LIST.
* 
*         ENTRY  (BFMS) = SYSTEM SECTOR.
*                (CQFA) = 0 IF NOT *IQFT* SPACE AVAILABLE.
* 
*         EXIT   *IQFT* ENTRY CREATED, IF QUEUE FILE RECOVERED. 
* 
*         USES   QI, T1, T6, CM - CM+4. 
* 
*         CALLS  IQF, PFE, RSS, VFL, WEI, WQF, WSR. 
* 
*         MACROS FILEREC, SETMS.
  
  
 CQF7     AOM    PQIC        ADVANCE QUEUE FILE IGNORED COUNT 
  
 CQF      SUBR               ENTRY/EXIT 
          LDC    1
 CQFA     EQU    *-1
          ZJN    CQF7        IF NO SPACE FOR/ON *IQFT*
 CQFC     LDN    0
*         LDN    1           (QUEUE FILE PROCESSING INITIATED)
          NJN    CQF2        IF QUEUE FILE PROCESSING INITIATED 
          RJM    IQF         INITIALIZE *IQFT*
          STM    CQFA 
          ZJN    CQF7        IF TRACK UNAVAILABLE FOR *IQFT*
          LDD    FS+1        REREAD THE QUEUE FILE SYSTEM SECTOR
          STD    T6 
          SETMS  POSITION 
*         LDN    0           READ SYSTEM SECTOR 
          RJM    RSS
          AOM    CQFC 
          STM    TQFA 
 CQF2     RJM    VFL         VERIFY FILE LENGTH 
          NJN    CQF4        IF LENGTH ERROR
          LDM    DTSS 
          NJN    CQF3        IF ENHANCED EOI INDICATED
          LDD    MA          COPY FNT/FST FROM SYSTEM SECTOR TO EOI 
          CWM    FNSS,TW
          SBN    2
          CRM    SBUF+FNEI,TW 
          RJM    WEI         REWRITE EOI
          UJN    CQF5        ADVANCE RECOVERY COUNT 
  
 CQF3     LDD    FS+1        VERIFY BOI/EOI 
          STD    T6 
          LMM    SBUF+FTEI
          ZJN    CQF5        IF VERIFY GOOD 
 CQF4     LCN    0           SET LENGTH ERROR 
          STM    FLSS 
          STM    FLSS+1 
          RJM    PFE         ISSUE ERROR MESSAGE
          LJM    CQF7        IGNORE THIS FILE AND RETURN
  
 CQF5     AOM    PMRC        ADVANCE QUEUED FILE RECOVERY COUNT 
          LDM    FGSS        SET INACTIVE QUEUE FILE STATUS 
          SCN    2
          STM    FGSS 
          LDD    FS+1        RESET SYSTEM SECTOR ADDRESS
          RJM    WSR         WRITE SYSTEM SECTOR WITH REWRITE 
  
*         ENTER THIS FILE IN *IQFT* BUFFER IN CM. 
  
          LDM    FLSS+1      INSERT FILE LENGTH 
          STM    CDSS+1 
          LDM    FLSS 
          STM    CDSS 
          LDD    T5          SET EST ORDINAL
          STM    IOSS+5*ENTQ
          LDN    10          MAXIMUM QFT ENTRY LENGTH 
          STD    T1 
          LDM    RMSS        USE THE RESIDENT MACHINE ID FOR RECOVERY 
          STM    FMSS+4 
          LDD    RA 
          SHN    6
          ADD    CR          FWA OF IQFT BUFFER 
          ADD    QI 
          CWM    IOSS,T1     QFT ENTRY
          CWM    CDSS,ON     DATE, TIME AND FILE LENGTH IN SECTORS
          CWM    FMSS,ON     WRITE FAMILY NAME
          CWM    FDSS,ON     DESTINATION FAMILY NAME
          CWM    OASS,ON     OWNER USER NAME, USER INDEX
          CWM    FOSS,ON     OWNER FAMILY NAME
          LDN    QFEWL       QUEUED FILE ENTRY WORD COUNT 
          RAD    QI          ADVANCE BUFFER POINTER 
          SHN    -6          WORDS/PRU (0-77) 
          ZJN    CQF6        IF NOT FULL SECTOR 
          RJM    WQF         WRITE QUEUED FILE SECTOR 
 CQF6     LJM    CQFX        RETURN 
  
  
*         QUEUED FILE RECOVERY TABLE. (RDAT)
  
          LIST   G
          FILEREC 
          LIST   *
          CON    PMFT+100 
          CON    FAFT+100 
          CON    LIFT+100 
 RDATBL   EQU    *-RDAT 
 CUS      SPACE  4,15 
**        CUS - CLEAR UNAVAILABLE STATUS. 
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
* 
*         USES   T1, T3, T6, T7, CM - CM+4. 
* 
*         CALLS  CDC, RDS, SDA, SMI, WDS. 
* 
*         MACROS DELAY, ENDMS, PAUSE, SETMS.
  
  
 CUS6     LDD    RS          CHECK RECOVERY STATUS
          LPN    FLMK 
          LMN    FLCM 
          ZJN    CUSX        IF CM RECOVERY 
          RJM    SDA         SET DEVICE AVAILABLE 
  
 CUS      SUBR               ENTRY/EXIT 
          LDD    FN 
          LPN    20 
          ZJN    CUS6        IF NOT INDEPENDENT SHARED DEVICE 
          SETMS  IO,(DE,DF,NS)
          LDN    FN+1        PRESET ERROR RETRY STATUS
          STD    T3 
          LDD    FN+4        SET LABEL TRACK
          SHN    3
          ADN    ALGL 
          CRD    CM 
          LDD    CM+1 
          STD    T6 
          LDN    0
          STD    T7 
 CUS1     LDC    BFMS        READ LABEL FOR *DIT* 
          RJM    RDS
          MJN    CUS3        IF READ ERROR
          LDM    N4SS+5*SDGL+4
          LPN    77 
          SHN    -1 
          ZJN    CUS5        IF SOFTWARE INTERLOCK NOT SET
 CUSA     LDD    CP 
*         LDD    CF          (*1RF* CALL) 
          ADN    MS2W 
          CWM    CUSB,TR     *WAITING FOR INTERLOCK.* 
 CUS2     ENDMS 
          DELAY 
          PAUSE 
          LDD    CM+1        CHECK ERROR FLAG 
          LMN    ORET 
          NJN    CUS1        IF NOT OPERATOR OVERRIDE 
 CUS3     AOD    T3 
          LMN    FN+3 
          ZJN    CUS4        IF BOTH CHANNELS TRIED 
          LDI    T3 
          NJN    CUS2        IF ANOTHER CHANNEL PRESENT 
 CUS4     ENDMS 
          LJM    RDAX        EXIT 
  
 CUS5     RJM    SMI         CALCULATE *DIT* ENTRY ADDRESS
          STD    T1 
          SHN    2
          ADC    //DISS-5+3 
          RAD    T1 
          LDI    T1          CLEAR DIT INTERLOCK
          SCN    1
          STI    T1 
          RJM    CDC         COMPUTE LABEL CHECKSUM 
          STM    CKSS 
          LDC    BFMS+WLSF   REWRITE LABEL
          RJM    WDS
          MJN    CUS4        IF WRITE ERROR 
          ENDMS 
          LJM    CUS6        SET DEVICE AVAILABLE 
  
  
 CUSB     DATA   C*WAITING FOR INTERLOCK.*
 IEM      SPACE  4,15 
**        IEM - ISSUE ERROR LOG MESSAGE.
* 
*         ENTRY  (T4) = CHANNEL NUMBER. 
*                (CN) = FILE TYPE.
* 
*         EXIT   ERROR COUNT (PMPC) ADVANCED. 
* 
*         CALLS  DFM. 
* 
*         MACROS ENDMS. 
  
  
 IEM      SUBR               ENTRY/EXIT 
          LDD    CN 
          LMN    SYFT 
          ZJN    IEMX        IF SYSTEM FILE 
          AOM    PMPC        ADVANCE ERROR COUNT
          LDC    2R P 
          STM    RDAF 
          ENDMS              RELEASE CHANNEL
          LDC    ERLN+RDAD-1 ISSUE MESSAGE TO ERROR LOG 
          RJM    DFM
*         LDN    0           CLEAR END OF CP MESSAGE
          STM    RDAF 
          UJN    IEMX        RETURN 
 IQF      SPACE  4,15 
**        IQF - INITIALIZE *IQFT*.
* 
*         ENTRY  (T5) = EST ORDINAL.
* 
*         EXIT   (A) = 0 IF TRACK UNAVAILABLE FOR *IQFT*. 
*                (QF) = (QT) = FIRST TRACK OF *IQFT*. 
*                (QS) = FIRST SECTOR OF *IQFT*. 
*                (QI) = 0.
* 
*         USES   T3, CM - CM+4. 
* 
*         CALLS  DFM, WSS.
* 
*         MACROS ENDMS, MONITOR, SETMS. 
  
  
 IQF2     LDC    IQFB        *EQXXX, TRACK LIMIT ON IQFT.*
          RJM    DFM
*         LDN    0
  
 IQF      SUBR               ENTRY/EXIT 
          ENDMS 
          LDN    ZERL 
          CRD    CM 
          LDD    T5          REQUEST *IQFT* TRACK 
          STD    CM+1 
          MONITOR  RTCM 
          LDD    CM+4 
          ZJN    IQF2        IF NO TRACK AVAILABLE
          STD    T6 
          STD    QF 
          STD    QT 
          LDC    500
          STD    T3 
 IQF1     LDN    0           CLEAR SYSTEM SECTOR BUFFER 
          STM    BFMS+1,T3
          SOD    T3 
          NJN    IQF1        IF NOT START OF BUFFER 
          STD    QI 
          LDD    RA 
          SHN    6
          ADD    CR          FWA OF IQFT BUFFER 
          CWM    BFMS,HN     CLEAR CM BUFFER
          LDD    MA          MOVE FILE NAME TO BUFFER 
          CWM    IQFA,ON
          SBN    1
          CRM    FNSS,ON
          SETMS  POSITION 
          RJM    WSS         WRITE *IQFT* SYSTEM SECTOR 
          LDN    FSMS        SET FIRST *IQFT* SECTOR
          STD    QS 
          LJM    IQFX        RETURN 
  
 IQFA     VFD    42/0LQUEUES,6/1,6/SYFT,6/0 
  
 IQFB     DATA   C*EQXXX, TRACK LIMIT ON IQFT.* 
 PTA      SPACE  4,10 
**        PTA - PRESET FIRST WORD ADDRESS OF TRT. 
* 
*         ENTRY  (FN - FN+4) = EST ENTRY OF DEVICE. 
* 
*         USES   CM - CM+4. 
  
  
 PTA      SUBR               ENTRY/EXIT 
          LDD    FN+4        GET FWA OF TRT 
          SHN    3
          ADN    TRLL 
          CRD    CM 
          LDD    CM+3        SET FWA OF TRT 
          LPN    77 
          LMC    ADCI 
          STM    SPFA-1 
          STM    GDEC-1 
          LPN    77 
          SHN    14 
          LMD    CM+4 
          STM    SPFA 
          STM    GDEC 
          SBD    TH 
          STM    SEIA+1 
          STM    SNTA+1 
          SHN    -14
          LMC    ADCI 
          STM    SEIA 
          STM    SNTA 
          UJP    PTAX        RETURN 
 SFT      SPACE  4,10 
**        SFT - SET FILE TYPE.
* 
*         ENTRY  (BFMS) = SYSTEM SECTOR.
* 
*         EXIT   (A) = 0, IF VALID FILE TYPE. 
*                (CN) = 0, IF QUEUE FILE. 
*                (CN) = FILE TYPE, IF NOT QUEUE FILE. 
* 
*         USES   T2.
  
  
 SFT2     LDM    RDAT,T2
          SHN    -6 
          NJN    SFT3        IF NOT QUEUED FILE 
          STD    CN 
 SFT3     LDN    0           RETURN SUCCESSFUL STATUS 
  
 SFT      SUBR               ENTRY/EXIT 
          LDN    RDATBL-1    SET TABLE LENGTH 
          STD    T2 
          LDM    FNSS+4      SET FILE TYPE
          SHN    -6 
          STD    CN 
 SFT1     LDD    CN          CHECK PRESERVED FILE TYPE
          LMM    RDAT,T2
          LPN    77 
          ZJN    SFT2        IF FILE TYPE MATCH 
          SOD    T2 
          PJN    SFT1        IF NOT END OF TABLE
          LDN    1
          UJN    SFTX        RETURN ERROR STATUS
 SPF      SPACE  4,10 
**        SPF - SEARCH FOR PRESERVED FILE.
* 
*         ENTRY  (CN+2) = TRT LENGTH. 
*                (CN+3) = CURRENT TRACK - 4000. 
* 
*         EXIT   (A) = (T6) = (FS+1) = FIRST TRACK OF FILE. 
*                    = 0 IF END OF TRT (ALL FILES CHECKED). 
*                (FS+4) NONZERO.
* 
*         USES   T1, T2, CM - CM+4. 
  
  
 SPF      SUBR               ENTRY/EXIT 
          LDN    1           ENSURE (FS+4) NONZERO
          STD    FS+4 
          AOD    CN+3 
          SHN    21-1 
          STD    T2          SET TRT WORD INDEX 
          LMD    CN+2 
          ZJN    SPFX        IF END OF TRT
          SHN    1-21 
          STD    T1          SET BYTE INDEX 
 SPF1     LDD    T2 
          ADC    0           READ TRT WORD
 SPFA     EQU    *-1
          CRD    CM 
          LDD    CM+4        CHECK FOR PRESERVED FILES
          SHN    -10
          STM    SPFB 
          NJN    SPF5        IF 1 TO 4 PRESERVED FILES THIS WORD
 SPF2     STD    T1 
          AOD    T2          ADVANCE TRT WORD INDEX 
          LMD    CN+2 
          NJN    SPF1        IF NOT END OF TRT
*         LDN    0
          UJN    SPFX        RETURN 
  
 SPF4     AOD    T1          ADVANCE BYTE INDEX 
          LPN    3
          ZJN    SPF2        IF END OF TRT WORD 
 SPF5     LDM    SPFC,T1
          LPC    0           CHECK FIRST TRACK OF PRESERVED FILE
 SPFB     EQU    *-1
          ZJN    SPF4        IF FILE NOT PRESERVED
          LDD    T2 
          SHN    2           CALCULATE TRT POSITION 
          LMD    T1 
          STD    CN+3 
          LMC    4000        SET TRACK NUMBER 
          STD    T6 
          LMC    ** 
 SPFD     EQU    *-1
          ZJN    SPF4        IF *DAT* TRACK 
          LDD    T6 
          STD    FS+1 
          LJM    SPFX        RETURN 
  
 SPFC     CON    10,4,2,1    PRESERVED FILE TRT FLAGS 
 TQF      SPACE  4,15 
**        TQF - TERMINATE *IQFT*. 
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (T4) = CHANNEL.
*                (QF) = FIRST TRACK OF *IQFT*.
*                (QT) = CURRENT *IQFT* TRACK. 
*                (QS) = CURRENT *IQFT* SECTOR.
* 
*         EXIT    EOI SECTOR WRITTEN ON *IQFT*. 
* 
*         USES   T1, T6, T7, CM - CM+4. 
* 
*         CALLS  WEI, WQF.
* 
*         MACROS MONITOR, SMSTF.
  
  
 TQF2     LDD    QF          RELEASE *IQFT* CHAIN 
          STD    CM+2 
          LDD    T5 
          STD    CM+1 
          MONITOR  DTKM 
 TQF3     AOM    CQFA        RESET QUEUE FILE PROCESSING ENABLED
  
 TQF      SUBR               ENTRY/EXIT 
 TQFA     LDN    0
*         LDN    1           (QUEUE FILE PROCESSING INITIATED)
          ZJN    TQF3        IF NO QUEUE FILE PROCESSING
          SOM    TQFA 
          STM    CQFC 
          LDD    QT 
          ZJN    TQF2        IF RELEASING *IQFT*
          RJM    WQF         WRITE LAST *IQFT* SECTOR 
          LDC    500
          STD    T1 
 TQF1     LDN    0           CLEAR EOI SECTOR BUFFER
          STM    SBUF+1,T1
          SOD    T1 
          NJN    TQF1        LOOP TO START OF BUFFER
          LDD    MA          MOVE FILE NAME TO BUFFER 
          CWM    IQFA,ON
          SBN    1
          CRM    SBUF+FNEI,ON 
          LDD    T5          SETUP EOI/SYSTEM SECTOR BUFFER 
          STM    SBUF+FSEI
          LDD    QF 
          STM    SBUF+FTEI
          LDD    QT          SET CURRENT *IQFT* TRACK AND SECTOR
          STD    T6 
          LDD    QS 
          STD    T7 
          RJM    WEI         WRITE EOI SECTOR 
          ENDMS 
          LDD    T5          SET EOI IN TRT 
          STD    CM+1 
          LDD    QT 
          LPC    3777 
          STD    CM+2 
          LDD    QS 
          STD    CM+3 
          MONITOR  DTKM 
          LDN    SPFS        SET PRESERVED FILE STATUS ON *IQFT*
          STD    CM+3 
          LDD    QF 
          STD    CM+2 
          LDD    T5 
          STD    CM+1 
          MONITOR  STBM 
          LDN    SIQS        SET *IQFT* INDICATOR IN MST
          STD    CM+3 
          LDD    QF 
          STD    CM+2 
          LDD    T5 
          STD    CM+1 
          MONITOR  STBM 
          SMSTF  LCKP        SET CHECKPOINT REQUEST 
          LJM    TQF3        RETURN 
 VFR      SPACE  4,10 
**        VFR - VERIFY FILE FOR RECOVERY DEADSTART. 
* 
*         ENTRY  SYSTEM SECTOR IN *BFMS*. 
* 
*         EXIT   (RDAM) NONZERO IF ERROR IN TRT CHAIN.
* 
*         CALLS  PFE, VTC.
* 
*         MACROS ENDMS. 
  
  
 VFR      SUBR               ENTRY/EXIT 
          ENDMS 
          LDD    CN 
          NJN    VFR1        IF NOT QUEUED FILE 
          LDM    FLSS 
          SHN    21-13
          MJN    VFRX        IF LENGTH ERROR STATUS ALREADY SET 
 VFR1     RJM    VTC         VERIFY TRACK CHAIN 
          ZJN    VFRX        IF NO TRT CHAIN ERROR
          RJM    PFE         ISSUE FILE ERROR MESSAGE 
          AOM    RDAM        FORCE SETTING OF ERROR IDLE STATUS 
          UJN    VFRX        RETURN 
 VTC      SPACE  4,10 
**        VTC - VERIFY TRACK CHAIN. 
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (T6) = FIRST TRACK OF PRESERVED FILE.
* 
*         EXIT   (A) = 0 IF TRACK CHAIN GOOD / VALIDATION DISABLED. 
* 
*         USES   CM - CM+4. 
  
  
 VTC      SUBR               ENTRY/EXIT 
 VTCA     LDN    0
          ZJN    VTCX        IF MASS STORAGE VALIDATION DISABLED
          LDD    T5 
          STD    CM+1 
          LDD    T6          SET UP MONITOR CALL
          STD    CM+2 
          LDN    VTCS        REQUEST TRACK CHAIN VALIDATION 
          STD    CM+3 
          MONITOR VMSM
          LDD    CM+1 
          UJN    VTCX        RETURN 
 WQF      SPACE  4,15 
**        WQF - WRITE QUEUED FILE SECTOR. 
* 
*         WQF WRITES THE SECTOR OF QUEUED FILE ENTRIES. 
* 
*         ENTRY  (QT) = INACTIVE QUEUES FILE TRACK. 
*                (QS) = INACTIVE QUEUES FILE SECTOR.
*                (QI) = INACTIVE QUEUED FILE INDEX. 
* 
*         USES   T3, T6, T7, QS, CM - CM+4, CSSA. 
* 
*         CALLS  DFM, WDS.
* 
*         MACROS ENDMS, MONITOR, SETMS. 
  
  
 WQF      SUBR               ENTRY/EXIT 
          LDD    QT          SET *IQFT* TRACK 
          STD    T6 
          LDD    QS          SET *IQFT* SECTOR
          STD    T7 
          ADN    1           SET SECTOR LINKAGE 
          STM    SBUF 
          STD    QS          SET NEXT *IQFT* SECTOR 
          LMM    SLM
          NJN    WQF1        IF NOT LAST SECTOR 
          ENDMS 
*         LDN    0
          STD    CM+3        RESET SECTOR 
          STD    CM+4 
          STD    QS 
          LDD    T5 
          STD    CM+1 
          LDD    T6 
          STD    CM+2 
          MONITOR RTCM       REQUEST TRACK
          LDD    CM+4 
          STM    SBUF        DISK LINKAGE 
          ZJN    WQF4        IF TRACK NOT ASSIGNED
          STD    QT 
 WQF1     SETMS  POSITION 
          LDD    QI          SET WORD COUNT IN LINKAGE
          STM    SBUF+1 
          ZJN    WQF2        IF EMPTY SECTOR
          LDD    RA 
          SHN    6
          ADD    CR          FWA OF IQFT BUFFER 
          CRM    SBUF+2,QI   READ PRU BACK
 WQF2     LDC    SBUF+WLSF
          RJM    WDS         WRITE SECTOR 
          LDN    0
          STD    QI          RESET QUEUE INDEX
 WQF3     LJM    WQFX        RETURN 
  
*         NO SPACE AVAILABLE LEAVE PRU FOR EOI SECTOR.
  
 WQF4     STM    CQFA        DISABLE QUEUE FILE PROCESSING
          LDD    T7          RESET SECTOR 
          STD    QS 
          LDC    IQFB        *EQXXX, TRACK LIMIT ON IQFT.*
          RJM    DFM
          UJN    WQF3        RETURN 
 IDM      SPACE  4,20 
**        IDM - ISSUE DAYFILE MESSAGES FOR FILES PROCESSED. 
* 
*         ENTRY  (PMPC) = PRESERVED FILE ERROR COUNT. 
*                (PMEC) = FILE ERROR COUNT. 
*                (PMFC) = FILE RECOVERY COUNT.
*                (PMRC) = QUEUED FILE RECOVERY COUNT. 
*                (PMQC) = QUEUED FILE ERROR COUNT.
*                (PQIC) = QUEUED FILES IGNORED COUNT. 
*                (FN - FN+4) = EST ENTRY. 
*                (T5) = EQUIPMENT.
* 
*         EXIT   APPROPRIATE MESSAGES ISSUED TO DAYFILE.
* 
*         USES   T1, T7, CM - CM+4. 
* 
*         CALLS  ACS, DFM, IRM. 
  
  
 IDM3     RJM    IRM         ISSUE RECOVERY MESSAGES
  
 IDM      SUBR               ENTRY/EXIT 
          LDC    IDMA-1      SET BIASED MESSAGE ADDRESS 
          STD    T7 
  
*         ISSUE FILES PROCESSED.
  
 IDM1     AOD    T7          ADVANCE ADDRESS
          LMC    IDMB 
          ZJN    IDM3        IF END OF MESSAGES 
          LDI    T7 
          ZJN    IDM1        IF NO COUNT
          LDN    ZERL        CLEAR COUNT
          CRD    CM 
  
*         SET COUNT TO COUNT*1000.
  
 IDM2     LDC    1000D
          RAD    CM+4 
          SHN    -14
          RAD    CM+3 
          SOI    T7          DECREMENT COUNT
          NJN    IDM2        IF MORE TO CONVERT 
          LDC    IDMD 
          STD    T1 
          LDD    MA          CONVERT COUNT
          CWD    CM 
          MONITOR RDCM
          STI    T1 
          LDD    MA 
          CRD    CM 
          LDD    CM+1 
          STM    IDMC+3 
          LDD    CM+2 
          STM    IDMC+4 
          LDM    IDMB-IDMA,T7  ADD DESCRIPTION TO MESSAGE 
          RJM    ACS
          LDC    IDMC        ISSUE MESSAGE
          RJM    DFM
          LJM    IDM1        LOOP FOR NEXT MESSAGE
  
  
 IDMA     BSS    0
 PMFC     CON    0           FILE RECOVERY COUNT
 PMPC     CON    0           PRESERVED FILE ERROR COUNT 
 PMEC     CON    0           PERMANENT FILE ERROR COUNT 
 PMRC     CON    0           QUEUED FILE RECOVERY COUNT 
 PMQC     CON    0           QUEUED FILE ERROR COUNT
 PQIC     CON    0           QUEUED FILES IGNORED COUNT 
  
 IDMB     CON    =C* DIRECT ACCESS FILES RECOVERED.*
          CON    =C* PRESERVED FILE ERRORS.*
          CON    =C* DIRECT ACCESS FILE ERRORS.*
          CON    =C* QUEUED FILES RECOVERED.* 
          CON    =C* QUEUED FILE ERRORS.* 
          CON    =C* QUEUED FILES IGNORED.* 
  
 IDMC     DATA   H*EQXXX NNNN*
 IDMD     BSS    21 
 IRM      SPACE  4,10 
**        IRM - ISSUE RECOVERY MESSAGES.
* 
*         ENTRY  (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   MESSAGES ISSUED TO ACCOUNTING AND SYSTEM DAYFILES. 
*                EVENT SET FOR AUXILIARY DEVICE.
* 
*         USES   T1, T3, T4, T6, T7, CM - CM+4, CN - CN+4.
* 
*         CALLS  ACS, C2D, DFM. 
  
  
 IRM      SUBR               ENTRY/EXIT 
          LDD    FN+4        GET FAMILY/PACKNAME
          SHN    3
          ADN    PFGL 
          CRD    CM 
          ADN    PUGL-PFGL   READ USER NAME 
          CRD    CN 
          LDC    2REQ 
          STM    IRMB 
          LDC    IRMB+3      SET ADDRESS OF ASSEMBLY BUFFER 
          STD    T1 
          LDC    2L          RESET BUFFER 
          STI    T1 
          LDD    CM+4        SAVE SECURITY ACCESS LEVELS
          SHN    -6 
          STD    T4 
          LDN    0           SET *END OF LINE* IN (CM+4)
          STD    CM+4 
          LDD    CM+3        EXTRACT DEVICE NUMBER
          LPN    77 
          STD    T7 
          LMD    CM+3        CLEAR DEVICE NUMBER
          STD    CM+3 
          ADD    CM+2        BUILD PACKNAME HASH
          ADD    CM+1 
          ADD    CM 
          STD    CN+4        SAVE PACKNAME HASH 
          LDD    CN+3        SET END OF USER NAME 
          SCN    77 
          STD    CN+3 
          LDN    CM          ADD FAMILY/PACKNAME TO MESSAGE 
          RJM    ACS
          LDD    T7 
          ZJN    IRM1        IF AUXILIARY DEVICE
          RJM    C2D         CONVERT DEVICE NUMBER
          STD    CM+3 
          LDC    =C*, *      ADD SEPARATOR
          RJM    ACS
          LDN    CM+3        ADD DEVICE NUMBER TO MESSAGE 
          RJM    ACS
          LDC    2RPM&2RDR   SET ACCOUNT FILE MESSAGE PREFIX
 IRM1     LMC    2RPM 
          STM    IRMA+1 
          LDD    T1          SAVE CURRENT END OF ASSEMBLY 
          STD    T3 
          LDI    T1 
          STD    T6 
          LDC    IRMD        ADD * RECOVERED.* TO MESSAGE 
          RJM    ACS
          LDC    IRMB        ISSUE SYSTEM DAYFILE MESSAGE 
          RJM    DFM
          LDD    T3          SET START OF NEW ASSEMBLY
          STD    T1 
          LDD    T6 
          STI    T1 
          LDC    2R,         REPLACE *EQ* WITH *, * 
          STM    IRMB 
          LDC    =C*, *      INSERT SEPARATOR 
          RJM    ACS
          LDD    T7 
          NJN    IRM2        IF PERMANENT FILE DEVICE 
          LDN    CN          ADD USER NAME TO MESSAGE 
          RJM    ACS
          LDC    =C*, *      INSERT SEPARATOR 
          RJM    ACS
 IRM2     LDD    T4          GET LOWER SECURITY ACCESS LEVEL
          SHN    -3 
          SHN    2           CALCULATE INDEX INTO ACCESS TABLE
          ADC    TALV        INSERT LOWER ACCESS LEVEL
          RJM    ACS
          LDC    =C*, *      INSERT SEPARATOR 
          RJM    ACS
          LDD    T4          GET UPPER ACCESS LEVEL 
          LPN    7
          SHN    2           CALCULATE INDEX INTO ACCESS TABLE
          ADC    TALV        INSERT UPPER ACCESS LEVEL
          RJM    ACS
          LDC    IRME        ADD *.* TO END OF MESSAGE
          RJM    ACS
          LDC    IRMA+ACFN   ISSUE ACCOUNT FILE MESSAGE 
          RJM    DFM
          LDK    SSTL 
          CRD    CM 
          LDD    CM+1 
          SHN    21-5 
          PJN    IRM3        IF DISK VALIDATION IS ENABLED
          LDD    T7 
          NJN    IRM3        IF NOT AUXILIARY DEVICE
          STD    CM+1        SET EVENT
          LDN    VSNE/10000 
          STD    CM+3 
          LDD    CN+4        READ PACKNAME HASH 
          STD    CM+4 
          MONITOR EATM
 IRM3     LJM    IRMX        RETURN 
  
  
 IRMA     DATA   4HADDR 
 IRMB     DATA   H*EQXXX, * 
 IRMC     BSS    22 
  
 IRMD     DATA   10H RECOVERED
 IRME     DATA   C*.* 
 LSN      SPACE  4,15 
**        LSN - LIST PACK SERIAL NUMBERS. 
* 
*         ENTRY  (EQ) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY FOR EQUIPMENT. 
* 
*         EXIT   PACK SERIAL NUMBER IDENTIFICATION MESSAGES ISSUED TO 
*                THE ERROR LOG FOR ALL UNITS OF THE EQUIPMENT.
* 
*         USES   CM+1, T1, T2, CN - CN+4, FS+1 - FS+3.
* 
*         CALLS  DFM, SDR, *0PI*. 
* 
*         MACROS EXECUTE. 
  
  
 LSN4     LDN    TLSNL-1     CHECK DEVICE TYPE FOR NON-*LDAM* DEVICE
          STD    T1 
 LSN5     LDD    FN+3 
          LMM    TLSN,T1
          ZJN    LSNX        IF DEVICE TYPE MATCHES 
          SOD    T1 
          PJN    LSN5        IF MORE DEVICE TYPES TO CHECK
 LSN6     LDN    LDIF 
          RJM    /RDA/SDR    SET BUFFERED DEVICE REQUEST
  
 LSN      SUBR               ENTRY/EXIT 
          LDD    FN+4 
          SHN    3
          ADN    DDLL        GET LOGICAL UNIT COUNT 
          CRD    CN 
          LDD    CN          EXTRACT UNIT COUNT 
          LPN    7
          STD    CN 
          STD    T2 
          LDD    FN 
          SHN    21-7 
          PJN    LSN4        IF NOT *LDAM* DEVICE 
          LDD    FN+1 
          SHN    21-5 
          MJN    LSN6        IF CONCURRENT CHANNEL
          LDD    T5 
          STM    /RDA/SBUF
          EXECUTE 0PI,/RDA/SBUF+1 
          STD    FS+3        SAVE MAIN PROCESSOR ADDRESS
          LDN    0           SET TO FIRST LOGICAL UNIT
          STD    FS+1 
 LSN1     LDD    FS+1        GET MESSAGE FOR A LOGICAL UNIT 
          RJM    0,FS+3 
          ZJN    LSN2        IF MASS STORAGE ERROR
          STD    FS+2        SAVE MESSAGE TABLE ADDRESS 
          SHN    -14         SET BML MESSAGE LENGTH 
          STD    CM+1 
          LDC    BMLN 
          ADM    1,FS+2      ADD BML MESSAGE ADDRESS
          RJM    DFM
          LDI    FS+2        GET ERROR LOG MESSAGE ADDRESS
          LMC    ERLN        SEND MESSAGE TO ERROR LOG
          RJM    DFM
 LSN2     AOD    FS+1        ADVANCE LOGICAL UNIT 
          SOD    CN          DECREMENT LOGICAL UNIT COUNT 
          PJN    LSN1        IF MORE LOGICAL UNITS
          LJM    LSNX        EXIT 
  
  
 TLSN     BSS    0           NON-*LDAM* DEVICES WITH NO PSN-S TO LIST 
          CON    2RDE        EXTENDED MEMORY
          CON    2RDP        EXTENDED MEMORY/STORNET
          CON    2RDV        819
          CON    2RDW        819
  
 TLSNL    EQU    *-TLSN      LENGTH OF TABLE
 PFE      SPACE  4,15 
**        PFE - PERMANENT FILE ERROR. 
* 
*         ENTRY  (CN) = FILE TYPE.
*                (BFMS) LOADED WITH SYSTEM SECTOR.
* 
*         EXIT   ERROR MESSAGE ISSUED TO ERROR LOG AND SYSTEM DAYFILE.
*                APPROPIATE ERROR COUNT INCREMENTED.
* 
*         USES   T1 - T3, CM - CM+4.
* 
*         CALLS  ACS, C2D, DFM. 
* 
*         MACROS ENDMS. 
  
  
 PFE      SUBR               ENTRY/EXIT 
          ENDMS 
          LDD    CN 
          NJN    PFE1        IF NOT QUEUE FILE
          AOM    PMQC        ADVANCE QUEUED FILE ERROR COUNT
          LDC    2RQF 
          UJN    PFE1.1      SET MESSAGE PREFIX 
  
 PFE1     LMN    LIFT 
          NJN    PFE1.2      IF NOT A LIBRARY FILE
          LDC    2RLI 
 PFE1.1   STM    PFEA        SET MESSAGE PREFIX 
  
*         BLANK USER INDEX FOR QUEUED FILE OR LIBRARY FILE. 
  
          LDC    2R          BLANK USER INDEX 
          STM    PFEB 
          STM    PFEB+1 
          STM    PFEB+2 
          LDD    MA 
          CWM    FNSS,ON
          UJN    PFE2        MOVE FILE NAME TO MESSAGE
  
*         PROCESS PERMANENT FILE ERROR. 
  
 PFE1.2   AOM    PMEC        ADVANCE ERROR COUNT
          LDM    CTSS+FCUI   FIRST 2 DIGITS 
          RJM    C2D
          STM    PFEB 
          LDM    CTSS+FCUI+1 SECOND 2 DIGITS
          SHN    -6 
          RJM    C2D
          STM    PFEB+1 
          LDM    CTSS+FCUI+1 LAST 2 DIGITS
          RJM    C2D
          STM    PFEB+2 
          LDC    2RPF        SET FILE TYPE
          STM    PFEA 
          LDD    MA          MOVE FILE NAME TO MESSAGE
          CWM    CTSS+FCFN,ON 
 PFE2     SBN    1
          CRM    PFEC,ON
          LDM    PFEC+3      CLEAR 8TH CHARACTER
          SCN    77 
          STM    PFEC+3 
          LDC    IDMC+3      SET MESSAGE ADDRESSES
          STD    T1 
          LDC    PFED+5 
          STD    T3 
          LDN    T7          SET SECTOR ADDRESS 
          STD    T2 
 PFE3     LDI    T2          CONVERT DISK ADDRESS OF ERROR
          RJM    C2D
          STI    T3          STORE IN MESSAGE 
          SOD    T3 
          LDI    T2          CONVERT UPPER HALF OF SECTOR/TRACK 
          SHN    -6 
          RJM    C2D
          STI    T3          STORE IN MESSAGE 
          LCN    2           DECREMENT MESSAGE ADDRESS
          RAD    T3 
          SOD    T2          DECREMENT PARAMETER ADDRESS
          LMN    T6-1 
          NJN    PFE3        IF TRACK NOT CONVERTED 
          STM    PFEC+4      SET END OF MESSAGE I 
          STI    T1 
          LDC    RDAD+2      ASSEMBLE FIRST PART OF MESSAGE II
          RJM    ACS
          AOD    T3          ASSEMBLE END OF MESSAGE II 
          RJM    ACS
          LDC    PFEE+ERLN   ISSUE TO ERROR LOG 
          RJM    DFM
          LDC    IDMC+ERLN
          RJM    DFM
          LDC    PFEE+NMSN   ISSUE TO SYSTEM
          RJM    DFM
          LJM    PFEX        RETURN 
  
 PFEE     DATA   H*EQXXX *
 PFEA     DATA   H*PF LENGTH ERROR *
 PFEB     DATA   H*UINDEX  *
 PFEC     DATA   H*FILENAME  *
 PFED     DATA   C* TTTTT SSSSS LINKAGE ERROR.* 
 CTU      SPACE  4,10 
**        CTU - CLEAR TOTAL USER COUNTS.
* 
*         ENTRY  (CN) = FILE TYPE.
*                (FS+1) = FIRST TRACK OF FILE.
*                (CN+1) = SYSTEM SECTOR REWRITE FLAG. 
* 
*         USES   T1.
* 
*         CALLS  WSR. 
  
  
 CTU2     AOM    PMFC        ADVANCE DAF RECOVERY COUNT 
  
 CTU      SUBR               ENTRY/EXIT 
          LDD    CN+1 
          ZJN    CTU2        IF NO SYSTEM SECTOR REWRITE
          LDD    CN 
          LMN    LIFT 
          ZJN    CTU2        IF LIBRARY FILE
          LDC    5*MMPF+5 
          STD    T1 
 CTU1     LDN    0           CLEAR USER COUNT FIELDS
          STM    UCSS-1,T1
          SOD    T1 
          NJN    CTU1 
          STM    CASS        CLEAR CURRENT ACCESS MODE
          STM    FISS        CLEAR FAST ATTACH FLAGS
          LDD    FS+1        RESET FIRST TRACK
          RJM    WSR         WRITE SYSTEM SECTOR WITH REWRITE 
          UJN    CTU2        ADVANCE DAF RECOVERY COUNT 
 GDE      SPACE  4,15 
**        GDE - GET DAT ENTRY.
* 
*         ENTRY  (FN - FN+4) = EST ENTRY FOR DEVICE.
*                (T3) = 0 IF DEVICE NOT BEING INITIALIZED.
*                (T7) = BYTE 0 OF MDGL WORD.
*                (CN - CN+4) = TDGL WORD OF MST.
* 
*         EXIT   (DATB) = SECOND WORD OF DAT ENTRY. 
* 
*         USES   T1, T2, CM - CM+4. 
* 
*         CALLS  CPS, CUS, IRM, WDE.
* 
*         MACROS MMTE, MONITOR, UJMF. 
  
  
 GDE3     LDD    CN+2        SET *DIT* OFFSET 
          SBN    10-7 
          SHN    -3 
          ADD    CN+2 
          STD    T2 
          LDN    0
          STD    T1 
 GDE4     AOD    T1 
          LMN    MISD 
          ZJN    GDEX        IF ALL ENTRIES CHECKED 
          LDD    T1 
          ADC    0           READ *DIT* ENTRY 
 GDEC     EQU    *-1
          ADD    T2 
          CRD    CM 
          LDD    CM+4 
          ZJN    GDE4        IF ENTRY NOT USED
          LMC    *
 GDED     EQU    *-1
          ZJN    GDE4        IF THIS MACHINE
          LJM    GDE1        ISSUE RECOVERY MESSAGES
  
 GDE      SUBR               ENTRY/EXIT 
          LDD    FN 
          SHN    21-4 
          MJN    GDE3        IF INDEPENDENT SHARED DEVICE 
          UJMF   GDEX 
          LDN    1-1         WORD COUNT FOR *ECSM* REQUEST
          STD    CM+1 
          LDD    T7          SET *DAT* ORDINAL FROM INDEX 
          LPC    377
          SHN    1
          ADC    1           ADD DAT TRACK ADDRESS
 GDEA     EQU    *-1
          STD    CM+4 
          STM    WDEA 
          SHN    -14
          ADC    RECS*1000
 GDEB     EQU    *-1
          STD    CM+3 
          STM    WDEB 
          LDD    MA          CM ADDRESS = PP MESSAGE BUFFER 
          STD    CM+2 
          MONITOR ECSM
          LDD    MA          READ *DAT* ENTRY TO PP BUFFER
          CRM    DATB,ON
          LDD    T3 
          NJN    GDE2        IF DEVICE BEING INITIALIZED
          LDM    DATB+4      CHECK DEVICE STATUS
          LPC    -0 
          MMTE   *-1
          NJN    GDE1        IF RECOVERY COMPLETE 
          LJM    GDEX        RETURN 
  
 GDE1     RJM    IRM         ISSUE RECOVERY MESSAGES
          RJM    CPS         CHECK PFC SIZE 
          RJM    CUS
 GDE2     RJM    WDE         UPDATE DAT ENTRY 
          LJM    RDAX        EXIT OVERLAY 
 WDE      SPACE  4,10 
**        WDE - WRITE DAT ENTRY TO EXTENDED MEMORY. 
* 
*         ENTRY  *DATI* INTERLOCK SET.
*                DAT ENTRY IN DATB. 
  
  
 WDE      SUBR               ENTRY/EXIT 
          UJMF   WDEX 
          LDM    DATB+4      SET MACHINE ACCESS 
          LPC    -0 
          MMTE   *-1
          LMC    0
          MMTE   *-1
          STM    DATB+4 
          LDC    **          SET DAT ADDRESS
 WDEA     EQU    *-1
          STD    CM+4 
          LDC    ** 
 WDEB     EQU    *-1
          ADD    TH 
          ERRNZ  RECS+1-WECS ADJUST IF *RECS/WECS* VALUES CHANGE
          STD    CM+3 
          LDD    MA          SET CM ADDRESS OF ENTRY
          STD    CM+2 
          CWM    DATB,ON
          LDN    1-1         WORD COUNT FOR TRANSFER
*         SHN    6
          STD    CM+1 
          MONITOR ECSM
          UJN    WDEX        RETURN 
 WSR      SPACE  4,15 
**        WSR - WRITE SYSTEM SECTOR WITH REWRITE. 
* 
*         ENTRY  (A) = FIRST TRACK OF FILE. 
*                (T5) = EST ORDINAL.
*                *SETMS IO* PERFORMED.
* 
*         EXIT   (T6) = FIRST TRACK OF FILE.
* 
*         USES   T6.
* 
*         CALLS  WSS. 
* 
*         MACROS SETMS. 
  
 WSR      SUBR               ENTRY/EXIT 
          STD    T6 
          SETMS  POSITION 
          LDM    UERR        SAVE ERROR PROCESSING OPTIONS
          STM    WSRA+1 
          LMD    HN          SET REWRITE MODE 
          ERRNZ  EPRW-100    CODE DEPENDS ON VALUE
          STM    UERR 
          SETMS  =,IO,RW
          RJM    WSS         REWRITE SYSTEM SECTOR
 WSRA     LDC    0           RESET ERROR PROCESSING OPTIONS 
          STM    UERR 
          SETMS  =,IO 
          UJN    WSRX        RETURN 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPACS 
*CALL     COMPCLC 
*CALL     COMPC2D 
*CALL     COMPSDA 
*CALL     COMPSDR 
*CALL     COMPRSS 
*CALL     COMPSEI 
*CALL     COMPSES 
*CALL     COMPSMI 
*CALL     COMPSNT 
*CALL     COMPTLB 
*CALL     COMPTGB 
 VAL$     SET    1
*CALL     COMPVLC 
 WEIA     EQU    SBUF        USE *SBUF* FOR EOI BUFFER
*CALL     COMPWEI 
*CALL     COMPWSS 
          LIST   X
*CALL     COMPVEI 
          LIST   *
  
  
          USE    LITERALS 
  
          ERRNG  SBUF-*      CODE OVERFLOWS INTO BUFFER 
          TITLE  PRESET.
 PRS      SPACE  4,10 
**        PRS - PRESET. 
  
  
 PRS2     STD    T2          SET INSTRUCTION ADDRESS
          LDN    PSNI        REPLACE INSTRUCTION WITH *PSN* 
          STI    T2 
          AOD    T1          ADVANCE LIST ADDRESS 
 PRS3     LDI    T1 
          NJN    PRS2        LOOP TO END OF LIST
 PRSX     LJM    RDEX        EXIT OVERLAY 
  
 PRS      BSS    0           ENTRY
          LDN    SSTL        READ SYSTEM STATUS 
          CRD    CM 
          LDD    CM          ENABLE/DISABLE TRACK CHAIN VALIDATION
          LPN    4
          LMN    4
          RAM    VTCA 
          LDD    RS 
          NJN    PRS0        IF RECOVERY DEADSTART
          LDN    PSNI        SET LEVEL-0 RECOVERY 
          STM    RDAA 
 PRS0     LDC    MMFL        READ MMF STATUS WORD 
          CRD    CM 
          LDD    CM          SET MACHINE ID 
          STM    GDED 
          LDD    CM+1 
          LPC    777
          ZJN    PRSX        IF NOT MMF SYSTEM
          SFA    EST         READ EST ENTRY FOR LINK DEVICE 
          ADK    EQDE 
          CRD    CN 
          LDD    CN+4        SET EXTENDED MEMORY MST POINTER
          STM    LDMP 
          SHN    3           READ DEVICE ALLOCATION WORD
          ADN    ALGL 
          CRD    CN 
          LDD    CN+4        SET DAT TRACK
          STD    T6 
          LDN    0
          STD    T7 
          LDC    T"QUAL"     SET LIST ADDRESS 
          STD    T1 
          LDI    T1          SET INSTRUCTION ADDRESS
 PRS1     STD    T0 
          LDD    CM+3        SET MACHINE MASK 
          LMI    T0 
          STI    T0 
          AOD    T1          ADVANCE LIST ADDRESS 
          LDI    T1 
          NJN    PRS1        LOOP TO END OF TABLE 
          RJM    CEA
          LDD    CM+4        SET ADDRESS IN CODE
          RAM    GDEA 
          LDD    CM+3 
          RAM    GDEB 
          LDC    LRDA        ENABLE MMF RECOVERY
          STD    T1 
          LJM    PRS3 
          SPACE  4,10 
**        COMMON DECKS USED BY PRESET.
  
  
*CALL     COMPCEA 
  
*         LIST OF *4DA* INSTRUCTIONS MODIFIED FOR MMF RECOVERY. 
  
 LRDA     BSS    0
 LRDA     HERE
          ERRZR  LRDA-*      TABLE EMPTY - REMOVE PRESET CODE 
          CON    0           TERMINATE LIST 
  
*         LIST OF INSTRUCTIONS TO BE PRESET WITH MACHINE MASK.
  
 T"QUAL"  BSS    0
 T"QUAL"  HERE
          ERRZR  T"QUAL"-*   TABLE EMPTY - REMOVE PRESET CODE 
          CON    0           TERMINATE LIST 
  
          QUAL
          SPACE  4,10 
          OVERFLOW  O4DA,EPFW  CHECK FOR OVERFLOW 
          TTL    MSM/4DB - DEVICE RECOVERY ROUTINES.
          TITLE 
          IDENT  4DB,RDBX 
*COMMENT  MSM - DEVICE RECOVERY ROUTINES. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***              *4DB* CONTAINS ROUTINES FOR READING LABELS 
*         AND COMMON SUBROUTINES REQUIRED FOR TRT RECOVERY. 
          SPACE  4,10 
***       OPERATOR MESSAGES.
* 
*         *EQXXX, DEVICE ACCESS ERROR.* = DEADSTART MESSAGE 
*         INDICATING THAT THE DEVICE ACCESS LEVEL LIMITS IN THE 
*         DEVICE LABEL OF A NON-REMOVABLE DEVICE ARE NOT WITHIN 
*         THE EQUIPMENT ACCESS LEVEL LIMITS FROM THE DEVICE EST 
*         ORDINAL FOR EQUIPMENT XXX.
* 
*         *EQXXX, SECURED DEVICE.* = DEVICE ACCESS LEVEL LIMITS 
*         IN THE DEVICE LABEL ON AN UNSECURED SYSTEM ARE NOT
*         WITHIN THE EQUIPMENT ACCESS LEVEL LIMITS FROM THE 
*         EST FOR EST ORDINAL XXX.
          SPACE  4,10 
***       ERRLOG MESSAGES.
* 
*         *EQXXX, SECURED DEVICE.* = DEVICE ACCESS LEVEL LIMITS 
*         IN THE DEVICE LABEL ON AN UNSECURED SYSTEM ARE NOT
*         WITHIN THE EQUIPMENT ACCESS LEVEL LIMITS FROM THE 
*         EST FOR EST ORDINAL XXX.
* 
*         EQXXX, SECURED DEVICE RECOVERED.* = DEVICE ACCESS LEVEL 
*         LIMITS IN THE DEVICE LABEL ON AN UNSECURED SYSTEM WERE
*         NOT WITHIN THE EQUIPMENT ACCESS LEVEL LIMITS FROM THE 
*         EST FOR EST ORDINAL XXX, BUT THE OPERATOR ENTERED 
*         *GO,CMS.* TO RECOVER THE DEVICE.
          SPACE  4,10 
**        MACRO DEFINITIONS.
          SPACE  4,10 
**        TBLM = GENERATE TABLE OF ALTERNATE LABEL SECTORS. 
* 
*         TBLM   EQ 
*                EQ = MASS STORAGE EQUIPMENT MNEMONIC.
  
  
          PURGMAC  TBLM 
  
 TBLM     MACRO  EQ 
          CON    2R_EQ,LC_EQ
          ENDM
          SPACE  4
**        INTERNAL TABLES AND BUFFERS.
  
  
 .1       MAX    /CMS/PRS,/RMS/PRS  BUFFER FOR *DAT* ENTRY
 DATB     EQU    .1 
  
 ORDB     EQU    DATB+12-4   *4DB* OVERLAY ORIGIN 
 ORDK     EQU    ORDB        *4DK* OVERLAY ORIGIN 
          SPACE  4
          ORG    ORDB 
  
 RDB      SUBR               ENTRY/EXIT 
          LJM    PRS
  
 MMFP     CON    0           MMF PRESENT FLAG 
 SDIF     CON    0           SHARED DEVICE INTERLOCK FLAG 
 MRL      TITLE  MAIN RECOVERY LOOP.
**        MRL - MAIN RECOVERY LOOP. 
* 
*         ENTRY  (A) = PROCESSOR ADDRESS. 
* 
*         EXIT   TO SELECTED PROCESSOR. 
*                (EQ) = (T5) = EST ORDINAL. 
*                (FN - FN+4) = EST ENTRY. 
* 
*         USES   T5, EQ, FN - FN+4. 
* 
*         CALLS  LRA, /RMS/SEM. 
* 
*         MACROS SFA. 
  
  
 MRL1     LDC    0           EQUIPMENT FOR SPECIAL PROCESSING 
 MRLC     EQU    *-1
          ZJN    MRL2        IF NO SPECIAL EQUIPMENT CHECK
          LMD    EQ 
 MRLD     ZJN    MRL3        IF NOT TO PROCESS THIS EQUIPMENT 
*         NJN    MRL3        IF ONLY PROCESSING THIS EQUIPMENT
 MRL2     RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    EQ 
          CRD    RD 
          LDD    RE 
          SHN    0-13 
          ZJN    MRL3        IF NOT MASS STORAGE OR BEING RECOVERED 
 MRLB     RJM    /RMS/SEM    SET EQUIPMENT MESSAGE
*         UJN    *+2         (*CMS* CALL) 
          SFA    EST,EQ      READ EST ENTRY 
          ADK    EQDE 
          CRD    FN 
          LDD    RE          CHECK EST ENTRY
          RJM    *
 MRLA     EQU    *-1
          MJN    MRL3        IF REWRITE NOT REQUIRED
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    EQ          REWRITE RECOVERY TABLES
          CWD    RD 
 MRL3     AOD    EQ          ADVANCE EQUIPMENT INDEX
 MRL4     STD    T5 
          LMD    LO 
          NJN    MRL1        IF NOT END OF MASS STORAGE DEVICES 
  
 MRL      SUBR               ENTRY/EXIT 
          STM    MRLA        SET PROCESSOR ADDRESS
          LDN    NOPE        INITIALIZE EST ORDINAL FOR SEARCH
          STD    EQ 
          UJN    MRL4        ENTER LOOP 
          TITLE  COMMON DECKS.
**        COMMON DECKS. 
  
  
 CEA$     EQU    0           ASSEMBLE *CEI* IN PRESET 
*CALL     COMPCEA 
          QUAL   CLC
*CALL     COMPCLC 
          QUAL
 CDC      EQU    /CLC/CDC 
 CLC      EQU    /CLC/CLC 
 RLA$     EQU    1           DEFINE ENTRY CONDITIONS FOR *COMPRLA*
*CALL     COMPRLA 
*CALL     COMPSES 
*CALL     COMPSMI 
*CALL     COMPTLB 
          TITLE  COMMON SUBROUTINES.
 ADE      SPACE  4,15 
**        ADE - ACCESS DAT ENTRY. 
* 
*         ENTRY  (A) = *ECSM* FUNCTION CODE.
*                (QS) = DAT INDEX.
*                (ADEA) = DAT TRACK.
* 
*         EXIT   (T6) = DAT TRACK.
* 
*         USES   T6, T7, CM - CM+4. 
* 
*         CALLS  CEA. 
* 
*         MACROS MONITOR. 
  
  
 ADE      SUBR               ENTRY/EXIT 
          SHN    11          SAVE FUNCTION CODE 
          STM    ADEB 
          LDC    **          SET DAT TRACK
 ADEA     EQU    *-1
          STD    T6 
          LDN    0
          STD    T7 
          RJM    CEA         CONVERT EXTENDED MEMORY ADDRESS
          LDD    QS 
          RAD    CM+4 
          SHN    -14
          LMC    **          SET SUBFUNCTION
*         LMC    RECS*1000   (READ SUBFUNCTION) 
*         LMC    WECS*1000   (WRITE SUBFUNCTION)
 ADEB     EQU    *-1
          RAD    CM+3 
          LDD    HN          SET WORD COUNT (2 WORDS) 
          STD    CM+1 
          LDD    MA          CM ADDRESS = PP MESSAGE BUFFER 
          STD    CM+2 
          MONITOR  ECSM 
          LJM    ADEX        RETURN 
 ATC      SPACE  4,10 
**        ATC - ADJUST TRACK COUNT. 
* 
*         ENTRY  (FN - FN+4) = EST ENTRY. 
*                (T5) = EQUIPMENT.
* 
*         EXIT  REMAINING TRACK AND SECTOR COUNTS SET.
* 
*         USES   T0 - T3, CM - CM+4, CN - CN+4. 
* 
*         CALLS  PTA, STA.
  
  
 ATC      SUBR               ENTRY/EXIT 
          LDD    RE          CHECK SHARED DEVICE STATUS 
          LPC    1002 
          LMC    1002 
          ZJN    ATCX        IF PREVIOUSLY DEFINED AS SHARED
          RJM    PTA         PRESET FWA OF TRT
          LDD    FN+4        READ TDGL WORD OF MST
          SHN    3
          ADK    TDGL 
          CRD    CN 
          LDD    CN+2        SET LENGTH OF TRT
          STD    T2 
          SHN    2
          STD    CN+4 
          RJM    STA         SET FWA OF TRT 
          ADD    T2 
          UJN    ATC4        READ TRT 
  
*         CLEAR TRACK INTERLOCKS. 
  
 ATC1     LDD    CM+4 
          LPC    7417 
          STD    CM+4 
          LPN    17          SET RESERVATION BITS 
          ZJN    ATC3        IF NONE
 ATC2     SHN    21-0 
          PJN    ATC2        IF BIT NOT RESERVED
          STD    T0 
          SOD    CN+4 
          LDD    T0 
          NJN    ATC2        IF MORE RESERVATIONS 
 ATC3     RJM    STA         SET FWA OF TRT 
          ADD    T2 
          CWD    CM 
 ATC4     SBN    1
          CRD    CM 
          SOD    T2 
          PJN    ATC1        IF NOT END OF TRT
          LDC    4000        SET NOS MST FLAG 
          STD    CN+3 
          LDD    FN+4        STORE *TDGL* 
          SHN    3
          ADK    TDGL 
          CWD    CN 
          LJM    ATCX        RETURN 
 CDA      SPACE  4,10 
**        CDA - CHECK DEVICE AVAILABILITY.
* 
*         ENTRY  (EQ) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) = 0, IF AVAILABLE FOR RECOVERY.
*                    .NE. 0, IF UNLOADED. 
*                    .LT. 0, IF NOT AVAILABLE FOR RECOVERY. 
* 
*         USES   FS - FS+4. 
  
  
 CDA1     LCN    0
  
 CDA      SUBR               ENTRY/EXIT 
          LDD    RE 
          SHN    21-6 
          PJN    CDA1        IF DEVICE AVAILABLE
          SHN    6-21 
          LPN    1
          NJN    CDAX        IF LABEL NOT READ
          LDD    FN+4        READ *STLL*
          SHN    3
          ADN    STLL 
          CRD    FS 
          SBN    STLL-PFGL   READ DEVICE DESCRIPTION
          CRM    DLPB,TW
          LDD    FS+4 
          LPN    MLDIU
          NJN    CDA1        IF EQUIPMENT IN USE
          LDD    FS 
          LPN    MLUNL
          UJN    CDAX        RETURN 
 CDI      SPACE  4,15 
**        CDI - CLEAR ISD INTERLOCKS. 
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   INTERLOCKS CLEARED IN LABEL. 
* 
*         USES   T0, T1, T6, T7, CM - CM+4. 
* 
*         CALLS  CDC, CLT, RDS, SMI, WDS. 
* 
*         MACROS ENDMS, SETMS.
  
  
 CDI3     ENDMS 
  
 CDI      SUBR               ENTRY/EXIT 
          LDD    FN 
          SHN    21-4 
          PJN    CDIX        IF NOT INDEPENDENT SHARED DEVICE 
          RJM    CLT
          ZJN    CDIX        IF NO LABEL TRACK
          LDN    0
          STD    T7 
          SETMS  IO,(DE,DF) 
          LDC    BFMS 
          RJM    RDS
          MJN    CDIX        IF READ ERROR
          RJM    SMI
          STD    T1          SET MACHINE INDEX
          SHN    1
          LMM    N4SS+5*SDGL+4
          SCN    1
          STD    T0          CHECK MST INTERLOCK
          LPN    76 
          NJN    CDI1        IF NOT INTERLOCKED BY THIS MACHINE 
          LDD    T0 
          STM    N4SS+5*SDGL+4
 CDI1     LDD    T1          CALCULATE ADDRESS OF DIT ENTRY 
          SHN    2
          ADC    DISS-5+4 
          RAD    T1 
          SBN    4
          STM    CDIB 
          LDI    T1          CHECK MACHINE ID 
          LMC    0
 CDIA     EQU    *-1
          NJN    CDI2        IF DIT ENTRY NOT ASSIGNED HERE 
          LDN    ZERL 
          CRM    *,ON 
 CDIB     EQU    *-1
          RJM    CDC         COMPUTE LABEL CHECKSUM 
          STM    CKSS 
          LDC    BFMS+WLSF
          RJM    WDS
 CDI2     LJM    CDI3        RETURN 
 CLR      SPACE  4
**        CLR - CLEAR RESIDENT TRT. 
* 
*         ENTRY  (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) = MST ADDRESS OF TDGL WORD.
*                CMR AREA FOR TRT CLEARED.
*                FLAWS RETAINED FOR NON-REMOVABLE DEVICE. 
*                MRT FOR SHARED DEVICE CLEARED. 
* 
*         USES   T0 - T3, CM - CM+7, CN - CN+4. 
* 
*         CALLS  PTA, STA.
  
  
 CLR3     RJM    STA         SET FWA OF TRT 
          ADD    T1 
          CRD    CM 
          LDD    CM+4 
          ZJN    CLR7        IF NO TRACKS RESERVED
          LDN    CM 
          STD    T3 
          LDN    ZERL        CLEAR ASSEMBLY 
          CRD    CN 
 CLR4     LDI    T3          CHECK TRACK BYTE 
          LMC    3777 
          NJN    CLR5        IF TRACK NOT FLAWED
          AOD    T0          ADVANCE FLAWED TRACK COUNT 
          LDI    T3          SET FLAW IN ASSEMBLY 
          STM    CN-CM,T3 
          LDM    CLRB-CM,T3  SET TRACK RESERVATION
          RAD    CN+4 
 CLR5     AOD    T3          ADVANCE BYTE INDEX 
          LMN    CM+4 
          NJN    CLR4        LOOP TO END OF TRT WORD
 CLR6     RJM    STA         SET FWA OF TRT 
          ADD    T1 
          CWD    CN 
 CLR7     AOD    T1          ADVANCE WORD INDEX 
          LMD    T2 
 CLR8     NJN    CLR3        LOOP TO END OF TRT 
*         NJN    CLR6        REMOVABLE DEVICE 
          STD    CM+4        CLEAR UNUSED BYTE
          LDD    CM+6        SET TRACK COUNTS 
          STD    CM+3 
          SBD    T0 
          STD    CM+7 
          LDC    4000        SET NOS MST FLAG 
          STD    CM+6 
          LDD    FN+4        UPDATE MST 
          SHN    3
          ADK    TDGL 
          CWD    CM+3 
  
 CLR      SUBR               ENTRY/EXIT 
          RJM    PTA         PRESET FWA OF TRT
          LDD    FN+4        READ *TDGL*
          SHN    3
          ADK    TDGL 
          CRD    CM+3 
          LDD    CM+3        SAVE TRACK COUNT FOR DEVICE
          STD    CM+6 
          LDN    0           SET INDEX
          STD    T1 
          LDD    CM+5        SET LENGTH OF TRT
          STD    T2 
          STD    CM 
          ADN    7           SET END OF MRT 
          SHN    -3 
          ADD    CM 
          STD    T3 
          LDN    0
          STD    T0 
          LDN    ZERL 
          CRD    CN 
          LDD    FN 
          SHN    21-11
          PJN    CLR2        IF NOT SHARED DEVICE 
          SHN    21-4-21+11 
          PJN    CLR1        IF NOT AN ISHARED DEVICE 
          LDN    MISD        ADD IN *DIT* LENGTH
          RAD    T3 
 CLR1     RJM    STA         SET FWA OF TRT 
          ADD    CM          SET FWA OF MRT 
          CWD    CN          CLEAR MRT WORD 
          AOD    CM 
          LMD    T3 
          NJN    CLR1        LOOP TO END OF MRT 
 CLR2     LDD    FN          EXTRACT REMOVABLE STATUS 
          SHN    -10
          LPN    1
          STD    T3 
          LDM    CLRA,T3     SET LOOP CONDITION 
          STM    CLR8 
          LJM    CLR8        CLEAR TRT
  
 CLRA     BSS    0
          LOC    CLR8 
          NJN    CLR3 
          LOC    CLR8 
          NJN    CLR6 
  
          LOC    *O 
  
  
 CLRB     CON    10          TRACK RESERVATION BITS 
          CON    4
          CON    2
          CON    1
 CLT      SPACE  4,10 
**        CLT - CHECK LABEL TRACK.
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) = (T6) = LABEL TRACK.
*                (CM+7) = BYTE 4 OF *ALGL* WORD.
* 
*         USES   CM - CM+7. 
* 
*         CALLS  LRA. 
  
  
 CLT      SUBR               ENTRY/EXIT 
          LDD    FN+4 
          SHN    3
          ADN    ALGL        CHECK LABEL TRACK IN MST 
          CRD    CM+3 
          LDD    CM+4 
          NJN    CLT1        IF LABEL TRACK FOUND 
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    AL 
          ADN    ALGL        CHECK MST IMAGE FROM LABEL TRACK 
          CRD    CM 
          LDD    CM+1        SET LABEL TRACK
 CLT1     STD    T6 
          UJN    CLTX        RETURN 
 CMT      SPACE  4
**        CMT - CLEAR MST.
* 
*         ENTRY  (FN - FN+4) = EST ENTRY. 
*                (FS - FS+4) = STLL WORD. 
*                (EC) = ERROR CODE. 
*                (EQ) = PRIMARY EST ORDINAL.
* 
*         EXIT   (T6) = GLOBAL UNLOAD STATUS. 
*                EST - MST RESTORED TO ORIGINAL STATUS. 
*                DEVICE SET UNAVAILABLE.
* 
*         USES   CN - CN+4, CM - CM+4, FS - FS+4, FN. 
* 
*         CALLS  CLR, CLT.
* 
*         MACROS CMSTF, SFA.
  
  
 CMT      SUBR               ENTRY/EXIT 
          LDN    ZERL 
          CRD    CN 
          LDD    FN 
          LPC    7667 
          LMD    HN          SET DEVICE UNAVAILABLE 
          STD    FN 
          SFA    EST,T5      UPDATE EST 
          ADK    EQDE 
          CWD    FN 
          RJM    CLT
          NJN    CMT1        IF LABEL TRACK KNOWN 
          LDD    CM+7 
 CMT1     STD    CN+4 
          LDN    ZERL 
          CRD    CM 
          LDD    FN+4        CLEAR DEVICE ALLOCATION WORD 
          SHN    3
          ADN    ALGL 
          CWD    CN 
          ADN    DULL-ALGL   CLEAR DAYFILE POINTERS 
          CWD    CM 
          SBN    DULL-MDGL   READ DRIVER WORD 
          CRD    CN 
          SBN    MDGL-SDGL
          CRD    CM 
          SBN    SDGL-ACGL   GET DEVICE ACTIVITY WORD 
          CRD    CM+3 
          LDD    CM+7        RETAIN GLOBAL UNLOAD FLAG
          LPN    MGUNL
          STD    CM+7 
          STD    T6 
          LDN    ZERL        CLEAR TRT UPDATE STATUS
          CRD    CM+2 
  
*         SET DEVICE STATUS.
  
          LDD    FS          RETAIN INTIALIZE AND EQUIPMENT STATUS
          SCN    MLCKP
          STD    FS 
          LDN    MLDIU+MLMTI SET DEVICE IN USE
          STD    FS+4 
          LDD    CN          CLEAR AUXILIARY STATUS 
          LPC    5777 
          STD    CN 
          LDD    T5 
          LMD    EQ 
          NJN    CMT2        IF NOT PRIMARY EQUIPMENT 
          LDD    FS+1        SET ERROR CODE 
          SCN    77 
          LMD    EC 
          STD    FS+1 
          LDD    FN 
          SHN    21-11
          MJN    CMT3        IF SHARED DEVICE 
          LDD    CN          CLEAR *DAT* INDEX
          LPC    7400 
          STD    CN 
          UJN    CMT3        STORE MST PARAMETERS 
  
 CMT2     LDD    FN+4        CLEAR DEVICE AND USER DESCRIPTION
          SHN    3
          ADK    PFGL 
          CWD    CM+2 
          ADK    PUGL-PFGL
          CWD    CM+2 
 CMT3     LDD    FN+4        STORE MST PARAMETERS 
          SHN    3
          ADN    MDGL        RESET DRIVER CHARACTERISTICS 
          CWD    CN 
          ADN    STLL-MDGL   STORE *STLL* 
          CWD    FS 
          SBN    STLL-SDGL
          CWD    CM 
          SBN    SDGL-ACGL   STORE DEVICE ACTIVITY WORD 
          CWD    CM+3 
          ADN    ISGL-ACGL   CLEAR INSTALLATION AREA
          CWD    CM+2 
          ADN    I2GL-ISGL
          CWD    CM+2 
          ADN    CTLL-I2GL   CLEAR ERROR COUNTS 
          CWD    CM+2 
          RJM    CLR         CLEAR TRT
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    T5 
          CRD    RD 
          CMSTF  LDIU        CLEAR DEVICE IN USE
*         LDN    0           INHIBIT FURTHER PROCESSING OF DEVICE 
          STD    RE 
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    T5 
          CWD    RD          RESTORE RECOVERY TABLE VALUES
          LJM    CMTX 
 IES      SPACE  4
**        IES - INITIALIZE EQUIPMENT STATUS.
* 
*         ENTRY  (T5) = EQUIPMENT.
*                (EC) = ERROR CODE FOR PRIMARY EQUIPMENT. 
*                (EQ) = PRIMARY EST ORDINAL.
* 
*         EXIT   ALL EQUIPMENT IN CHAIN RESTORED TO ORIGINAL CONFIGUR-
*                ATION AND SET AS UNAVAILABLE.
*                (A) .LT. 0 IF RECOVERY INFORMATION NOT TO
*                BE REWRITTEN TO CM RETURN TO *MRL*.
* 
*         USES   T4, T5, T7, UC, CN - CN+4, FN - FN+4, FS - FS+4. 
* 
*         CALLS  CDI, CMT, SSL. 
* 
*         MACROS SFA, SMSTF.
  
  
 IES      SUBR               ENTRY/EXIT 
          SMSTF  LPTU        PROHIBIT TRT UPDATE BY *1RU* 
          SFA    EST,T5      READ EST ENTRY 
          ADK    EQDE 
          CRD    FN 
          LDD    FN+4 
          SHN    3
          ADN    DDLL        READ DEVICE DESCRIPTION
          CRD    CN 
          LDD    CN          SET TOTAL UNIT COUNT 
          LPN    7
          STD    UC 
          LMD    CN          SET UNIT COUNT = ORIGINAL UNIT COUNT 
          STD    CN 
          SHN    -3 
          LPN    7
          RAD    CN 
          LPN    7           CHECK UNIT COUNTS
          LMD    UC 
          ZJN    IES1        IF NO CHANGE IN UNIT COUNT 
  
*         RESTORE EQUIPMENT TO ORIGINAL STATUS. 
  
          LDD    FN+4        RESET ORIGINAL UNIT COUNT
          SHN    3
          ADN    DDLL 
          CWD    CN 
          RJM    SSL         SET SECTOR LIMITS
 IES1     RJM    CDI         CLEAR ISD INTERLOCKS 
          LDD    FN+4        GET *DDLL* WORD FROM MST 
          SHN    3
          ADN    DDLL 
          CRD    CN 
          SBN    DDLL-STLL
          CRD    FS 
          LDD    FS+4        SAVE CHAINED EST ORDINAL 
          SHN    -3 
          STD    T7 
          LDD    CN          SET ORIGINAL UNIT COUNT
          SHN    -3 
          LPN    7
          STD    T4 
 IES2     RJM    CMT         CLEAR MST PARAMETERS 
          LDD    T7 
          NJN    IES4        IF NOT END OF CHAIN
          LCN    0           DISABLE *MRL* REWRITE OF RECOVERY TABLE
 IES3     LJM    IESX        RETURN 
  
*         CHECK NEXT EQUIPMENT IN CHAIN.
  
 IES4     STD    T5 
          LDD    UC 
          SBD    T4 
          SBN    1
          MJN    IES3        IF NO MORE UNITS IN CHAIN
          STD    UC 
          SFA    EST,T5      READ NEXT EST ENTRY
          ADK    EQDE 
          CRD    FN 
          SMSTF  LUNL        SET LOCAL UNLOAD 
          LDD    T6 
          ZJN    IES5        IF LAST EQUIPMENT NOT GLOBALLY UNLOADED
          SMSTF  GUNL        SET GLOBAL UNLOAD
 IES5     LJM    IES1        CHECK NEXT EQUIPMENT 
 SSL      SPACE  4
**        SSL - SET SECTOR LIMITS.
* 
*         ENTRY  (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   SECTOR LIMITS SET IN MST WORD (MDGL).
* 
*         USES   T2, T3, CN - CN+4, CM - CM+4.
  
  
 SSL2     LDD    FN+4        STORE DRIVER WORD
          SHN    3
          ADN    MDGL 
          CWD    CN 
  
 SSL      SUBR               ENTRY/EXIT 
          LDD    FN+4        READ DRIVER WORD FROM MST
          SHN    3
          ADN    MDGL 
          CRD    CN 
          ADN    DDLL-MDGL
          CRD    CM 
          LDD    CM 
          LPN    7
          STD    T2 
          LDD    CN+1        SET SINGLE UNIT SECTOR LIMIT 
          LPC    3777 
          STD    T3 
          STD    CN+4 
  
*         SET SECTOR LIMITS FOR MULTI UNIT DEVICE.
  
 SSL1     SOD    T2          DECREMENT UNIT COUNT 
          MJN    SSL2        IF NO MORE UNITS 
          LDD    T3 
          RAD    CN+4 
          UJN    SSL1 
          SPACE  4,10 
 MBUF     EQU    *           MST BUFFER 
  
 OVLA     EQU    MBUF+5*MSTL+5  OVERLAY LOAD ADDRESS
  
 ORDC     EQU    OVLA        LOAD ADDRESS FOR *4DC* 
 ORDD     EQU    OVLA        LOAD ADDRESS FOR *4DD* 
 ORDF     EQU    OVLA        LOAD ADDRESS FOR *4DF* 
          SPACE  4,10 
*         THE FOLLOWING CODE IS OVERLAID AFTER READING THE DEVICE 
*         LABELS. 
          TITLE  LABEL PROCESSING ROUTINES. 
 CAM      SPACE  4,15 
**        CAM - CHANGE ACCESS MODE. 
* 
*         ENTRY  (A) = BIAS FOR ALGORITHM INDEX.
*                (AM) = 0 IF CHANGING TO HALF TRACK MODE. 
*                     = *AIHT* IF CHANGING TO FULL TRACK MODE.
*                (EQ) = EST ORDINAL.
*                (CM+2) = CHANNEL FOR ACCESS PATH CHANGE. 
*                (CN - CN+4) = DILL WORD OF MST.
*                (FN - FN+4) = EST ENTRY. 
* 
*         USES   T0, T2, CM - CM+4. 
* 
*         CALLS  SSL. 
* 
*         MACROS MONITOR. 
  
  
 CAM      SUBR               ENTRY/EXIT 
          RAD    CN+4        ADJUST ALGORITHM INDEX 
          LPN    77 
          STD    T2          EXTRACT ALGORITHM INDEX
          LDD    CM+2 
          ZJN    CAM2        IF NO ACCESS CHANGE
          LDD    AM 
          ZJN    CAM1        IF SWITCHING TO HALF TRACK MODE
          LDN    EAPS&DAPS
 CAM1     LMN    DAPS        SET *SCSM* SUBFUNCTION 
          STD    CM+3 
          LDD    EQ          SET EST ORDINAL
          STD    CM+1 
          MONITOR  SCSM      ENABLE / DISABLE HALF TRACK ACCESS 
 CAM2     LDM    TEQM-1,T2
          STD    CM+3        SET NEW MNEMONIC 
          STD    FN+3 
          LDN    SMNS        SET MNEMONIC SUBFUNCTION 
          STD    CM+2 
          LDD    EQ          CHANGE EQUIPMENT MNEMONIC
          STD    CM+1 
          MONITOR SEQM
          LDD    FN+4        READ MDGL WORD OF MST
          SHN    3
          ADN    MDGL 
          CRD    CM 
          LDM    TSLM-1,T2   SET SINGLE UNIT SECTOR LIMIT 
          STD    CM+1 
          LDD    FN+4        UPDATE MST 
          SHN    3
          ADN    MDGL 
          CWD    CM 
          ADN    DILL-MDGL
          CWD    CN 
          RJM    SSL         SET SECTOR LIMITS
 CAM5     LJM    CAMX        RETURN 
  
  
 TEQM     BSS    0           TABLE OF EQUIPMENT MNEMONICS 
          CON    2RDI        HALF TRACK SINGLE DENSITY
          CON    2RDJ        HALF TRACK DOUBLE DENSITY
          CON    2RDM        HALF TRACK DOUBLE DENSITY (885)
          CON    2RDK        FULL TRACK SINGLE DENSITY
          CON    2RDL        FULL TRACK DOUBLE DENSITY
          CON    2RDQ        FULL TRACK DOUBLE DENSITY (885)
  
  
 TSLM     BSS    0           TABLE OF SECTOR LIMITS 
          CON    SLDI+4000   HALF TRACK SINGLE DENSITY
          CON    SLDJ+4000   HALF TRACK DOUBLE DENSITY
          CON    SLDM+4000   HALF TRACK DOUBLE DENSITY (885)
          CON    SLDK        FULL TRACK SINGLE DENSITY
          CON    SLDL        FULL TRACK DOUBLE DENSITY
          CON    SLDQ        FULL TRACK DOUBLE DENSITY (885)
 CCS      SPACE  4,10 
**        CCS - CHECK CHANNEL STATUS. 
* 
*         ENTRY  (A) = REQUESTED STATUS.
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) = (CM+2).
*                    = 0 IF REQUESTED STATUS NOT PRESENT. 
*                    = CHANNEL DESCRIPTOR IF STATUS FOUND.
* 
*         USES   T2.
  
  
 CCS2     LDI    CM+3        SET CHANNEL DESCRIPTOR 
 CCS3     STD    CM+2 
  
 CCS      SUBR               ENTRY/EXIT 
          STD    T2 
          LDN    FN+1        INITIALIZE FOR SCAN
          STD    CM+3 
 CCS1     LDI    CM+3        CHECK CHANNEL
          SHN    0-10 
          SCN    6           REMOVE STATE FIELD 
          LMD    T2 
          ZJN    CCS2        IF REQUESTED STATUS PRESENT
          AOD    CM+3 
          LMN    FN+3 
          NJN    CCS1        IF ANOTHER CHANNEL TO CHECK
*         LDN    0
          UJN    CCS3        RETURN 
 CLE      SPACE  4,10 
**        CLE - CHECK LABEL ERROR.
* 
*         ENTRY  (A) .LT. 0 IF MASS STORAGE ERROR.
*                    = 1 IF ERROR IN *DIT*. 
* 
*         EXIT   (A) = ERROR CODE FOR MST.
*                    .LT. 0 IF FULL TRACK RETRY IN ORDER. 
* 
*         CALLS  CME. 
  
  
 CLE1     SBN    1
          ZJN    CLE2        IF ERROR IN *DIT*
          LCN    0
 CLE2     LMN    STCE        RETURN *CONFIGURATION ERROR* 
  
 CLE      SUBR               ENTRY/EXIT 
          PJN    CLE1        IF NOT MASS STORAGE ERROR
          RJM    CME
          UJN    CLEX        RETURN 
 CME      SPACE  4,15 
**        CME - CHECK MASS STORAGE ERROR. 
* 
*         ENTRY  (T3) = (RDCT). 
*                (SN) = LABEL SECTOR NUMBER.
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) = 0 IF RETRY IN ORDER. 
*                    = ERROR CODE FOR MST.
*                     .LT. 0, IF PARITY ERROR ENCOUNTERED.
*                TO *CUD2* IF DRIVER DETECTED *DOWN* CONDITION. 
*                TO *RDL1* IF NON-REMOVABLE DEVICE NOT READY. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  SDU. 
* 
*         MACROS SMSTF. 
  
  
 CME5     LDD    FN          CHECK EQUIPMENT STATUS 
 CMEB     EQU    *-1
*         UJN    CME8        (*CMS* CALL) 
          SHN    21-10
          PJP    RDL1        IF NON-REMOVABLE DEVICE
          LDD    SN 
          NJN    CME7        IF NOT FIRST UNIT OF EQUIPMENT 
          STD    RE 
 CME7     RJM    SDU         SET DEVICE UNLOADED
 CMEA     EQU    CME7 
*         UJN    CME8        (*CMS* CALL) 
 CME8     LDN    STNR        RETURN *NOT READY* 
  
 CME      SUBR               ENTRY/EXIT 
          LDD    T3 
          ZJN    CMEX        IF FLAWED TRACK
          LPN    77 
          LMN    NRDE 
          ZJN    CME5        IF NOT READY 
          LMN    LNRE&NRDE
          ZJP    CUD2        IF DEVICE DOWN 
          LMN    PARE&LNRE
          NJN    CME2        IF NOT A PARITY ERROR
          LCN    PARE 
          UJN    CMEX        EXIT WITH ERROR STATUS 
  
 CME2     LDN    STDE 
          UJN    CMEX        RETURN *DEVICE ERROR*
 CUC      SPACE  4,10 
**        CUC - COMPARE UPDATE COUNTS.
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (T7) = SECTOR NUMBER OF LABEL READ.
*                (FN - FN+4) = *EQDE* WORD OF EST ENTRY.
*                (BFMS) = LABEL SECTOR. 
*                (RUCA) = UPDATE COUNT FROM LAST TRT SECTOR.
* 
*         EXIT   (A) = 0 IF COUNTS MATCH. 
*                (RG) = 0 IF OPERATOR ENTERED *GO*. 
* 
*         CALLS  CLC, GAS, SOM, WOC.
  
  
*         COMPARE UPDATE COUNT FROM MST WITH THAT AT END OF TRT.
  
 CUC3     LDM    N4SS+5*SDGL+2  COMPARE UPDATE COUNTS 
          LMM    RUCA+2 
          NJN    CUC2        IF NO MATCH
          LDM    N4SS+5*SDGL+3
          LMM    RUCA+3 
          NJN    CUC2        IF NON-MATCHING COUNTS 
          LDM    N4SS+5*SDGL+4
          LMM    RUCA+4 
          SCN    77 
          NJN    CUC2        IF NON-MATCHING COUNTS 
          RJM    CLC
          LMM    CKSS 
          NJN    CUC2        IF INCORRECT LABEL CHECKSUM
  
 CUC      SUBR               ENTRY/EXIT 
          LDD    FN 
          SHN    21-6 
          PJN    CUC1        IF DEVICE AVAILABLE
          LDM    LLSS 
          SBN    2
          PJN    CUC3        IF NEW LABEL 
 CUC1     LDN    0
          UJN    CUCX        RETURN 
  
 CUC2     LDD    T7 
          NJN    CUCX        IF ALTERNATE LABEL 
          LDC    CUCA        SET EST ORDINAL IN MESSAGE 
          RJM    SOM
*         LDC    CUCA        WAIT ON OPERATOR INPUT 
          RJM    WOC
          NJN    CUCX        IF OPERATOR ENTERED *PAUSE*
          STD    RG 
          RJM    GAS         GET ALTERNATE LABEL SECTOR 
          STD    T7 
          LJM    RLS2        READ ALTERNATE LABEL 
  
  
 CUCA     DATA   C*EQXXX, TABLES INCONSISTENT.* 
 CUD      SPACE  4,15 
**        CUD - CHECK UNAVAILABLE DEVICE. 
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
*                (FS - FS+4) = *STLL* WORD OF MST.
* 
*         EXIT   TO *RDLX* IF UNLOAD REQUESTED. 
*                          IF DEVICE OFF. 
*                          IF DEADSTART INITIALIZE. 
* 
*         CALLS  WMT. 
  
  
 CUD4     LDD    FS          CHECK DEVICE STATUS
          LPN    MLUNL
          ZJN    CUDX        IF NO UNLOAD REQUEST 
          LDD    FN 
          SHN    21-3 
          MJN    CUDX        IF DEVICE ACTIVE 
          SHN    4+21-6 
          MJN    CUD3        IF DEVICE UNAVAILABLE
  
 CUD      SUBR               ENTRY/EXIT 
          LDD    FS 
          SHN    21-LIAL+LIAL/12D*12D 
          MJN    CUD2        IF DEADSTART INITIALIZE
          LDD    FN 
          LPN    2
          ZJN    CUD4        IF DEVICE ON 
 CUD2     LDN    0
          STD    RE          INHIBIT FURTHER PROCESSING OF DEVICE 
 CUD3     LDC    1S12 
          RJM    WMT         SET LABEL NOT READ INDICATOR 
          LDN    0
          LJM    RDLX        EXIT 
 GAS      SPACE  4,10 
**        GAS - GET ALTERNATE LABEL SECTOR. 
* 
*         ENTRY  (FN - FN+4) = *EQDE* WORD OF EST ENTRY.
* 
*         EXIT   (A) = ALTERNATE LABEL SECTOR.
* 
*         USES   T1.
  
  
 GAS1     LDN    2           ADVANCE TABLE ADDRESS
          RAD    T1 
 GAS2     LDI    T1 
          ZJN    GASX        IF END OF TABLE
          LMD    FN+3 
          NJN    GAS1        IF NOT MATCHING DEVICE MNEMONIC
          LDM    1,T1 
  
 GAS      SUBR               ENTRY/EXIT 
          LDC    TALS 
          STD    T1 
          UJN    GAS2        ENTER SEARCH LOOP
  
  
 TALS     BSS    0
          LIST   G
          TBL    "MSEQ" 
          LIST   *
          PURGMAC  TBLM 
          CON    0           END OF TABLE 
 PUE      SPACE  4,10 
**        PUE - PROCESS UNSECURED SYSTEM SECURITY ERROR.
* 
*         ENTRY  (T5) = EST ORDINAL.
* 
*         EXIT   (A) = 0 IF OPERATOR ENTERED *GO*.
*                    .NE. 0 IF OPERATOR ENTERED *PAUSE*.
* 
*         CALLS  DFM, SOM, WOC. 
  
  
 PUE      SUBR               ENTRY/EXIT 
          LDC    2RE. 
          STM    PUEB 
          LDN    0
          STM    PUEB+1 
          LDC    PUEA        SET EST ORDINAL IN MESSAGE 
          RJM    SOM
          LDC    PUEA+ERLN   ISSUE MESSAGE TO ERRLOG
          RJM    DFM
          LDD    T8          WAIT ON OPERATOR INPUT 
          RJM    WOC
          NJN    PUE2        IF OPERATOR ENTERED *PAUSE*
          LCN    1R.-1R 
          RAM    PUEB 
          LDC    2RRE 
          STM    PUEB+1 
          LDC    PUEA+ERLN   ISSUE MESSAGE TO ERRLOG
          RJM    DFM
*         LDN    0
 PUE2     UJP    PUEX        RETURN 
  
  
 PUEA     DATA   20HEQXXX, SECURED DEVIC
 PUEB     DATA   C*E RECOVERED.*
 RUC      SPACE  4,15 
**        RUC - RETRIEVE UPDATE COUNT FROM TRT. 
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (T6) = LABEL TRACK.
*                (T7) = LABEL SECTOR. 
*                (SN) = FIRST UNIT OF EQUIPMENT INDICATOR.
*                (FN - FN+4) = *EQDE* WORD OF EST ENTRY.
* 
*         EXIT   (QS) = (T7) ON ENTRY IF TRT UPDATE COUNT READ. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  RLP. 
  
  
 RUC      SUBR               ENTRY/EXIT 
          LDD    FN 
          SHN    21-6 
          PJN    RUCX        IF DEVICE AVAILABLE
          LDD    SN 
          NJN    RUCX        IF NOT FIRST UNIT OF EQUIPMENT 
          LDD    FN+4 
          SHN    3
          ADK    TDGL        FETCH TRT LENGTH FROM MST
          CRD    CM 
          LDD    T7          SAVE LABEL SECTOR
          STD    QS 
          LDD    CM+2        CALCULATE LAST SECTOR OF TRT 
          SHN    -6 
          ADN    1           ADVANCE OVER LABEL SECTOR
          RAD    T7 
          RJM    RLP         READ END OF TRT SECTOR 
          LDD    MA 
          CWM    BFMS+2+5*77,ON 
          SBN    1           SAVE MST/TRT UPDATE COUNTER
          CRM    RUCA,ON
          LDD    QS          RESTORE LABEL SECTOR 
          STD    T7 
          UJP    RUCX        RETURN 
  
  
 RUCA     BSSZ   5           MST/TRT UPDATE COUNT 
 SDU      SPACE  4,10 
**        SDU - SET DEVICE UNLOADED.
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (FN - FN+4) = *EQDE* WORD OF EST ENTRY.
* 
*         MACROS CMSTF, SMSTF.
  
  
 SDU      SUBR               ENTRY/EXIT 
          LDD    FN 
          SHN    21-10
          PJN    SDUX        IF NON-REMOVABLE DEVICE
          SMSTF  LUNL 
          SMSTF  LDUL        SET DEVICE UNLOADED
          LDD    FN 
          LPN    20 
          ZJN    SDUX        IF NOT INDEPENDENT SHARED DEVICE 
          SMSTF  LPTU 
          CMSTF  GPRS        CLEAR PRESET STATUS
*         LDN    0
          UJN    SDUX        RETURN 
 SFT      SPACE  4,15 
**        SFT - SET FULL TRACK MODE.
* 
*         ENTRY  (AM) = 0 IF UNAVAILABLE *LDAM* DEVICE. 
*                (T4 - T7) = MASS STORAGE PARAMETERS. 
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   TO *RDL3* IF MODE CHANGED TO FULL TRACK. 
*                (AM) .NE. 0 TO DISABLE REENTRY TO SUBROUTINE.
* 
*         USES   RE, CN - CN+4. 
* 
*         CALLS  CAM, CCS.
  
  
 SFT      SUBR               ENTRY/EXIT 
          LDD    AM 
          ADD    SN 
          NJN    SFTX        IF CHANGE ALREADY MADE 
          LDD    FN+4 
          SHN    3
          ADN    DILL        FETCH ALGORITHM INDEX WORD FROM MST
          CRD    CN 
 SFTA     LDN    0
*         LDN    10          (2X PP STATUS) 
*         LDN    4           (4X PP STATUS) 
          ZJN    SFT1        IF 1X PP SPEED 
  
*         CHECK CONTROLLER CONFIGURATION. 
  
          LDN    10          LOOK FOR FULL TRACK ACCESS 
          RJM    CCS
          NJN    SFT2        IF FULL TRACK PATH PRESENT 
 SFT1     STD    CM+2 
          LDN    40          FLAG INVALID FULL TRACK ACCESS SET 
          RAD    RE 
          UJN    SFT3        CHANGE ACCESS MODE 
  
 SFT2     LDN    11          CHECK FOR HALF TRACK ACCESS
          RJM    CCS
 SFT3     LDN    AIHT        DISABLE REENTRY TO *SFT* 
          STD    AM 
          RJM    CAM         CHANGE ACCESS MODE 
          LDN    0
          STD    T7 
          LJM    RDL3        SEARCH FOR LABEL IN FULL TRACK MODE
 SHT      SPACE  4,10 
**        SHT - SET HALF TRACK MODE.
* 
*         ENTRY  (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (AM) = 0 IF UNAVAILABLE *LDAM* DEVICE. 
* 
*         USES   CM - CM+4, CN - CN+4.
* 
*         CALLS  CAM, CCS.
  
  
 SHT1     AOD    AM          SET FULL TRACK STATUS
  
 SHT      SUBR               ENTRY/EXIT 
          LDD    FN+4        GET MST PARAMETERS 
          SHN    3
          ADN    MDGL 
          CRD    CM 
          ADN    DILL-MDGL
          CRD    CN 
          LDD    CM+3        SET ACCESS MODE FLAG 
          LMN    LA6DI
          LPN    77 
          STD    AM 
          LDD    FN          ADD AVAILABLE STATUS 
          LPC    100
          LMD    HN 
          RAD    AM 
          NJN    SHTX        IF AVAILABLE OR NOT *6DI* DRIVER 
          LDD    CM+1 
          SHN    21-13
          MJN    SHTX        IF DEVICE IN HALF TRACK MODE 
          LDD    CN+4 
          LPN    77          CHECK ALGORITHM INDEX
          SBN    2*AIHT+1 
          PJN    SHT1        IF FULL TRACK ONLY DEVICE
          LDN    1           CHECK INACTIVE HALF TRACK PATH 
          RJM    CCS
          LCN    AIHT        CHANGE ACCESS MODE 
          RJM    CAM
          UJN    SHTX        RETURN 
 SOM      SPACE  4,10 
**        SOM - SET EST ORDINAL IN MESSAGE. 
* 
*         ENTRY  (A) = MESSAGE ADDRESS. 
*                (T5) = EST ORDINAL.
* 
*         EXIT   (A) = (T8) = MESSAGE ADDRESS.
* 
*         CALLS  C2D. 
  
  
 SOM1     LDD    T8          RETURN WITH (A) = MESSAGE ADDRESS
  
 SOM      SUBR               ENTRY/EXIT 
          STD    T8 
          LDI    T8          CHECK MESSAGE FORMAT 
          LMC    2REQ 
          NJN    SOM1        IF NOT *EQXXX* MESSAGE 
          LDD    T5 
          SHN    -3          CONVERT UPPER TWO DIGITS 
          RJM    C2D
          STM    1,T8        STORE IN MESSAGE 
          LDD    T5 
          LPN    7           EXTRACT LOW ORDER DIGIT
          SHN    6
          ADC    2R0,        COMPLETE ORDINAL CONVERSION
          STM    2,T8 
          UJN    SOM1        RETURN 
 RDL      SPACE  4,15 
**        RDL - READ DEVICE LABEL.
* 
*         ENTRY  (EQ) = (T5) = EST ORDINAL. 
*                (RS) = RECOVERY STATUS.
*                (FN - FN+4) = EST ENTRY. 
*                (AL) = CM ADDRESSES FOR MSTS OF EACH UNIT. 
* 
*         EXIT   LABEL READ AND MST PLACED IN CM. 
* 
*         USES   T6, T7, CA, RE, SL, UC, CM - CM+4, CN - CN+4,
*                FS - FS+4. 
* 
*         CALLS  CLE, CUD, PTA, RLM, RLS, SFT, SHT, SLT, SSL, WMT.
  
  
 RDL16    AOD    RC          ADVANCE REDEFINITION REQUESTED COUNT 
 RDL17    LDN    0           INHIBIT FURTHER PROCESSING OF DEVICE 
          STD    RE 
  
 RDL      SUBR               ENTRY/EXIT 
 RDLA     RJM    SSL         SET SECTOR LIMITS
*         UJN    *+2         IF CM RECOVERY OR *CMS* CALL 
          LDD    RE 
          SHN    21-4 
          MJN    RDLX        IF DEADSTART INITIALIZE SPECIFIED
          RJM    PTA         PRESET FWA OF TRT
 RDL1     LDD    FN+4 
          SHN    3
          ADN    STLL 
          CRD    FS 
          ADN    DDLL-STLL
          CRD    CN 
          SBN    DDLL-ACGL
          CRD    CM 
          LDD    CM+4        CHECK REDEFINITION REQUESTED 
          SHN    21-13
          MJN    RDL16       IF REDEFINITION REQUESTED
          LDD    CN          SET CURRENT UNIT COUNT 
          LPN    7
          STD    UC 
          LDD    CN 
          SHN    -11
          NJN    RDL17       IF NO UNITS OR REDEFINITION IN PROGRESS
          STD    T7          SET LABEL SECTOR 
          LDD    CN 
          SHN    -3 
          LPN    7
          SBD    UC 
          PJN    RDL2        IF CURRENT .LE. ORIGINAL UNIT COUNT
          RAD    UC 
 RDL2     LDD    AL          SET ADDRESS FOR LABEL MST
          STD    CA 
          RJM    CUD         CHECK UNAVAILABLE DEVICE 
          RJM    SHT         SET HALF TRACK MODE
  
*         READ LABEL FOR UNITS ON THIS EQUIPMENT. 
  
 RDL3     LDD    FN+4        FETCH LABEL TRACK FROM MST 
          SHN    3
          ADN    ALGL 
          CRD    CM 
          ADN    MDGL-ALGL
          CRD    CN 
          LDD    CN+1        SET SINGLE UNIT SECTOR LIMIT 
          LPC    3777 
          STD    SL 
          LDD    CM+1        SET LABEL TRACK
          STD    T6 
          ZJN    RDL8        IF LABEL TRACK UNKNOWN 
          ADN    1
          STM    SLTA 
 RDL7     RJM    RLS         READ LABEL SECTOR
          ZJN    RDL14       IF VALID LABEL 
          RJM    CLE         CHECK LABEL ERROR
          MJN    RDL9        IF POSSIBLE WRONG MODE 
          NJN    RDL14       IF ERROR STATUS FOR MST
  
*         ERROR IN LABEL READ - TRY ANOTHER TRACK.
  
          AOD    T6          ADVANCE TO NEXT TRACK
 RDL8     RJM    SLT
          NJN    RDL7        IF NOT AT BAD TRACK LIMIT
 RDL9     RJM    SFT
          LDD    RE          CHECK INCORRECT MODE CHANGE
          LPN    40 
          ZJN    RDL10       IF MODE CHANGE LEGAL OR NONE 
          RJM    SHT         RESTORE HALF TRACK ACCESS
 RDL10    LDN    STLE        SET LABEL ERROR STATUS 
  
*         ENTER MST FROM LABEL INTO CM TABLE FOR FURTHER PROCESSING.
  
 RDL14    RJM    WMT         COPY MST TO CM TABLE 
          LDD    SN 
          NJN    RDL15       IF NOT FIRST UNIT OF EQUIPMENT 
 RDLC     RJM    RLM         GET LOCAL MST DATA 
*         UJN    RDL15       (LEVEL 3 D/S OR *CMS* W/O D/S SEQUENCING)
 RDL15    LDD    SL          ADVANCE TO LABEL ON NEXT UNIT
          ADD    SN 
          STD    T7 
          SOD    UC 
          PJP    RDL7        IF MORE UNITS TO CHECK 
          LDN    0
          LJM    RDLX        RETURN 
 RLM      SPACE  4
**        RLM - READ LOCAL MST BLOCK. 
* 
*         ENTRY  (T6) = LABEL TRACK.
*                (T7) = 0.
*                (FN - FN+4) = EST ENTRY. 
*                (FS - FS+4) = MST STATUS WORD (STLL).
*                BFMS LOADED WITH LABEL MST.
* 
*         EREXIT TO */RMS/HNG* IF ERROR READING SECTOR OF LOCAL AREAS.
* 
*         USES   P1, CN - CN+4. 
* 
*         CALLS  GAS, LRA, RLA, SES.
  
  
 RLM6     LDM    BFMS 
          ZJN    RLM7        IF SECTOR NOT REFORMATTED
          LDN    STDE&STLE
 RLM7     LMN    STLE        SET ERROR STATUS IN MST
          RJM    SES
          AOD    RE          FLAG BAD LABEL 
  
 RLM      SUBR               ENTRY/EXIT 
          LDD    RE 
          SHN    21-6 
          PJN    RLMX        IF EQUIPMENT AVAILABLE 
          SHN    6-0
          MJN    RLMX        IF LABEL NOT READ
          LDM    N4SS+5*ACGL+4
          LPC    MGLAP
          ZJN    RLMX        IF NO SECTOR OF LOCAL AREAS
          LDM    N4SS+5*DULL+2  SAVE MACHINE INDEX
          STD    P1 
          RJM    RLA         READ LOCAL AREA SECTOR 
          PJN    RLM3        IF NO ERROR
          ADN    1
          NJN    RLM1        IF SECTOR REFORMATTED
          LDD    FN 
          SHN    21-10
          MJN    RLM2        IF REMOVABLE DEVICE
 RLM1     LDC    RLMC        *LOCAL AREA SECTOR ERROR.* 
          LJM    /RMS/HNG    DISPLAY MESSAGE AND HANG 
 RLMA     EQU    *-1
*         LJM    RLM6        (*CMS* CALL) 
  
 RLM2     LDN    0
 RLM3     STD    T2          SET ADDRESS OF *SLA* DAYFILE DATA
          LDN    ZERL 
          CRD    CN 
          CRD    CM 
          LDD    T2 
          ZJN    RLM4        IF NO ENTRY OR REMOVABLE DEVICE
          LDM    4,T3        EXTRACT ACTIVE USER COUNT
          STD    FS+3 
          LDM    1,T3        MOVE SYSTEM TABLE TRACK
          STD    CM+3 
          LDM    3,T3        MOVE FAMILY COUNT
          STD    CM+4 
          LDD    T3          SET ADDRESS OF ENTRY 
          SBN    CN-5 
 RLM4     ADN    CN 
          STM    RLMB 
          LDD    FS+1        CLEAR ERROR STATUS 
          SCN    77 
          STD    FS+1 
          LDD    P1 
          STD    CM+2 
          RJM    GAS         SET ALTERNATE LABEL SECTOR 
          STD    CM 
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    AL 
          ADN    DALL 
          CWM    *,ON 
 RLMB     EQU    *-1
          ADN    DULL-DALL-1
          CWD    CM 
          ADN    STLL-DULL
          CWD    FS 
          LJM    RLMX        RETURN 
  
  
 RLMC     DATA   C*LOCAL AREA SECTOR ERROR.*
 RLS      SPACE  4
**        RLS - READ LABEL SECTOR.
* 
*         ENTRY  (T6) = TRACK.
*                (T7) = SECTOR. 
*                (FN - FN+4) = EST ENTRY. 
*                (FS - FS+4) = *STLL* WORD OF MST.
* 
*         EXIT   (A) = 0 IF VALID LABEL.
*                (A) .LT. 0 IF MS ERROR.
*                (A) .GT. 0 IF INCORRECT LABEL. 
*                (A) = 1 IF ERROR IN *DIT*. 
*                (T3) = ERROR CODE IF (A) .LT. 0. 
*                (SN) = LABEL SECTOR NUMBER.
*                TO *CUD2* IF DEVICE INACCESSIBLE.
* 
*         USES   EC, P1, P2, RG, T1, T2, T3, CM - CM+4, CN - CN+4.
* 
*         CALLS  CDA, CDC, CMI, RDS, SDT, SDU, SOM, WDS.
* 
*         MACROS DELAY, ENDMS, MONITOR, SETMS.
  
  
 RLP2     LDD    T7          CHECK SECTOR NUMBER
          LMK    LSLT 
          NJN    RLP3        IF NOT PRIMARY LABEL SECTOR
          LDM    N4SS+5*SDGL+4
          LPN    77 
          SHN    -1          EXTRACT SOFTWARE RESERVE 
          STD    P2 
 RLP3     LDM    FNSS        CHECK FILE NAME FIELD
          LMC    3777 
  
 RLP      SUBR               ENTRY/EXIT 
          LDC    BFMS 
          RJM    RDS         READ LABEL SECTOR
          STD    T3 
          PJN    RLP2        IF NO MASS STORAGE ERROR 
 RLP1     ENDMS 
          LDC    1S17        SET ERROR FLAG 
          LMD    T3 
*         UJN    RLSX        EXIT 
  
 RLS      SUBR               ENTRY/EXIT 
          LDD    T7 
          STD    SN          SAVE LABEL SECTOR NUMBER 
  
*         READ SECTOR.
  
 RLS1     SETMS  IO,(DF,ND,NR,RR) 
          LDM    MSD         RETURN STATUS TO CALLER
          SHN    21-6 
          MJP    CUD2        IF DEVICE INACCESSIBLE 
          LDN    1
          STD    RG 
 RLS2     RJM    RUC         RETRIEVE UPDATE COUNT
          RJM    RLP         READ LABEL 
          ZJN    RLP1        IF FLAWED TRACK
  
*         CHECK CONTENTS OF LABEL.
  
          LDM    BFMS        CHECK CONTROL BYTES
          LMC    3777 
          NJN    RLS5        IF INCORRECT SYSTEM SECTOR LINKAGE 
          LDM    BFMS+1 
          LMN    77 
          ZJN    RLS7        IF PROPER WORD COUNT 
 RLS5     ENDMS 
          LDN    2           INDICATE INCORRECT LABEL 
          UJP    RLSX        RETURN 
  
 RLS7     LDM    FTSS        CHECK LABEL TRACK
          LMD    T6 
          NJN    RLS5        IF INCORRECT TRACK 
          LDD    FN+3 
          LMC    2RDE 
          ZJN    RLS10       IF ECS 
          LMN    1RP&1RE
          ZJN    RLS10       IF DDP 
          LDM    E4SS 
          LMD    FN+3 
          NJN    RLS5        IF NO MATCH ON DEVICE MNEMONIC 
          LDD    SN 
          NJN    RLS10       IF NOT FIRST UNIT OF EQUIPMENT 
          RJM    CUC
          NJN    RLS5        IF MST AND TRT OUT OF SYNC 
          LDD    FN 
          SHN    21-4 
          PJN    RLS10       IF NOT INDEPENDENT SHARED DEVICE 
 RLSA     SHN    5+21-6 
          PJN    RLS10       IF EQUIPMENT AVAILABLE 
          SHN    6-3
          PJN    RLS11       IF NOT PREVIOUSLY RECOVERED
          SHN    4+21-10
          MJN    RLS11       IF REMOVABLE DEVICE
 RLS10    ENDMS 
*         LDN    0           INDICATE VALID LABEL 
          LJM    RLSX        RETURN 
  
*         PROCESS *DIT* ON INDEPENDENT SHARED DEVICE. 
  
 RLS11    BSS    0
          QUAL   ISD
  
          LDD    RS          CHECK RECOVERY STATUS
          LPN    FLMK 
          LMN    FLCM 
          STD    P1 
          ZJN    RLS12       IF FILES RECOVERED FROM CM 
          RJM    CDA
          NJN    RLS10       IF RECOVERY INHIBITED
 RLS12    LDD    RE 
          LPN    40 
          NJN    RLS10       IF INCORRECT ACCESS MODE 
          LDK    EPDE 
          RAM    UERR        REREAD LABEL WITH *ENDMS* DISABLED 
          RJM    RLP
          LDD    FN+4        FETCH MST PARAMETERS 
          SHN    3
          ADN    ACGL 
          CRD    CM 
          ADN    DULL-ACGL
          CRD    CN 
          LDD    CM+4 
          LPC    MGPRS
          ZJN    RLS14       IF *PRESET* OPTION NOT SET 
          LMD    CM+4 
          STD    CM+4 
          LDD    FN+4        INDICATE PRESET NOTED
          SHN    3
          ADN    ACGL 
          CWD    CM 
          LDC    5*MISD      CLEAR DIT
          STD    T1 
 RLS13    LDN    0
          STM    DISS-1,T1
          SOD    T1 
          NJN    RLS13       IF MORE WORDS TO CLEAR 
          STM    N4SS+5*STLL
          STD    P2          CLEAR POSSIBLE SOFTWARE RESERVE
 RLS14    RJM    SDT
          MJN    RLS16       IF ANY DIT ENTRY INTERLOCKED 
 RLSB     ZJN    RLS18       IF THIS MACHINE NOT IN DIT 
*         NJN    RLS17       (RECOVERY DEADSTART) 
          LDN    RLSF-RLSE
 RLS15    ADC    RLSE 
          LJM    RLS22       DISPLAY ERROR MESSAGE
  
 RLS16    ENDMS              RELEASE CHANNEL
          LDC    DSCP*CPAS+MS2W 
 RLSC     EQU    *-1
*         LDC    CP+MS2W     (*CMS* CALL) 
          CWM    RLSG,TR
          DELAY 
          LJM    RLS1        LOOP 
  
 RLS17    STD    T1          SET DIT ORDINAL
 RLS18    LDD    T1 
          ZJN    RLS15       IF DIT FULL
          STD    T3 
          SHN    2           SET INDEX OF DIT ENTRY 
          RAD    T3 
          RJM    CMI
          NJN    RLS16       IF MST INTERLOCKED / INITIALIZE PENDING
*         LDN    0
          STD    T7          ENSURE PRIMARY LABEL SECTOR
          LDD    P1 
          NJP    RLS20       IF FILES NOT RECOVERED FROM CM 
  
*         CLEAR LOCAL DEVICE INTERLOCKS AND PF ACTIVITY.
  
          LDM    DISS-5,T3   GET LOCAL PF ACTIVITY COUNT
          LPN    77 
          STD    T0 
          LCN    77 
          LMM    N4SS+TDGL*5+1
          STM    RLSH 
          LPN    77 
          SBD    T0 
          PJN    RLS19.1     IF LOCAL PF ACTIVITY .LE. GLOBAL ACTIVITY
 RLS19    MONITOR  HNGM      HANG PP
          UJN    RLS19       HANG PP
  
 RLS19.1  LDM    DISS-5,T3
          LPC    0
 RLSH     EQU    *-1         (COMPLEMENT OF GLOBAL INTERLOCKS)
          SHN    -6 
          NJN    RLS19       IF LOCAL INTERLOCK SET WITHOUT GLOBAL
          LDM    N4SS+TDGL*5+1  CLEAR LOCAL INTERLOCKS AND PF ACTIVITY
          SBM    DISS-5,T3
          STM    N4SS+TDGL*5+1
          LDN    0
          STM    N4SS+DULL*5+1
          STD    CN+1 
          STM    DISS-5,T3
          LDD    P2 
          LMD    T1 
          NJN    RLS21       IF MST NOT INTERLOCKED BY THIS MACHINE 
          LDN    10 
          RAD    RE 
  
*         SET MACHINE ACTIVE ON DEVICE. 
  
 RLS20    LDD    FS+2        SET MACHINE ID IN DIT ENTRY
          STM    DISS-5+4,T3
          AOM    DISS-5+3,T3 SET DIT ENTRY INTERLOCK
          LDM    N4SS+5*SDGL+4
          SHN    -1 
          SCN    37 
          LMD    T1          SET SOFTWARE RESERVE 
          SHN    1
          STM    N4SS+5*SDGL+4
          SOD    T1          SET MACHINE INDEX IN LOCAL AREA
          STM    N4SS+5*DULL+2
          STD    CN+2 
          AOM    SDIF        ADVANCE INTERLOCK COUNT
 RLS21    LDD    EC 
          ADD    RS 
          ZJN    RLS25       IF INITIAL RECOVERY
          LDD    FN 
          SHN    13-10
          LMM    N4SS+5*MDGL CHECK MATCHING REMOVABLE STATUS
          SHN    21-13
          PJN    RLS24       IF MODES MATCH 
          LDC    RLSI        *REMOVABLE DEVICE CONFLICT*
 RLS22    STD    T3          SAVE MESSAGE ADDRESS 
          RJM    SOM
          ENDMS 
          LDD    FN          CHECK DEVICE TYPE
          SHN    21-10
          MJN    RLS23       IF REMOVABLE DEVICE
          LDD    T3 
 RLSD     LJM    /RMS/HNG    DISPLAY THE ERROR MESSAGE
*         UJN    *+2         (*CMS* CALL) 
  
 RLS23    LDD    T3          ISSUE MESSAGE
          RJM    DFM
          RJM    SDU         SET DEVICE UNLOADED
          LDN    1
          LJM    RLSX        RETURN 
  
 RLS24    LDN    2           SET DEVICE ACCESSED
          RAD    RE 
 RLS25    LDD    FN+4        STORE DEVICE USAGE INFORMATION 
          SHN    3
          ADN    DULL 
          CWD    CN 
          RJM    CDC         COMPUTE LABEL CHECKSUM 
          STM    CKSS 
          LDC    BFMS+WLSF
          RJM    WDS
          LDD    QS          RESTORE ACTUAL LABEL SECTOR
          STD    T7 
          LJM    RLS10       RETURN 
  
  
 RLSE     DATA   C*NO SPACE IN DIT.*
 RLSF     DATA   C*EQXXX, ID NN NOW IN DIT.*
 RLSG     DATA   C*WAITING FOR INTERLOCK.*
 RLSI     DATA   C*REMOVABLE DEVICE CONFLICT.*
 CMI      SPACE  4,10 
**        CMI - CHECK MST INTERLOCKS. 
* 
*         ENTRY  (T1) = MACHINE INDEX.
*                (P2) = SOFTWARE RESERVE FROM *SDGL*. 
*                (RG) = OPERATOR OVERRIDE STATUS. 
*                (BFMS) = LABEL SECTOR. 
* 
*         EXIT   (A) = 0 IF NO INTERLOCKS PROHIBITING RECOVERY. 
* 
*         USES   T2.
  
  
 CMI      SUBR               ENTRY/EXIT 
          LDD    RG 
          ZJN    CMIX        IF OPERATOR OVERRIDE 
          LDD    P2 
          NJN    CMI1        IF DEVICE INTERLOCK SET
          LDM    N4SS+5*STLL
          LPC    MLIAL+MLIHD+MLIFD+MLIPF
          ZJN    CMIX        IF NO FULL / PF INITIALIZE PENDING 
          LDM    N4SS+5*DULL+2
          LPN    17 
          ADN    1           CHECK OWNER OF INITIALIZE REQUEST
 CMI1     STD    T2 
          LMD    T1 
          ZJN    CMIX        IF DEVICE OPEN FOR RECOVERY
          LDD    T2 
          SHN    2           CONVERT DIT INDEX TO BYTE INDEX
          RAD    T2 
          LDM    DISS-5+4,T2 SET MACHINE ID IN MESSAGE
          STM    CMIA+11
          LDC    CMIA        SET EST ORDINAL IN MESSAGE 
          RJM    SOM
*         LDC    CMIA        WAIT ON OPERATOR COMMAND 
          RJM    WOC
          UJP    CMIX        RETURN 
  
  
 CMIA     DATA   C*EQXXX, BUSY ON ID NN.* 
 SDT      SPACE  4,15 
**        SDT - SEARCH DEVICE INFORMATION TABLE.
* 
*         ENTRY  (FS - FS+4) = *STLL* WORD OF MST.
*                (BFMS) = LABEL SECTOR. 
* 
*         EXIT   (A) = 0 IF THIS MACHINE NOT IDENTIFIED IN DIT. 
*                    = MACHINE INDEX FOR THIS DEVICE. 
*                    .LT. 0 IF ANY DIT ENTRY INTERLOCKED. 
*                (EC) = COUNT OF MACHINES ACCESSING DEVICE. 
*                (T1) = INDEX OF NEXT FREE DIT SLOT.
* 
*         USES   T2, T3.
  
  
 SDT2     LDD    T2          SET MACHINE INDEX
          STD    T0 
 SDT3     LDD    T2          SET INDEX OF EMPTY SLOT
          STD    T1 
 SDT4     SOD    T2 
          NJN    SDT1        IF MORE DIT ENTRIES TO CHECK 
          LDD    T0 
  
 SDT      SUBR               ENTRY/EXIT 
          LDN    0
          STD    EC 
          STD    T0 
          STD    T1 
          LDC    DISS+5*MISD+4  PRESET SEARCH ADDRESS 
          STD    T3 
          LDN    MISD        INITIALIZE DIT INDEX 
          STD    T2 
 SDT1     LCN    5           DECREMENT ADDRESS
          RAD    T3 
          LDI    T3 
          ZJN    SDT3        IF EMPTY SLOT
          LMD    FS+2 
          ZJN    SDT2        IF SLOT ASSIGNED TO THIS MACHINE 
          AOD    EC 
          LDM    -1,T3
          LPN    1
          ZJN    SDT4        IF ENTRY NOT INTERLOCKED 
          LCN    1
          UJN    SDTX        RETURN 
          SPACE  4,10 
          QUAL   *
 SLT      SPACE  4,10 
**        SLT - SEARCH FOR LABEL TRACK. 
* 
*         ENTRY  (A) = 0 IF STARTING SCAN FOR LABEL TRACK.
* 
*         EXIT   (A) = 0 IF END OF LABEL TRACK SCAN.
*                (T6) = NEXT LABEL TRACK CANDIDATE. 
* 
*         USES   T1, T2, CM - CM+4. 
* 
*         CALLS  STA. 
  
  
 SLT1     LDD    T6          SET TRT WORD INDEX 
 SLT2     SHN    21-1 
          LMD    TH          REMOVE TRACK BIT 
          STD    T1 
          SHN    1-21        SET BYTE INDEX 
          STD    T2 
          RJM    STA         SET FWA OF TRT 
          ADD    T1 
          CRD    CM 
          LDM    CM,T2       CHECK TRACK
          LMC    3777 
          NJN    SLTX        IF NOT FLAWED
          AOD    T6          ADVANCE TRACK
 SLT3     LMC    LTKL 
 SLTA     EQU    *-1
          NJN    SLT1        IF NOT AT LABEL TRACK LIMIT
  
 SLT      SUBR               ENTRY/EXIT 
          NJN    SLT3        IF NOT FIRST TRACK 
          LDC    LTKL        SET LIMIT FOR VALID LABEL TRACK
          STM    SLTA 
          SBN    LTKL-FLTK   SET FIRST TRACK
          STD    T6 
          UJN    SLT2 
 VAL      SPACE  4,20 
**        VAL - VERIFY ACCESS LEVEL LIMITS. 
* 
*         ENTRY  (T5) = EST ORDINAL.
* 
*         EXIT   (A) = 0 IF ACCESS LEVELS WITHIN LIMITS, OR OPERATOR
*                      ENTERED *GO,CMS*.
*                (EC) = *STSV* WHEN ACCESS LEVELS NOT WITHIN LIMITS ON
*                       *RMS* CALL PROCESSING REMOVABLE DEVICE, *CMS* 
*                       CALL PROCESSING SECURED SYSTEM, OR *CMS* CALL 
*                       PROCESSING UNSECURED SYSTEM IN WHICH OPERATOR 
*                       ENTERED *PAUSE*.
*                TO *HNG* ON *RMS* CALL PROCESSING NON-REMOVABLE
*                DEVICE WHEN ACCESS LEVELS NOT WITHIN LIMITS. 
* 
*         USES   CM, EC, CN - CN+4. 
* 
*         CALLS  PUE, SOM.
* 
*         MACROS SFA. 
  
  
 VAL7     LDN    0           CLEAR ERROR RETURN STATUS
  
 VAL      SUBR               ENTRY/EXIT 
          SFA    EST,T5      GET ACCESS LEVELS FROM EST 
          ADK    EQAE 
          CRD    CN 
          LDM    N4SS+5*PFGL+4  GET ACCESS LEVELS CONTAINED IN MST
          SHN    -6 
          STD    CM 
          LDD    CN+3        COMPARE LOWER LEVELS 
          LPN    70 
          STD    CN 
          LDD    CM 
          SCN    7
          SBD    CN 
          MJN    VAL2        IF LOWER LEVEL NOT WITHIN LIMITS 
          LDD    CM          COMPARE UPPER LEVELS 
          LPN    7
          STD    CM 
          LDD    CN+3 
          LPN    7
          SBD    CM 
 VAL1     PJN    VAL7        IF ACCESS LEVELS WITHIN LIMITS 
 VAL2     LDD    RE          PROCESS *RMS* ERROR
*         UJN    VAL5        (PROCESS *CMS* ERROR)
          SHN    21-10
          PJN    VAL6        IF NON-RECOVERABLE DEVICE
 VAL3     LDN    STSV        SET ERROR STATUS 
          STD    EC 
 VAL4     UJN    VALX        RETURN 
  
 VAL5     LDD    FN          PROCESS *CMS* ERROR
          SHN    21-6 
          PJN    VAL1        IF DEVICE ALREADY AVAILABLE
 VALB     RJM    PUE         PROCESS UNSECURED ERROR
*         UJN    VAL3        (SECURED SYSTEM) 
          NJN    VAL3        IF OPERATOR ENTERED *PAUSE*
          UJN    VAL4        RETURN 
  
 VAL6     LDC    VALA        SET EST ORDINAL IN MESSAGE 
          RJM    SOM
          LJM    /RMS/HNG    HANG PP
  
  
 VALA     DATA   C*EQXXX, DEVICE ACCESS ERROR.* 
 WMT      SPACE  4,20 
**        WMT - ENTER MST TO CM TABLE.
* 
*         ENTRY  (A) = STATUS OF LABEL READ ATTEMPT.
*                (CA) = ADDRESS FOR MST.
*                (T5) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
*                (FS - FS+4) = STLL WORD FROM MST.
*                (T7) = SECTOR READ.
*                (T6) = LABEL TRACK READ. 
*                (SN) = LABEL SECTOR NUMBER.
* 
*         EXIT   (CA) = ADDRESS FOR MST OF NEXT UNIT. 
*                TO */RMS/HNG* IF LINK DEVICE SIZE ERROR. 
* 
*         USES   T1, CA, EC, CM - CM+4, FS - FS+4.
* 
*         CALLS  GAS, LRA, SES, VAL.
  
  
 WMT      SUBR               ENTRY/EXIT 
          STD    EC          SAVE STATUS
          ZJN    WMT3        IF NO ERROR
  
*         ERROR ENCOUNTERED ON LABEL READ.
  
 WMTA     LMN    STNR 
*         PSN                (CMS CALL) 
          NJN    WMT1        IF NOT *NOT READY* 
          STD    EC          CLEAR ERROR CODE (RMS ONLY)
 WMT1     LDC    MSTL*5 
          STD    T1 
 WMT2     LDN    0           CLEAR MST AREA 
          STM    N4SS-1,T1
          SOD    T1 
          NJN    WMT2 
          AOD    RE          SET NO LABEL PRESENT 
          LDD    FN+4 
          SHN    3
          ADN    PFGL        RETAIN PF DESCRIPTION
          CRM    N4SS+5*PFGL,TW 
          LDD    EC          SET ERROR STATUS IN MST IMAGE
          STM    N4SS+5*STLL+1
          NJN    WMT2.1      IF ERROR STATUS PRESENT
          LDD    FS+1 
          LPN    77          PRESERVE EXISTING ERROR STATUS 
          STD    EC 
 WMT2.1   LJM    WMT4        CONTINUE 
  
*         LABEL READ SUCCESSFUL.
  
 WMT3     RJM    VAL         VERIFY ACCESS LEVELS 
          NJN    WMT1        IF LEVELS NOT WITHIN LIMITS
          LDD    T6          SET LABEL TRACK
          STM    N4SS+5*ALGL+1
          LDD    T7          SET SECTOR READ
          STM    N4SS+5*DILL
          LDM    N4SS+5*ACGL+4  CLEAR PF UTILITY INTERLOCK
          LPC    MGLAP
          STM    N4SS+5*ACGL+4
          LDM    N4SS+STLL*5+1  CLEAR ERROR STATUS
          SCN    77 
          STM    N4SS+STLL*5+1
          RJM    GAS         SET ALTERNATE LABEL SECTOR 
          STM    N4SS+5*DULL
 WMTC     UJN    WMT4        WRITE LABEL DATA TO CM 
*         PSN                (IF LINK DEVICE RECOVERY)
  
*         VERIFY TRT LENGTH FOR LINK DEVICE.
  
          LDD    FN+4        GET TRT LENGTH DEFINED AT DEADSTART
          SHN    3
          ADK    TDGL 
          CRD    CM 
          LDD    CM+2 
          LMM    N4SS+TDGL*5+2  TRT LENGTH RECOVERED FROM DEVICE
          ZJN    WMT4        IF CORRECT TRT LENGTH
          LDC    WMTD        *LINK DEVICE SIZE ERROR.*
          LJM    /RMS/HNG    HANG PP
  
*         ENTER LABEL DATA INTO CM TABLE. 
  
 WMT4     LDN    MSTL        SET MST LENGTH 
          STD    T1 
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    CA 
          CWM    N4SS,T1
          LDN    MSTL        ADVANCE TABLE ADDRESS
          RAD    CA 
  
*         ENTER APPROPRIATE STATUS TO MST.
  
          LDD    SN 
          NJN    WMT6        IF NOT FIRST UNIT OF EQUIPMENT 
          LDD    FN 
          SHN    21-6 
          PJN    WMT5        IF DEVICE AVAILABLE
          LDD    FN+4        STORE PF DESCRIPTION 
          SHN    3
          ADN    PFGL 
          CWM    N4SS+5*PFGL,TW 
          ERRNZ  PUGL-PFGL-1 ADJUST IF *PFGL* POSITION CHANGES
 WMTB     UJN    WMT5        CHECK PREVIOUS ERROR STATUS
*         PSN                (RECOVERING MMF LINK DEVICE) 
          SBN    PFGL+2-ALGL STORE LINK DEVICE ALLOCATION WORD
          CWM    N4SS+5*ALGL,ON 
          LDM    N4SS+5*ALGL+4  SET DAT TRACK 
          STM    ADEA 
 WMT5     LDD    FS+1 
          LPN    77          CHECK CURRENT ERROR STATUS 
          SBN    MNEC 
          PJN    WMT6        IF STATUS NOT TO BE CLEARED
          LDD    EC 
          RJM    SES         SET/CLEAR ERROR STATUS 
 WMT6     LJM    WMTX        RETURN 
  
  
 WMTD     DATA   C*LINK DEVICE SIZE ERROR.* 
 WOC      SPACE  4,10 
**        WOC - WAIT ON OPERATOR COMMAND. 
* 
*         ENTRY  (A) = ADDRESS OF PROMPT MESSAGE. 
* 
*         EXIT   (A) = 0 IF OPERATOR ENTERED *GO*.
*                    = 1 IF OPERATOR ENTERED *PAUSE*. 
* 
*         USES   T8, CM - CM+4. 
* 
*         MACROS PAUSE. 
  
  
 WOC      SUBR               ENTRY/EXIT 
          STM    WOCC 
 WOCA     LDC    **+SNSW     ADDRESS OF *SNSW* IN CP (*RMS* - SYSTEM CP)
          CRD    CM          GET SENSE SWITCH WORD
          STD    T8 
          LDN    3           SET PAUSE FLAGS
          STD    CM+3 
          LDD    T8          STORE PAUSE FLAGS
          CWD    CM 
          ADN    MS2W-SNSW   STORE CONTROL POINT MESSAGE
          CWM    *,TR 
 WOCC     EQU    *-1
 WOC1     LCN    0           PAUSE FOR OPERATOR ACTION
          SBN    1
          NJN    *-1         IF DELAY NOT COMPLETE
          PAUSE  NE 
          LDD    T8          READ SENSE SWITCH WORD 
          CRD    CM 
          LDD    CM+3        CHECK FOR OPERATOR INPUT 
          LPN    2
          NJN    WOC1        IF OPERATOR HAS NOT RESPONDED
          LMD    CM+3 
          UJP    WOCX        RETURN 
  
  
          ERRNG  BFMS-*      OVERFLOW INTO BUFFER 
          TITLE  PRESET.
 PRS      SPACE  4,10 
**        PRS - PRESET. 
  
  
 PRS      BSS    0           ENTRY
          LDD    RS          CHECK RECOVERY STATUS
          LPN    FLMK 
          LMN    FLCM 
          NJN    PRS1        IF NOT LEVEL 3 RECOVERY
          ISTORE RDLC,(UJN RDL15)  BYPASS *RLM* CALL
 PRS1     LDM    DLYA        CHECK PP SPEED 
          LPN    14 
          RAM    SFTA 
          LDC    MMFL        READ MMF STATUS WORD 
          CRD    CM 
          LDD    CM          SAVE MACHINE ID
          STM    CDIA 
          STM    /ISD/RLSF+5
          LDD    CM+4 
          ZJP    PRS4        IF STAND ALONE SYSTEM
          LDK    STDI+T1     ACTIVATE *EMF* SUBROUTINE
          STM    EMFA 
          LDM    LDMP        READ LINK DEVICE ALLOCATION WORD 
          SHN    3
          ADN    ALGL 
          CRD    CM 
          LDD    CM+4        SET DAT TRACK
          STM    ADEA 
          RJM    CEI         INITIALIZE *CEA* SUBROUTINE
 PRS4     LDD    RS 
          ZJN    PRS5        IF NOT RECOVERY DEADSTART
          LCN    1RW-1RT
          RAM    /ISD/RLSF+7  MODIFY ERROR MESSAGE
          ISTORE /ISD/RLSB,(NJN /ISD/RLS17)  MODIFY DIT CHECK 
 PRS5     LDD    IR 
          LMC    2RCM 
          ZJN    PRS6        IF *CMS* CALL
          ISTORE RLSA,(UJN RLS11) SET RECOVERY LEVEL CHECK
          LDN    NCPL 
          CRD    CM 
          AOD    CM+1        GET SYSTEM CPA ADDRESS 
          SHN    7
          LJM    PRS8        SET *SNSW* ADDRESS 
  
 PRS6     LDC    UJNI+2      DISABLE CALLS TO DEADSTART ROUTINES
          STM    MRLB 
          STM    RDLA 
          STM    /ISD/RLSD
          ISTORE VAL2,(UJN VAL5)
          ISTORE CMEA,(UJN CME8)
          ISTORE CMEB,(UJN CME8)
          LDC    RLM6        SET ERROR RETURN FROM *RLM*
          STM    RLMA 
          LDN    PSNI 
          STM    WMTA 
          LDD    CP 
          ADN    MS2W 
          STM    /ISD/RLSC
          LDM    /CMS/DPPB
          SHN    -6 
          LMN    UJNI/100 
          NJN    PRS7        IF DEADSTART SEQUENCING
          ISTORE RDLC,(UJN RDL15)  BYPASS *RLM* CALL
 PRS7     LDD    CP          GET CPA ADDRESS
 PRS8     ADN    SNSW        SET *SNSW* ADDRESS 
          STM    WOCA+1 
          LDN    SSML        DETERMINE IF SECURED SYSTEM
          CRD    CM 
          LDD    CM 
          LPN    77 
          ZJN    PRS9        IF UNSECURED SYSTEM
          ISTORE VALB,(UJN VAL3)  DISABLE CALL TO *PUE* 
 PRS9     LJM    RDBX        EXIT 
 EMF      SPACE  4,10 
**        EMF - ENABLE MMF RECOVERY.
* 
*         ENTRY  (A) = ADDRESS OF INSTRUCTION LIST. 
* 
*         EXIT   (A) = 0. 
* 
*         USES   T1, T2.
  
  
 EMF1     STD    T2          SET INSTRUCTION ADDRESS
          LDN    PSNI        REPLACE INSTRUCTION WITH *PSN* 
          STI    T2 
          AOD    T1          ADVANCE LIST ADDRESS 
 EMF2     LDI    T1 
          NJN    EMF1        LOOP TO END OF LIST
 EMF3     LDN    0
  
 EMF      SUBR               ENTRY/EXIT 
 EMFA     UJN    EMF3        EXIT (STAND-ALONE SYSTEM)
*         STD    T1          SET LIST ADDRESS (MULTI-MAINFRAME SYSTEM)
          STM    MMFP        SET MMF PRESENT
          UJN    EMF2        ENTER LOOP 
          SPACE  4,10 
  
 CEI      HERE
          SPACE  4,10 
*         LIST OF *CMS* INSTRUCTIONS MODIFIED FOR MMF SYSTEM. 
  
          QUAL   CMS
 LCMS     BSS    0
 LCMS     HERE
          ERRZR  LCMS-*      TABLE EMPTY - REMOVE PRESET CODE 
          CON    0           TERMINATE LIST 
  
*         LIST OF *RMS* INSTRUCTIONS MODIFIED FOR MMF RECOVERY. 
  
          QUAL   RMS
 LRMS     BSS    0
 LRMS     HERE
          ERRZR  LRMS-*      TABLE EMPTY - REMOVE PRESET CODE 
          CON    0           TERMINATE LIST 
  
          QUAL
          SPACE  4,10 
          OVERFLOW  ORDB,EPFW  CHECK FOR OVERFLOW 
          TTL    MSM/4DC - VALIDATE PF SYSTEM.
          TITLE 
          IDENT  4DC,/RDC/RDCX
*COMMENT  MSM - VALIDATE PF SYSTEM. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***              *VPF* VALIDATES THAT THE PERMANENT FILE SYSTEM 
*         CONTAINS NO DUPLICATE PACKNAMES, DEVICE NUMBERS OR USER 
*         MASKS WITHIN A FAMILY.  THE MST TABLES FOR ALL ACTIVE 
*         DEVICES ARE VERIFIED TO BE UNIQUE.
          SPACE  4
***       DAYFILE MESSAGES. 
* 
*         *EQXXX EQYYY CONFLICTING DN.* = TWO EST ORDINALS HAVE THE 
*         SAME FAMILY NAME AND DEVICE NUMBER, AND ONE DEVICE IS A 
*         SYSTEM DEVICE.  ACTION - REMOVE ONE OF THE DEVICES. 
* 
*         *EQXXX EQYYY CONFLICTING PN.* = TWO AUXILIARY DEVICES HAVE
*         THE SAME PACKNAME.  ACTION - REMOVE ONE OF THE DEVICES. 
* 
*         *EQXXX EQYYY CONFLICTING UM.* = TWO EST ORDINALS IN THE SAME
*         FAMILY HAVE ONE OR MORE DUPLICATED BITS IN THE *DM* MASK, AND 
*         ONE DEVICE IS A SYSTEM DEVICE.  ACTION - REMOVE ONE OF THE
*         DEVICES.
          SPACE  4
**        ENTRY CONDITIONS. 
* 
*         (RS) = RECOVERY STATUS. 
          TITLE  MAIN ROUTINE.
          SPACE  4,10 
          QUAL   RDC
          ORG    ORDC 
  
 RDC      SUBR               ENTRY/EXIT 
          LDD    IR 
          LMC    2RRM 
          ZJN    RDC3        IF *RMS* CALL
  
*         VERIFY RUNNING SYSTEM.
  
 RDC1     RJM    VPF         VERIFY PF SYSTEM 
          ZJN    RDCX        IF NO ERRORS 
          LDD    EF 
          NJN    RDC1        IF EITHER DEVICE SET UNAVAILABLE 
          LDD    P1 
          STD    T5 
          LDD    EC          SET ERROR STATUS ON FIRST DEVICE 
          RJM    SES
          LDD    P2 
          STD    T5 
          LDD    EC          SET ERROR STATUS FOR SECOND DEVICE 
          RJM    SES
 RDC2     UJP    RDCX        RETURN 
  
*         VERIFY DEADSTART SYSTEM.
  
 RDC3     LDD    RS 
          NJN    RDC4        IF RECOVERY DEADSTART
          RJM    SDF         SET DEFAULT FAMILY NAME
          LDN    0
          RJM    GFO         ENTER DEFAULT FAMILY IN FOT
 RDC4     LDD    RC 
          ZJN    RDC6        IF NO EQUIPMENT RECOVERED
 RDC5     RJM    VPF         VERIFY PF SYSTEM FOR CONFLICTS 
          ZJN    RDC6        IF NO CONFLICTS
          MJN    RDC5        IF ERROR ON NON-SYSTEM DEVICE
          LJM    /RMS/HNG    DISPLAY ERROR AND HANG 
  
*         RESET DEFAULT FAMILY EQUIPMENT TO FAMILY MASTER EQUIPMENT.
  
 RDC6     RJM    SDF         SET DEFAULT FAMILY NAME
          RJM    SFE         SET FAMILY EQUIPMENT 
          NJN    RDC2        IF MASTER EQUIPMENT NOT FOUND
          LDD    T2 
          STD    CN+3 
          LDC    PFNL        SET FAMILY EST ORDINAL IN *PFNL* 
          CWD    CN 
          UJN    RDC2        RETURN 
          TITLE  PRIMARY SUBROUTINES. 
 SDF      SPACE  4,10 
**        SDF - SET DEFAULT FAMILY NAME.
* 
*         EXIT   (CN - CN+4) = *PFNL* WORD. 
*                (FN - FN+4) = *PFGL* WORD FROM DEFAULT FAMILY MST. 
* 
*         USES   CN - CN+4, FN - FN+4.
* 
*         MACROS SFA. 
  
  
 SDF      SUBR               ENTRY/EXIT 
          LDC    PFNL 
          CRD    CN 
          SFA    EST,CN+3    READ FAMILY EST ENTRY
          ADK    EQDE 
          CRD    FN 
          LDD    FN+4        READ FAMILY NAME 
          SHN    3
          ADN    PFGL 
          CRD    FN 
          UJN    SDFX        RETURN 
 VPF      SPACE  4,10 
**        VPF - VERIFY PF SYSTEM FOR CONFLICTS IN - 
*                DEVICE NUMBERS.
*                DEVICE MASKS.
*                PACKNAMES. 
* 
*         USES   EF, EQ, T2, T5, T7, CM - CM+4, FN - FN+7, FS - FS+4. 
* 
*         CALLS  CFN, CFR, ERR, GNE, LRA. 
* 
*         MACROS SFA. 
  
  
 VPF      SUBR               ENTRY/EXIT 
          LDN    0           CLEAR FAMILY COUNT 
          STD    EF 
          LDN    NOPE-1      INITIALIZE EST ORDINAL FOR SEARCH
          STD    EQ 
 VPF1     AOD    EQ          READ EST ENTRY 
          STD    T5 
          LMD    LO 
          ZJN    VPFX        IF END OF EST
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    EQ 
          CRD    RD 
          SFA    EST,EQ      GET EST ENTRY
          ADK    EQDE 
          CRD    FN 
          LDD    RE 
          ZJN    VPF1        IF DEVICE NOT BEING RECOVERED
          LPC    300
          LMD    HN 
          ZJN    VPF1        IF UNAVAILABLE DEVICE
          LDD    FN+4 
          SHN    3
          ADN    PFGL        READ FAMILY/PACK NAME
          CRD    FN 
          ADN    STLL-PFGL   GET DEVICE STATUS
          CRD    T7 
          SBN    STLL-PUGL   READ DEVICE MASK 
          CRD    CM 
          ADN    MDGL-PUGL   CHECK AUXILIARY STATUS 
          CRD    FS 
          LDD    T7          CHECK DEVICE STATUS
          LPC    MLIAL+MLIHD+MLIFD+MLUNL
          NJN    VPF1        IF UNLOAD/INITIALIZE PENDING 
          LDD    FS 
          SHN    -12
          LPN    1
          STD    T2 
 VPF2     RJM    GNE         GET NEXT ENTRY 
          ZJN    VPF7        IF NOT FOUND 
          RJM    CFN         COMPARE DEVICE NAMES 
          NJN    VPF2        IF NOT SAME FAMILY 
          LDD    T2 
          LMN    1
          ZJN    VPF3        IF AUXILIARY DEVICE
          LDD    T7 
          LMN    1
          ZJN    VPF3        IF NEW DEVICE IS AN AUXILIARY DEVICE 
  
*         CHECK DEVICE NUMBERS. 
  
          LDD    FS+3 
          LMD    FN+3 
          ZJN    VPF4        IF SAME DEVICE NUMBERS 
  
*         CHECK USER MASKS. 
  
          LDD    CN+4 
          STM    VPFA 
          LDD    CM+4 
          LPC    *
 VPFA     EQU    *-1
          LPC    377
          ZJN    VPF2        IF NOT DUPLICATE MASKS 
          LDN    STUM-STPN   SET USER MASK ERROR
 VPF3     ADN    STPN-STDN   SET PACKNAME ERROR 
 VPF4     ADN    STDN        SET DEVICE NUMBER ERROR
          LJM    ERR
  
 VPF7     LDD    T2 
          NJN    VPF8        IF AUXILIARY DEVICE
          RJM    CFR         CHECK FAMILY DEVICE RECOVERED
 VPF8     LJM    VPF1        LOOP FOR NEXT EQUIPMENT
          TITLE  SUBROUTINES. 
 CFN      SPACE  4
**        CFN - COMPARE FAMILY/PACK NAMES.
* 
*         ENTRY  (FN - FN+4) = FAMILY/PACK NAME1. 
*                (FS - FS+4) = FAMILY/PACK NAME2. 
* 
*         EXIT   (A) = 0 IF NAMES EQUAL.
  
  
 CFN      SUBR               ENTRY/EXIT 
          LDD    FN 
          LMD    FS 
          NJN    CFNX        IF NOT EQUAL 
          LDD    FN+1 
          LMD    FS+1 
          NJN    CFNX        IF NOT EQUAL 
          LDD    FN+2 
          LMD    FS+2 
          NJN    CFNX        IF NOT EQUAL 
          LDD    FN+3 
          LMD    FS+3 
          SCN    77 
          UJN    CFNX        EXIT 
 CFR      SPACE  4,10 
**        CFR - CHECK FAMILY DEVICE RECOVERED.
* 
*         ENTRY  (EQ) = EST ORDINAL.
* 
*         ERROR  TO *ERR* IF FOT FULL.
*                TO *RDCX* IF ERROR FLAG SET. 
  
  
 CFR      SUBR               ENTRY/EXIT 
          LDD    RS 
          NJN    CFRX        IF RECOVERY DEADSTART
          LDD    RE 
          SHN    21-7 
          PJN    CFRX        IF DEVICE NOT RECOVERED
          LDN    0           SEARCH FOR/CREATE FOT ENTRY
          RJM    GFO
          SCN    1
          ZJN    CFRX        IF ENTRY FOUND/CREATED 
          LPC    400000 
          LMN    STFF 
          PJN    ERR         IF FOT FULL
          LJM    RDCX        EXIT 
 ERR      SPACE  4
**        ERR - PROCESS ERROR CONDITIONS. 
* 
*         ENTRY  (A) = ERROR STATUS.
*                (EQ) = EST ORDINAL OF FIRST DEVICE.
*                (T5) = EST ORDINAL OF SECOND DEVICE. 
* 
*         USES   FN - FN+4, P1, P2, T1, T5, EC, EQ. 
* 
*         CALLS  C2D, IES, LRA. 
* 
*         MACROS SFA. 
  
  
 ERR      STD    EC          SAVE ERROR CODE
          LDD    T5          SAVE EST ORDINAL OF SECOND DEVICE
          STD    P2 
          LDD    EQ          SAVE EST ORDINAL OF FIRST DEVICE 
          STD    P1 
          STD    T5          PROCESS FIRST EST ORDINAL
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    EQ 
          CRD    RD 
          SFA    EST,T5 
          ADK    EQDE 
          CRD    FN 
          LDD    RE 
          SHN    -6 
          LPN    62 
          LMN    62 
          ZJN    ERR3        IF RECOVERED SYSTEM DEVICE 
          SCN    20 
          NJN    ERR1        IF EQUIPMENT NOT RECOVERED 
          AOD    EF          FLAG *IES* CALL
          RJM    IES         INITIALIZE EQUIPMENT STATUS
 ERR1     LDD    P2          PROCESS SECOND EQUIPMENT 
          STD    EQ 
          STD    T5 
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    EQ 
          CRD    RD 
          SFA    EST,T5      READ EST ENTRY 
          ADK    EQDE 
          CRD    FN 
          LDD    RE 
          SHN    -6 
          LPN    62 
          LMN    62 
          ZJN    ERR3        IF RECOVERED SYSTEM DEVICE 
          SCN    20 
          NJN    ERR2        IF EQUIPMENT NOT RECOVERED 
          AOD    EF          FLAG *IES* CALL
          RJM    IES         INITIALIZE EQUIPMENT STATUS
 ERR2     LCN    0           SET NON SYSTEM DEVICE ERROR
          LJM    VPFX 
  
*         PROCESS ERROR ON SYSTEM DEVICE. 
  
 ERR3     SFA    EST,P1 
          ADK    EQDE 
          CRD    FN 
          LDD    FN+3        SET DEVICE TYPE
          STM    ERRA 
          LDD    P1          CONVERT UPPER TWO DIGITS OF FIRST DEVICE 
          SHN    -3 
          RJM    C2D
          STM    ERRA+1 
          LDD    P1          CONVERT LOWER DIGIT OF FIRST DEVICE
          LPN    7
          SHN    6
          ADC    2R0
          STM    ERRA+2 
          SFA    EST,P2 
          ADK    EQDE 
          CRD    FN 
          LDD    FN+3        SET DEVICE TYPE
          STM    ERRA+3 
          LDD    P2          CONVERT UPPER TWO DIGITS OF SECOND DEVICE
          SHN    -3 
          RJM    C2D
          STM    ERRA+4 
          LDD    P2          CONVERT LOWER DIGIT OF SECOND DEVICE 
          LPN    7
          SHN    6
          ADC    2R0
          STM    ERRA+5 
          LDD    EC          SET PROPER ERROR 
          SBN    STFF 
          ZJN    ERR4        IF FOT FULL
          ADN    STFF-STDN
          STD    T1 
          LDM    ERRC,T1
          STM    ERRB 
          LCN    ERRD-ERRA
 ERR4     ADC    ERRD 
          LJM    VPFX 
  
  
 ERRA     DATA   H*EQXXX EQYYY CONFLICTING *
 ERRB     DATA   C*ET. *
 ERRC     VFD    12/0LDN
          VFD    12/0LPN
          VFD    12/0LUM
 ERRD     DATA   C*FOT FULL.* 
 GNE      SPACE  4
**        GNE - GET NEXT ENTRY. 
* 
*         ENTRY  (T5) = ADDRESS OF LAST ENTRY CHECKED.
* 
*         EXIT   (FS - FS+4) = PF DESCRIPTION WORD. 
*                (CN+4) = DEVICE MASK.
*                (A) = 0 IF ENTRY NOT FOUND.
*                (T7) = 1, IF AUXILIARY DEVICE. 
* 
*         USES   T1, T5, T7, CM - CM+3, FS - FS+4.
* 
*         CALLS  LRA. 
  
  
 GNE      SUBR               ENTRY/EXIT 
 GNE1     AOD    T5 
          LMD    LO 
          ZJN    GNEX        IF END OF MASS STORAGE DEVICES 
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    T5 
          CRD    T7 
          SFA    EST,T5      READ NEXT EST ENTRY
          ADK    EQDE 
          CRD    FS          READ NEXT ENTRY
*         LDD    RE          CHECK DEVICE CHARACTERISTICS 
          LDD    CM+2 
          SHN    21-13
          PJN    GNE1        IF NOT MASS STORAGE
          SHN    21-6-21+13 
          PJN    GNE2        IF AVAILABLE 
          SHN    21-7-21+6+22 
          PJN    GNE1        IF DEVICE NOT BEING RECOVERED
 GNE2     LDD    FS+4        READ MST 
          STD    T1          SAVE MST ADDRESS 
          SHN    3
          ADN    MDGL 
          CRD    FS 
          ADN    STLL-MDGL   GET DEVICE STATUS
          CRD    T7 
          LDD    T7          CHECK INITIALIZE REQUESTED 
          LPC    MLIAL+MLIHD+MLIFD
          NJN    GNE1        IF FULL INITIALIZE PENDING 
          LDD    FS 
          SHN    -12
          LPN    1
          STD    T7 
          LDD    T1          GET FAMILY NAME
          SHN    3
          ADN    PFGL 
          CRD    FS 
          ADN    PUGL-PFGL   READ DEVICE MASK 
          CRD    CN 
          LJM    GNEX        RETURN 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPSFE 
 GFO$     EQU    0           DEFINE FOT ACCESS ROUTINE
*CALL     COMPUFT 
          SPACE  4,10 
          OVERFLOW  ORDC,EPFW  CHECK FOR OVERFLOW 
          TTL    MSM/4DD - DEVICE VERIFICATION ROUTINES.
          TITLE 
          IDENT  4DD,/RDD/RDDX
*COMMENT  MSM - DEVICE VERIFICATION ROUTINES. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
  
  
***              *4DD* CONTAINS LABEL VERIFICATION ROUTINES.
  
  
          QUAL   RDD
          ORG    ORDD 
  
 RDD      SUBR               ENTRY/EXIT 
          LJM    POV         PROCESS OVERLAY PRESET 
          TITLE  MMF ROUTINES.
 ABD      SPACE  4,15 
**        ABD - ALLOCATE BAT FOR DEVICE.
* 
*         ENTRY  (FN - FN+4) = EST ENTRY. 
*                (BAEI+4) = NEXT AVAILABLE BAT TRACK. 
* 
*         EXIT   (A) = 0 IF BAT ALLOCATED, OR IF BAT NOT REQUIRED.
*                (A) = MESSAGE ADDRESS, IF NO BAT TRACK AVAILABLE.
* 
*         USES   T6, T7, CM - CM+4, CN - CN+4.
* 
*         CALLS  CEA, SNT.
* 
*         MACROS MONITOR. 
  
  
 ABD1     LDC    ABDA        EXIT WITH (A) = MESSAGE ADDRESS
  
  
 ABD      SUBR               ENTRY/EXIT 
          LDD    FN 
          LPN    40 
          ZJN    ABDX        IF NOT SHARED BUFFERED DEVICE
          LDM    BAEI+4      NEXT AVAILABLE BAT TRACK 
          ZJN    ABD1        IF NO TRACK AVAILABLE
          STD    T6 
          RJM    SNT         SET NEXT TRACK 
          STM    BAEI+4 
  
*         SET EXTENDED MEMORY ADDRESS OF BAT INTO DAT.
  
          LDN    0
          STD    T7 
          RJM    CEA         GET ADDRESS OF BAT TRACK 
          LDD    CM+3        SET EXTENDED MEMORY ADDRESS OF BAT 
          STM    DATB+5 
          LDD    CM+4 
          STM    DATB+6 
  
*         CLEAR BAT.
  
          LDN    ZERL 
          CRD    CM 
          LDD    T6          SET TRACK TO CLEAR 
          STD    CM+4 
          LDN    BATL/100    SET NUMBER OF SECTORS TO CLEAR 
          STD    CM+3 
          LDN    CEMS        CLEAR EXTENDED MEMORY TRACK
          STD    CM+1 
          MONITOR  MTEM 
          UJP    ABDX        RETURN 
  
  
 ABDA     DATA   C* END OF BAT TRACK CHAIN.*
 CDE      SPACE  4,15 
**        CDE - CHECK DAT ENTRY.
* 
*         ENTRY  (DI) = DAT INDEX FROM MST. 
*                (QS) = INDEX INTO DEVICE ACCESS TABLE. 
*                (T2) = ADDRESS OF DATB+11. 
*                (FN - FN+4) = EST ENTRY. 
*                (DATB) = DAT ENTRY.
* 
*         EXIT   (A) = 0 IF NO DAT CONFLICTS. 
*                (A) = ADDRESS OF ERROR MESSAGE, IF DAT CONFLICT. 
*                (T6) = 0, IF DAT ENTRY FOR NON-SHARED DEVICE.
*                (T6) = EXTENDED MEMORY TRACK, IF SHARED DEVICE ENTRY.
* 
*         USES   T6.
  
  
 CDE2     LDI    T2          CHECK MACHINE ACCESS BYTE
          SHN    21-13
          MJN    CDE3        IF RECOVERY IN PROGRESS
          LDD    DI          CHECK DAT INDEX
          LMD    QS 
          ZJN    CDEX        IF VALID INDEX 
          LMD    QS 
          ZJN    CDEX        IF NO DAT INDEX IN MST 
 CDE3     LDC    CSDC+3 
  
 CDE      SUBR               ENTRY/EXIT 
          LDM    DATB+4      SET ECS POINTER FOR SHARED DEVICE
          STD    T6 
          SHN    11-13
          LMD    FN          MAP TRACK BIT WITH SHARE FLAG
          SHN    21-11
          PJN    CDE2        IF COMPARE 
          LDD    T6 
          ZJN    CDE1        IF DAT ENTRY FOR NON-SHARED DEVICE 
          LDN    CSDC-CSDB
 CDE1     ADC    CSDB        SET ADDRESS OF ERROR MESSAGE 
          UJN    CDEX        RETURN 
 CSD      SPACE  4,20 
**        CSD - CHECK SHARED DEVICE STATUS. 
* 
*         ENTRY  (EQ) = DEVICE EST ORDINAL. 
*                (RS) = RECOVERY STATUS.
*                (CN - CN+4) = PF DESCRIPTOR WORD (PFGL). 
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) = 0 IF NO DAT CONFLICT.
*                (A) = ADDRESS OF ERROR MESSAGE, IF DAT CONFLICT. 
*                (T2) = 0 IF DEVICE NOT DESCRIBED IN DAT. 
* 
*         USES   QS, RE, T7, CM - CM+4. 
* 
*         CALLS  SDT, CDE, CEA. 
* 
*         MACROS MONITOR. 
  
  
 CSD6     LDD    MA          MOVE ENTRY TO DAT BUFFER 
          CWD    CN 
          CRM    DATB,ON
          LDD    DI          CHECK DAT INDEX
          ZJN    CSD7        IF NO DAT ENTRY FOR DEVICE 
          STD    QS 
          UJN    CSD8        DAT SLOT ASSIGNED
  
 CSD7     LDD    FN 
          SHN    2-11 
          LPN    4           MAP SHARE FLAG AS ECS TRACK REQUIRED 
          RAD    RE 
 CSD8     LDN    0           CLEAR MACHINE ACCESS BYTE
 CSD9     STM    DATB+11
  
 CSD      SUBR               ENTRY/EXIT 
          RJM    SDT         SEARCH DEVICE ACCESS TABLE 
          STD    T2 
          ZJN    CSD6        IF NO ENTRY FOR NAMED DEVICE 
          RJM    CDE         CHECK DAT ENTRY
          NJN    CSDX        IF DAT CONFLICT/ERROR
          STD    T7 
          LDD    T6 
          NJN    CSD1        IF SHARED DEVICE 
          LDI    T2 
          LPC    -0 
          MMTE   *-1
          ZJN    CSDX        IF ACCESS BY THIS MACHINE ONLY 
          LDC    CSDB 
          UJN    CSDX        RETURN 
  
 CSD1     LDI    T2          CHECK MACHINES ACCESSING DEVICE
          ZJN    CSD9        IF NO MACHINE ACCESS 
          LPC    -0 
          MMTE   *-1
          ADD    RS 
          ZJN    CSD9        IF ACCESS BY THIS MACHINE ONLY 
          SBD    RS 
          LMI    T2 
          ZJN    CSD2        IF NOT ACCESSED BY THIS MACHINE
          LDN    10 
 CSD2     ADN    2           FLAG TRT RECOVERY FROM EXTENDED MEMORY 
          RAD    RE 
          RJM    CEA         CONVERT EXTENDED MEMORY ADDRESS
          LDD    AL          SET CM TABLE ADDRESS 
          ADK    TDGL 
          STD    CM+2 
          LDC    GLGL*100-100+40  SET WORD COUNT
          STD    CM+1 
          LDC    RECS*1000   SUBFUNCTION = READ ECS 
          RAD    CM+3 
          MONITOR  ECSM      ISSUE MONITOR REQUEST
          LDD    RA          READ DRIVER WORD FROM GLOBAL MST 
          SHN    6
          ADD    AL 
          ADN    MDGL 
          CRD    CM 
          LDD    DI 
          ZJN    CSD3        IF DNAP BY THIS MACHINE
          LMD    QS 
          NJN    CSD4        IF DAT CONFLICT
 CSD3     LDD    FN 
          SCN    77 
          SHN    14-10
          LMD    QS 
          SHN    -1          COMPARE REMOVABLE STATUS + DAT INDEX 
          LMD    CM 
          LPC    4377 
          ZJN    CSD5        IF NO CONFLICT 
 CSD4     LDC    CSDD 
 CSD5     LJM    CSDX        RETURN 
  
 CSDB     DATA   4HNON- 
 CSDC     DATA   C*SHARED DEVICE ACTIVE IN DAT.*
  
 CSDD     DATA   C*REMOVABLE DEVICE CONFLICT.*
 EBP      SPACE  4,10 
**        EBP - ENABLE BST/BAT PROCESSING FOR SHARED BUFFERED DEVICE. 
* 
*         ENTRY  (EQ) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
* 
*         USES   T5, T6, T7, CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 EBP      SUBR               ENTRY/EXIT 
          LDD    FN 
          SHN    21-11
          PJN    EBPX        IF NOT SHARED DEVICE 
          SHN    21-5-21+11 
          PJN    EBPX        IF NOT BUFFERED DEVICE 
  
*         FLUSH WRITE BUFFERS / DROP ALL BUFFERS. 
  
 EBP1     LDN    ZERL        CLEAR ASSEMBLY AREA
          CRD    CM 
          LDD    EQ          SET EST ORDINAL
          STD    CM+3 
          LDC    BMFW*100    FLUSH ALL WRITE BUFFERS
          STD    CM+4 
          MONITOR  BFMM 
          LDN    ZERL        CLEAR ASSEMBLY AREA
          CRD    CM 
          LDD    EQ          SET EST ORDINAL
          STD    CM+3 
          LDC    BMDD*100    DROP ALL BUFFERS ON DEVICE 
          STD    CM+4 
          MONITOR  BFMM 
          LDD    CM+4 
          ZJN    EBP2        IF COMPLETE
          DELAY  20B         DELAY TWO MILLISECONDS 
          PAUSE 
          UJP    EBP1        REISSUE REQUEST
  
*         CLEAR ACCESS PERMISSIONS IN *BAT*.
  
 EBP2     LDN    ZERL 
*         UJN    EBP3        (*CMS* CALL) 
 EBPA     EQU    *-1
          CRD    CM 
 EBPB     LDN    CBWS        CLEAR READ/WRITE PERMISSIONS IN *BAT*
*         LDN    CBRS        (LVL3 - CLEAR READ PERMISSIONS IN *BAT*) 
          STD    CM+1 
 EBPC     LDN    **          SET MACHINE INDEX
          STD    CM+2 
          LDD    EQ 
          STD    CM+4 
          MONITOR  MTEM 
  
*         ENABLE BST/BAT PROCESSING.
  
 EBP3     LDD    MA          WRITE REQUEST
          CWM    EBPD,ON
          LDD    FN+4 
          SHN    3
          STD    CM+4        SET MST ADDRESS
          SHN    -14
          STD    CM+3 
          LDN    1           SET WORD COUNT 
          STD    CM+1 
          MONITOR  UTEM 
          UJP    EBPX        RETURN 
  
  
 EBPD     VFD    6/BDLL,6/1,6/27,42/0 
 LDT      SPACE  4,15 
**        LDT - LOAD DEVICE ACCESS TABLE. 
* 
*         ENTRY  (EL) = EXTENDED MEMORY LABEL TRACK.
* 
*         EXIT   (QI) = CURRENT DAT INDEX.
*                (QT) = LAST MST/TRT TRACK ASSIGNED.
*                DEVICE ACCESS TABLE LOADED TO CM.
* 
*         USES   CA+1, CM - CM+4, CN - CN+4, T2 - T7. 
* 
*         CALLS  CEA. 
* 
*         MACROS MONITOR. 
  
  
 LDT1     LDD    HN          ADVANCE EXTENDED MEMORY ADDRESS
          RAD    CN+4 
          SHN    -14
          RAD    CN+3 
          LDD    HN          ADVANCE CM ADDRESS 
          RAD    CN+2 
          SHN    -14
          RAD    CN+1 
 LDT2     LDD    MA          MOVE REQUEST 
          CWD    CN 
          CRD    CM 
          MONITOR  ECSM      ISSUE REQUEST
          SOD    T5          DECREMENT BLOCK COUNT
          PJN    LDT1        IF NOT END OF DAT
  
 LDT      SUBR               ENTRY/EXIT 
  
*         RETRIEVE BAT POINTER WORD *BAET*, IF REQUIRED.
  
          LDM    ECLT        SET LABEL TRACK
          STD    T6 
          LDN    ETLT        SET ENVIRONMENT TABLE SECTOR 
          STD    T7 
 LDTA     RJM    CEA         GET ADDRESS OF ENVIRONMENT TABLE SECTOR
*         UJN    LDT0        (NO SHARED BUFFERED DEVICES CONFIGURED)
          LDN    BAET        ADJUST ADDRESS TO BAT POINTER
          RAD    CM+4 
          SHN    -14
          LMC    RECS*1000   SET SUBFUNCTION
          RAD    CM+3 
          LDD    MA          SET CM ADDRESS 
          STD    CM+2 
          LDN    0
          STD    CM+1 
          MONITOR  ECSM      ISSUE REQUEST
          LDD    MA          READ *BAET*
          CRM    BAEI,ON
  
*         RETRIEVE DAT POINTER WORD *DAET*. 
  
 LDT0     RJM    CEA         GET ADDRESS OF ENVIRONMENT TABLE SECTOR
          LDN    DAET        ADJUST ADDRESS TO DAT POINTER
          RAD    CM+4 
          SHN    -14
          LMC    RECS*1000   SET SUBFUNCTION
          RAD    CM+3 
          LDD    MA          SET CM ADDRESS 
          STD    CM+2 
          LDN    0
          STD    CM+1 
          MONITOR  ECSM      ISSUE REQUEST
*         LDN    0
          STD    T7 
          LDD    MA          READ *DAET*
          CRD    CM 
          LDD    CM          SET CURRENT DAT TRACK
          STD    QT 
          LDM    LDMP        GET DEVICE ALLOCATION WORD FROM MST
          SHN    3
          ADN    ALGL        DAT TRACK TO (T6)
          CRD    T6-4 
          LDD    CM+4        SET DAT INDEX
          STD    QI 
          SHN    -6          SET BLOCK COUNT
          STD    T5 
          RJM    CEA
          LDD    CM+4        MOVE ADDRESS TO REQUEST IMAGE
          STD    CN+4 
          LDD    CM+3 
          LMC    RECS*1000
          STD    CN+3 
          LDD    CA+1        SET CM ADDRESS 
          STD    CN+2 
          ADD    TH 
          STD    CA+1        ADVANCE ADDRESS FOR TRT RECOVERY 
          LDC    77S6+40     SET WORD COUNT FOR TRANSFER
          STD    CN+1 
          LJM    LDT2        ENTER LOOP 
 RDE      SPACE  4,15 
**        RDE - READ DAT ENTRY. 
* 
*         ENTRY  (EQ) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY FOR DEVICE.
* 
*         EXIT   (QS) = DAT INDEX.
*                (T6) = DAT TRACK.
*                (DATB) = DAT ENTRY.
* 
*         USES   QS, RE, TS, CM - CM+4. 
* 
*         CALLS  ADE. 
  
  
 RDE      SUBR               ENTRY/EXIT 
          LDD    FN+4        READ DRIVER WORD 
          SHN    3
          ADN    MDGL        DAT INDEX TO (CM)
          CRD    CM 
          LDD    CM          SET DAT ORDINAL FROM INDEX 
          LPC    377
          SHN    1
          STD    QS 
          LDN    RECS        SET READ SUBFUNCTION 
          RJM    ADE         ACCESS *DAT* ENTRY 
          LDD    MA          READ DAT ENTRY TO PP BUFFER
          CRM    DATB,TW
          LDM    DATB+4      SET MST/TRT TRACK IN TABLE 
          STD    TS 
          SHN    1-13        ADD DAP STATUS IF SHARED DEVICE
          LPN    2
          RAD    RE 
          LJM    RDEX        RETURN 
 SDT      SPACE  4,15 
**        SDT - SEARCH DEVICE ACCESS TABLE. 
* 
*         ENTRY  (FN - FN+4) = EST ENTRY. 
*                (CA+1) = CM ADDRESS (+1000) OF DAT.
*                (CN - CN+3) = DEVICE DESCRIPTION.
*                (QI) = CURRENT DAT INDEX.
* 
*         EXIT   (A) = 0 IF ENTRY NOT FOUND.
*                (A) = ADDRESS OF DATB+11 IF ENTRY FOUND. 
*                (QS) = INDEX INTO DEVICE ACCESS TABLE. 
*                (DI) = DAT INDEX.
* 
*         USES   T1, T2, DI, QS, CM - CM+4, CN+4. 
  
  
 SDT1     LDM    DATB+4 
          NJN    SDT2        IF SHARED DEVICE SLOT
          LDD    T2          SAVE INDEX OF HOLE 
          STD    QS 
 SDT2     LDD    DI 
          ZJN    SDT3        IF DNAP BY THIS MACHINE
          LMD    T2 
          NJN    SDT3        IF NOT AT DAT SLOT FOR DEVICE
          LDM    DATB+4      SET MST POINTER
          STD    CN+4 
 SDT3     LDN    2           ADVANCE INDEX
          RAD    T2 
          LMD    QI 
          ZJN    SDTX        IF END OF DAT ENTRIES
 SDT4     LDD    RA          READ NEXT ENTRY
          SBN    10 
          SHN    6
          ADD    CA+1 
          ADD    T2 
          CRM    DATB,TW
          LDM    DATB 
          ZJN    SDT1        IF POSSIBLE HOLE 
          LDN    CN 
          STD    T1 
  
*         COMPARE ENTRY FOR MATCHING FAMILY/PACK NAME + DEVICE NUMBER.
  
 SDT5     LDM    DATB-CN,T1 
          LMI    T1 
          NJN    SDT2        IF NO MATCH
          AOD    T1 
          LMN    CN+4 
          NJN    SDT5        IF NOT 4 BYTES 
          LDD    T2          SET INDEX TO MATCHING ENTRY
          STD    QS 
          LDC    DATB+11
  
 SDT      SUBR               ENTRY/EXIT 
          LDD    FN+4        READ MST FOR DAT INDEX 
          SHN    3
          ADN    MDGL 
          CRD    CM 
          LDD    CM 
          LPC    377         EXPAND DAT INDEX 
          SHN    1
          STD    DI 
          LDN    0           CLEAR SEARCH INDEX 
          STD    T2 
          STD    CN+4 
          STD    QS 
          LJM    SDT4        ENTER LOOP 
 SNT      SPACE  4,10 
**        SNT - SET NEXT TRACK IN EXTENDED MEMORY TRACK CHAIN.
* 
*         ENTRY  (A) = CURRENT TRACK. 
*                (LDMP) = EXTENDED MEMORY MST POINTER.
* 
*         EXIT   (A) = NEXT TRACK.
* 
*         USES   T0, T1, CM - CM+4. 
  
  
 SNT      SUBR               ENTRY/EXIT 
          SHN    21-1        REMOVE TRACK BIT 
          LMD    TH 
          STD    T0          SET WORD INDEX 
          SHN    1-21 
          STD    T1          SET BYTE INDEX 
          LDM    LDMP        GET FWA OF TRT 
          SHN    3
          ADN    TRLL 
          CRD    CM 
          LDD    CM+3        READ TRT WORD
          LPN    77 
          SHN    14 
          LMD    CM+4 
          ADD    T0 
          CRD    CM 
          LDM    CM,T1       EXTRACT NEXT TRACK 
          UJN    SNTX        RETURN 
 UDT      SPACE  4,15 
**        UDT - UPDATE DEVICE ACCESS TABLE. 
* 
*         ENTRY  (RS) = RECOVERY STATUS.
*                (EQ) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
*                DAT ENTRY IN (DATB). 
* 
*         EXIT   (A) = 0 IF MST/TRT TRACK AVAILABLE.
*                (A) = MESSAGE ADDRESS, IF ERROR. 
* 
*         USES   QI, QS, QT, TS, T6, T7, CM+3 - CM+7, CN - CN+4.
* 
*         CALLS  ABD, CEA, EBP, SNT, WDE. 
  
  
 UDT5     LDC    UDTA        EXIT WITH (A) = MESSAGE ADDRESS
  
 UDT      SUBR               ENTRY/EXIT 
          LDD    RS 
          ZJN    UDT1        IF LEVEL 0 DS/ON LINE RECOVERY 
          LDM    DATB+11     SET MACHINE ACCESS 
          LPC    -0 
          MMTE   *-1
          LMC    0
          MMTE   *-1
          STM    DATB+11
 UDT1     LDD    RE 
          LPN    2
          NJN    UDT3        IF DEVICE ACCESSED PREVIOUSLY
          LDD    QS 
          NJN    UDT2        IF EMPTY SLOT IN *DAT* 
          LDD    QI          SET INDEX OF ENTRY 
          STD    QS 
          ADN    2           ADVANCE INDEX
          STD    QI 
 UDT2     LDD    RE          CHECK MST/TRT TRACK REQUIRED 
          LPN    4
          ZJN    UDT3        IF NOT REQUIRED
          LDD    QT          ASSIGN MST/TRT TRACK 
          RJM    SNT         ADVANCE CURRENT TRACK
          ZJN    UDT5        IF END OF TRACK CHAIN
          STM    DATB+4      SET TRACK IN *DAT* ENTRY 
          STD    QT 
          RJM    ABD         ALLOCATE BAT FOR DEVICE, IF REQUIRED 
          NJP    UDTX        IF BAT TRACK NOT AVAILABLE 
 UDT3     RJM    WDE         WRITE DAT ENTRY TO ECS 
          LDC    4000        FLAG RECOVERY IN PROGRESS
          RAM    DATB+11
          LDD    RA          UPDATE CM COPY OF DAT
          SBN    10 
          SHN    6
          ADD    CA+1 
          ADD    QS 
          CWM    DATB,TW
  
*         UPDATE MST. 
  
          LDD    FN+4        READ DRIVER WORD 
          SHN    3
          ADN    MDGL 
          CRD    CN 
          LDN    ZERL 
          CRD    CM+3 
          LDM    DATB+4 
          STD    TS 
          STD    T6 
          LDD    RE 
          LPN    2
          ZJN    UDT4        IF DEVICE NOT ACCESSED PREVIOUSLY
          LDN    0
          STD    T7 
          RJM    CEA         CONVERT EXTENDED MEMORY ADDRESS
 UDT4     LDD    CN          SET *DAT* INDEX IN DRIVER WORD 
          LPC    6000 
          SHN    1
          LMD    QS 
          SHN    -1 
          STD    CN 
          LDD    FN+4        STORE MST INFORMATION
          SHN    3
          ADN    MDGL 
          CWD    CN 
          SBN    MDGL-SDGL
          CWD    CM+3 
          ADN    NVGL-SDGL   READ *NVGL*
          CRD    CN 
          LDM    DATB+5      SET BAT EM ADDRESS 
          STD    CN+1 
          LDM    DATB+6 
          STD    CN+2 
          LDD    FN+4        REWRITE *NVGL* 
          SHN    3
          ADN    NVGL 
          CWD    CN 
          RJM    EBP         ENABLE BST/BAT PROCESSING IF REQUIRED
          LDN    0
          LJM    UDTX        RETURN 
  
 UDTA     DATA   C* END OF DAT TRACK CHAIN.*
 WDE      SPACE  4,15 
**        WDE - WRITE DAT ENTRY TO EXTENDED MEMORY. 
* 
*         ENTRY  (QS) = DAT INDEX.
*                DAT ENTRY IN (DATB). 
* 
*         EXIT   (A) = 0. 
*                (T6) = DAT TRACK.
* 
*         USES   T6, T7, CM - CM+4. 
* 
*         CALLS  ADE. 
  
  
 WDE      SUBR               ENTRY/EXIT 
          LDD    MA          MOVE DAT ENTRY TO MESSAGE BUFFER 
          CWM    DATB,TW
          LDN    WECS        SET WRITE SUBFUNCTION
          RJM    ADE         ACCESS *DAT* ENTRY 
          UJN    WDEX        RETURN 
          SPACE  4,10 
 ORDH     EQU    *+5         LOAD ADDRESS FOR *4DH* 
          TITLE  VERIFY LABEL PARAMETERS. 
 CCE      SPACE  4,15 
**        CCE - CHECK CHAINED EQUIPMENT.
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) .LT. 0 IF FIRST EQUIPMENT IN CHAIN FOUND.
*                (EC) = *STCE* IF FIRST EQUIPMENT NOT FOUND.
* 
*         USES   T3, T6, CM - CM+6, CN - CN+4.
* 
*         CALLS  CEP, CLP, LRA. 
* 
*         MACROS SFA. 
  
  
 CCE1     RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    T6 
          CRD    RD 
          LDD    RE          CHECK EQUIPMENT STATUS 
          SHN    21-10
          PJN    CCE2        IF NOT REMOVABLE DEVICE
          LDD    T6 
          LMD    EQ 
          ZJN    CCE2        IF INITIAL EQUIPMENT 
          SFA    EST,T6      READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          RJM    CEP         COMPARE EQUIPMENT PARAMETERS 
          NJN    CCE2        IF NO MATCH
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    AL 
          ADN    PFGL 
          CRD    CM+2 
          ADN    PUGL-PFGL   GET USER NAME
          CRD    CN 
          RJM    CLP         CHECK LABEL PARAMETERS 
          ZJN    CCE3        IF CORRECT UNIT FOUND
 CCE2     AOD    T6          READ EST ENTRY 
          LMD    LO 
          NJN    CCE1        IF NOT END OF MASS STORAGE EST 
          LDN    STCE        SET CONFIGURATION ERROR
 CCE3     STD    EC 
          SBN    1
  
 CCE      SUBR               ENTRY/EXIT 
          LDN    NOPE-1      INITIALIZE EST ORDINAL FOR SEARCH
          STD    T6          SET START OF EST SCAN
          LDD    FN+3 
          STM    CEFA 
          UJN    CCE2        ENTER LOOP 
 CEP      SPACE  4,10 
**        CEP - COMPARE EQUIPMENT PARAMETERS. 
* 
*         ENTRY  (FN - FN+4) = EST ENTRY OF PRIMARY EQUIPMENT.
*                (CM - CM+4) = EST ENTRY OF DEVICE BEING CHECKED. 
* 
*         EXIT   (A) = 0 IF MATCHING EQUIPMENTS.
  
  
 CEP1     LDD    CM+2        TEST FOR SECONDARY CHANNEL 
 CEP2     LMD    FN+2 
          LPC    4677        CHECK CHANNEL ACTIVE, MODE AND PORT
  
 CEP      SUBR               ENTRY/EXIT 
          LDC    ** 
 CEFA     EQU    *-1         (DEVICE MNEMONIC)
          LMD    CM+3 
          NJN    CEPX        IF NOT SAME TYPE 
          LDD    FN+1 
          LMD    CM+1        TEST CHANNELS
          LPC    4677 
          ZJN    CEP1        IF MATCH ON PRIMARY CHANNEL
          LDD    FN+1 
          LMD    CM+2        REORDER CHANNEL TEST 
          LPC    4677 
          NJN    CEPX        IF NO CHANNEL MATCH
          LDD    CM+1 
          UJN    CEP2        TEST FOR SECONDARY CHANNEL 
 CLP      SPACE  4,15 
**        CLP - CHECK LABEL PARAMETERS. 
* 
*         ENTRY  (UC) = N/M OF DESIRED UNIT.
*                (CM+2 - CM+6) = FAMILY/PACK NAME.
*                (CN - CN+4) = USER NAME. 
*                (DLPB) = UNIT LABEL PARAMETERS.
* 
*         EXIT   (A) = 0 IF VALID LABEL.
*                (A) = *STIL* IF REQUESTED UNIT NOT FOUND.
* 
*         USES   T1.
  
  
 CLP      SUBR               ENTRY/EXIT 
          LDN    0
          STD    T1 
 CLP1     LDM    DLPB,T1     VERIFY FAMILY/PACK NAME
          LMM    CM+2,T1
          NJN    CLP3        IF NO MATCH
          AOD    T1          INCREMENT INDEX
          LMN    4
          NJN    CLP1        LOOP FOR FOUR BYTES
          LDD    UC          CHECK NUMBER OF UNITS
          LMD    CM+6 
          LPN    77 
          NJN    CLP3        IF INCORRECT UNIT COUNT
 CLP2     LDM    DLPB+1,T1   VERIFY OWNER 
          LMM    CN-4,T1
          NJN    CLP3        IF NO MATCH
          AOD    T1          ADVANCE INDEX
          LMN    7
          NJN    CLP2        LOOP FOR THREE BYTES 
          LDM    DLPB+10     CHECK SEVENTH CHARACTER
          LMD    CN+3 
          SCN    77 
          ZJN    CLPX        IF VALID LABEL 
 CLP3     LDN    STIL        SET ERROR STATUS 
          UJN    CLPX        RETURN 
 VDP      SPACE  4,15 
**        VDP - VERIFY DEVICE PARAMETERS. 
* 
*         ENTRY  (CA) = CM ADDRESS OF MST.
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) = 0 IF MST PARAMETERS MATCH LABEL. 
*                    = *STLE* IF ERROR IN FAMILY NAME.
* 
*         USES   CM+2 - CM+6, CN - CN+4.
* 
*         CALLS  CLP, LRA, VFN. 
  
  
 VDP2     LDN    STLE        SET LABEL ERROR STATUS 
  
 VDP      SUBR               ENTRY/EXIT 
          LDD    FN+4        GET FAMILY NAME FROM MST 
          SHN    3
          ADN    PFGL 
          CRD    CM+2 
          RJM    VFN
          NJN    VDP1        IF VALID NAME
          LDD    CM+5        CHECK FOR NULL FAMILY
          SCN    77 
          ADD    CM+4 
          ADD    CM+3 
          ADD    CM+2 
          NJN    VDP2        IF NOT NULL FAMILY 
 VDP1     RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    CA 
          ADN    PFGL 
          CRD    CM+2 
          ADN    PUGL-PFGL   READ USER NAME 
          CRD    CN 
          RJM    CLP         CHECK LABEL PARAMETERS 
          UJN    VDPX        RETURN 
 VLP      SPACE  4,15 
**        VLP - VERIFY LABEL PARAMETERS.
* 
*         ENTRY  (DLPB) LOADED WITH LABEL PARAMETERS. 
*                (T5) = EST ORDINAL.
*                (EQ) = PRIMARY EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
*                (FS - FS+4) = STLL WORD OF EQUIPMENT.
* 
*         EXIT   (A) = (EC) = 0 IF VALID LABEL. 
*                    .LT. 0 IF EQUIPMENT NOT FIRST IN CHAIN.
*                (EC) = *STIL* IF ANY UNIT HAS INCORRECT LABEL. 
*                (EC) = *STCE* IF ANY UNIT CAUSES CONFIGURATION ERROR.
*                (EC) = *STNR* IF ANY UNIT NOT READY. 
*                (EC) = *STLE* IF ANY UNIT HAS INCORRECT LABEL. 
*                (FN - FN+4) = EST ENTRY OF PRIMARY EQUIPMENT.
*                (FS - FS+4) = STLL WORD OF PRIMARY EQUIPMENT.
*                (T5) = PRIMARY EST ORDINAL.
* 
*         USES   T0 - T7, EC, UC, CA, CA+1, FN - FN+4, FS - FS+4. 
* 
*         CALLS  CCE, LRA, VDP. 
* 
*         MACROS SFA, SMSTF.
  
  
 VLP12    RJM    CCE         CHECK CHAINED EQUIPMENT
          MJN    VLPX        IF FIRST EQUIPMENT FOUND 
 VLP13    LDD    EQ          RESTORE PRIMARY EQUIPMENT PARAMETERS 
          STD    T5 
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    T5 
          CRD    RD 
          SFA    EST,T5 
          ADK    EQDE 
          CRD    FN 
          LDD    FN+4        RESTORE STATUS WORD
          SHN    3
          ADN    STLL 
          CRD    FS 
          LDD    EC          EXIT WITH (A) = ERROR CODE 
  
 VLP      SUBR               ENTRY/EXIT 
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    EQ 
          CWD    RD          REWRITE RECOVERY TABLE 
          LDN    0           CLEAR CURRENT UNIT COUNT 
          STD    T7 
          STD    EC 
          LDM    DLPB+4      SET TOTAL UNIT COUNT 
          LPN    77 
          STD    T3 
          LPN    7
          STD    T2 
          STD    UC          SET CURRENT UNIT POSITION
          LMD    T3 
          ZJN    VLP1        IF FIRST EQUIPMENT IN CHAIN
          LJM    VLP12       CHECK CHAINED EQUIPMENT
  
*         SET PARAMETERS FOR THIS EQUIPMENT.
  
 VLP1     LDD    AL          SET ADDRESS OF CURRENT UNITS MST 
          STD    CA 
          LDN    0           CLEAR CURRENT UNIT COUNT FOR THIS EQUIP. 
          STD    T6 
          LDD    FN+4 
          SHN    3
          ADN    DDLL 
          CRD    CM 
          LDD    CM          SET UNIT COUNT FOR THIS EQUIPMENT
          SHN    -3 
          LPN    7
          STD    T3 
 VLP2     RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    CA 
          ADN    STLL        READ STATUS WORD 
          CRD    CM 
  
*         VERIFY ALL UNITS FOR THIS EQUIPMENT.
  
          LDD    CM+1 
          LPN    77 
          ZJN    VLP5        IF NO ERROR THIS UNIT
          STD    EC          SET ERROR CODE 
          LDD    T7 
          ZJN    VLP4        IF FIRST UNIT OF EQUIPMENT 
          LDN    STCE        *CONFIGURATION ERROR*
 VLP3     STD    EC 
 VLP4     LJM    VLP13
  
 VLP5     RJM    VDP         VERIFY DEVICE PARAMETERS 
          NJN    VLP3        IF LABEL CONFLICT
  
*         LABEL FOR THIS UNIT VALID - PROCEED TO NEXT UNIT. 
  
          LDD    EQ 
          LMD    T5 
          ZJN    VLP6        IF FIRST EQUIPMENT IN CHAIN
          SMSTF  LDIU        SET DEVICE IN USE
*         LDN    0           INHIBIT FURTHER PROCESSING OF DEVICE 
          STD    RE 
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    T5 
          CWD    RD 
 VLP6     LDD    T7 
          LMD    T2 
          ZJN    VLP7        IF NO MORE UNITS 
          AOD    T7          SET N/M FOR NEXT UNIT
          SHN    3
          ADD    T2 
          STD    UC 
          LDD    T6 
          LMD    T3 
          ZJN    VLP10       IF NO MORE UNITS THIS EQUIPMENT
          AOD    T6          ADVANCE UNIT NUMBER
          LDN    MSTL        ADVANCE TABLE ADDRESS
          RAD    CA 
          LJM    VLP2 
  
*         ALL UNITS CHECKED.
  
 VLP7     LDD    FN 
          SHN    0-10 
          LPN    1
          LMN    1
          ZJN    VLP9        IF DEVICE REMOVABLE
          LDD    FN+4        GET UNIT COUNT FROM MST
          SHN    3
          ADN    DDLL 
          CRD    CN 
          LDD    CN 
          LPN    7
          LMD    T7 
          ZJN    VLP9        IF CORRECT NUMBER OF UNITS 
 VLP8     LDN    STCE        SET CONFIGURATION ERROR
 VLP9     STD    EC 
          LJM    VLP13
  
*         PROCEED TO NEXT EQUIPMENT IN CHAIN. 
  
 VLP10    LDD    FS+4 
          SHN    -3 
          NJN    VLP11       IF EQUIPMENT LINKED
          RJM    CCE         CHECK CHAINED EQUIPMENT
          PJN    VLP8        IF NO EQUIPMENT TO CHAIN 
          LDD    T6          SET EQUIPMENT LINK 
          SHN    3
          RAD    FS+4 
  
*         REREAD EST ENTRY, SINCE (FN+4) WAS DESTROYED BY *CCE*.
  
          SFA    EST,T5      REREAD EST ENTRY 
          ADK    EQDE 
          CRD    FN 
          LDD    FN+4        UPDATE MST 
          SHN    3
          ADN    STLL 
          CWD    FS 
          LDD    T6          SET NEXT EQUIPMENT 
 VLP11    STD    T5 
          RJM    LRA         LOAD REFERENCE ADDRESS 
          ADD    T5 
          CRD    RD 
          SFA    EST,T5      READ EST ENTRY 
          ADK    EQDE 
          CRD    FN 
          LDD    FN+4        READ MST STATUS WORD 
          SHN    3
          ADN    STLL 
          CRD    FS 
          LJM    VLP1        LOOP FOR NEXT EQUIPMENT IN CHAIN 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
          QUAL   VFN
 FN       EQU    CM+2 
*CALL     COMPVFN 
          QUAL   *
 VFN      EQU    /VFN/VFN 
          SPACE  4,10 
 ORDG     EQU    *+5         LOAD ADDRESS FOR *4DG* 
 ORDJ     EQU    *+5         LOAD ADDRESS FOR *4DJ* 
          TITLE  *CMS* DEVICE VERIFICATION - COMMON ROUTINES. 
 CUS      SPACE  4,15 
**        CUS - CHECK UNLOAD STATUS.
* 
*         ENTRY  (A) = 0 IF CHECKING DEVICE ACTIVITY. 
*                    = MID IF PROCESSING UNLOAD.
* 
*         EXIT   (A) .LT. 0 IF DEVICE INACCESSIBLE. 
*                    = (DATB) = 0 IF DEVICE INACTIVE. 
*                             .GT. 0 IF DEVICE ACTIVE.
* 
*         USES   T3, T7.
* 
*         CALLS  RIL. 
* 
*         MACROS ENDMS. 
  
  
 CUS      SUBR               ENTRY/EXIT 
          STD    T3 
          RJM    RIL
          MJN    CUSX        IF DEVICE NOT ACCESSIBLE 
          ENDMS 
*         LDN    0
*         STD    T7 
 CUS1     LDN    5           ADVANCE DIT INDEX
          RAD    T7 
          LMC    5*MISD+5 
          ZJN    CUS2        IF END OF DIT
          LDM    DISS-5+4,T7
          ZJN    CUS1        IF DIT SLOT EMPTY
          LMD    T3 
          ZJN    CUS1        IF ASSIGNED TO THIS MACHINE
 CUS2     STM    DATB 
          UJN    CUSX        RETURN 
 RIL      SPACE  4,15 
**        RIL - READ INDEPENDENT SHARED DEVICE LABEL. 
* 
*         ENTRY  (A) .LT. 0, IF WAIT ON NOT READY DESIRED.
*                (T5) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) = READ STATUS. 
*                (T7) = 0 IF LABEL READ.
*                (BFMS) = LABEL SECTOR. 
* 
*         CALLS  CLT, RDS.
* 
*         MACROS ENDMS, SETMS.
  
  
 RIL2     SETMS  IO,(DE,DF,NR)
          RJM    CLT
          NJN    RIL3        IF LABEL TRACK KNOWN 
          LDD    CM+7 
          ZJN    RIL1        IF NO PREVIOUS LABEL TRACK 
          STD    T6 
 RIL3     LDN    0           SET LABEL SECTOR 
          STD    T7 
          LDC    BFMS        READ LABEL SECTOR
          RJM    RDS
          MJN    RIL1        IF READ ERROR
  
 RIL      SUBR               ENTRY/EXIT 
          PJN    RIL2        IF RETURN ON NOT READY 
          SETMS  IO,(DE,DF) 
          RJM    CLT
          NJN    RIL3        IF LABEL TRACK FOUND 
 RIL1     ENDMS 
          LCN    1
          UJN    RILX        RETURN 
          SPACE  4,10 
 ORDE     EQU    *+5         LOAD ADDRESS FOR *4DE* 
          TITLE  *CMS* ACTIVE/INACTIVE DEVICE ROUTINES. 
 CAD      SPACE  4,15 
**        CAD - CHECK ACTIVE DEVICES. 
* 
*         ENTRY  (EQ) = (T5) = EST ORDINAL. 
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (CMSD) ADVANCED IF ERROR SET ON DEVICE.
*                (A) .LT. 0 IF RECOVERY INFORMATION NOT TO
*                BE REWRITTEN TO CM UPON RETURN TO *MRL*. 
* 
*         USES   IR+2, CM - CM+4, CN - CN+4, FS - FS+4. 
* 
*         CALLS  SES, UMS, VLP, *5ME*.
* 
*         MACROS EXECUTE, MONITOR.
  
  
 CAD8     AOM    /CMS/CMSD   ADVANCE DEVICE IN ERROR COUNT
  
 CAD      SUBR               ENTRY/EXIT 
          SHN    21-6 
          MJN    CADX        IF DEVICE UNAVAILABLE
          RJM    UMS         UPDATE MST 
          NJN    CADX        IF DEVICE INTERLOCKED
          LDD    FN+4        READ MST WORDS 
          SHN    3
          ADN    DULL 
          CRD    CM 
          ADN    STLL-DULL
          CRD    FS 
          SBN    STLL-PFGL   READ PF DESCRIPTION
          CRM    DLPB,TW
          LDD    FS+1 
          LPN    77 
          NJN    CAD8        IF ERROR STATUS PRESENT
 CAD1     LDD    CN+4        CHECK ERROR IDLE FLAG
          LPN    MGDEI
          ZJN    CAD2        IF NOT SET 
          LDN    STEI        SET ERROR STATUS IN MST
          RJM    SES
 CAD2     LDD    FN 
          SHN    21-10
          PJN    CAD3        IF NOT REMOVABLE DEVICE
          LDD    CM+4        CHECK ACTIVITY 
          LPC    3777 
          ADD    FS+3 
          NJN    CAD3        IF ACTIVE FILES
          LDD    FS 
          SHN    21-2 
          MJN    CAD3        IF CHECKPOINT PENDING
          SHN    3+21-3 
          MJN    CAD4        IF LOCAL UNLOAD SET
 CAD3     RJM    VLP         VERIFY LABEL PARAMETERS
          MJN    CAD4        IF NOT FIRST EQUIPMENT IN CHAIN
          NJN    CAD5        IF VERIFICATION ERRORS 
          LDM    SDIF 
          NJN    CAD6        IF INTERLOCKS ON ISD 
          LDN    SSTL        CHECK SYSTEM STATUS
          CRD    CM 
          LDD    CM 
          LPN    14 
 CAD4     NJN    CAD6        IF MS VALIDATION DISABLED / NOT PRESENT
          LDD    EQ 
          STD    CM+1 
          LDN    VEIS        REQUEST MS VALIDATION
          STD    CM+3 
          MONITOR  VMSM 
          LDD    CM+1 
          ZJN    CAD6        IF NO ERRORS 
          STD    IR+2 
          EXECUTE  5ME        PROCESS ERRLOG MESSAGES 
          LDN    STVE        SET ERROR STATUS IN MST
 CAD5     RJM    SES
*         LDN    0           INHIBIT FURTHER PROCESSING OF DEVICE 
          STD    RE 
          AOM    /CMS/CMSD   ADVANCE DEVICE IN ERROR COUNT
 CAD6     LJM    CADX        RETURN 
 CID      SPACE  4,15 
**        CID - CHECK INACTIVE DEVICES. 
* 
*         ENTRY  (EQ) = (T5) = EST ORDINAL. 
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   INACTIVE EQUIPMENTS WITH UNLOAD REQUESTED
*                RESTORED TO ORIGINAL AND UNAVAILABLE STATE.
*                TO *GDT2* IF RECOVERY INTERLOCK UNAVAILABLE. 
*                (A) .LT. 0 IF RECOVERY INFORMATION NOT TO
*                BE REWRITTEN TO CM UPON RETURN TO *MRL*. 
* 
*         USES   CM - CM+4, FN - FN+4, FS - FS+4. 
* 
*         CALLS  CDB, CDD, CDS, CUS, IAM, IES, IFR, ILK, RDE, RGM, UIS, 
*                WDE. 
* 
*         MACROS MMTE, SFA, SMSTF.
  
  
 CID9     RJM    UIS         SET UNLOAD STATUS IN DIT ENTRY 
          LDD    FN 
          LPC    -100 
          LMD    HN          SET DEVICE UNAVAILABLE 
          STD    FN 
          SFA    EST,EQ 
          ADK    EQDE 
          CWD    FN 
          SMSTF  LDUL 
  
 CID      SUBR               ENTRY/EXIT 
          RJM    CDS         CHECK DEVICE STATUS
          NJN    CIDX        IF DEVICE ACTIVITY 
          RJM    ILK         ENSURE PFM-S NOT ACTIVE ON DEVICE
          RJM    CDS         RECHECK DEVICE 
          NJN    CIDX        IF NEW DEVICE ACTIVITY 
          LDD    FN 
          SHN    21-10
          PJN    CID9        IF NON-REMOVABLE DEVICE
          RJM    RGM         READ GLOBAL MST WORDS
          NJN    CIDX        IF INTERLOCK SET 
          LDD    CN+4        CHECK GLOBAL UNLOAD
          LPN    MGUNL
          NJN    CIDX        IF GLOBAL UNLOAD SET 
          STM    DATB 
          RJM    CBF         CHECK FOR BUFFERS TO FLUSH 
          NJN    CIDX        IF UNABLE TO FLUSH ALL BUFFERS 
          UJMF   CID5 
          LDN    DATI        GET DAT INTERLOCK
          RJM    IFR
          ZJN    CID2        IF FLAG REGISTER INTERLOCKED 
          LJM    /CMS/GDT1   RECALL *CMS* 
  
 CID2     RJM    RDE         READ DAT ENTRY 
          LDD    QS 
          ZJN    CID4        IF NO DAT ENTRY
          LDM    DATB+11     CLEAR ACCESS BY THIS MACHINE 
          LPC    -0 
          MMTE   *-1
          STM    DATB+11
          NJN    CID3        IF ALL ACCESSES NOT CLEARED
          STM    DATB        CLEAR DAT ENTRY
 CID3     RJM    WDE         STORE DAT ENTRY
 CID4     LCN    DATI        DROP FLAG REGISTER INTERLOCK 
          RJM    IFR
 CID5     LDD    FN 
          LPN    20 
          ZJN    CID6        IF NOT ISD 
          STM    DATB 
          LDD    FS+2        CHECK UNLOAD STATUS
          RJM    CUS
 CID6     LDM    DATB 
          NJN    CID7        IF DEVICE NOT UNLOADED IN ALL MACHINES 
          LDN    MGUNL       SET GLOBAL UNLOAD
          RAD    CN+4 
          LDD    FN+4        STORE DEVICE ACTIVITY WORD 
          SHN    3
          ADN    ACGL 
          CWD    CN 
 CID7     RJM    /CMS/IAM    ISSUE ACCOUNTING MESSAGE 
          RJM    IES         INITIALIZE EQUIPMENT STATUS
          SMSTF  LDUL        SET DEVICE UNLOADED
          LDM    DATB 
          NJN    CID8        IF DEVICE NOT UNLOADED ON ALL MACHINES 
          RJM    CDD         CLEAR DEVICE DESCRIPTION 
 CID8     LCN    0           DISABLE *MRL* REWRITE OF RECOVERY TABLES 
          LJM    CIDX        RETURN 
          TITLE  *CMS* ACTIVE/INACTIVE DEVICE SUBROUTINES.
 CBF      SPACE  4,15 
**        CBF - CHECK FOR BUFFERS TO FLUSH. 
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) .NE. 0, IF UNFLUSHED BUFFERS ARE STILL PRESENT.
*                IF BUFFERED DEVICE, I/O BUFFERS FLUSHED AND RELEASED.
*                IF SHARED BUFFERED DEVICE, *BAT* AND *BST* PERMISSIONS 
*                  ARE RELEASED AND *BST* PROCESSING IS DISABLED. 
* 
*         USES   T6, CM - CM+4. 
* 
*         MACROS DELAY, PAUSE, MONITOR. 
  
  
 CBF      SUBR               ENTRY/EXIT 
          LDD    FN          CHECK IF BUFFERED DEVICE 
          LPN    40 
          ZJN    CBFX        IF NOT A BUFFERED DEVICE 
          LDD    TH          SET MAXIMUM RETRY COUNT
          STD    T6 
  
*         FLUSH AND RELEASE BUFFERS - RELEASE *BAT*/*BST* PERMISSIONS.
  
 CBF1     LDN    ZERL        CLEAR ASSEMBLY AREA
          CRD    CM 
          LDD    FN 
          SHN    21-11
          MJN    CBF2        IF SHARED BUFFERED DEVICE
          LDD    T5          SET EST ORDINAL
          STD    CM+3 
          LDC    BMFW*100    FLUSH ALL WRITE BUFFERS
          STD    CM+4 
          MONITOR  BFMM 
          LDN    ZERL        CLEAR ASSEMBLY AREA
          CRD    CM 
          LDD    T5          SET EST ORDINAL
          STD    CM+3 
          LDC    BMDD*100    DROP ALL BUFFERS ON DEVICE 
          STD    CM+4 
          MONITOR  BFMM 
          UJN    CBF3        CHECK STATUS 
  
 CBF2     LDD    T5          SET EST ORDINAL
          STD    CM+4 
          LDN    RBPS        RELEASE *BAT*/*BST* ACCESS PERMISSIONS 
          STD    CM+1 
          MONITOR  MTEM 
 CBF3     LDD    CM+4        CHECK STATUS 
          ZJN    CBF4        IF SUCCESSFUL
          DELAY  200B        DELAY 16 MILLISECONDS
          PAUSE 
          SOD    T6 
          NJP    CBF1        IF RETRY COUNT NOT EXHAUSTED 
          LDN    1           RETURN ERROR RESPONSE
          LJM    CBFX        EXIT 
  
*         DISABLE *BST* PROCESSING. 
  
 CBF4     LDD    FN 
          SHN    21-11
          PJN    CBF5        IF NOT SHARED BUFFERED DEVICE
          LDD    MA          WRITE REQUEST
          CWM    CBFB,ON
          LDD    FN+4 
          SHN    3
          STD    CM+4        SET MST ADDRESS
          SHN    -14
          STD    CM+3 
          LDN    1           SET WORD COUNT 
          STD    CM+1 
          MONITOR  UTEM 
 CBF5     LDN    0           RETURN SUCCESSFUL RESPONSE 
          UJP    CBFX        RETURN 
  
  
 CBFB     VFD    6/BDLL,6/1,6/27,42/1 
 CDD      SPACE  4,10 
**        CDD - CLEAR DEVICE DESCRIPTION. 
* 
*         ENTRY  (EQ) = EST ORDINAL.
* 
*         EXIT   DEVICE DESCRIPTION CLEARED.
*                EXTENDED MEMORY COPY OF MST/TRT CLEARED. 
* 
*         USES   CM - CM+7, CN - CN+4, FN - FN+4. 
* 
*         MACROS MONITOR, SFA, UJMF.
  
  
 CDD      SUBR               ENTRY/EXIT 
          SFA    EST,EQ      READ EST ENTRY 
          ADK    EQDE 
          CRD    FN 
          LDN    ZERL 
          CRD    CN 
          LDD    FN+4 
          SHN    3
          ADN    SDGL 
          CRD    CM+3 
          ADN    PUGL-SDGL   CLEAR USER DESCRIPTION 
          CWD    CN 
          SBN    PUGL-PFGL   CLEAR DEVICE DESCRIPTION 
          CWD    CN 
          UJMF   CDDX 
          SBN    PFGL 
          STD    CM+2 
          SHN    -14
          LMC    GLGL*100-100  SET WORD COUNT FOR ECS TRANSFER
          STD    CM+1 
          LDD    CM+3 
          ADD    CM+4 
          ZJN    CDDX        IF NOT SHARED DEVICE 
 CDDA     LDN    1           MACHINE INDEX*2 + 1
          RAD    CM+7 
          LDD    FN+4        STORE DEVICE INTERLOCK STATUS
          SHN    3
          ADN    SDGL 
          CWD    CM+3 
          LDC    WECS*1000   UPDATE GLOBAL MST IN ECS 
          RAD    CM+3 
          MONITOR ECSM
          LDD    EQ          SET EST ORDINAL
          STD    CM+1 
          LDN    CDIS        INSERT MONITOR SUBFUNCTION 
          STD    CM+3 
          MONITOR STBM       CLEAR TRT IN ECS 
          LJM    CDDX        RETURN 
 CDS      SPACE  4,10 
**        CDS - CHECK DEVICE STATUS.
* 
*         ENTRY  (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) = 0 IF NO ACTIVITY AND UNLOAD SET. 
*                (FS - FS+4) = *STLL* WORD OF MST.
* 
*         USES   CM - CM+4. 
  
  
 CDS      SUBR
          LDD    FN+4 
          SHN    3
          ADN    DULL 
          CRD    CM 
          ADN    STLL-DULL
          CRD    FS 
          LDD    FS 
          LPN    MLUNL+MLCKP+MLDUL
          LMN    MLUNL
          NJN    CDSX        IF CHECKPOINT SET / NO LOCAL UNLOAD
          LDD    CM+4        CHECK ACTIVITY 
          LPC    3777 
          ADD    FS+3 
          NJN    CDSX        IF ACTIVE FILES ON DEVICE
          LDK    INWL        PROHIBIT UNLOAD IF *MREC* ACTIVE 
          CRD    CM 
          LDD    CM+3 
          SHN    -6 
          NJN    CDSX        IF *MREC* ACTIVE 
          LDD    FS+4 
          LPN    MLUAI
          UJN    CDSX        RETURN 
 ILK      SPACE  4,10 
**        ILK - INTERLOCK *PFM* FROM ACCESSING DEVICE DURING UNLOAD.
* 
*         ENTRY  (EQ) = EQUIPMENT TO UNLOAD.
*                (FN - FN+4) = EST OF EQUIPMENT TO UNLOAD.
* 
*         EXIT   TO *RCL* IF UNABLE TO INTERLOCK. 
* 
*         USES   T5, T7, CM - CM+4, FN - FN+4.
* 
*         CALLS  CUT, SUT.
* 
*         MACROS SFA. 
  
  
 ILK6     LDD    EQ          RESET DIRECT CELLS 
          STD    T5 
          SFA    EST
          ADK    EQDE 
          CRD    FN 
          LDN    0           CLEAR EST ORDINAL OF PROCESSED ENTRY 
          STM    ILKA 
  
 ILK      SUBR               ENTRY/EXIT 
          LDD    FN+4        READ PF DESCRIPTION
          SHN    3
          ADN    PFGL 
          CRD    FN 
          ADN    PUGL-PFGL
          CRD    CM 
          LDD    CM+3        SET DEVICE MASK
          LPN    17 
          SHN    14 
          LMD    CM+4 
          SHN    -10
          STM    ILKB 
          LDC    **          SET EQUIPMENT FROM PREVIOUS CALL 
 ILKA     EQU    *-1
          NJN    ILK1        IF PREVIOUS EQUIPMENT
          LDD    LO 
          SBN    1
 ILK1     STD    T5 
          AOD    T5 
  
*         SEARCH FOR MASTER DEVICES TO INTERLOCK AGAINST *PFM*. 
  
 ILK2     SOD    T5 
          ZJN    ILK6        IF END OF EQUIPMENTS 
          SFA    EST
          ADK    EQDE 
          CRD    CM 
          LDD    CM          CHECK DEVICE CHARACTERISTICS 
          SHN    21-13
          PJN    ILK2        IF NOT MASS STORAGE
          SHN    13-6 
          MJN    ILK2        IF DEVICE UNAVAILABLE
          LDD    T5 
          SBD    EQ 
          ZJN    ILK4        IF EQUIPMENT TO UNLOAD 
          LDD    CM+4 
          SHN    3
          ADN    PUGL 
          CRD    CM 
          SBN    PUGL-PFGL
          CRD    T7 
          LDD    CM+4 
          LPC    ** 
 ILKB     EQU    *-1
          ZJN    ILK2        IF NOT A MASTER FOR DEVICE TO UNLOAD 
          LDD    FN          CHECK FOR PROPER FAMILY
          LMD    T7 
 ILK3     NJN    ILK2        IF NO MATCH ON FAMILY
          LDD    FN+1 
          LMD    T7+1 
          NJN    ILK2        IF NO MATCH ON FAMILY
          LDD    FN+2 
          LMD    T7+2 
          NJN    ILK2        IF NO MATCH ON FAMILY
          LDD    FN+3 
          LMD    T7+3 
          SCN    77 
          NJN    ILK3        IF NO MATCH ON FAMILY
 ILK4     RJM    SUT         SET UTILITY INTERLOCK FOR DEVICE 
          NJN    ILK5        IF INTERLOCK NOT SET 
  
*         INTERLOCK MAY BE IMMEDIATELY CLEARED SINCE IT IS ONLY 
*         SET TO INSURE *PFM* HAS NOTICED THE UNLOAD REQUEST FOR THE
*         DEVICE. 
  
          RJM    CUT
          LJM    ILK2        PROCESS NEXT EQUIPMENT 
  
 ILK5     LDD    T5          SAVE EQUIPMENT FOR NEXT INTERLOCK TRY
          STM    /CMS/RCLA+2
          LDN    PIRR        SET WAITING FOR PF INTERLOCK CONDITION 
          LJM    /CMS/RCL    RECALL 
 RGM      SPACE  4,15 
**        RGM - READ GLOBAL MST WORDS.
* 
*         ENTRY (T5) = EST ORDINAL. 
*               (FN - FN+4) = EST ENTRY.
* 
*         EXIT   (A) = DEVICE INTERLOCK STATUS. 
*                (CN - CN+4) = ACGL WORD OF MST.
*                (CM - CM+4) = SDGL WORD OF MST.
* 
*         USES   CM - CM+7, CN - CN+4.
* 
*         CALLS  RIL. 
* 
*         MACROS ENDMS, MONITOR, UJMF.
  
  
 RGM0     LDN    0           READ INDEPENDENT SHARED DEVICE LABEL 
          RJM    RIL
          MJN    RGM1        IF DEVICE NOT READY
          ENDMS 
          LDM    N4SS+SDGL*5+4  CHECK FOR SOFTWARE RESERVE/INTERLOCK
          LPN    77 
          NJN    RGMX        IF SOFTWARE RESERVE OR INTERLOCK 
          LDD    MA 
          CWM    N4SS,TR
          LDD    MA 
          UJN    RGM4        READ MST WORDS 
  
 RGM1     LDD    T6 
          ZJN    RGM3        IF NO LABEL TRACK FOUND
          UJN    RGMX        RETURN 
  
 RGM2     LDD    FN 
          SHN    21-4 
          MJN    RGM0        IF ISHARED DEVICE
 RGM3     LDD    FN+4        READ DEVICE ACTIVITY WORD
          SHN    3
 RGM4     ADN    ACGL 
          CRD    CN 
          ADN    SDGL-ACGL   READ DEVICE INTERLOCK WORD 
          CRD    CM 
          LDD    CM+4        EXTRACT INTERLOCK STATUS 
          LPN    1
  
 RGM      SUBR               ENTRY/EXIT 
          UJMF   RGM2        NON MMF SYSTEM 
          LDD    FN+4        READ DEVICE INTERLOCK WORD 
          SHN    3
          ADN    SDGL 
          CRD    CM+3 
          LDD    CM+3        CHECK EXTENDED MEMORY POINTER
          ADD    CM+4 
          ZJN    RGM3        IF NOT SHARED DEVICE 
          LDD    MA          SET CM ADDRESS FOR TRANSFER
          STD    CM+2 
          LDC    RECS*1000   SELECT READ SUBFUNCTION
          RAD    CM+3 
          LDC    SDGL*100    SET WORD COUNT 
          STD    CM+1 
          MONITOR  ECSM      GET MST WORDS FROM ECS 
          LDD    MA 
          UJN    RGM4        READ MST WORDS 
 UIS      SPACE  4,10 
**        UIS - UPDATE INDEPENDENT SHARED DEVICE TABLES.
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (FN - FN+4) = *EQDE* WORD OF EST ENTRY.
* 
*         USES   T1.
* 
*         CALLS  CDC, RIL, SMI, WDS.
* 
*         MACROS ENDMS. 
  
  
 UIS      SUBR
          LDD    FN 
          SHN    21-4 
          PJN    UISX        IF NOT INDEPENDENT SHARED DEVICE 
          RJM    RIL         READ LABEL 
          MJN    UISX        IF LABEL NOT READ
          RJM    SMI
          STD    T1          SET DIT INDEX
          SHN    2
          RAD    T1 
          LDM    DISS-5+3,T1
          SCN    2
          LMN    2           SET UNLOAD STATUS
          STM    DISS-5+3,T1
          RJM    CDC         COMPUTE LABEL CHECKSUM 
          STM    CKSS 
          LDC    BFMS+WLSF   REWRITE LABEL
          RJM    WDS
          ENDMS 
          UJN    UISX        RETURN 
 UMS      SPACE  4,15 
**        UMS - UPDATE MASS STORAGE TABLES. 
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) = 0 IF UPDATE COMPLETE / UNNECESSARY.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  RGM. 
* 
*         MACROS MONITOR, UJMF. 
  
  
 UMS      SUBR               ENTRY/EXIT 
          RJM    RGM         READ GLOBAL MST WORDS
          NJN    UMSX        IF DEVICE INTERLOCKED
          LDD    FN 
          LPC    1S9
          ZJN    UMSX        IF NOT SHARED EQUIPMENT
          LDD    T5          REQUEST MST/TRT UPDATE 
          STD    CM+1 
          LDN    UTRS 
          STD    CM+3 
          MONITOR  STBM      ISSUE REQUEST
*         LDN    0
          UJN    UMSX        RETURN 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPCUT 
*CALL     COMPSUT 
          SPACE  4,10 
          QUAL   CMS
 CAD      EQU    /RDD/CAD 
 CID      EQU    /RDD/CID 
          QUAL   *
          USE    LITERALS 
  
  
          ERRNG  BFMS-*      OVERLAY OVERFLOW INTO BUFFER 
 POV      SPACE  4,10 
**        POV - MODIFY INSTRUCTIONS AS REQUIRED FOR CM/MMF RECOVERY.
  
  
 POV      LDD    IR+2        SET PREVIOUS EQUIPMENT OF INTERLOCK
          STM    ILKA 
          LDM    MMFP 
          ZJP    POV5        IF DO NOT PRESET FOR MMF 
          LDC    MMFL 
          CRD    CM 
          LDD    CM+4        SET MACHINE INDEX
          RAM    EBPC 
          LPN    77 
          SHN    1
          RAM    CDDA 
          LDD    CM+1 
          SHN    21-11
          MJN    POV0        IF SHARED BUFFERED DEVICES ARE CONFIGURED
          ISTORE LDTA,(UJN LDT0)  DISABLE *BAET* READ 
 POV0     LDC    L"QUAL"     SET LIST ADDRESS 
          STD    T1 
          UJN    POV2        MODIFY INSTRUCTIONS
  
 POV1     STD    T0 
          LDN    PSNI        REPLACE INSTRUCTION WITH *PSN* 
          STI    T0 
          AOD    T1          ADVANCE LIST ADDRESS 
 POV2     LDI    T1 
          NJN    POV1        LOOP TO END OF TABLE 
          LDC    T"QUAL"     SET LIST ADDRESS 
          STD    T1 
          UJN    POV4        ENTER LOOP 
  
 POV3     STD    T0 
          LDD    CM+3        ADD MACHINE MASK TO INSTRUCTION
          LMI    T0 
          STI    T0 
          AOD    T1 
 POV4     LDI    T1 
          NJN    POV3        IF MORE INSTRUCTIONS 
 POV5     LDD    IR 
          LMC    2RCM 
          ZJN    POV6        IF *CMS* CALL
          LDD    RS          CHECK RECOVERY STATUS
          LPN    FLMK 
          LMN    FLCM 
          NJN    POV7        IF NOT LEVEL 3 RECOVERY
          ISTORE EBPB,(LDN CBRS)  CLEAR ONLY READ PERMISSIONS IN *BAT*
          UJN    POV7 
  
 POV6     ISTORE EBPA,(UJN EBP3)
 POV7     LJM    RDDX        RETURN 
  
*         LIST OF INSTRUCTIONS TO BE PRESET.
  
 L"QUAL"  BSS    0
 L"QUAL"  HERE
          ERRZR  L"QUAL"-*   TABLE EMPTY - REMOVE PRESET CODE 
          CON    0           TERMINATE TABLE
  
 T"QUAL"  BSS    0
 T"QUAL"  HERE
          ERRZR  T"QUAL"-*   TABLE EMPTY - REMOVE PRESET CODE 
          CON    0           TERMINATE LIST 
  
          QUAL
  
 CSD      EQU    /RDD/CSD 
 CSDB     EQU    /RDD/CSDB
 CSDC     EQU    /RDD/CSDC
 CUS      EQU    /RDD/CUS 
 EBP      EQU    /RDD/EBP 
 LDT      EQU    /RDD/LDT 
 RDE      EQU    /RDD/RDE 
 UDT      EQU    /RDD/UDT 
 VFN      EQU    /RDD/VFN 
 VLP      EQU    /RDD/VLP 
 WDE      EQU    /RDD/WDE 
  
 ORDE     EQU    /RDD/ORDE
 ORDG     EQU    /RDD/ORDG
 ORDH     EQU    /RDD/ORDH
 ORDJ     EQU    /RDD/ORDJ
          SPACE  4,10 
          OVERFLOW  ORDD,EPFW  CHECK FOR OVERFLOW 
          TTL    MSM/4DE - *CMS* UNAVAILABLE DEVICE ROUTINES. 
          TITLE 
          IDENT  4DE,/RDE/RDEX
*COMMENT  MSM - *CMS* UNAVAILABLE DEVICE ROUTINES.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1994. 
  
  
***       *4DE* CONTAINS CODE FOR *CMS* UNAVAILABLE DEVICE PROCESSING.
  
  
          QUAL   RDE
          ORG    ORDE 
  
 RDE      SUBR               ENTRY/EXIT 
          UJN    RDEX        RETURN 
          TITLE  CHECK UNAVAILABLE DEVICE.
 CUD      SPACE  4,15 
**        CUD - CHECK UNAVAILABLE DEVICES.
* 
*         ENTRY  (EQ) = (T5) = EST ORDINAL. 
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (RC) = NUMBER OF EQUIPMENTS TO RECOVER.
*                (RE) SET WITH EQUIPMENTS TO RECOVER. 
*                (A) .LT. 0 IF RECOVERY INFORMATION NOT TO
*                BE REWRITTEN TO CM UPON RETURN TO *MRL*. 
* 
*         USES   FN, RC, CM+1 - CM+7, FS - FS+4.
* 
*         CALLS  CDA, CDI, CGU, SES, VLP. 
* 
*         MACROS MONITOR, SFA.
  
  
 CUD6     RJM    CGU         CHECK GLOBAL UNLOAD
  
 CUD      SUBR               ENTRY/EXIT 
          RJM    CDA
          MJN    CUDX        IF RECOVERY INHIBITED
          NJN    CUD6        IF DEVICE UNLOADED 
          LDD    FN 
          SHN    21-10
          MJN    CUD1        IF REMOVABLE DEVICE
          SHN    11+21-11 
          PJN    CUD1        IF NON-SHARED DEVICE 
          LDD    FN+4        GET EXTENDED MEMORY ADDRESS OF MST/TRT 
          SHN    3
          ADN    SDGL 
          CRD    CM+3 
          ADN    ALGL-SDGL   SET CM ADDRESS FOR MST UPDATE
          STD    CM+2 
          SHN    -14
          LMC    GLGL*100-ALGL*100
          STD    CM+1 
          LDD    CM+3 
          ADD    CM+4 
          ZJN    CUD1        IF DEVICE NOT PREVIOUSLY RECOVERED 
          LDD    CM+7 
          ADD    CM+6 
          ADD    CM+5 
          NJN    CUD4        IF DEVICE ACCESSED PREVIOUSLY
 CUD1     RJM    VLP         VERIFY LABEL PARAMETERS
          MJN    CUD2        IF NOT FIRST EQUIPMENT IN CHAIN
          NJN    CUD3        IF VERIFY ERRORS 
          LDC    200         SET EQUIPMENT RECOVERY 
          RAD    RE 
          AOD    RC          ADVANCE RECOVERY COUNT 
 CUD2     LJM    CUDX        RETURN 
  
 CUD3     RJM    SES         SET ERROR STATUS 
          RJM    CDI         CLEAR ISD INTERLOCKS 
          LCN    0
          UJN    CUD2        RETURN 
  
 CUD4     LDD    FN 
          SHN    21-4 
          MJN    CUD5        IF INDEPENDENT SHARED DEVICE 
          LDN    ALGL 
          RAD    CM+4 
          LDC    RECS*1000   SET MONITOR SUBFUNCTION
          RAD    CM+3 
          MONITOR  ECSM      UPDATE GLOBAL MST FROM ECS 
 CUD5     LDN    0           CLEAR UNAVAILABLE STATUS 
          SBD    HN 
          RAD    FN 
          SFA    EST,EQ      REWRITE EST ENTRY
          ADK    EQDE 
          CWD    FN 
          UJN    CUD2        RETURN 
          TITLE  SUBROUTINES. 
 CGU      SPACE  4,10 
**        CGU - CHECK GLOBAL UNLOAD.
* 
*         ENTRY  (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (CN - CN+4) = *ACGL* WORD OF MST.
* 
*         USES   CM - CM+7. 
* 
*         CALLS  CIU. 
* 
*         MACROS MONITOR. 
  
  
 CGU1     RJM    CIU         CHECK ISD GLOBALLY UNLOADED
  
 CGU      SUBR               ENTRY/EXIT 
          LDD    FN+4 
          SHN    3
          ADN    MDGL        READ DRIVER WORD FOR DAT INDEX 
          CRD    CM 
          SBN    MDGL-SDGL   GET EXTENDED MEMORY POINTER
          CRD    CM+3 
          SBN    SDGL-ACGL
          CRD    CN 
          LDD    FN 
          LPN    20 
          NJN    CGU1        IF ISD 
          LDD    CM 
          LPC    377
          ZJN    CGUX        IF LINK TO DAT SLOT CLEARED
          LDD    CM+3 
          ADD    CM+4 
          ZJN    CGUX        IF NON-SHARED DEVICE 
          LDN    ACGL 
          RAD    CM+4 
          SHN    -14
          LMC    RECS*1000   UPDATE ACTIVITY WORD FROM ECS
          RAD    CM+3 
          LDN    PFGL-ACGL   SET WORD COUNT FOR ECS TRANSFER
          SHN    6
          STD    CM+1 
          LDD    MA          READ MST DATA TO MESSAGE BUFFER
          STD    CM+2 
          MONITOR ECSM
          LDD    MA 
          CRD    CM+3 
          LDD    CM+3        SAVE DEVICE UP/DOWN STATUS 
          STD    CN 
          LDD    CM+7        SET GLOBAL UNLOAD STATUS 
          LPN    MGUNL
          STD    CN+4 
          LDD    MA 
          ADN    PFGL-ACGL
          CRD    CM 
          LDD    FN+4 
          SHN    3
          ADN    ACGL        STORE UNLOAD STATUS IN CMR 
          CWD    CN 
          ADN    PFGL-ACGL   STORE DEVICE DESCRIPTION 
          CWD    CM 
          LJM    CGUX        RETURN 
 CIU      SPACE  4,15 
**        CIU - CHECK INDEPENDENT SHARED DEVICE UNLOADED. 
* 
*         ENTRY  (FN - FN+4) = EST ENTRY. 
*                (CN - CN+4) = *ACGL* WORD OF MST.
* 
*         USES   CM - CM+6. 
* 
*         CALLS  CUS, VFN.
  
  
 CIU      SUBR               ENTRY/EXIT 
          LDD    FN 
          SHN    21-10
          PJN    CIUX        IF NOT REMOVABLE 
          LDD    FN+1 
          SHN    0-11        CHECK CHANNEL STATUS 
          LMN    4
          ZJN    CIU1        IF PRIMARY CHANNEL ALIVE AND WELL
          LDD    FN+2 
          SHN    0-11        TEST SECONDARY CHANNEL 
          LMN    4
          NJN    CIUX        IF CHANNEL UNAVAILABLE 
*CIU1     LDN    0
 CIU1     RJM    CUS
          MJN    CIU4        IF DEVICE INACCESSIBLE 
          ZJN    CIU2        IF NO ONE ACCESSING DEVICE 
          LDN    MGUNL
 CIU2     LMN    MGUNL       SET/CLEAR GLOBAL UNLOAD
          STD    CN+4 
          NJN    CIU4        IF SETTING UNLOAD
 CIU3     LDD    MA 
          CWM    N4SS+5*PFGL,ON 
          SBN    1           VERIFY FAMILY/PACK NAME
          CRD    CM+2 
          RJM    VFN
          NJN    CIU5        IF VALID NAME IN LABEL 
 CIU4     LDN    ZERL 
          CRD    CM+2 
 CIU5     LDD    FN+4        STORE/CLEAR DEVICE NAME
          SHN    3
          ADN    PFGL 
          CWD    CM+2 
          SBN    PFGL-ACGL   STORE GLOBAL UNLOAD STATUS 
          CWD    CN 
          LJM    CIUX        RETURN 
          SPACE  4,10 
          USE    LITERALS 
          SPACE  4,10 
          ERRNG  BFMS-*      OVERLAY OVERFLOW INTO BUFFER 
          SPACE  4,10 
          QUAL   CMS
 CUD      EQU    /RDE/CUD 
          QUAL
          SPACE  4,10 
          OVERFLOW  ORDE,EPFW  CHECK FOR OVERFLOW 
          TTL    MSM/4DF - UPDATE MMF TABLES IN EXTENDED MEMORY.
          TITLE 
          IDENT  4DF,EDTX 
*COMMENT  MSM - UPDATE MMF TABLES IN EXTENDED MEMORY. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***              *4DF* UPDATES THE DAT POINTER WORD IN ECS
*         AND CONTAINS ROUTINES FOR PROCESSING OF MACHINE 
*         RECOVERY TABLES (MRTS). 
          SPACE  4
***       ENTRY CONDITIONS. 
* 
*         DEVICE ACCESS TABLE IMAGE IN CM.
*         DATI INTERLOCK SET. 
          TITLE  UPDATE DAT POINTER WORD. 
 EDT      SPACE  4,10 
**        EDT - EDIT DAT POINTER WORD.
* 
*         CALLS  CEA. 
  
  
          ORG    ORDF 
  
 EDT      SUBR               ENTRY/EXIT 
          LDK    MMFL 
          CRD    CM 
          LDD    RS          CHECK RECOVERY LEVEL 
          LPN    FLMK 
          LMN    FLCM 
          ZJN    EDTX        IF CM RECOVERY 
          LDD    CM+4 
          ZJN    EDTX        IF NOT MMF ENVIRONMENT 
          LDM    ECLT        SET LABEL TRACK FOR ECS
          STD    T6 
          LDN    ETLT        SET ENVIRONMENT TABLE SECTOR 
          STD    T7 
  
*         UPDATE *BAET* IN ENVIRONMENT TABLE SECTOR, IF REQUIRED. 
  
          LDD    CM+1 
          SHN    21-11
          PJN    EDT1        IF NO SHARED BUFFERED DEVICES CONFIGURED 
          RJM    CEA         GET ADDRESS OF ENVIRONMENT TABLE SECTOR
          LDN    BAET        ADJUST ADDRESS TO BAT POINTER
          RAD    CM+4 
          SHN    -14
          LMC    WECS*1000   SUBFUNCTION = WRITE XM 
          RAD    CM+3 
          LDN    0
          STD    CM+1        SET WORD COUNT - 1 FOR TRANSFER
          LDD    MA          SET BUFFER ADDRESS IN MONITOR REQUEST
          STD    CM+2 
          CWM    BAEI,ON     STORE *BAET* IMAGE IN CM BUFFER
          MONITOR ECSM
  
*         UPDATE *DAET* IN ENVIRONMENT TABLE SECTOR.
  
 EDT1     LDN    ZERL        CLEAR *DAET* ASSEMBLY
          CRD    CN 
          CRD    CM 
*         LDN    0
*         STD    CM+1        SET WORD COUNT - 1 FOR TRANSFER
          RJM    CEA         GET ADDRESS OF ENVIRONMENT TABLE SECTOR
          LDN    DAET        ADJUST ADDRESS TO DAT POINTER
          RAD    CM+4 
          SHN    -14
          LMC    WECS*1000   SUBFUNCTION = WRITE XM 
          RAD    CM+3 
          LDD    QT          SET CURRENT DAT TRACK
          STD    CN 
          LDD    QI          SET DAT INDEX
          STD    CN+4 
          LDD    MA          STORE *DAET* IMAGE IN CM BUFFER
          CWD    CN 
          STD    CM+2        SET BUFFER ADDRESS IN MONITOR REQUEST
          MONITOR ECSM
          LJM    EDTX        RETURN 
 UER      SPACE  4
**        UER - UPDATE EXTENDED MEMORY RESIDENT.
* 
*         ENTRY  (EQ) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
*         EXIT   (A) .LT. 0 IF RECOVERY INFORMATION NOT TO
*                BE REWRITTEN TO CM UPON RETURN TO *MRL*. 
* 
*         CALLS  ERT, SMT, SRT, CRT.
  
  
 UER1     SHN    21-3+22-21+1 
          PJN    UER2        IF DNAP BY THIS MACHINE
          LDN    STBM        CLEAN UP TRACK INTERLOCKS
          RJM    ERT
          LDD    RS 
          NJN    UER2        IF RECOVERY SELECTED 
          LDD    FN 
          SHN    21-10
          MJN    UER2        IF REMOVABLE DEVICE
          LDN    DTKM        CLEAN UP LOCAL FILE SPACE
          RJM    ERT
 UER2     LDD    EQ          RESET EST ORDINAL
          STD    T5 
          CMSTF  LUNL        FORCE EXTENDED MEMORY UPDATE OF LOCAL MST
  
 UER      SUBR               ENTRY/EXIT 
          SHN    21-11
          PJN    UERX        IF NOT SHARED DEVICE 
          SHN    11-6 
          MJN    UERX        IF DEVICE UNAVAILABLE
          SHN    6-1
          MJN    UER1        IF DEVICE ACCESSED PREVIOUSLY (DAP)
          RJM    SMT         STORE MST/TRT IN ECS 
          RJM    CRT         CLEAR MRTS IN ECS
          UJN    UER2 
 UIS      SPACE  4,10 
**        UIS - UPDATE ISD MRT TABLES.
* 
*         ENTRY  (A) = MS FLAG (RE) SHIFTED TO SIGN POSITION. 
*                (EQ) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
*                (RS) = RECOVERY STATUS.
* 
*         EXIT   (A) .LT. 0 IF RECOVERY INFORMATION NOT TO
*                BE REWRITTEN TO CM UPON RETURN TO *MRL*. 
* 
*         CALLS  ERT. 
  
  
 UIS      SUBR               ENTRY/EXIT 
          SHN    21-6 
          MJN    UISX        IF DEVICE NOT AVAILABLE
          LDD    RS 
          ZJN    UISX        IF LEVEL ZERO DEADSTART
          LDD    FN 
          SHN    21-4 
          PJN    UISX        IF NOT AN ISD DEVICE 
          LDN    STBM        CLEAN UP TRACK INTERLOCKS
          RJM    ERT
          UJN    UISX        RETURN 
 CRT      TITLE  CLEAR MACHINE RECOVERY TABLES. 
**        CRT - CLEAR MRTS. 
* 
*         CALLS  STA, WDS.
* 
*         MACROS ENDMS, SETMS.
  
  
 CRT      SUBR               ENTRY/EXIT 
          LDC    MMFL        READ MMF STATUS WORD 
          CRD    CM 
          LDD    CM+1        SET LINK DEVICE EST ORDINAL
          LPC    777
          STD    T5 
          SETMS  IO,DF
          LDD    FN+4        GET TRT LENGTH FROM MST
          SHN    3
          ADK    TDGL 
          CRD    CN 
          LDD    TS          SET MST/TRT TRACK
          STD    T6 
          LDN    MRST-1      INITIALIZE MRT SECTOR
          STD    T7 
          LDD    CN+2        SET MRT LENGTH 
          ADN    7
          SHN    -3 
          STD    CN+1        SAVE MRT LENGTH
          STM    BFMS+1 
          STD    T1          SET BUFFER LENGTH
          SHN    2
          RAD    T1 
 CRT1     LDN    0           CLEAR BUFFER 
          STM    BFMS+1,T1
          SOD    T1 
          NJN    CRT1 
          LDN    MXMF        SET LOOP COUNT 
          STD    CN 
  
*         CLEAR MRT SECTORS FOR *MXMF* MAINFRAMES.
  
 CRT2     AOD    T7          ADVANCE MRT SECTOR 
          ADN    1           SET NEXT SECTOR IN LINKAGE 
          STM    BFMS 
          LDC    BFMS        CLEAR MRT
          RJM    WDS
          SOD    CN 
          NJN    CRT2        IF MORE MRT-S TO CLEAR 
          ENDMS              RELEASE CHANNEL
          RJM    STA         SET FWA OF TRT 
          ADD    CN+2        SET FWA OF MRT 
          CWM    BFMS+2,CN+1
          LJM    CRTX        RETURN 
 ERT      TITLE  EDIT MACHINE RECOVERY TABLE. 
**        ERT - EDIT MRT. 
* 
*         ENTRY  (A) = *STBM* TO CLEAN UP TRACK INTERLOCKS. 
*                    = *DTKM* TO CLEAN UP LOCAL FILE SPACE. 
*                (EQ) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   ALL LOCAL TRACK CHAINS DROPPED.
* 
*         USES   T0 - T7, CM - CM+4.
* 
*         CALLS  PTA, RDS, STA. 
* 
*         MACROS MONITOR. 
  
  
 ERT2     SHN    21-0        CHECK NEXT BIT 
          STI    T1 
          PJN    ERT3        IF NO RESERVATION
          LDD    T2          SET TRT WORD INDEX 
          SHN    21-1 
          STD    T0 
          SHN    1-21        FORM *SHN* WITH BYTE INDEX 
          ADC    SHNI+21-7
          STM    ERTA 
          RJM    STA         SET FWA OF TRT 
          ADD    T0 
          CRD    CM 
          LDD    CM+4        CHECK WRITE INTERLOCK
 ERTA     SHN    ** 
 ERTB     PJN    ERT3        IF TRACK NOT INTERLOCKED 
*         MJN    ERT3        IF NOT LOCAL FILE
          LDD    MA          LOAD MONITOR REQUEST 
          CRD    CM 
          LDD    T2          SET TRACK IN REQUEST 
          RAD    CM+2 
 ERTC     MONITOR STBM
*         MONITOR DTKM
 ERT3     AOD    T2          ADVANCE TRACK NUMBER 
 ERT4     LDI    T1 
          NJN    ERT2        IF NOT END OF RESERVATIONS IN MRT BYTE 
          LDN    4*3         ALIGN TRACK NUMBER FOR NEXT MRT BYTE 
          RAD    T6 
          STD    T2 
          SOD    T1          MOVE TO NEXT BYTE IN MRT WORD
          LMD    T5 
          NJN    ERT4        IF NOT END OF DATA IN WORD 
          LCN    4           ALIGN TRACK FOR NEXT MRT WORD
          RAD    T6 
          STD    T2 
 ERT5     LDN    3+5         ADVANCE TO NEXT MRT WORD 
          RAD    T1 
          SBN    3           SET END OF DATA CHECK
          STD    T5 
          LMD    T7 
          NJN    ERT4        IF NOT END OF TRT EDIT 
  
 ERT      SUBR               ENTRY/EXIT 
          LMC    LDNI        SET MONITOR FUNCTION 
          STM    ERTC 
          LPN    77 
          LMN    STBM 
          ZJN    ERT1        IF CLEARING TRACK INTERLOCKS 
          LDD    HN          MJNI - PJNI
 ERT1     ADC    PJNI+ERT3-ERTB 
          STM    ERTB 
          RJM    PTA         PRESET FWA OF TRT
          LDD    FN+4        GET TRT LENGTH 
          SHN    3
          ADK    TDGL 
          CRD    T3 
          LDC    BFMS+1 
          STD    T7 
          SBN    3           INITIALIZE MRT ADDRESS 
          STD    T1 
          LDD    T3+2        SET END OF MRT 
          STD    T0          SAVE TRT LENGTH
          ADN    7
          SHN    -3 
          STD    T5 
          SHN    2
          ADD    T5 
          ADN    5-3
          RAD    T7 
          RJM    STA         SET FWA OF TRT 
          ADD    T0 
          CRM    BFMS+2,T5   READ MRT 
          LDN    ZERL        CLEAR TRACK POINTERS 
          CRD    T6-4 
          LDD    EQ          SET UP BASIC MONITOR REQUEST 
          STD    CM+1 
          LDC    4000 
          STD    CM+2 
          LDN    CTIS 
          STD    CM+3 
          LDD    MA          STORE REQUEST IMAGE IN MESSAGE BUFFER
          CWD    CM 
          LJM    ERT5        ENTER LOOP 
 SMT      TITLE  STORE MST/TRT IN EXTENDED MEMORY.
**        SMT - STORE MST + TRT IN EXTENDED MEMORY. 
* 
*         ENTRY  (EQ) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
* 
*         USES   P1, T1, CM+3 - CM+7, CN - CN+4, T5 - T7. 
* 
*         CALLS  CEA, PTA, STA, WDS.
* 
*         MACROS ENDMS, SETMS.
  
  
  
 SMT      SUBR               ENTRY/EXIT 
          RJM    PTA         PRESET FWA OF TRT
          LDC    500-5*GLGL 
          STD    T7 
 SMT1     LDN    0           CLEAR BUFFER 
          STM    BFMS+1+5*GLGL,T7 
          SOD    T7 
          NJN    SMT1 
          STD    P1 
          LDC    MMFL        READ MMF STATUS WORD 
          CRD    CN 
          LDD    CN+1        SET LINK DEVICE EST ORDINAL
          LPC    777
          STD    T5 
          SETMS  IO,DF
  
*         SET UNLOAD STATUS IN EACH LOCAL MST BLOCK.
  
 SMT2     LDN    MLUNL+MLDUL
          STM    BFMS+2+5*STLL,P1 
          LDN    5*LLLL      ADVANCE INDEX
          RAD    P1 
          LMC    MXMF*5*LLLL
          NJN    SMT2        LOOP FOR *MXMF* MSTS 
          LDD    TS          SET MST/TRT TRACK
          STD    T6 
          LDD    HN          SET FULL SECTOR WORD COUNT 
          STM    BFMS+1 
          LDN    ZERL 
          CRD    CM+3 
          RJM    CEA
          LDN    GLGL        SET LENGTH OF GLOBAL MST 
          STD    T1 
          LDN    1           SET INITIAL TRT ACCESS COUNT 
          STD    CM+6 
          LDD    FN+4 
          SHN    3
          ADN    SDGL 
          CWD    CM+3 
          SBN    SDGL-TDGL
          CRD    CN 
          CRM    BFMS+2,T1
          LCN    100-1       INITIALIZE TRT INDEX 
          STD    CN+4 
          LDN    0
          UJN    SMT5        ENTER LOOP WITH (A) = 0
  
 SMT3     SBD    HN          DECREMENT BLOCK COUNT
          PJN    SMT4        IF ANOTHER FULL SECTOR 
          ADD    HN 
          STM    BFMS+1      SET SHORT SECTOR 
          LDN    0
 SMT4     STD    CN+2 
          LDD    HN          ADVANCE TRT ADDRESS
          RAD    CN+4 
          RJM    STA         SET FWA OF TRT 
          ADD    CN+4 
          CRM    BFMS+2,HN
          AOD    T7          ADVANCE SECTOR 
 SMT5     ADN    1
          STM    BFMS 
          LDC    BFMS        WRITE NEXT SECTOR
          RJM    WDS
          LDD    CN+2 
          NJN    SMT3        LOOP TO END OF TRT 
          ENDMS 
          LJM    SMTX        EXIT 
          SPACE  4,10 
          ERRNG  BFMS-*      OVERFLOW INTO BUFFER 
          SPACE  4,10 
          OVERFLOW  ORDF,EPFW  CHECK FOR OVERFLOW 
          TTL    MSM/4DG - DEVICE RECOVERY ROUTINES.
          TITLE 
          IDENT  4DG,/RDG/RDGX
*COMMENT  MSM - DEVICE RECOVERY ROUTINES. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***       *4DG* CONTAINS ADDITIONAL DEVICE RECOVERY ROUTINES. 
          SPACE  4
          QUAL   RDG
          ORG    ORDG 
  
 RDG      SUBR               ENTRY/EXIT 
          RJM    PRS         PRESET OVERLAY 
          UJN    RDGX        RETURN 
          TITLE  COPY MST/TRT TO DISK.
 CTD      SPACE  4,15 
**        CTD - COPY TABLES TO DISK.
* 
*         ENTRY  (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) .GE. 0.
* 
*         USES   P1, T3, T6, T7, CM - CM+4, CN - CN+4.
* 
*         CALLS  CLC, PTA, RDS, STA, WDS. 
* 
*         MACROS CMSTF, ENDMS, MONITOR, SETMS.
  
  
 CTD5     LDD    RE          CHECK ACCESS STATUS
          LPC    1002 
          LMC    1002 
 CTD6     NJN    CTDX        IF NOT SHARED DEVICE ACCESSED PREVIOUSLY 
          LDD    T5 
          STD    CM+1 
          LDN    UITS        GET CURRENT COPY OF TRT / UPDATE MRT 
          STD    CM+3 
          MONITOR STBM
  
 CTD      SUBR               ENTRY/EXIT 
          RJM    PTA         PRESET FWA OF TRT
          CMSTF  LPTU        ENABLE TRT UPDATE BY *1RU* 
*         LDN    0
          STD    T7 
          LDD    FN 
          SHN    21-4 
          PJN    CTD5        IF NOT INDEPENDENT SHARED DEVICE 
          LDD    FN+4 
          SHN    3
          ADN    ALGL        FETCH ALLOCATION WORD FROM MST 
          CRD    CM 
          LDD    CM+1        SET LABEL TRACK
          STD    T6 
          SETMS  IO,(DE,DF) 
          LDC    BFMS        REREAD LABEL SECTOR
          RJM    RDS
          LDD    RE 
          SHN    21-1 
          MJN    CTD1        IF ACCESSED PREVIOUSLY BY OTHER MF 
          LDM    N4SS+5*SDGL+4
          LPN    77          SAVE DIT INDEX 
          STD    P1 
          LDN    MSTL        SET CHECKPOINTED MST LENGTH
          STD    T3 
          LDD    FN+4        SET MST ADDRESS
          SHN    3
          ADK    TDGL        GET TRT LENGTH 
          CRD    CN 
          SBK    TDGL        UPDATE MST IN LABEL SECTOR 
          CRM    N4SS,T3
          LDD    P1          SET SOFTWARE RESERVE IN LABEL
          LMD    HN 
          STM    N4SS+5*SDGL+4
          LDD    CN+2        SET MRT LENGTH 
          ADN    7
          SHN    -3          CALCULATE DIT OFFSET 
          RAD    CN+2 
          UJN    CTD2        GENERATE CHECKSUM
  
 CTD1     LDN    0           CLEAR MACHINE ID TO FORCE TRT UPDATE IN CM 
          STM    N4SS+5*STLL+2
          LDM    N4SS+5*SDGL+4  CLEAR MST INTERLOCK 
          SCN    77 
          STM    N4SS+5*SDGL+4
 CTD2     RJM    CLC         COMPUTE LABEL CHECKSUM 
          STM    CKSS 
          LDC    BFMS+WLSF
          RJM    WDS
          ENDMS              RELEASE HARDWARE RESERVE 
          LDD    RE 
          LPN    2
          NJN    CTD3        IF DEVICE ACCESSED PREVIOUSLY
          AOM    N4SS+5*SDGL+4
          LDD    FN+4        SET MST ADDRESS
          SHN    3
          ADN    SDGL        STORE DEVICE INTERLOCK IN CM 
          CWM    N4SS+5*SDGL,ON 
          RJM    STA         STORE DIT IN CM
          ADD    CN+2 
          ERRNZ  MISD-MSTL   CODE DEPENDS ON VALUE
          CWM    DISS,T3
          LDD    T5 
          STD    CM+1        SET EST ORDINAL
          LDN    CDIS 
          STD    CM+3        UPDATE TABLES ON DISK
          MONITOR  STBM 
*         LDN    0           SET IMMEDIATE RETURN 
 CTD3     LMN    2
          LJM    CTD6        RETURN 
 RMR      SPACE  4,15 
**        RMR - READ MRT. 
* 
*         ENTRY  (T5) = (EQ) = EST ORDINAL. 
*                (FN - FN+4) = EST ENTRY. 
* 
*         USES   T5 - T7, CM - CM+4, CN - CN+4. 
* 
*         CALLS  PTA, RDS, STA. 
* 
*         MACROS ENDMS, SETMS.
  
  
 RMR      SUBR               ENTRY/EXIT 
          LDD    FN 
          SHN    21-11
          PJN    RMRX        IF DEVICE NOT SHARED 
          SHN    21-4-21+11 
          PJN    RMR1        IF NOT ISD 
          LDD    RS 
          LPN    FLMK 
          LMN    FLTB 
          NJN    RMRX        IF FILES NOT RECOVERED FROM MS TABLES
          LDD    RA 
          SHN    6
          ADD    AL          FETCH LABEL SECTOR 
          ADN    DILL 
          CRD    T7 
          LDD    FN+4        GET LABEL TRACK
          SHN    3
          ADN    ALGL 
          CRD    CM 
          ADN    DULL-ALGL   GET MACHINE INDEX
          CRD    CN 
          LDD    CM+1        SET LABEL TRACK
          STD    T6 
          LDD    CN+2        SET MRT SECTOR 
          LPN    17 
          ADN    MRTL 
          RAD    T7 
          UJN    RMR2        READ MRT 
  
 RMR1     LDK    MMFL        GET LINK DEVICE EST ORDINAL
          CRD    CN 
          LDD    CN+1 
          LPC    777
          STD    T5 
          LDD    TS          SET MST/TRT TRACK FOR DEVICE 
          STD    T6 
          LDD    CN+4        SET MRT SECTOR FOR THIS MACHINE
          ADN    MRST-1 
          STD    T7 
 RMR2     SETMS  IO,DF
          LDC    BFMS 
          RJM    RDS
          ENDMS 
          LDD    EQ          RESTORE (T5) 
          STD    T5 
  
*         COPY MRT TO CM AT THE END OF THE TRT. 
  
          RJM    PTA         PRESET TRT ADDRESS 
          LDD    FN+4        GET TRT LENGTH 
          SHN    3
          ADK    TDGL 
          CRD    CM 
          LDD    CM+2        SET MRT LENGTH 
          STD    T0          SAVE TRT LENGTH
          ADN    7
          SHN    -3 
          STD    CM+2 
          RJM    STA         SET TRT FWA
          ADD    T0 
          CWM    BFMS+2,CM+2 COPY MRT TO CM 
          LJM    RMRX        RETURN 
          TITLE  COPY TRT.
 CTT      SPACE  4,10 
**        CTT - COPY TRT. 
* 
*         ENTRY  (CA) = CM ADDRESS OF TRT.
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) = 0. 
* 
*         USES   T6, CM - CM+4, CN - CN+4.
* 
*         CALLS  PTA, STA.
  
  
  
 CTT      SUBR               ENTRY/EXIT 
          RJM    PTA
          LDN    0           SET TRT WORD INDEX 
          STD    T6 
          LDD    FN+4        READ *TDGL*
          SHN    3
          ADK    TDGL 
          CRD    CN 
 CTT1     LDD    RA          READ BUFFER WORD 
          SHN    6
          ADD    CA 
          ADD    T6 
          CRD    CM 
          RJM    STA         SET FWA OF TRT 
          ADD    T6 
          CWD    CM 
          AOD    T6          ADVANCE WORD 
          LMD    CN+2 
          NJN    CTT1        LOOP TO END OF TRT 
*         LDN    0
          UJN    CTTX        RETURN 
 EMT      TITLE  ENTER MST PARAMETERS FROM LABEL. 
**        EMT - ENTER MST PARAMETERS FROM LABEL.
* 
*         ENTRY  (FN - FN+4) = EST ENTRY. 
*                (FS - FS+4) = STLL WORD. 
*                (T5) = EST ORDINAL.
*                (RS) = RECOVERY STATUS.
*                (MBUF) = LABEL MST.
* 
*         EXIT   MST UPDATED TO REFLECT DEVICE LOADED.
*                EST UPDATED TO REFLECT DEVICE LOADED.
*                DEVICE SET AVAILABLE.
* 
*         USES   T1, T2, CM - CM+4, CN - CN+4.
* 
*         MACROS MONITOR, SFA.
  
  
 EMT      SUBR               ENTRY/EXIT 
          LDD    FN 
          LPC    7667 
 EMTB     EQU    *-1
*         LPC    7767        (*CMS* CALL) 
          STD    FN 
          LDD    FN+4        FETCH MST DRIVER WORD
          SHN    3
          ADN    MDGL 
          CRD    CM 
          LDD    CM          RETAIN *R* STATUS AND DAT INDEX
          LPC    4377 
          STD    CM 
          LDN    0
          STD    T2 
          STM    MBUF+5*NVGL+4  CLEAR UNITS RESERVED TO *NVE* 
          LDD    RS 
          NJN    EMT1        IF RECOVERY SELECTED 
          STM    MBUF+5*STLL+3  CLEAR ACTIVE USER COUNT 
          STM    MBUF+5*DULL+1  CLEAR PF INTERLOCK AND COUNT
          STM    MBUF+5*DULL+3  CLEAR SYSTEM TABLE TRACK
          STM    MBUF+5*DULL+4  CLEAR ACTIVE USER COUNT 
 EMT1     LDD    RE          CLEAR UNAVAILABLE STATUS 
          LPC    7677 
          STD    RE 
          LPN    2
          NJN    EMT3        IF DEVICE ACCESSED PREVIOUSLY
          LDD    RS 
          NJN    EMT2        IF RECOVERY DEADSTART
          LDM    MBUF+5*ACGL+3  SAVE *IQFT* TRACK 
          STD    T2 
          LDN    0           CLEAR *IQFT* POINTER 
          STM    MBUF+5*ACGL+3
          LDM    MBUF+5*ACGL+0  CLEAR *DAS* PARITY DEVICE ACCESS FLAGS
          SCN    17 
          STM    MBUF+5*ACGL+0
          LDD    FN+3        CHECK DEVICE TYPE
          LMC    2RDE 
          ZJN    EMT2        IF *DE* DEVICE 
          LMN    2RDP&2RDE
          ZJN    EMT2        IF *DP* DEVICE 
          LDN    0           CLEAR *DAS* PARITY DEVICE FIELDS 
          STM    MBUF+5*ACGL+1
 EMT2     LDD    FN+4        STORE DEVICE ACTIVITY WORD 
          SHN    3
          ADN    ACGL 
          CWM    MBUF+5*ACGL,ON 
 EMT3     LDM    MBUF+5*STLL+3  RETAIN ACTIVE USER COUNT
          STD    FS+3 
          LDM    MBUF+5*MDGL SET *X* AND 16-WORD PFC STATUS FROM LABEL
          LPC    3000 
          RAD    CM 
          LDD    FN          SET MACHINE INDEX FOR DEVICE 
          SHN    21-4 
          MJN    EMT4        IF ISD 
 EMTA     LDN    0           (MACHINE INDEX - 1)
          STM    MBUF+5*DULL+2
 EMT4     LDD    FN+4        STORE ALLOCATION AND DEVICE DESCRIPTION
          SHN    3
          ADN    ALGL 
          ERRNZ  PFGL-ALGL-1 ADJUST IF *PFGL* POSITION CHANGES
          ERRNZ  PUGL-ALGL-2 ADJUST IF *PUGL* POSITION CHANGES
          CWM    MBUF+5*ALGL,TR 
          ADK    MDGL-ALGL-3 STORE DRIVER WORD
          CWD    CM 
          LDD    FN+4        PRESERVE BAT ADDRESS 
          SHN    3
          ADN    NVGL 
          CRD    CM 
          LDD    CM+1 
          STM    MBUF+5*NVGL+1
          LDD    CM+2 
          STM    MBUF+5*NVGL+2
          LDD    FN+4        STORE BAT PARAMETERS 
          SHN    3
          ADN    NVGL 
          ERRNZ  NVGL+1-ISGL CODE DEPENDS ON VALUE
          ERRNZ  ISGL+1-I2GL CODE DEPENDS ON VALUE
          CWM    MBUF+5*NVGL,TR 
          ADN    DULL-NVGL-3 STORE DEVICE USAGE INFORMATION 
          CWM    MBUF+5*DULL,ON 
          CWD    FS          STORE DEVICE STATUS
          SFA    EST,T5      SET EQUIPMENT AVAILABLE IN EST 
          ADK    EQDE 
          CWD    FN 
          LDD    T2 
          ZJN    EMT5        IF NO *IQFT* 
          STD    CM+2 
          LDD    T5          RELEASE *IQFT* TRACK CHAIN 
          STD    CM+1 
          MONITOR  DTKM 
 EMT5     LJM    EMTX        RETURN 
 ETT      TITLE  EDIT TRT.
**        ETT - EDIT TRACK TABLE. 
* 
*         ENTRY  (CA) = ADDRESS OF CM BUFFER CONTAINING TRT.
*                (FN - FN+4) = EST ENTRY. 
*                (MBUF) = LABEL MST.
* 
*         EXIT   (A) = 0 IF COPY SUCCESSFUL.
*                (A) .LT. 0 IF ERROR IN EDITING.
*                ALL NON-PRESERVED FILE CHAINS RELEASED.
* 
*         USES   T1, T2, T6, T7, P1, CM - CM+4. 
* 
*         CALLS  PTA, RTC, STF. 
  
  
 ETT      SUBR               ENTRY/EXIT 
          LDD    FN+4        GET TRT LENGTH 
          SHN    3
          ADK    TDGL 
          CRD    CM 
          LDD    CM+2        SET TRT LENGTH 
          STD    P1 
          RJM    PTA         PRESET FWA OF TRT
          LDN    0           CLEAR WORD AND BYTE INDEX
          STD    T6 
          STD    T7 
          STM    MBUF+5*ACGL+2  CLEAR PRESERVED FILE COUNT
 ETT1     LDD    RA          READ BUFFER WORD 
          SHN    6
          ADD    CA 
          ADD    T6 
          CRD    CM 
          LDD    CM+4        SET PRESERVED FILE IDENTIFIERS 
          LPC    7400 
          STM    ETTB        SET BIT MASK 
          LDM    CM,T7       CHECK FOR RESERVED TRACK 
          LMC    3777 
          NJN    ETT2        IF NOT FLAWED TRACK
          RJM    STF         SET TRACK FLAW 
          UJN    ETT3        ADVANCE BYTE INDEX 
  
 ETT2     LDM    ETTC,T7     CHECK PRESERVED FILE BIT 
          LPC    *
 ETTB     EQU    *-1
          ZJN    ETT3        IF NOT PRESERVED FILE
          RJM    RTC         RESERVE TRACK CHAIN
          AOM    MBUF+5*ACGL+2  ADVANCE PRESERVED FILE COUNT
 ETT3     AOD    T7          ADVANCE BYTE INDEX 
          LMN    4
          NJN    ETT4        IF NOT END OF TRT WORD 
          STD    T7 
          AOD    T6          ADVANCE WORD INDEX 
          LMD    P1 
          ZJN    ETT5        IF END OF BUFFER 
 ETT4     LJM    ETT1        LOOP 
  
 ETT5     LDM    MBUF+5*NVGL
          ZJN    ETT7        IF NO MEDIA ERRORS RECORDED
          SHN    21-1 
          LMD    TH          EXTRACT TRT WORD INDEX 
          STD    T6 
          SHN    1-21        FORM BYTE INDEX FROM TRACK NUMBER
          STD    T7 
          RJM    STF         SET TRACK FLAW 
          NJN    ETT6        IF TRACK RESERVED
          STM    MBUF+5*NVGL
 ETT6     LDN    0
 ETT7     LJM    ETTX        RETURN 
  
  
*         TRACK RESERVATION BITS. 
  
 ETTC     BSS    0
          CON    4010 
          CON    2004 
          CON    1002 
          CON    0401 
 RTC      TITLE  RESERVE TRACK CHAIN. 
**        RTC - RESERVE TRACK CHAIN.
* 
*         ENTRY  (CA) = BUFFER ADDRESS. 
*                (P1) = TRT LENGTH. 
*                (FN - FN+4) = EST ENTRY. 
*                (T6) = WORD INDEX. 
*                (T7) = BYTE INDEX. 
* 
*         EXIT   (A) = *STLK* IF LINKAGE ERROR. 
*                TO *ETTX* IF LINKAGE ERROR.
* 
*         USES   T1, T2, CM - CM+4, CN - CN+4.
* 
*         CALLS  STA. 
  
  
 RTC      SUBR               ENTRY/EXIT 
          LDD    T6          SET WORD INDEX 
          STD    T1 
          LDD    T7          SET BYTE INDEX 
          STD    T2 
 RTC1     LDD    T1          CHECK WORD INDEX 
          SBD    P1 
          PJN    RTC2        IF OUT OF TRT
          RJM    STA         SET FWA OF TRT 
          ADD    T1 
          CRD    CN 
          LDM    CN,T2       CHECK TRACK LINK 
          ZJN    RTC3        IF CLEAR 
 RTC2     LDN    STLK 
          LJM    ETTX        EXIT 
  
 RTC3     LDM    CM,T2       SET NEXT LINK
          STM    CN,T2
          LDM    ETTC,T2     SET PROPAGATION MASK 
          STM    RTCB 
          LMC    -0          SET RESERVATION MASK 
          STM    RTCA 
          LDD    CN+4        SAVE PREVIOUS BITS 
          LPC    *
 RTCA     EQU    *-1
          STD    CN+4 
          LDD    CM+4 
          LPC    *
 RTCB     EQU    *-1
          RAD    CN+4 
          RJM    STA         SET FWA OF TRT 
          ADD    T1 
          CWD    CN 
          LDM    CN,T2       CHECK NEXT LINK
          SHN    6
          MJN    RTC4        IF NOT END OF TRACK CHAIN
          LJM    RTCX        RETURN 
  
 RTC4     SHN    12          SET WORD INDEX 
          LMD    TH 
          STD    T1 
          SHN    -20         SET BYTE INDEX 
          STD    T2 
          LDD    RA          READ BUFFER WORD 
          SHN    6
          ADD    CA 
          ADD    T1 
          CRD    CM 
          LJM    RTC1        LOOP TO END OF CHAIN 
 RTT      TITLE  READ TRT.
**        RTT - RECOVER TRACK RESERVATION TABLE.
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (CA+1) = CM BUFFER ADDRESS FOR TRT.
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) = 0 IF SUCCESSFUL RECOVERY.
*                    = *STTL* IF TRT LENGTH ERROR.
*                    = *STLK* IF TRT LINKAGE ERROR. 
*                (CA) = FWA OF TRT IN CM. 
*                (MBUF) = LABEL MST.
* 
*         USES   P1, T1, T3, T6, T7, CN - CN+4. 
* 
*         CALLS  ATC, CTD, CTT, EMT, ETT, RMR, RDS. 
* 
*         MACROS ENDMS, MONITOR, SETMS. 
  
  
 RTT4     NJN    RTTX        IF LENGTH ERROR
          RJM    ETT         EDIT TRACK TABLE 
 RTTA     EQU    *-1
*         RJM    CTT         (RECOVERY DEADSTART) 
          NJN    RTTX        IF LINKAGE ERROR 
 RTT5     RJM    EMT         ENTER MST PARAMETERS 
          RJM    ATC         ADJUST TRACK COUNT 
 RTTB     UJN    *+2         SKIP MRT UPDATE
          CON    RMR
*         RJM    RMR         (RECOVERY DEADSTART) 
          RJM    CTD         COPY SHARED TABLES 
          LDN    0
  
 RTT      SUBR               ENTRY/EXIT 
          LDN    MSTL 
          STD    T1 
          LDD    RA          READ LABEL INTO MST BUFFER 
          SHN    6
          ADD    AL 
          CRM    MBUF,T1
          LDD    RE          CHECK ESM RESIDENT TRT 
          LPC    1002 
          LMC    1002 
          ZJN    RTT5        IF DEVICE ACCESSED PREVIOUSLY
          SETMS  IO,DF
          LDD    CA+1        SET FWA FOR TRT IN CM
          STD    CA 
          LDM    MBUF+5*ALGL+1  SET LABEL TRACK 
          STD    T6 
          LDM    MBUF+5*DILL SET SECTOR NUMBER
          ADN    FSMS 
          STD    T7 
          LDD    FN+4        SET LENGTH OF TRT
          SHN    3
          ADK    TDGL 
          CRD    CN 
          LDD    CN+2 
          STD    P1 
 RTT1     LDC    BFMS        READ SECTOR
          RJM    RDS
          MJN    RTT2        IF MS ERROR
          LDM    BFMS 
          ZJN    RTT2        IF EOF/EOI 
          STD    T7 
          LDM    BFMS+1 
          ZJN    RTT2        IF END OF TRT
          STD    T1 
          LDD    P1 
          SBD    T1 
          MJN    RTT2        IF WORD COUNT > TRT SIZE 
          STD    P1 
          LDD    RA          WRITE SECTOR TO CM 
          SHN    6
          ADD    CA 
          CWM    BFMS+2,T1
          LDD    T1 
          RAD    CA 
          LDD    T1 
          SHN    -6 
          NJN    RTT1        IF NOT EOR 
 RTT2     ENDMS              RELEASE CHANNEL
          LDD    CA+1 
          STD    CA          SET FWA OF TRT IN CM 
          LDD    P1 
          ZJN    RTT3        IF CORRECT TRT LENGTH
          LDN    STTL 
 RTT3     LJM    RTT4        COMPLETE RECOVERY
 STF      TITLE  SET TRACK FLAW.
**        STF - SET TRACK FLAW IN TRT.
* 
*         ENTRY  (T6) = TRT WORD INDEX. 
*                (T7) = BYTE INDEX. 
*                (P1) = TRT LENGTH. 
* 
*         EXIT   (A) = 0 IF INVALID TRACK.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  STA. 
  
  
 STF1     LDN    0           INDICATE INVALID TRACK 
  
 STF      SUBR               ENTRY/EXIT 
          LDD    T6 
          SBD    P1 
          PJN    STF1        IF TRACK OUT OF TRT
          RJM    STA
          ADD    T6          READ TRT WORD
          CRD    CM 
          LDM    ETTC,T7     SET TRACK RESERVATION MASK 
          LPN    17 
          STD    T0 
          LMD    CM+4        CHECK TRACK ASSIGNMENT 
          SBD    T0 
          LMD    CM+4 
          NJN    STFX        IF RESERVED
          LDD    T0 
          RAD    CM+4        SET TRACK RESERVED 
          LDC    3777 
          STM    CM,T7       SET TRACK FLAWED 
          RJM    STA
          ADD    T6          STORE TRT WORD 
          CWD    CM 
          UJN    STFX        RETURN 
          TITLE  SET EQUIPMENT CONFIGURATION. 
 AUL      SPACE  4,15 
**        AUL - ASSEMBLE UNIT LIST. 
* 
*         ENTRY  (UC) = REQUIRED UNIT COUNT.
*                (FN - FN+4) = EST ENTRY. 
*                (CN - CN+4) = UNIT DESCRIPTOR WORD (DDLL). 
* 
*         EXIT   (A) = 0 IF REQUIRED UNIT COUNT SATISFIED.
*                (CN - CN+4) = NEW UNIT LIST. 
*                (FS - FS+4) = DEVICE STATUS WORD (STLL). 
* 
*         USES   T0 - T3, CM - CM+4, FS - FS+4. 
  
  
 AUL2     AOD    T1          ADVANCE UNITS TRANSFERED COUNT 
          SHN    21-0 
          MJN    AUL3        IF NOT CROSSING BYTE BOUNDARY
          SOD    T2          DECREMENT SOURCE ADDRESS 
 AUL3     AOD    CN          ADVANCE TOTAL UNIT COUNT 
          LPN    7
          SHN    -1 
          STD    T0 
          LDN    CN+4        FORM DESTINATION BYTE ADDRESS
          SBD    T0 
          STD    T3 
          LDI    T2          EXTRACT NEXT UNIT
          SHN    14 
          STI    T2 
          SHN    -14
 AULA     PJN    AUL4        IF PACKING UNIT LOW
*         MJN    AUL4        FALL THRU IF PACKING UNIT HIGH 
          SHN    6
          LMI    T3          ASSEMBLE UNIT DESCRIPTOR WORD
          SCN    77 
          LMI    T3 
 AUL4     STI    T3 
          LDD    UC 
          LMD    CN 
          LPN    7
          ZJN    AULX        IF REQUIRED UNIT COUNT SATISFIED 
          LDM    AULA        TOGGLE UNIT PACKING TRANSFER 
          LMD    HN 
          STM    AULA 
          SOD    CM 
          PJN    AUL2        IF MORE UNITS THIS EQUIPMENT 
  
 AUL      SUBR               ENTRY/EXIT 
          LDD    FN+4 
          SHN    3
          ADN    STLL 
          CRD    FS 
          ADN    DDLL-STLL   GET UNIT DESCRIPTOR WORD 
          CRD    CM 
          LDD    CM 
          LPN    7
          STD    CM 
          LDD    CN          CHECK CURRENT UNIT COUNT 
          LPN    1
          ZJN    AUL1        IF NEXT UNIT PACKS LOW 
          LDD    HN          PJNI .NOT. MJNI
 AUL1     LMC    MJNI+AUL4-AULA 
          STM    AULA        SET INITIAL PACKING TRANSFER 
          LDN    0           CLEAR UNITS UNPACKED 
          STD    T1 
          LDN    CM+4        SET INITIAL SOURCE ADDRESS 
          STD    T2 
          LJM    AUL3        ENTER LOOP 
 SEC      SPACE  4,15 
**        SEC - SET EQUIPMENT CONFIGURATION.
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (EQ) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   EST/MST SET TO ACCOMMODATE NEW CONFIGURATION.
*                ALL EXCEPT FIRST EQUIPMENT IN CHAIN SET IN USE.
*                (FS - FS+4) = STLL WORD FOR EQUIPMENT. 
*                (FN - FN+4) = EST ENTRY. 
* 
*         USES   EC, UC, CM - CM+7, CN - CN+4.
* 
*         CALLS  AUL, SES, SSL. 
* 
*         MACROS SFA, SMSTF.
  
  
 SEC5     RJM    SSL         SET SECTOR LIMITS
  
 SEC      SUBR               ENTRY/EXIT 
          LDN    0           CLEAR MST ERROR STATUS 
          STD    EC 
          RJM    SES
          LDD    FN+4        READ CONFIGURATION PARAMETERS
          SHN    3
          ADN    MDGL 
          CRD    CM+3 
          SBN    MDGL-PFGL
          CRD    CM 
          ADN    STLL-PFGL
          CRD    FS 
          ADN    DDLL-STLL
          CRD    CN 
          LDD    CN          SAVE CURRENT UNIT COUNT
          LPN    7
          STD    T0 
          LDD    FN          CHECK EQUIPMENT STATUS 
          SHN    21-10
          PJN    SEC5        IF NOT REMOVABLE DEVICE
          LDD    CM+5 
          LMC    2RDI 
          ZJN    SEC1        IF *6DI* DRIVER
          LMN    2RDJ&2RDI
          ZJN    SEC1        IF *6DJ* DRIVER
          LDD    CM+4        SET REQUIRED = CURRENT UNIT COUNT
          LPN    7
          STD    CM+4 
          LDD    CN 
          SCN    7
          LMD    CM+4 
          STD    CN 
 SEC1     LDD    CM+4        SET REQUIRED UNIT COUNT
          LPN    7
          STD    UC 
          SBD    T0 
          ZJN    SEC4        IF REQUIRED = CURRENT UNIT COUNT 
          MJN    SEC3        IF REQUIRED COUNT .LT. CURRENT 
 SEC2     LDD    FS+4        SET NEXT EQUIPMENT IN CHAIN
          SHN    -3 
          STD    T5 
          SFA    EST         READ NEXT EQUIPMENT EST
          ADK    EQDE 
          CRD    FN 
          SMSTF  LDIU        SET DEVICE IN USE
          RJM    AUL         ASSEMBLE UNIT LIST 
          NJN    SEC2        IF REQUIRED UNITS NOT ASSEMBLED
 SEC3     RAD    CN 
          LDD    EQ          RESTORE FIRST EQUIPMENT PARAMETERS 
          STD    T5 
          SFA    EST
          ADK    EQDE 
          CRD    FN 
 SEC4     LDD    FN+4 
          SHN    3
          ADN    STLL 
          CRD    FS 
          ADN    DDLL-STLL   UPDATE UNIT DESCRIPTOR WORD
          CWD    CN 
          LJM    SEC5        COMPLETE PROCESSING AND EXIT 
          SPACE  4
          ERRNG  BFMS-*      OVERFLOW INTO BUFFER 
          TITLE  PRESET.
 PRS      SPACE  4,10 
**        PRS - PRESET OVERLAY. 
  
  
 PRS      SUBR               ENTRY/EXIT 
  
*         PRESET FOR MMF PROCESSING.
  
          LDM    MMFP 
          ZJN    PRS1        IF DO NOT PRESET FOR MMF 
          LDC    MMFL        GET MMF STATUS 
          CRD    CM 
          SOD    CM+4 
          RAM    EMTA 
  
*         PRESET FOR RECOVERY PROCESSING. 
  
 PRS1     LDD    RS 
          ZJN    PRSX        IF NOT RECOVERY DEADSTART
          LDC    CTT
          STM    RTTA        ENABLE RECOVERY PROCESSING 
          LDC    RJMI 
          STM    RTTB 
          UJP    PRSX        EXIT 
          SPACE  4,10 
          QUAL
  
 CTD      EQU    /RDG/CTD 
 RMR      EQU    /RDG/RMR 
 RTT      EQU    /RDG/RTT 
 SEC      EQU    /RDG/SEC 
          SPACE  4,10 
          OVERFLOW  ORDG,EPFW  CHECK FOR OVERFLOW 
          TTL    MSM/4DH - DEVICE INITIALIZATION ROUTINES.
          TITLE 
          QUAL   RDH
          IDENT  4DH,/RDH/RDHX
*COMMENT  MSM - DEVICE INITIALIZATION ROUTINES. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 RDH      SPACE  4,10 
***              *4DH* CONTAINS ROUTINES UTILIZED BY *RMS*
*         IN INITIALIZING MASS STORAGE EQUIPMENTS.
 RDH      SPACE  4,10 
**        ROUTINES CALLED.
* 
*         0PI - PRESET DRIVER TO READ/WRITE DEADSTART SECTOR. 
*         0TI - SET TRACK FLAWS IN TRT. 
          SPACE  4,10 
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 PB       EQU    RG - RI+1   FORMAT PARAMETER BLOCK (3 LOCATIONS) 
 CS       EQU    ET          CHANNEL STATUS 
 FR       EQU    P1          FORMAT REQUIRED FLAG 
 LC       EQU    P2          LAST CYLINDER + 1
  
****
          SPACE  4,10 
**        ASSEMBLY CONSTANTS. 
  
  
 DC       EQU    11          DISK CHANNEL 
  
 FCGS     EQU    12          GENERAL STATUS FUNCTION CODE 
 FCFP     EQU    16          FORMAT PACK FUNCTION CODE
  
 FPBL     EQU    22          FORMAT PACK PARAMETER BLOCK LENGTH 
 RDH      SPACE  4,10 
          ORG    ORDH 
  
 RDH      SUBR               ENTRY/EXIT 
          LJM    POV         PRESET OVERLAY 
          TITLE  MAIN INITIALIZATION ROUTINE. 
 IMS      SPACE  4,15 
**        IMS - INITIALIZE MASS STORAGE.
* 
*         ENTRY  (EQ) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) .LT. 0 IF RECOVERY INFORMATION NOT TO
*                BE REWRITTEN TO CM UPON RETURN TO *MRL*. 
* 
*         ERROR  TO *HNG* IF SHARED DEVICE CONFLICT.
* 
*         USES   CM+3 - CM+7, CN - CN+4, FS - FS+4. 
* 
*         CALLS  CSD, /RMS/CSE, IDS, UDT. 
* 
*         MACROS UJMF.
  
  
 IMS5     RJM    IDS         INITIALIZE DEVICE STATUS 
          NJN    IMSX        IF DEVICE NOT READY
          UJMF   IMSX        NON MMF TRANSFER 
          RJM    UDT         UPDATE DAT 
          NJN    IMS1        IF EXTENDED MEMORY TRACK UNAVAILABLE 
  
 IMS      SUBR               ENTRY/EXIT 
          SHN    21-4 
          PJN    IMSX        IF INITIALIZE NOT SELECTED 
          LDD    FN+4        GET FAMILY NAME/DEVICE NUMBER
          SHN    3
          ADN    PFGL 
          CRD    CN 
          ADN    MDGL-PFGL   GET SECTOR LIMITS
          CRD    CM+3 
          ADN    STLL-MDGL   FETCH DEVICE STATUS
          CRD    FS 
          RJM    /RMS/CSE    CHECK SYSTEM EQUIPMENT 
          UJMF   IMS5        NON MMF TRANSFER 
          RJM    CSD         CHECK SHARED DEVICE STATUS 
 IMS1     NJN    IMS4        IF DAT CONFLICT
          LDD    T2 
 IMS2     ZJN    IMS5        IF DEVICE NOT DESCRIBED IN DAT 
          LDI    T2 
          LPC    -0 
 IMSA     EQU    *-1
          STI    T2 
          ZJN    IMS5        IF DEVICE NOT ACTIVE IN DAT
          LDM    DATB+4 
          ZJN    IMS3        IF NON-SHARED DEVICE 
          LDN    CSDC-CSDB
 IMS3     ADC    CSDB 
 IMS4     LJM    /RMS/HNG    DISPLAY ERROR AND HANG PP
          TITLE  SUBROUTINES. 
 CFR      SPACE  4,20 
**        CFR - CHECK FOR FORMAT REQUEST. 
* 
*         ENTRY  (A) = 0 IF DEADSTART SECTOR READ BY *RCS*. 
*                (AM) = ALGORITHM INDEX.
*                (CS) = CHANNEL STATUS. 
*                (FR) = FORMAT REQUIRED FLAG. 
*                (LC) = FIRST CYLINDER OF *CTI* SPACE.
*                (T5) = EST ORDINAL.
*                (T6) = TRACK CONTAINING DEADSTART SECTOR.
*                (T7) = DEADSTART SECTOR. 
*                (FN - FN+4) = EST ENTRY. 
*                (FS - FS+4) = *STLL* WORD OF MST.
* 
*         USES   T3.
* 
*         CALLS  *4DI*. 
* 
*         MACROS EXECUTE. 
  
  
 CFR      SUBR               ENTRY/EXIT 
          STD    T3 
          LDD    FR 
          NJN    CFR1        IF FORMAT REQUIRED 
          LDD    FS 
          SHN    21-LFPR+LFPR/12D*12D 
          PJN    CFRX        IF DEVICE NOT BEING FORMATTED
 CFR1     LDD    AM 
          LMN    AIDC 
          NJN    CFRX        IF NOT 895 DEVICE
          LDD    CS 
          ZJN    CFRX        IF ALL CONCURRENT CHANNELS 
          EXECUTE  4DI       FORMAT 895 DEVICE
          UJN    CFRX        RETURN 
 CTF      SPACE  4,10 
**        CTF - CHECK TRACK FLAWED IN TRT.
* 
*         ENTRY  (A) = TRACK NUMBER.
* 
*         EXIT   (A) = 0 IF TRACK FLAWED. 
* 
*         USES   T0, T1, CM - CM+4. 
* 
*         CALLS  STA. 
  
  
 CTF      SUBR               ENTRY/EXIT 
          LPC    3777        UNPACK TRACK 
          SHN    21-1        SET TRT WORD INDEX 
          STD    T0 
          SHN    1-21        SET BYTE INDEX 
          STD    T1 
          RJM    STA         SET FWA OF TRT 
          ADD    T0 
          CRD    CM 
          LDM    CM,T1       CHECK TRACK
          LMC    3777 
          UJN    CTFX        RETURN 
 FBT      SPACE  4,10 
**        FBT - FLAW BLOCK OF TRACKS IN TRT.
* 
*         ENTRY  (T3) = FIRST TRACK NUMBER. 
*                (CN) = LAST TRACK NUMBER + 1.
*                (T5) = EST ORDINAL.
* 
*         EXIT   ALL TRACKS FLAWED IN SPECIFIED BLOCK.
* 
*         USES   T3, CM - CM+4. 
* 
*         CALLS  CTF. 
* 
*         MACROS MONITOR. 
  
  
 FBT      SUBR               ENTRY/EXIT 
 FBT1     LDD    T3          CHECK TRACK FLAWED 
          RJM    CTF
          ZJN    FBT2        IF TRACK ALREADY FLAWED
          LDD    T5 
          STD    CM+1 
          LDD    T3 
          STD    CM+2 
          LDN    STFS        FLAW TRACK IN TRT
          STD    CM+3 
          MONITOR  STBM 
 FBT2     AOD    T3          ADVANCE TRACK NUMBER 
          LMD    CN 
          NJN    FBT1        IF NOT END OF TRACKS TO FLAW 
          UJN    FBTX        RETURN 
 IDS      SPACE  4,15 
**        IDS - INITIALIZE DEVICE.
* 
*         ENTRY  (EQ) = (T5) = EST ORDINAL. 
*                (FN - FN+4) = EST ENTRY. 
*                (FS - FS+4) = STLL WORD. 
* 
*         EXIT   (A) = 0 IF DEVICE SET TO INITIALIZE. 
*                LABEL TRACK ASSIGNED.
* 
*         USES   CS, T1, T3, T6, CM - CM+4, CN - CN+4.
* 
*         CALLS  CFR, CTF, IFM, PTA, PTF, RCS, SNC. 
* 
*         MACROS ENDMS, MONITOR, SETMS, SFA, SMSTF. 
  
  
 IDS7     LDN    0           INHIBIT FURTHER PROCESSING OF DEVICE 
          STD    RE 
          LDN    1           INDICATE DEVICE NOT INITIALIZED
  
 IDS      SUBR               ENTRY/EXIT 
          LDD    FN 
          LPN    2
          NJN    IDS7        IF DEVICE OFF OR DOWN
          SMSTF  LPTU        PROHIBIT TRT UPDATE BY *1RU* 
          RJM    PTA         PRESET FWA OF TRT
          LDD    FN          CHECK EQUIPMENT TYPE 
          LPC    200
          STM    PFTA        SET LDAM FLAG FOR *PFT* ROUTINE
          ZJN    IDS1        IF NOT *LDAM* DEVICE 
          RJM    SNC         SELECT NIO CHANNEL 
          STD    CS 
          RJM    IFM         INTERPRET FLAW MAP 
          RJM    RCS         RESERVE *CTI* SPACE
          RJM    CFR         CHECK FOR FORMAT REQUEST 
 IDS1     LDN    ZERL        REQUEST LABEL TRACK
          CRD    CM 
          LDD    T5 
          STD    CM+1 
          MONITOR  RTCM 
*         LDN    0           SET SECTOR 
          STD    T7 
          LDD    CM+4        SET LABEL TRACK
          STD    T6 
          ZJP    IDS2        IF NO TRACK ASSIGNED 
          STD    CM+2 
          LDN    SPFS        SET PRESERVED FILE STATUS
          STD    CM+3 
          MONITOR  STBM 
          LDD    FN+4        READ *ALGL*
          SHN    3
          ADK    TDGL 
          CRD    CM 
          ADN    ALGL-TDGL
          CRD    CN 
          LDD    CM          SET TRACK COUNT
          STD    T3 
          LDD    T6          SET LABEL TRACK
          STD    CN+1 
          LDD    FN+4        STORE *ALGL* 
          SHN    3
          ADN    ALGL 
          CWD    CN 
          LDD    FN          SET DEVICE AS AVAILABLE
          LPC    7667 
          LMN    10          SET DEVICE ACTIVE
          STD    FN 
          LDD    RE 
          LPC    7677 
          STD    RE 
          SFA    EST,T5      WRITE EST ENTRY
          ADK    EQDE 
          CWD    FN 
          LDC    501         BUFFER INDEX 
          STD    T1 
          LDC    LTKL-1 
          SBD    T6 
          PJN    IDS3        IF LABEL TRACK WITHIN RANGE
 IDS2     LDC    IDSA 
          LJM    /RMS/HNG    ISSUE ERROR MESSAGE AND HANG 
  
*         PREWRITE ALL POTENTIAL LABEL TRACKS THAT ARE FLAWED.
  
 IDS3     LDN    0           CLEAR SECTOR BUFFER
          STM    BFMS,T1
          SOD    T1 
          PJN    IDS3        IF MORE TO CLEAR 
          SHN    -7 
          STM    FNSS        SET FLAW INDICATOR 
          SETMS  IO,(SM,AR,DF)
          RJM    PFT         PREWRITE LABEL TRACK 
          LDC    FLTK 
          STD    T6 
 IDS4     LDD    T6          CHECK TRACK FLAWED 
          RJM    CTF
          NJN    IDS5        IF NOT FLAWED
          STD    T7 
          RJM    PFT         PREWRITE FLAWED TRACK
 IDS5     SOD    T3 
          ZJN    IDS6        IF END OF TRACKS ON DEVICE 
          AOD    T6 
          LMC    LTKL 
          NJN    IDS4        IF NOT ALL POSSIBLE LABEL TRACKS 
 IDS6     ENDMS 
*         LDN    0
          LJM    IDSX        RETURN 
  
  
 IDSA     DATA   C*LABEL TRACK CONFLICT.* 
 IFM      SPACE  4,15 
**        IFM - INTERPRET FLAW MAP. 
* 
*         ENTRY  (EQ) = (T5) = EST ORDINAL. 
*                (FS - FS+4) = MST STATUS WORD (STLL).
*                (FN - FN+4) = EST ENTRY FOR EQUIPMENT. 
*                (CS) = CHANNEL STATUS. 
* 
*         EXIT   (T5) = EQUIPMENT.
*                (AM) = ALGORITHM INDEX.
*                FLAWS SET IN TRT FOR *LDAM* TYPE EQUIPMENT.
* 
*         EREXIT (A) .NE. 0 IF REMOVABLE *LDAM* DEVICE NOT READY. 
*                TO *IDSX* IF REMOVABLE *LDAM* DEVICE NOT READY.
* 
*         USES   T3, CM - CM+4, FS - FS+1.
* 
*         CALLS  EXR, SDR, *0TI*, *0TJ*.
* 
*         MACROS EXECUTE. 
  
  
 IFM2     LDD    FN+3        GET UNIT COUNT 
          SHN    3
          ADN    DDLL 
          CRD    CM 
          LDD    CM          SET UNIT COUNT 
          LPN    7
          STD    T2 
          LDN    PRFM        REQUEST FLAW MAP PROCESSING
          RJM    SDR         SET BUFFERED DEVICE REQUEST
  
 IFM      SUBR               ENTRY/EXIT 
          LDD    CS 
          ZJN    IFM2        IF ALL CONCURRENT CHANNELS 
          LDD    T5          SET EQUIPMENT PARAMETER
          STM    MIPA 
 IFM1     LDD    FN+4 
          SHN    3
          ADN    DILL        READ ALGORITHM INDEX FROM LIST 
          CRD    CM 
          LDD    CM+4        LOAD ALGORITHM INDEX 
          LPN    77 
          STD    AM 
          EXECUTE 0TI,MILA   EXECUTE FLAW PROCESSOR 
          ZJN    IFMX        IF NO FLAWING ERRORS 
          LDM    RDCT 
          LPN    77 
          LMN    NRDE 
          NJN    IFMX        IF DEVICE READY
          LDD    FN 
          SHN    21-10
          PJN    IFM1        IF NON-REMOVABLE DEVICE
          LDN    ZERL 
          CRD    CM 
          LDN    0           CLEAR INITIALIZATION REQUEST 
          STD    RE 
          STD    FS 
          LMN    STNR        SET NOT READY STATUS 
          STD    FS+1 
          LDD    FN+4 
          SHN    3
          ADN    PFGL        CLEAR DEVICE DESCRIPTION 
          CWD    CM 
          ADN    PUGL-PFGL
          CWD    CM 
          ADN    STLL-PUGL   STORE MST STATUS WORD
          CWD    FS 
          LJM    IDSX        EXIT 
 PFT      SPACE  4,15 
**        PFT - PREWRITE FLAWED TRACK.
* 
*         ENTRY  (T4 - T7) = MASS STORAGE PARAMETERS. 
*                (PFTA) .NE. 0 IF *LDAM* DEVICE.
*                DRIVER PRESET. 
* 
*         CALLS  WDS. 
  
  
 PFT      SUBR               ENTRY/EXIT 
 PFT2     LDC    BFMS+WCSF   WRITE SECTOR 
          RJM    WDS
          LDC    0
 PFTA     EQU    *-1
          ZJN    PFTX        IF NOT *LDAM* DEVICE 
          AOD    T7 
          LMM    SLM
          NJN    PFT2        IF NOT END OF TRACK
          UJN    PFTX        RETURN 
 RCS      SPACE  4,15 
**        RCS - RESERVE *CTI* SPACE.
* 
*         ENTRY  (EQ) = EST ORDINAL.
*                (AM) = ALGORITHM INDEX.
*                (FN+4) = MST POINTER.
*                (CS) = CHANNELS STATUS.
* 
*         EXIT   (A) = 0 IF DEADSTART SECTOR READ WITHOUT ERROR.
*                (FR) = 0 IF FORMAT UNREQUIRED (*CIP* SPACE INTACT).
*                (LC) = FIRST CYLINDER OF *CTI* SPACE.
*                (T5) = EST ORDINAL.
*                (T6) = TRACK CONTAINING DEADSTART SECTOR.
*                (T7) = DEADSTART SECTOR. 
*                *CTI* SPACE FLAWED IN TRT. 
* 
*         USES   T3, T9, CM - CM+4, CN - CN+4.
* 
*         CALLS  FBT, RDS, WDS, *0PI*.
* 
*         MACROS ENDMS, EXECUTE, SMSTF. 
  
  
 RCS8     LDC    **          CHECK DEADSTART SECTOR 
 RCSA     EQU    *-1
          NJN    RCSX        IF NO VALID DEADSTART SECTOR 
          LDD    FR          FORMAT REQUIRED STATUS 
  
 RCS      SUBR               ENTRY/EXIT 
          LDN    0
          STD    FR          CLEAR FORMAT REQUIRED
          STD    LC 
          LDD    CS 
          ZJN    RCSX        IF ALL CONCURRENT CHANNELS 
          LDD    EQ          SET PARAMETER WORD 
          LMC    4000 
          STM    MIPA 
          EXECUTE  0PI,MILA  READ DEADSTART SECTOR
          STM    RCSA 
          NJN    RCS1.1      IF NOT A VALID DEADSTART SECTOR
          ENDMS 
          LDM    BFMS+CFBP   EXTRACT FORMAT REQUIRED FLAG 
          LPN    40 
          STD    FR 
          LMM    BFMS+CFBP   CLEAR FORMAT REQUIRED FLAG 
          STM    BFMS+CFBP
          LDM    BFMS+MSLP
          NJN    RCS1        IF *MSL* INSTALLED 
          LDM    BFMS+CDAP
          NJN    RCS1        IF COMMON DISK AREA INSTALLED
          LDM    BFMS+CTIP
 RCS1     STD    LC 
          NJN    RCS1.2      IF *CTI* INSTALLED 
 RCS1.1   LDD    AM 
          LMN    AIDR 
          NJP    RCS8        IF NOT CDSS II 
          LDC    840D        FIRST CYLINDER OF AREA TO BE FLAWED
 RCS1.2   SHN    1
          STD    T3 
          LDD    FN+4        GET DEVICE LENGTH FROM MST 
          SHN    3
          ADK    TDGL 
          CRD    CN 
          LDD    AM 
          LMN    AIDA 
          NJN    RCS2        IF NOT 33502 
          LDD    T3 
          SHN    -1 
          ADC    NTDA/2      COMPLETE CYLINDER TO TRACK CONVERSION
          STD    T3 
          UJN    RCS4        FLAW TRACKS
  
 RCS2     LMN    AIDI&AIDA
          ZJN    RCS3        IF 7X54/844-21 
          LMN    AIDK&AIDI
          ZJN    RCS3        IF 7154/844-21 
          LMN    AIDX&AIDK
          ZJN    RCS3        IF FSC 3330-1
          LMN    AIDR&AIDX
          NJN    RCS4        IF NOT CDSS II 
          LDD    T3          INITIALIZE TRACK CALCULATION 
          STD    T9 
          LDN    0
          STD    T3 
          LDC    1062        SET FLAW LIMIT FOR CDSS II 
          STD    CN 
 RCS2.1   LCN    3           FOR THIS PURPOSE, TRACK = CYLINDER*2/3 
          RAD    T9 
          MJN    RCS5        IF CONVERSION COMPLETE 
          AOD    T3          INCREMENT TRACK NUMBER 
          UJN    RCS2.1      CONTINUE DIVISION
  
 RCS3     LDD    T3 
          RAD    T3          COMPLETE CYLINDER CONVERSION 
 RCS4     LDD    T3 
          SBD    CN 
          PJN    RCS7        IF *CTI* BEYOND LOGICAL END OF DEVICE
 RCS5     RJM    FBT         FLAW BLOCK OF TRACKS 
          LDD    LC 
          ZJP    RCS8        IF *CTI* NOT PRESENT (CDSS II ONLY)
 RCS7     SMSTF  GCTI        SET *CTI* PRESENT FLAG 
          LDN    ZERL        CLEAR DEADSTART FILE INDICATOR 
          CRM    BFMS+OSBP,ON 
          LDC    BFMS+WLSF   REWRITE DEADSTART SECTOR 
          RJM    WDS
          ENDMS              RELEASE CHANNEL
*         LDN    0
          LJM    RCSX        RETURN 
 SNC      SPACE  4,10 
**        SNC - SELECT AVAILABLE NIO CHANNEL. 
* 
*         ENTRY  (FN - FN+4) = EST ENTRY. 
* 
*         EXIT   (A) = 0, IF NO NIO CHANNEL AVAILABLE 
*                    = NON-CONCURRENT CHANNEL BYTE. 
  
  
 SNC2     AOD    T0          ADVANCE ADDRESS
          LMN    FN+3 
          NJN    SNC1        IF POSSIBLE SECOND CHANNEL 
  
 SNC      SUBR               ENTRY/EXIT 
          LDN    FN+1 
          STD    T0          INITIALIZE CHANNEL BYTE ADDRESS
 SNC1     LDI    T0 
          LPC    7040        CHECK CHANNEL STATUS 
          LMC    4000 
          NJN    SNC2        IF NOT AN AVAILABLE CHANNEL
          LDI    T0 
          UJN    SNCX        RETURN 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPSDR 
          SPACE  4,10 
 ORDI     EQU    *+5         LOAD ADDRESS FOR *4DI* 
  
 MIPA     EQU    *           *0TI* PARAMETER ADDRESS
 MILA     EQU    MIPA+1      *0TI* LOAD ADDRESS 
          SPACE  4,10 
          ERRNG  BFMS-MILA-ZPXL  OVERFLOW INTO BUFFER 
          ERRNG  BFMS-MILA-ZTXL  OVERFLOW INTO BUFFER 
 POV      SPACE  4,10 
**        POV - PRESET OVERLAY. 
  
  
 POV      LDM    MMFP 
          ZJN    POV3        IF DO NOT PRESET FOR MMF 
          LDC    MMFL 
          CRD    CM 
          LDD    CM+3        SET MACHINE MASK 
          LMM    IMSA 
          STM    IMSA 
          LDC    L"QUAL"     SET LIST ADDRESS 
          STD    T1 
          UJN    POV2        ENTER LOOP 
  
 POV1     STD    T0 
          LDN    PSNI        REPLACE INSTRUCTION WITH *PSN* 
          STI    T0 
          AOD    T1          ADVANCE ADDRESS
 POV2     LDI    T1 
          NJN    POV1        IF MORE TO PRESET
 POV3     LJM    RDHX        RETURN 
  
*         LIST OF INSTRUCTIONS TO BE PRESET.
  
 L"QUAL"  BSS    0
 L"QUAL"  HERE
          ERRZR  L"QUAL"-*   TABLE EMPTY - REMOVE PRESET CODE 
          CON    0           TERMINATE LIST 
  
          QUAL
  
 IMS      EQU    /RDH/IMS 
 ORDI     EQU    /RDH/ORDI
          SPACE  4,10 
          OVERFLOW  ORDH,EPFW  CHECK FOR OVERFLOW 
          TTL    MSM/4DI - PROCESS FORMAT REQUEST.
          TITLE 
          QUAL   RDI
          IDENT  4DI,/RDI/PFRX
*COMMENT  MSM - PROCESS FORMAT REQUEST. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1994. 
 RDI      SPACE  4,10 
***              *4DI* CONTAINS ROUTINES UTILIZED BY *RMS* IN 
*         FORMATTING 895 DEVICES. 
          SPACE  4,10 
*CALL     COMPCHM 
          SPACE  4,10 
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 PB       EQU    RG - RI+1   FORMAT PARAMETER BLOCK (3 LOCATIONS) 
 CS       EQU    ET          CHANNEL STATUS 
 FR       EQU    P1          FORMAT REQUIRED FLAG 
 LC       EQU    P2          LAST CYLINDER + 1
  
****
          SPACE  4,10 
**        ASSEMBLY CONSTANTS. 
  
  
 DC       EQU    11          DISK CHANNEL 
  
 FCGS     EQU    12          GENERAL STATUS FUNCTION CODE 
 FCFP     EQU    16          FORMAT PACK FUNCTION CODE
  
 FPBL     EQU    22          FORMAT PACK PARAMETER BLOCK LENGTH 
 RDH      SPACE  4,10 
          ORG    ORDH 
          TITLE  PROCESS FORMAT REQUEST.
 PFR      SPACE  4,20 
**        PFR - PROCESS FORMAT REQUEST. 
* 
*         ENTRY  (T3) = 0 IF DEADSTART SECTOR READ BY *RCS*.
*                (AM) = ALGORITHM INDEX.
*                (CS) = CHANNEL STATUS. 
*                (FR) = FORMAT REQUIRED FLAG. 
*                (LC) = FIRST CYLINDER OF *CTI* SPACE.
*                (T5) = EST ORDINAL.
*                (T6) = TRACK CONTAINING DEADSTART SECTOR.
*                (T7) = DEADSTART SECTOR. 
*                (FN - FN+4) = EST ENTRY. 
*                (FS - FS+4) = *STLL* WORD OF MST.
* 
*         USES   T1, T2, T3, T4, CM - CM+4, CN - CN+4.
* 
*         CALLS  F8D. 
* 
*         MACROS CMSTF, ENDMS, RCHAN. 
  
  
 PFR      SUBR               ENTRY/EXIT 
          LDN    0
          STD    CM+2 
          LDD    CS 
          LPN    77          CLEAR IMMEDIATE RETURN AND RESERVE CHANNEL 
          RCHAN 
          LDD    CM+1        SAVE CHANNEL FOR *ENDMS* 
          STD    T4 
          AOM    CHRV 
          LDC    CTDC        SET ADDRESS OF INSTRUCTION LIST
          STD    T1 
          UJN    PFR3        MODIFY CHANNEL INSTRUCTIONS
  
 PFR2     STD    T2          SET INSTRUCTION ADDRESS
          LDI    T2 
          SCN    37 
          LMD    T4          MODIFY INSTRUCTION 
          STI    T2 
          AOD    T1          ADVANCE LIST ADDRESS 
 PFR3     LDI    T1 
          NJN    PFR2        IF NOT END OF LIST 
          LDD    FN+4 
          SHN    3
          ADN    DDLL        FETCH UNIT LIST FROM MST 
          CRD    CN 
          LDC    DSCP*200+MS1W  STORE FORMATTING MESSAGE
          CWM    PFRA,ON
  
*         GENERATE PARAMETER BLOCK TO FORMAT DEVICE.
  
 PFR4     LDN    0           SET FIRST CYLINDER 
          STD    PB 
          LDD    TH          SET LARGE RECORD SIZE
          STD    PB+2 
          LDD    CN+4        EXTRACT NEXT UNIT
          SHN    14 
          STD    CN+4 
          ERRPL  4000-3*SLDC CODE DEPENDS ON VALUE
          SHN    -14
          LMC    1S10+3S6    APPEND MODE / OPERATION DECODE 
          STD    PB+1 
          RJM    F8D         FORMAT DEVICE
          LDD    T3 
          ZJN    PFR7        IF DEADSTART SECTOR READ WITHOUT ERROR 
          LDC    885D 
          STD    PB          SET CYLINDER FOR DEADSTART SECTOR
          ADN    1
          STD    LC 
          LDC    502         SECTOR BUFFER INDEX
          STD    PB+2 
 PFR5     LDN    0           CLEAR SECTOR BUFFER
          STM    BFMS-1,PB+2
          SOD    PB+2 
          NJN    PFR5        IF BUFFER NOT CLEARED
*         LDN    0
*         STD    PB+2 
          RJM    F8D         FORMAT DEADSTART CYLINDER
          LDC    -1S10
          RAD    PB+1 
 PFR6     SOD    PB          FORMAT PROTECTED AREA
          RJM    F8D
          AOD    PB+2        ADVANCE TRACK NUMBER 
          LMN    2
          NJN    PFR6        IF MORE TRACKS TO FORMAT 
          LDC    BFMS+WLSF
          RJM    WDS         CLEAR DEADSTART SECTOR 
 PFR7     LDD    CN 
          LPN    7
          SBN    1           DECREMENT UNIT COUNT 
          STD    CN 
          PJP    PFR4        IF MULTI-UNIT DEVICE 
          ENDMS 
          LDC    DSCP*200+MS1W  RESTORE RECOVERY MESSAGE
          CWM    PFRB,ON
          CMSTF  LFPR        CLEAR FORMAT REQUEST 
          LJM    PFRX        RETURN 
  
  
 PFRA     DATA   10HFORMATTING
 PFRB     DATA   10HRECOVERING
          TITLE  SUBROUTINES. 
 F8D      SPACE  4,10 
**        F8D - FORMAT 895 DEVICE.
* 
*         ENTRY  (LC) = LAST CYLINDER + 1 TO FORMAT.
*                (PB - PB+2) = FORMAT PARAMETER BLOCK.
* 
*         USES   PB, CM - CM+4. 
* 
*         CALLS  C2D, /RMS/SEM, WNB.
  
  
 F8D2     LDC    DSCP*200+MS1W+2  UPDATE CYLINDER NUMBER IN MESSAGE 
          CWD    CM 
          FNC    FCFP,DC     ISSUE FORMAT FUNCTION
          ACN    DC 
          LDN    FPBL        OUTPUT PARAMETER BLOCK 
          OAM    PB,DC
          FJM    *,DC        WAIT TRANSMISSION COMPLETE 
          DCN    DC 
          AOD    PB          ADVANCE CYLINDER NUMBER
 F8D3     RJM    C2D
          STD    CM+3 
          LDD    PB          CONVERT VALUE FOR MESSAGE
          SHN    -6 
          RJM    C2D
          STD    CM+2 
          RJM    WNB         WAIT NOT BUSY
          LDD    PB 
          LMD    LC 
          NJN    F8D2        IF MORE CYLINDERS TO FORMAT
  
 F8D      SUBR               ENTRY/EXIT 
          LDD    PB+1 
          RJM    C2D         CONVERT UNIT NUMBER
          STM    F8DA 
          RJM    /RMS/SEM    SET EQUIPMENT MESSAGE
          LDN    1RU
          STD    CM+4        INSERT UNIT DESIGNATOR 
          LDC    DSCP*200+MS1W+1
          CWD    CM 
          ADN    1
          CWM    F8DA,TW     CHANGE MESSAGE 
          SBN    2
          CRD    CM 
          LDD    LC 
          NJN    F8D1        IF *CTI* COMPONENT FOUND 
          LDC    NTDC/2 
          ERRNZ  TTDC        CODE DEPENDS ON VALUE
          STD    LC 
 F8D1     LDD    PB 
          LJM    F8D3        FORMAT DEVICE
  
  
 F8DA     DATA   C*XX C0000.* 
 WNB      SPACE  4,10 
**        WNB - WAIT NOT BUSY.
* 
*         ERROR  TO */RMS/HNG* IF CONTROLLER HUNG BUSY. 
* 
*         USES   T1, T2.
* 
*         CALLS  C2D. 
  
  
 WNB      SUBR               ENTRY/EXIT 
          LDC    400D 
          STD    T2          SET 400 MILLISECOND DELAY
 WNB1     DELAY  10 
          FNC    FCGS,DC     REQUEST GENERAL STATUS 
          ACN    DC 
          IAN    DC          INPUT STATUS 
          DCN    DC 
          STD    T1          SAVE GENERAL STATUS
          LPN    2
          ZJN    WNBX        IF NOT BUSY
          SOD    T2 
          NJN    WNB1        IF NOT TIMEOUT 
          LDD    T1 
          SHN    -6 
          RJM    C2D         CONVERT GENERAL STATUS 
          STM    WNBA+11
          LDD    T1 
          RJM    C2D
          STM    WNBA+12     STORE IN MESSAGE 
          LDC    WNBA 
          LJM    /RMS/HNG    DISPLAY MESSAGE AND HANG PP
  
  
 WNBA     DATA   C* HUNG BUSY - GS = XXXX.* 
          SPACE  4,10 
**        CHANNEL TABLE.
  
  
          CHTB   DC 
          SPACE  4,10 
          ERRNG  BFMS-*          OVERFLOW INTO BUFFER 
          SPACE  4,10 
          QUAL
          SPACE  4,10 
          OVERFLOW  ORDI,EPFW    CHECK FOR OVERFLOW 
          TTL    MSM/4DJ - DAYFILE RECOVERY ROUTINES. 
          TITLE 
          IDENT  4DJ,/RMS/RDJX
*COMMENT  MSM - DAYFILE RECOVERY ROUTINES.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***              *4DJ* CONTAINS ROUTINES UTILIZED BY *RMS* IN 
*         RECOVERING DAYFILES.
          SPACE  4,10 
          QUAL   RMS
          ORG    ORDJ 
  
 RDJ      SUBR               ENTRY/EXIT 
          UJN    RDJX        RETURN 
 CDC      SPACE  4,25 
**        CDC - CHASE DAYFILE CHAIN.
* 
*         CDC CHASES THE DAYFILE CHAIN ON DISK TO RECOVER THE 
*         DAYFILE RIGHT UP TO THE EOI.  THE CHAINING IS DONE OFF OF THE 
*         DISK RATHER THAN THE TRTS TO RECOVER THE EXACT DAYFILE AS IT
*         EXISTS ON DISK.  THIS PERMITS DAYFILE RECOVERY TO BE
*         INDEPENDENT OF TRT UPDATES AND SYSTEM DEVICE CHECKPOINTS. 
*         THE DAYFILE WILL BE TRUNCATED TO THE LAST SECTOR OF THE 
*         CURRENT TRACK IF DISK EOI EXTENDS BEYOND THE CURRENT
*         TRACK IN THE TRT. 
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (FN - FN+4) = EST ENTRY. 
*                (FS - FS+4) = DEVICE STATUS WORD (STLL). 
*                (MBUF) = LABEL MST.
* 
*         EXIT   TRT ALTERED IF TRT AND DISK DO NOT MATCH AND VALID 
*                EOI FOUND. 
*                (A) MUST EQUAL 0 TO ENSURE *MRL* UPDATE OF CM
*                RECOVERY INFORMATION UPON RETURN FROM */RMS/RCD*.
* 
*         USES   EE, FA, P1, T6, T7, CM+1 - CM+3. 
* 
*         CALLS  CDR, CFL, RSS, ULA, VEI, WDS.
* 
*         MACROS ENDMS, MONITOR, SETMS. 
  
  
 CDC5     ENDMS 
          SETMS  IO,(DF,RW) 
          RJM    ULA         UPDATE SECTOR OF LOCAL AREAS 
  
 CDC      SUBR               ENTRY/EXIT 
          LDM    MBUF+5*ACGL+4
          LPC    MGLAP
          ZJN    CDCX        IF NO SECTOR OF LOCAL AREAS
          SETMS  READSTR,(DF,RW)
          LDN    EXDF        SET NUMBER OF EXCESS DAYFILES
          STD    P1 
 CDC1     SOD    P1 
          MJN    CDC5        IF END OF DAYFILES 
          LDM    MBUF+5*DALL,P1 
          ZJN    CDC1        IF NO TRACK ASSIGNED 
          STD    T6 
          RJM    CDR         CHECK DAYFILE RECOVERY SELECTION 
          NJN    CDC1        IF FILE INITIALIZED
  
*         VERIFY DAYFILE RECOVERY.
  
          RJM    CFL         CHECK FILE LENGTH
          ZJN    CDC1        IF EMPTY DAYFILE 
          RJM    VEI         VERIFY EOI SECTOR
 CDC2     ZJN    CDC1        IF EOI ON DISK MATCHES TRT EOI 
          ENDMS 
          LDD    T6 
          LPC    3777        SET NEW EOI SECTOR 
          STD    CM+2 
          LDD    T7          SECTOR 
          STD    CM+3 
          LDD    T5          EQUIPMENT
          STD    CM+1 
          MONITOR  DTKM      UPDATE EOI SECTOR
*         LDN    0
          UJP    CDC1        LOOP FOR NEXT DAYFILE
 CDR      SPACE  4,10 
**        CDR - CHECK DAYFILE RECOVERY. 
* 
*         ENTRY  (T6) = DAYFILE TRACK.
*                (P1) = DAYFILE INDEX.
*                (FS - FS+4) = STLL WORD OF THE MST.
* 
*         EXIT   (A) = 0 IF DAYFILE NOT INITIALIZED.
*                SPACE RELEASED IF FILE INITIALIZED.
* 
*         USES   FS, FS+1, CM+1 - CM+3. 
* 
*         CALLS  TLB. 
* 
*         MACROS CMSTF, ENDMS, MONITOR. 
  
  
 CDR      SUBR               ENTRY/EXIT 
  
*         CHECK FOR INITIALIZE REQUEST. 
  
          LDM    CDRB,P1
          STM    CDRA 
          LDD    FS+1        CHECK INITIALIZE REQUEST 
          LPC    *
 CDRA     EQU    *-1
          ZJN    CDRX        IF INITIALIZE NOT REQUESTED
  
*         INITIALIZE DAYFILE. 
  
          LMD    FS+1        CLEAR INITIALIZE REQUEST 
          STD    FS+1 
          SHN    6
          LMD    FS 
          SCN    MLIRP+MLPTU+MLCKP+MRASD
          NJN    CDR1        IF MORE INITIALIZE FLAGS 
          CMSTF  LIRP        CLEAR INITIALIZE PENDING 
 CDR1     ENDMS 
*         LDN    0
          STD    CM+3 
          LDD    T6          SET FIRST TRACK
          STD    CM+2 
          LDD    EQ 
          STD    CM+1 
          MONITOR  DTKM      RELEASE DAYFILE SPACE
          STM    MBUF+5*DALL,P1  CLEAR DAYFILE POINTER
          AOM    ULAA        SET LOCAL AREA SECTOR UPDATE 
          LCN    0           CLEAR INITIALIZE REQUEST IN THE MST
          LMM    CDRC,P1
          RJM    TLB
          LJM    CDRX        RETURN 
  
*         INITIALIZE REQUEST MASKS FOR EXCESS DAYFILES. 
  
 CDRB     CON    MLIDF       DAYFILE
          CON    MLIAF       ACCOUNT FILE 
          CON    MLIEF       ERROR LOG
          CON    MLIMF       MAINTENANCE LOG
  
*         INITIALIZE REQUEST BIT MAPPING. 
  
 CDRC     CON    LIDF        DAYFILE
          CON    LIAF        ACCOUNT FILE 
          CON    LIEF        ERROR LOG
          CON    LIMF        MAINTENANCE LOG
 CDT      SPACE  4,10 
**        CDT - CHECK LAST UPDATE DATE AND TIME.
* 
*         ENTRY  (P1) = DAYFILE INDEX.
*                (WEIA) = DAYFILE EOI SECTOR. 
*                (TPDT) = TIME AND DATE FOR LATEST RECOVERED DAYFILE. 
* 
*         EXIT   RECOVERY POINTERS UPDATED IF THIS IS A LATER DAYFILE.
*                (TPDT) UPDATED TO LATEST DATE. 
* 
*         USES   P2, CM - CM+4. 
  
  
 CDT      SUBR               ENTRY/EXIT 
          LDD    FN 
          SHN    21-10
          MJN    CDTX        IF REMOVABLE DEVICE
          LDD    P1 
          SHN    1
          ADD    P1 
          STD    P2 
          LDD    MA          COPY LAST UPDATE DATE AND TIME OF NEW FILE 
          CWM    BFMS+DTEI,ON 
          SBN    1
          CRD    CM 
          LDM    TPDT,P2     CHECK YEAR AND MONTH 
          SBD    CM+2 
          MJN    CDT1        IF LATER YEAR OR MONTH 
          NJN    CDTX        IF NOT LATER YEAR OR MONTH 
          LDM    TPDT+1,P2   CHECK DAY AND HOUR 
          SBD    CM+3 
          MJN    CDT1        IF A LATER DAY OR HOUR 
          NJN    CDTX        IF NOT A LATER DAY OR HOUR 
          LDM    TPDT+2,P2
          SBD    CM+4 
          MJN    CDT1        IF A LATER MINUTE
          NJN    CDTX        IF NOT A LATER MINUTE
  
*         SET THIS DAYFILE AS THE NEW ONE TO RECOVER. 
  
 CDT1     LDD    T5          SET LATEST DAYFILES EQUIPMENT
          STM    RMSF,P1
          LDD    CM+2        SET LATEST DAYFILES DATE 
          STM    TPDT,P2
          LDD    CM+3 
          STM    TPDT+1,P2
          LDD    CM+4 
          STM    TPDT+2,P2
          LJM    CDTX        RETURN 
  
 TPDT     BSS    3           LATEST DATE/TIME SYSTEM DAYFILE
          BSS    3           LATEST DATE/TIME ACCOUNT DAYFILE 
          BSS    3           LATEST DATE/TIME ERRLOG DAYFILE
          BSS    3           LATEST DATE/TIME MAINTENANCE LOG 
 CFL      SPACE  4,10 
**        CFL - CHECK FILE LENGTH.
* 
*         ENTRY  (T6) = DAYFILE TRACK FROM SECTOR OF LOCAL AREAS. 
*                (P1) = DAYFILE INDEX.
* 
*         EXIT   (A) = 0 IF DAYFILE EMPTY.
*                (ET) = DAYFILE EOI TRACK.
*                (ES) = DAYFILE EOI SECTOR. 
* 
*         CALLS  SEI. 
  
  
 CFL1     LDD    T6          SAVE EOI TRACK 
          STD    ET 
          LDD    T7          SAVE EOI SECTOR
          STD    ES 
          LDM    MBUF+5*DALL,P1  RESTORE FIRST TRACK
          STD    T6 
  
 CFL      SUBR               ENTRY/EXIT 
          RJM    SEI         SEARCH FOR EOI 
          LDD    T3 
          ADD    T2 
          NJN    CFL1        IF NOT EMPTY FILE
          AOM    ULAA 
          LDN    0           CLEAR DAYFILE POINTER
          STM    MBUF+5*DALL,P1 
          UJN    CFLX        RETURN 
 TDF      SPACE  4,15 
**        TDF - TRUNCATE DAYFILE. 
* 
*         ENTRY  (P1) = DAYFILE INDEX.
*                (T6) = DAYFILE EOI TRACK.
*                (T7) = SECTOR AT WHICH EOI TO BE WRITTEN.
* 
*         EXIT   (EE) .NE. 0 TO INDICATE EOI WRITTEN. 
* 
*         CALLS  WDS. 
  
  
 TDF      SUBR               ENTRY/EXIT 
          LDN    0           SET EOI LINKAGE
          STM    BFMS 
          STM    BFMS+1 
          LDN    ZERL        CLEAR DATE AND TIME
          CRM    BFMS+DTEI,ON 
          LDM    MBUF+5*DALL,P1  SET FIRST TRACK
          STM    BFMS+FTEI
          LDC    BFMS+WLSF   WRITE EOI SECTOR 
          RJM    WDS
          LDM    RMSF,P1     CHECK FOR FILES RECOVERED
          SHN    6
          PJN    TDFX        IF A FILE HAS BEEN RECOVERED 
          LDD    T5          SET THIS FILE AS RECOVERED 
          STM    RMSF,P1
          UJN    TDFX        RETURN 
 ULA      SPACE  4,15 
**        ULA - UPDATE SECTOR OF LOCAL AREAS. 
* 
*         ENTRY  (T5) = EST ORDINAL.
* 
*         ERROR  TO *HNG* IF ERROR READING SECTOR OF LOCAL AREAS. 
* 
*         USES   T6.
* 
*         CALLS  CTI, RLA, STI, WDS.
* 
*         MACROS ENDMS, SETMS.
  
  
 ULA      SUBR               ENTRY/EXIT 
          LDC    0
 ULAA     EQU    *-1
          ZJN    ULAX        IF NO UPDATE REQUIRED
          SETMS  POSITION 
*         LDN    0           CLEAR UPDATE FLAG
          STM    ULAA 
          LDM    MBUF+5*ALGL+1  SET LABEL TRACK 
          STD    T6 
          RJM    STI         INTERLOCK LABEL TRACK
          RJM    RLA         READ LOCAL AREA SECTOR 
          PJN    ULA2        IF NO ERROR
 ULA1     LDD    T6          CLEAR LABEL TRACK INTERLOCK
          RJM    CTI
          LDC    ULAC        *LOCAL AREA SECTOR ERROR.* 
          LJM    HNG         DISPLAY MESSAGE AND HANG 
  
 ULA2     STM    ULAB 
          ZJN    ULA1        IF LOCAL AREA ENTRY NOT FOUND
          LDD    MA          TRANSFER DF STATUS TO LOCAL AREA ENTRY 
          CWM    MBUF+5*DALL,ON 
          SBN    1
          CRM    *,ON 
 ULAB     EQU    *-1
          LDC    BFMS+WLSF   REWRITE SECTOR OF LOCAL AREAS
          RJM    WDS
          ENDMS 
          LDD    T6          CLEAR LABEL TRACK INTERLOCK
          RJM    CTI
          LJM    ULAX        RETURN 
  
  
 ULAC     DATA   C*LOCAL AREA SECTOR ERROR.*
 VEI      SPACE  4,15 
**        VEI - VERIFY END OF INFORMATION SECTOR. 
* 
*         ENTRY  (ET) = TRT EOI TRACK.
*                (ES) = TRT EOI SECTOR. 
*                (P1) = DAYFILE INDEX.
* 
*         EXIT   (A) = 0 IF EOI ON DISK MATCHES TRT EOI.
*                (T7) = DISK EOI SECTOR.
* 
*         USES   T6, T7.
* 
*         CALLS  CDT, RDS, TDF. 
* 
*         MACROS SETMS. 
  
  
 VEI4     RJM    TDF         TRUNCATE DAYFILE 
 VEI5     LDD    T7          COMPARE EOI ON DISK WITH TRT EOI 
          LMD    ES 
  
 VEI      SUBR               ENTRY/EXIT 
          LDD    ET          SET EOI TRACK
          STD    T6 
          LDD    ES          SET EOI SECTOR 
          STD    T7 
          SETMS  POSITION 
 VEI1     LDC    BFMS        SEARCH FOR EOI ON DISK 
          RJM    RDS
          MJN    VEI4        IF READ ERROR
          LDM    BFMS 
          ADM    BFMS+1 
          ZJN    VEI2        IF EOI FOUND 
          AOD    T7          ADVANCE SECTOR NUMBER
          LDM    BFMS        CHECK LINKAGE
          SHN    6
          PJN    VEI1        IF NOT CROSSING TRACK BOUNDARY 
          SOD    T7          SET EOI SECTOR AT END OF TRACK 
          RJM    TDF         TRUNCATE DAYFILE 
 VEI2     RJM    CDT         CHECK DATE AND TIME
          UJP    VEI5        SET EXIT CONDITIONS AND RETURN 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPCTI 
*CALL     COMPSEI 
*CALL     COMPSTI 
          SPACE  4,10 
          ERRNG  BFMS-*      CODE OVERFLOWS INTO BUFFER 
          SPACE  4,10 
          OVERFLOW  ORDJ,EPFW  CHECK FOR OVERFLOW 
          TTL    MSM/4DK - UEM RECOVERY ROUTINES. 
          TITLE 
          IDENT  4DK,/RMS/RUJX
*COMMENT  MSM - UEM RECOVERY ROUTINES.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 RUE      SPACE  4,10 
***              *4DK* RESTORES UEM FROM THE CHECKPOINT FILE. 
 RUE      SPACE  4,10 
          QUAL   RMS
          ORG    ORDK 
          SPACE  4,10 
 RUJ      SUBR               ENTRY
          LDK    MEFL 
          CRD    CM 
          LDD    CM+2        SET TRACK SHIFT COUNTS 
          SHN    -5 
          LPN    3
          STD    T1 
          RAM    CUAB 
          LDD    T1 
          RAM    CUAA 
          RJM    RUE         RESTORE UEM
          LDN    0
          STD    CM 
          LDC    CPAS+MS2W   CLEAR MESSAGE
          CWD    CM 
          LJM    RMS1        RECOVER UEM
 CUA      SPACE  4,10 
**        CUA - CALCULATE UEM ADDRESS.
* 
*         ENTRY  (T8) = TRACK.
*                (FS - FS+1) = UEM BASE ADDRESS.
* 
*         EXIT   (A) = BITS 5 - 0 OF ABSOLUTE UEM ADDRESS.
*                (FS+2 - FS+3) = BITS 27 - 6 OF ABSOLUTE UEM ADDRESS
*                                (TO BE USED IN *R* REGISTER).
*                (FS+4) = BITS 5 - 0 OF ABSOLUTE UEM ADDRESS
*                         (TO BE USED IN *A* REGISTER). 
* 
*         USES   FS+2 - FS+4. 
  
  
 CUA      SUBR               ENTRY/EXIT 
          LDD    T8          CALCULATE TRACK * 2020 
          SHN    6           * 100
          ADD    T8          * 101
          STD    FS+3 
 CUAA     SHN    -10
*         SHN    -10+EMSC 
          STD    FS+2        * 2020 HIGH BITS 
          LDD    FS+3 
 CUAB     SHN    4
*         SHN    4+EMSC 
          LPC    7777 
          ADD    FS+1        ADD UEM BASE ADDRESS 
          STD    FS+4        LOW LOW BITS FOR *A* REGISTER
          SHN    -14
          ADD    FS 
          RAD    FS+2        HIGH BYTE ABSOLUTE UEM ADDRESS 
          SHN    6           SHIFT RESULT FOR *R* REGISTER
          STD    FS+3 
          SHN    6
          STD    FS+2 
          LDD    FS+4 
          SHN    14 
          RAD    FS+3 
          SHN    -14
          STD    FS+4        SET LOW 6 BITS FOR *A* REGISTER
          UJN    CUAX        RETURN 
 GCD      SPACE  4,15 
**        GCD - GET CHECKPOINT DEVICE.
* 
*         ENTRY  (CD) = CURRENT EST ORDINAL.
*                (LO) = LAST MASS STORAGE ORDINAL + 1.
* 
*         EXIT   (A) = 0 IF END OF MASS STORAGE DEVICES.
*                (T5) = (CD) = CHECKPOINT DEVICE ORDINAL. 
*                (T6) = TRACK POINTER TO UEM PORTION OF CHECKPOINT
*                       FILE. 
*                (FN - FN+4) = EST ENTRY. 
* 
*         USES   CD, RI, RI+1, T5, T6, FN - FN+4. 
* 
*         CALLS  CRA, GSP.
* 
*         MACROS SETMS, SFA.
  
  
 GCD      SUBR               ENTRY/EXIT 
 GCD1     AOD    CD          ADVANCE EST ORDINAL
          STD    T5 
          LMD    LO 
          ZJN    GCDX        IF END OF DEVICES
          SFA    EST,T5      READ EST ENTRY 
          ADK    EQDE 
          CRD    FN 
          LDD    FN 
          SHN    21-13
          PJN    GCD1        IF NOT MASS STORAGE DEVICE 
          SHN    13-2 
          PJN    GCD1        IF NOT CHECKPOINT DEVICE 
          LDD    FN+4 
          SHN    3
          ADN    DULL 
          CRD    CM 
          LDD    CM+3        CHECKPOINT FILE POINTER
          STD    P1 
          SHN    21-13
          PJN    GCD1        IF NOT A VALID FILE
          RJM    GSP         GET SECTOR POINTER 
          ZJN    GCD1        IF ERROR 
          STD    RI+1        SET RANDOM ADDRESS 
          LDN    0
          STD    RI 
          LDD    P1          SET CHECKPOINT FILE TRACK
          STD    T6 
          RJM    CRA         CONVERT RANDOM ADDRESS 
          MJN    GCD1        IF ADDRESS NOT ON TRT CHAIN
          SETMS  READSTR
          LDN    1           INDICATE CHECKPOINT DEVICE FOUND 
          LJM    GCDX        RETURN 
 GSP      SPACE  4,15 
**        GSP - GET UEM SECTOR POINTER. 
* 
*         THIS ROUTINE RETURNS THE UEM SECTOR OFFSET. 
* 
*         ENTRY  (FN - FN+4) = DEVICE EST ENTRY.
*                (T5) = DEVICE EST ORDINAL. 
* 
*         EXIT   (A) = 0, IF ERROR. 
*                    = SECTOR OFFSET IF NO ERROR. 
* 
*         USES   CM - CM+4. 
  
  
 GSP      SUBR               ENTRY/EXIT 
          LDD    RA 
          SHN    6
          ADD    T5 
          CRD    CM 
          SBD    T5 
          ADD    AL-RD+CM 
          ADN    DALL 
          CRD    CM 
          LDD    CM+4 
          UJN    GSPX        RETURN 
 RUE      SPACE  4,15 
**        RUE - RECOVER UEM.
* 
*         USES   T8, T9, FS+4, CM - CM+4. 
* 
*         CALLS  CUA, C2D, GCD, RNS.
* 
*         MACROS ENDMS. 
  
  
 RUE5     ENDMS 
          LDC    RUEA        *CHECKPOINT DEVICE NOT FOUND.* 
          LJM    /RMS/HNG    ISSUE ERROR MESSAGE AND HANG 
  
 RUE6     ENDMS 
          LDK    NJNI-ZJNI   SET TO PROCESS ONLY UEM
          STM    RMSH 
  
 RUE      SUBR               ENTRY/EXIT 
          LDK    NOPE-1      SET EST ORDINAL
          STD    CD 
          LDK    UEML        PRESET UEM BASE ADDRESS
          CRD    CM 
          LDD    CM 
          SHN    21-2 
          STD    FS 
          SHN    -6 
          SCN    7
          STD    FS+1 
 MSR      CON    PSNI        *RNS* ERROR RETURN 
 RUE1     RJM    GCD         GET CHECKPOINT DEVICE
          ZJN    RUE5        IF END OF CHECKPOINT DEVICES 
 RUE2     LDC    BFMS        READ LINKAGE SECTOR
          RJM    /4DK/RNS 
          ADI    T3 
          ZJN    RUE6        IF EOI REACHED 
          LDM    BFMS+2      SET TRACK NUMBER 
          STD    T8 
          LDM    BFMS+3      SET SECTOR COUNT 
          STD    T9 
          LDD    T8 
          SHN    -6 
          RJM    C2D         CONVERT UPPER 2 DIGITS OF TRACK TO DISPLAY 
          STM    RUEB+12
          LDD    T8 
          RJM    C2D         CONVERT LOWER 2 DIGITS OF TRACK TO DISPLAY 
          STM    RUEB+13
          LDC    CPAS+MS2W   ISSUE *RESTORING UEM TRACK XXXX* MESSAGE 
          CWM    RUEB,TR
          RJM    CUA         CALCULATE UEM ADDRESS
          LDM    BFMS+1 
          ZJN    RUE3        IF LINKAGE WORDS NOT IN THIS SECTOR
          STD    T3 
          RAD    FS+4        ADVANCE UEM ADDRESS FOR LATER
          SBD    T3 
          ADC    400000 
          LRD    FS+2 
          CWM    BFMS+4,T3   WRITE LINKAGE WORDS TO UEM 
 RUE3     LDC    BFMS 
          RJM    /4DK/RNS 
          LDD    FS+4 
          ADC    400000 
          LRD    FS+2        WRITE SECTOR TO UEM
          CWM    BFMS+2,HN
          AOD    FS+3        ADVANCE UEM ADDRESS
          SHN    -14
          RAD    FS+2 
          SOD    T9          DECREMENT SECTOR COUNT 
          NJN    RUE3        IF NOT FINISHED WITH TRACK 
          LJM    RUE2        IF FINISHED WITH TRACK 
  
  
 RUEA     DATA   C*CHECKPOINT DEVICE NOT FOUND.*
 RUEB     DATA   C*RESTORING UEM TRACK XXXX.* 
          SPACE  4,15 
**        COMMON DECKS. 
  
*CALL     COMPCRA 
  
          QUAL   4DK
  
 MSR      EQU    /RMS/MSR 
 MSR$     SET    1           SELECT ERROR PROCESSING IN *COMPRNS* 
*CALL     COMPRNS 
  
          QUAL   *
          SPACE  4,10 
          ERRNG  BFMS-*      DATA BUFFER OVERLAYS CODE
          SPACE  4,10 
          OVERFLOW  ORDK,EPFW  CHECK FOR OVERFLOW 
          SPACE  4
          TTL    MSM - MASS STORAGE MANAGER.
          END 
