PFU 
          IDENT  PFU,PFU
          PERIPH
          BASE   MIXED
          SST 
          TITLE  PFU - PF UTILITY PROCESSOR.
          SPACE  4,10 
*COMMENT  PFU - PERMANENT FILE UTILITY PROCESSOR. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***       PF UTILITY PROCESSOR. 
*         S. T. WORSTELL.    72/10/15.
*         R. J. THIELEN.     75/08/12. MODIFIED.
          SPACE  4,10 
***       PFU IS THE PERMANENT FILE UTILITY ROUTINE WHICH PERFORMS
*         VARIOUS UTILITY FUNCTIONS FOR THE PERMANENT FILE UTILITY
*         PROGRAMS.  *CATS*, *PETS* AND *DATA* ARE THE FILES THE
*         UTILITY PROGRAMS USE IN PROCESSING A PERMANENT FILE 
*         DEVICE.  THEY CORRESPOND TO THE CATALOGS, PERMITS AND 
*         DATA ON A DEVICE.  THE PFU FUNCTIONS MANAGE THESE FILES 
*         AND DATA TRANSFER BETWEEN THE PERMANENT FILE DEVICE AND 
*         THE UTILITY PROGRAMS. 
          SPACE  4,10 
***       CALL. 
* 
*T        18/*PFU*,6/ RCL,12/ FUNCTION,24/ ADDR 
* 
*         WHERE  ADDR = ADDRESS OF FET OR PARAMETER BLOCK.
          SPACE  4,10 
***       DAYFILE MESSAGES. 
* 
*         * PFU - ALTERNATE DEVICE NOT FOUND.* = ALTERNATE DEVICE FOR 
*         A DIRECT ACCESS FILE COULD NOT BE FOUND.
* 
*         * PFU - BUFFER ARGUMENT ERROR ON FILENAM AT XXXXXX.* = THE
*         CIRCULAR BUFFER POINTERS FOR FILE *FILENAM* DID NOT SATISFY 
*         THE FOLLOWING CONDITIONS.  *XXXXXX* IS THE FET ADDRESS. 
*                FIRST .LE. IN .LT. LIMIT.
*                FIRST .LE. OUT .LT. LIMIT. 
*                LIMIT .LE. FL. 
* 
*         * PFU - BUFFER CONTROL WORD ERROR ON FILENAM AT XXXXXX.* =
*         THE WORD COUNT OF A SECTOR TO BE READ FROM THE CIRCULAR 
*         BUFFER FOR FILE *FILENAM* EXCEEDED THE WORD COUNT LIMIT OF A
*         SECTOR (100B).  *XXXXXX* IS THE FET ADDRESS.
* 
*         * PFU - CATALOG TRACK NOT FOUND.* = A CATALOG TRACK COULD NOT 
*         BE FOUND FOR SOME USER INDEX. 
* 
*         * PFU - CONTROL POINT ERROR FLAG DETECTED FFFF.* = FFFF IS
*         THE CONTENTS OF THE ERROR FLAG FIELD OF WORD *STSW* OF THE
*         CONTROL POINT.
* 
*         * PFU - DUPLICATE FILE, FILENAM AT XXXXXX.* = FILE *FILENAM*
*         WAS ALREADY PRESENT AT THE CONTROL POINT.  *XXXXXX* IS THE
*         FET ADDRESS.
* 
*         * PFU - FILE NOT FOUND, FILENAM AT XXXXXX.* = NO FNT ENTRY
*         COULD BE FOUND FOR FILE *FILENAM*.  *XXXXXX* IS THE FET 
*         ADDRESS.
* 
*         * PFU - I/O SEQUENCE ERROR ON FILENAM AT XXXXXX.* = *PFU* 
*         FOUND FILE *FILENAM* BUSY WHEN ATTEMPTING AN OPERATION ON IT. 
*         *XXXXXX* IS THE FET ADDRESS.
* 
*         * PFU - NO DEVICE SPECIFIED.* = NO FAMILY DEVICE WAS
*         SPECIFIED WITH THE READ LIST FUNCTION.
* 
*         * PFU - NOT SPECIAL SYSTEM JOB.* = THE PROGRAM THAT CALLED
*         *PFU* DID NOT HAVE AN *SSJ=* SPECIAL ENTRY POINT DEFINED. 
* 
*         * PFU - PARAMETER ERROR.* = A PARAMETER IN THE *PFU* CALL WAS 
*         IN ERROR. 
* 
*         * PFU - TRACK INTERLOCK ALREADY CLEAR ON FILENAM AT XXXXXX.*
*         = WHEN CALLED TO CLEAR THE TRACK INTERLOCK ON FILE *FILENAM*, 
*         *PFU* FOUND THAT THE FST FOR THE FILE INDICATED THAT THE
*         INTERLOCK WAS ALREADY CLEAR.  *XXXXXX* IS THE FET ADDRESS.
* 
*         * PFU - TRACK INTERLOCK ALREADY SET ON FILENAM AT XXXXXX.* =
*         WHEN CALLED TO SET THE TRACK INTERLOCK ON FILE *FILENAM*, 
*         *PFU* FOUND THAT THE FST FOR THE FILE INDICATED THAT THE
*         INTERLOCK WAS ALREADY SET.  *XXXXXX* IS THE FET ADDRESS.
          SPACE  4,10 
***       OPERATOR MESSAGES.
* 
*         *EQXXX, TRACK LIMIT.* - NO TRACKS ARE AVAILABLE ON EST
*         ORDINAL XXX.  *PFU* WILL WAIT FOR TRACKS TO BECOME AVAILABLE. 
          TITLE  COMMON DECKS.
*         COMMON DECKS. 
  
  
*CALL     COMPMAC 
*CALL     COMSCPS 
*CALL     COMSEVT 
*CALL     COMSLSD 
          QUAL   MSP
*CALL     COMSMSP 
          QUAL   *
 EPNR     EQU    /MSP/EPNR
 EPRW     EQU    /MSP/EPRW
 PARE     EQU    /MSP/PARE
 RDCT     EQU    /MSP/RDCT
 UERR     EQU    /MSP/UERR
*CALL     COMSMST 
*CALL     COMSPFM 
*CALL     COMSPIM 
*CALL     COMSSSD 
*CALL     COMSSSJ 
*CALL     COMSWEI 
          QUAL   ZOL
*CALL     COMSZOL 
          QUAL   *
          LIST   X
*CALL     COMSPFU 
          LIST   -X 
          TITLE  MACROS.
*         MACROS. 
 ERROR    SPACE  4,10 
**        ERROR - PROCESS ERROR.
* 
*         ERROR  E
* 
*         ENTRY  *E* = ERROR CODE.
* 
*         EXIT   TO *ERR*.
* 
*         CALLS  ERR. 
  
  
          PURGMAC  ERROR
  
 ERROR    MACRO  E
          MACREF ERROR
          LDN    E
          RJM    ERR
 ERROR    ENDM
 FETA     SPACE  4,10 
**        FETA - COMPUTE FET ADDRESS. 
* 
*         FETA   W
* 
*         ENTRY  *W* = FET WORD NUMBER. 
* 
*         COMPUTES ABSOLUTE FET ADDRESS USING (IR+3 - IR+4).
* 
*         CALLS  CFA. 
  
  
          PURGMAC  FETA 
  
 FETA     MACRO  W
          MACREF FETA 
          RJM    CFA         COMPUTE FET ADDRESS
          IFNE   W,0,1       IF NOT FIRST WORD
          ADN    W
 FETA     ENDM
 FNCT     SPACE  4,10 
**        FNCT - DEFINE FUNCTION PROCESSOR. 
* 
*TAG      FNCT   FC,FP
* 
*         ENTRY  *TAG* = SET TO FWA OF TABLE IF FIRST ENTRY FOR TABLE 
*                        AND TO THE LENGTH OF THE TABLE IF THE LAST 
*                        ENTRY. 
* 
*                *FC* = FUNCTION CODE * 100B (ACTS AS INDEX INTO TABLE) 
*                *FP* = FUNCTION PROCESSOR SYMBOL = ENTRY ADDRESS FOR 
*                       RESIDENT PROCESSORS OR THE LAST CHARACTER OF
*                       THE OVERLAY NAME FOR OVERLAY PROCESSORS.
* 
*         EXIT   TABLE ENTRY INDEXED BY THE FUNCTION CODE SET TO *FP*.
  
  
          NOREF  .B,.M
 .B       SET    0
 .M       SET    -2 
          PURGMAC  FNCT 
          MACRO  FNCT,TAG,FC,FP 
 .TAGP    IFC    NE,$TAG$$
 .MP      IFLT   .M,-1
          LOC    *O 
 .M       SET    -1 
 .B       SET    *
 TAG      BSS    0
 .MP      ELSE
          LOC    .M+1 
 .M       SET    -2 
 TAG      BSS    0
          ORG    .B+* 
 .MP      ENDIF 
 .TAGP    ELSE
          ORG    .B+FC/100
          LOC    FC/100 
          CON    FP 
 .M       MAX    .M,FC/100
 .TAGP    ENDIF 
 FNCT     ENDM
          SPACE  4,10 
*         OVERLAY CONTROL.
  
  
 .N       SET    0
 OVLB     MICRO  1,, 3F      BASE OVERLAY NAME
 OVERLAY  SPACE  4,10 
**        OVERLAY - GENERATE OVERLAY CONSTANTS. 
* 
*ENTR     OVERLAY (TEXT),ORGA 
* 
*         ENTRY  *ENTR* = ENTRY POINT TAG FOR OVERLAY.
*                *ORGA* = ORIGIN ADDRESS OF OVERLAY.
* 
* 
*         EXIT   *ENTR* = UNQUALIFIED ENTRY POINT SYMBOL = 18/ON. 
*                       ON = LAST CHARACTER OF OVERLAY NAME.
*                SYMBOL QUALIFIER SET TO OVERLAY NAME.
*                ENTRY/EXIT POINT SET WITH *SUBR* MACRO.
  
  
          PURGMAC  OVERLAY
  
          MACRO  OVERLAY,ENTR,TEXT,ORGA 
          QUAL
          NOREF  .N 
 .N       SET    .N+1 
 .M       MICRO  .N,1, ABCDEFGHIJKLMNOPQRSTUVWXYZ 
 .O       MICRO  1,3, "OVLB"".M"
          TTL    PFU/".O" - TEXT
 ENTR     TITLE 
          IDENT  ".O",ORGA   TEXT 
*COMMENT  PFU - TEXT
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          ORG    ORGA 
 ENTR     EQU    1R".M" 
          QUAL   ".O" 
 ENTR     SUBR
 OVERLAY  ENDM
 VADDR    SPACE  4,10 
**        VADDR - VALIDATE ADDRESS. 
* 
*         VADDR  LOC,JST
* 
*         ENTRY  *LOC* = PP MEMORY LOCATION OF HIGH ORDER BYTE OF 
*                        ADDRESS. 
*                *JST* = NULL FOR A RIGHT JUSTIFIED ADDRESS.
*                      = NON-NULL FOR A LEFT JUSTIFIED ADDRESS. 
* 
*         EXIT   (A) = (T1 - T2) = VALIDATED CENTRAL ADDRESS. 
*                EXIT TO *ERR* WITH * PFU - PARAMETER ERROR.* IF
*                ADDRESS NOT VALID. 
* 
*         CALLS  CCA. 
  
  
          PURGMAC  VADDR
  
 VADDR    MACRO  LOC,JST
          MACREF VADDR
 .1       SET    LOC
 .1       SET    .1*2 
          IFC    EQ,$JST$$,1
 .1       SET    .1+1 
 .SIZE    IFGE   .1,100 
          LDC    .1 
 .SIZE    ELSE
          LDN    .1 
 .SIZE    ENDIF 
          RJM    CCA         CHECK CENTRAL ADDRESS
 VADDR    ENDM
          TITLE  DIRECT CELL DEFINITIONS. 
*         DIRECT LOCATIONS. 
  
  
 PR       EQU    16          PREVIOUS RA
 DA       EQU    17          DIRECT ACCESS FILE FLAG
 FS       EQU    20 - 24     FST ENTRY
 DF       EQU    25 - 26     *DATA* FET ADDRESS 
 LL       EQU    25 - 26     LENGTH LEFT
 PF       EQU    27 - 30     *PETS* FET ADDRESS 
 LF       EQU    27 - 30     LENGTH OF FILE 
 CA       EQU    31 - 32     *CATS* FET ADDRESS 
 UI       EQU    33 - 34     USER INDEX 
 RI       EQU    33 - 34     RANDOM INDEX 
 P1       EQU    33          TEMPORARY LOCATION 
 P2       EQU    34          TEMPORARY LOCATION 
 P3       EQU    35          TEMPORARY LOCATION 
 P4       EQU    36          TEMPORARY LOCATION 
 P5       EQU    37          TEMPORARY LOCATION 
 FN       EQU    40 - 44     FNT ENTRY
 CN       EQU    40 - 44     CENTRAL MEMORY BUFFER
 TF       EQU    45          TYPE FILE
 SC       EQU    46          SECTOR COUNT TO WRITE
 DN       EQU    47          DEVICE NUMBER
 FA       EQU    57          FNT ADDRESS
 FT       EQU    60 - 61     FIRST
 IN       EQU    62 - 63     IN 
 OT       EQU    64 - 65     OUT
 LM       EQU    66 - 67     LIMIT
          SPACE  4,10 
*         ASSEMBLY CONSTANTS. 
  
  
 FADL     EQU    4000D       DELAY CYCLES WAITING FOR FAST ATTACH FILE
 FMRD     EQU    1           READ MODE FOR FILE 
 FMRU     EQU    11          READ/ALLOW UPDATE MODE FOR FILE
 MSEO     EQU    3           MASS STORAGE ERROR OPTION
 PFIDL    EQU    5           *PFID* LIST LENGTH 
 TDGE     EQU    2           *TDAM* GET MSS INTERLOCK FUNCTION CODE 
 TDNA     EQU    4           *TDAM* SUBSYSTEM INACTIVE RESPONSE CODE
 TDRT     EQU    10B         *TDAM* RETRY LIMIT 
 TDSR     EQU    1           *TDAM* FILE STAGING REQUEST FUNCTION CODE
 TDWT     EQU    1           *TDAM* WRITE CODE
 UUPL     EQU    3           *UCDT* UPDATE PARAMETER LIST LENGTH
 UURE     EQU    1           *UCDT* UPDATE READ ERROR RESPONSE CODE 
 UUVE     EQU    2           *UCDT* UPDATE VERIFY ERROR RESPONSE CODE 
 UUWE     EQU    3           *UCDT* UPDATE WRITE ERROR RESPONSE CODE
*                                   (DATA TRANSFERRED TO DEVICE)
 UUWN     EQU    4           *UCDT* UPDATE WRITE ERROR RESPONSE CODE
*                                   (NO DATA TRANSFERRED TO DEVICE) 
          SPACE  4,10 
*         BUFFERS.
  
  
 CWBA     EQU    BFMS-3      CONTROL WORD BUFFER ADDRESS
 WEBA     EQU    CWBA-502    WRITE ERROR BUFFER ADDRESS 
          TITLE  MAIN LOOP. 
*         MAIN LOOP.
          SPACE  4,10 
          ORG    PPFW 
  
 PFU      RJM    PRS         PRESET PROGRAM 
          RJM    0,T1        CALL FUNCTION PROCESSOR
          RJM    SFC         SET FILE COMPLETE
          RJM    CFS         COMPLETE FET STATUS
          MONITOR  DPPM      DROP PP
          LJM    PPR         EXIT TO PP RESIDENT
          SPACE  4,10 
*         GLOBAL MEMORY DEFINITIONS.
  
  
 PFAF     BSSZ   2           *PFU* ACTIVE FLAG ADDRESS
 ERR      SPACE  4,25 
**        ERR - *PFU* ERROR EXIT PROCESSOR. 
* 
*         ENTRY  (A) = ERROR CODE.
*                (FA) = FNT ADDRESS, IF FILE SET BUSY.
*                     = 0 IF NO FILE SET BUSY.
*                (FS - FS+4) = FST ENTRY. 
*                (FN - FN+3) = FILE NAME. 
*                (IR+3 - IR+4) = FET ADDRESS. 
*                (PFAF - PFAF+1) = *PFU* ACTIVE FLAG ADDRESS. 
* 
*         EXIT   CHANNEL DROPPED IF ASSIGNED. 
*                ERROR MESSAGE PUT IN DAYFILE.
*                FILE SET COMPLETE. 
*                FET SET COMPLETE.
*                *PFU* ACTIVE FLAG CLEARED IN CENTRAL PROGRAM IF SET. 
*                PP DROPPED.
*                EXIT TO PP RESIDENT. 
* 
*         CALLS  ERP, EXR.
* 
*         MACROS ENDMS, MONITOR.
  
  
 ERR      SUBR               ENTRY
          STD    P1          SAVE ERROR CODE FOR ERROR OVERLAY
          ENDMS 
          LDC    2L"OVLB"+ERP  EXECUTE ERROR PROCESSOR
          RJM    EXR
*         MONITOR  DPPM      (PERFORMED IN ERROR OVERLAY) 
*         LJM    PPR         EXIT TO PP RESIDENT
          TITLE  COMMON SUBROUTINES.
 CAU      SPACE  4,15 
**        CAU - CLEAR *PFU* ACTIVE FLAG.
* 
*         ENTRY  (PFAF) = ADDRESS IN CPU PROGRAM OF *PFU* ACTIVE FLAG.
*                       = 0 IF *PFU* ACTIVE FLAG NOT SET. 
* 
*         EXIT   (PFAF) = 0.
*                *PFU* ACTIVE FLAG IN CPU PROGRAM CLEARED IF (PFAF) 
*                NON-ZERO AND A VALID ADDRESS.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  VCA. 
  
  
 CAU      SUBR               ENTRY/EXIT 
          LDN    ZERL        READ ZERO WORD 
          CRD    CM 
          LDM    PFAF        VALIDATE FLAG ADDRESS
          SHN    14 
          LMM    PFAF+1 
          RJM    VCA
          ZJN    CAUX        IF CLEAR OR INVALID
          SHN    14          FORM ABSOLUTE ADDRESS
          ADD    RA 
          SHN    6
          CWD    CM          CLEAR *PFU* ACTIVE FLAG
          LDN    0           CLEAR FLAG ADDRESS 
          STM    PFAF 
          STM    PFAF+1 
          UJN    CAUX        RETURN 
 CCA      SPACE  4,15 
**        CCA - CHECK CENTRAL ADDRESS.
* 
*         ENTRY  (A) = 12/LH,1/JS.
*                      LH = PP LOCATION OF HIGH ORDER BYTE OF ADDRESS.
*                      JS = JUSTIFICATION FLAG. 
*                           0 = LEFT JUSTIFIED. 
*                           1 = RIGHT JUSTIFIED.
* 
*         EXIT   (A) = (T1 - T2) = VALIDATED CENTRAL ADDRESS. 
*                ERROR EXIT TAKEN IF ADDRESS IS INVALID.
* 
*         USES   T1.
* 
*         CALLS  VCA. 
  
  
 CCA      SUBR               ENTRY/EXIT 
          SHN    21          SAVE LOCATION OF HIGH ORDER BYTE 
          STD    T1 
          MJN    CCA2        IF ADDRESS RIGHT JUSTIFIED 
  
*         GET LEFT JUSTIFIED ADDRESS. 
  
          LDM    1,T1        GET LEFT JUSTIFIED ADDRESS 
          SCN    77 
          SHN    6
          LMI    T1 
          SHN    6
  
*         CHECK ADDRESS.
  
 CCA1     RJM    VCA         VALIDATE CENTRAL ADDRESS 
          NJN    CCAX        IF A VALID ADDRESS 
          ERROR  ECPAR       PROCESS PARAMETER ERROR
  
*         GET RIGHT JUSTIFIED ADDRESS.
  
 CCA2     LDI    T1          GET RIGHT JUSTIFIED ADDRESS
          LPN    77 
          SHN    14 
          LMM    1,T1 
          UJN    CCA1        CHECK ADDRESS
 CFA      SPACE  4,10 
**        CFA - COMPUTE FET ADDRESS.
* 
*         ENTRY  (IR+3 - IR+4) = RELATIVE FET ADDRESS.
*                                (NO VALIDITY CHECK IS MADE.) 
* 
*         EXIT   (A) = ABSOLUTE FET ADDRESS.
  
  
 CFA      SUBR               ENTRY/EXIT 
          LDD    IR+3        FORM ABSOLUTE FET ADDRESS
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4 
          UJN    CFAX        RETURN 
 CFS      SPACE  4,10 
**        CFS - COMPLETE FET STATUS.
* 
*         ENTRY  (IR+3 - IR+4) = FET ADDRESS. 
* 
*         EXIT   FET STATUS SET COMPLETE IF FET ADDRESS VALID.
*                (IR+3 - IR+4) = 0 IF FET STATUS SET COMPLETE.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  VCA. 
  
  
 CFS      SUBR               ENTRY/EXIT 
          LDD    IR+3        GET FET ADDRESS
          SHN    6
          ADD    IR+4 
          RJM    VCA         VALIDATE FET ADDRESS 
          ZJN    CFSX        IF BAD FET ADDRESS 
          FETA               SET FET STATUS COMPLETE
          CRD    CM 
          AOD    CM+4 
          FETA
          CWD    CM 
          LDN    0           CLEAR FET ADDRESS
          STD    IR+3 
          STD    IR+4 
          UJN    CFSX        RETURN 
 FFE      SPACE  4,20 
**        FFE - FIND FNT ENTRY. 
* 
*         ENTRY  (A) = 16/,1/L,1/F. 
*                      L = 0 TO MAKE LIBRARY TYPE CHECK.
*                          1 TO SUPPRESS LIBRARY TYPE CHECK.
*                      F = 0 TO ABORT IF FILE NOT FOUND.
*                          1 TO ADVANCE EXIT IF FILE NOT FOUND. 
*                (IR+3 - IR+4) = VALIDATED FET ADDRESS. 
* 
*         EXIT   (FA) = FNT ADDRESS (0, IF NO FILE FOUND).
*                (FN - FN+4) = FNT ENTRY. 
*                (FS - FS+4) = FST ENTRY. 
*                FILE SET BUSY. 
*                ERROR EXIT TAKEN IF I/O SEQUENCE ERROR OR IF FILE NOT
*                FOUND AND ABORT OPTION IS SELECTED.
* 
*         USES   CM - CM+4, FA, FN - FN+4, FS - FS+4, T1. 
* 
*         MACROS ERROR, FETA, NFA.
  
  
 FFE      SUBR               ENTRY/EXIT 
          STD    T1          SAVE PROCESSING OPTIONS
          FETA               READ FILE NAME 
          CRD    FN 
  
*         CHECK FNT ADDRESS IN FET. 
  
          ADN    FTLM        READ FNT ADDRESS 
          CRD    CM 
          LDD    CP          READ FL CONTROL WORD 
          ADN    FLSW 
          CRD    FS 
          LDD    FS          SET NFL SIZE 
          SHN    6
          ADN    1
          STD    FS+1 
          LDC    FNTN 
          STD    FS 
          STD    FS+2 
          SBD    CM          CHECK FNT ADDRESS IN FET 
          PJN    FFE2        IF BELOW FNT 
          LDD    CM 
          SBD    FS+1 
          PJN    FFE2        IF ABOVE FNT 
          LDD    CM          SAVE FNT ADDRESS 
          STD    FA 
          NFA    FA,R 
          CRD    CM          READ FNT ENTRY 
  
*         COMPARE FILE NAMES. 
  
 FFE1     LDD    CM          CHECK CHARACTERS 1 AND 2 
          ZJN    FFE2        IF NULL
          LMD    FN 
          NJN    FFE2        IF NO MATCH
          LDD    CM+1        CHECK CHARACTERS 3 AND 4 
          LMD    FN+1 
          NJN    FFE2        IF NO MATCH
          LDD    CM+2        CHECK CHARACTERS 5 AND 6 
          LMD    FN+2 
          NJN    FFE2        IF NO MATCH
          LDD    CM+3        CHECK CHARACTER 7
          LMD    FN+3 
          SCN    77 
          ZJN    FFE5        IF A MATCH 
  
*         ADVANCE TO NEXT FNT ENTRY.
  
 FFE2     LDN    LENF        ADVANCE FNT ADDRESS
          RAD    FS 
          SBD    FS+1 
          PJN    FFE3        IF END OF FNT
          NFA    FS,R 
          CRD    CM 
          UJN    FFE1        LOOP ON SEARCH 
  
  
*         PROCESS FILE NOT FOUND. 
  
 FFE3     LDN    0           CLEAR BUSY FILE INDICATION 
          STD    FA 
          LDD    T1          CHECK FILE NOT FOUND PROCESSING
          SHN    21-0 
          MJN    FFE4        IF RETURN CONTROL REQUESTED
          ERROR  ECFNF       PROCESS FILE NOT FOUND ERROR 
  
 FFE4     AOM    FFE         ADVANCE EXIT ADDRESS 
          UJN    FFE7.1      RETURN 
  
*         PERFORM LIBRARY TYPE CHECK. 
  
 FFE5     LDD    T1          SEE IF CHECK FOR LIBRARY TYPE
          SHN    21-1 
          MJN    FFE6        IF LIBRARY TYPE CHECK SUPPRESSED 
          LDD    CM+4        CHECK FOR LIBRARY TYPE 
          SHN    -6 
          LMN    LIFT 
          NJN    FFE3        IF NOT LIBRARY TYPE
  
*         SET FNT ADDRESS IN FET. 
  
 FFE6     FETA   FTLM        SET FNT ADDRESS IN LIMIT WORD OF FET 
          CRD    CM 
          LDD    FS 
          LMD    FS+2 
          ZJN    FFE7        IF FET FNT ADDRESS CORRECT 
          LDD    FS          SET CORRECT FNT ADDRESS
          STD    FA 
 FFE7     LDD    FA          FNT ADDRESS
          STD    CM 
          NFA    FA,R        FETCH FNT ENTRY
          CRD    FS 
          CRD    FN          READ FNT ENTRY 
          FETA   FTLM        WRITE FNT POINTER TO FET 
          CWD    CM 
          RJM    SFB         SET FILE BUSY
          NJN    FFE8        IF FILE NOT SET BUSY 
 FFE7.1   LJM    FFEX        RETURN 
  
*         PROCESS I/O SEQUENCE ERROR. 
  
 FFE8     LDN    0           CLEAR BUSY FILE INDICATION 
          STD    FA 
          ERROR  ECIOS       PROCESS I/O SEQUENCE ERROR 
 LDB      SPACE  4,35 
**        LDB - LOAD BUFFER.
* 
*         ENTRY  (T4) = CHANNEL.
*                (T5) = EST ORDINAL.
*                (T6) = TRACK.
*                (T7) = SECTOR. 
*                (LF) = FILE LENGTH 
*                (SSPF) = SYSTEM SECTOR PROCESS FLAG. 
*                       = 0, IF NO SYSTEM SECTOR PROCESSING REQUIRED. 
*                       = 1, IF SYSTEM SECTOR PROCESSING REQUIRED.
* 
*         EXIT   (T6) = UPDATED TRACK.
*                (T7) = UPDATED SECTOR. 
*                (IN - IN+1) = UPDATED BUFFER IN POINTER. 
*                (EOIF) = 0 IF EOI NOT WRITTEN TO BUFFER. 
*                       = NON-ZERO IF EOI WRITTEN TO BUFFER.
*                (SSPE) = SYSTEM SECTOR ERROR STATUS, IF PROCESSED. 
*                       = 0, IF SYSTEM SECTOR PROCESSED WITHOUT ERROR.
*                       = NON-ZERO, IF SYSTEM SECTOR ERROR OCCURRED.
*                (SSPF) CLEARED WHEN SYSTEM SECTOR PROCESSING OCCURS. 
* 
*         NOTE - *SSPF* MUST NOT BE SET WHEN THIS ROUTINE IS CALLED 
*                FROM ANY OF THE OVERLAYS.  IT IS THE SETTING OF
*                *SSPF* WHICH DETERMINES WHETHER THE SUB-ROUTINE
*                *CSS* IS CALLED TO CHECK A FILE-S SYSTEM SECTOR. 
*                THIS SUB-ROUTINE RESIDES IN THE OVERLAY AREA AND,
*                THEREFORE, IS NOT AVAILABLE FOR CALLS WHEN AN
*                OVERLAY IS RESIDENT. 
* 
* 
*         USES   P5, CM - CM+4, FS+2 - FS+3, IN - IN+1, LF - LF+1,
*                OT - OT+1, T1 - T3, T6 - T7. 
* 
*         CALLS  CSS, RDS, SAR. 
* 
*         MACROS ERROR. 
  
  
 LDB      SUBR               ENTRY/EXIT 
          RJM    SAR         SET ABSOLUTE READ BUFFER ADDRESSES 
          LDN    0
          STD    P5 
          STM    EOIF        CLEAR EOI FLAG 
  
*         CHECK SIZE OF BUFFER. 
  
 LDB1     STM    CWBA        CLEAR SECTOR ERROR FLAGS 
          LDD    OT          LENGTH = OUT - IN+1
          SBD    IN 
          SHN    14 
          ADD    OT+1 
          SBD    IN+1 
          SBN    1
          PJN    LDB2        IF IN+1 .LT. OUT 
          ADC    *           ADD BUFFER LENGTH
 LDBA     EQU    *-2         (LIMIT-FIRST)
 LDB2     ADC    -101 
          MJN    LDBX        IF 101B WORDS NOT AVAILABLE
  
*         DETERMINE IF SYSTEM SECTOR PROCESSED. 
  
          STM    LDBN+1      SAVE AVAILABLE CM BUFFER SPACE 
          SHN    -14
          STM    LDBN 
          LDM    SSPF 
          ZJN    LDB5        IF SYSTEM SECTOR ALREADY PROCESSED 
  
*         PROCESS SYSTEM SECTOR.
  
          LDM    LDBN        CHECK AVAILABLE CM BUFFER SPACE
          SHN    14 
          ADM    LDBN+1 
          NJN    LDB3        IF SPACE FOR FILE CONTROL WORD 
 LDB2.1   LJM    LDBX        RETURN 
  
 LDB3     LDN    0           CLEAR SYSTEM SECTOR PROCESS FLAG 
          STM    SSPF 
          RJM    CSS         READ AND CHECK SYSTEM SECTOR 
          ZJN    LDB4        IF NO STATUS ERROR 
          STM    SSPE        SAVE STATUS ERROR
          UJN    LDB2.1      RETURN 
  
 LDB4     AOM    BFMS+1      ADJUST HEADER BYTE TO TRUE WORD COUNT
          LJM    LDB12       WRITE SYSTEM SECTOR TO CM BUFFER 
  
*         READ NEXT SECTOR. 
  
 LDB5     LDC    BFMS 
          RJM    RDS         READ SECTOR
          PJN    LDB6        IF NO MASS STORAGE ERROR 
          SHN    0-13 
          LPN    1
          LMN    2           SET MASS STORAGE ERROR CODE
          STM    CWBA 
          LMN    3
          NJN    LDB6        IF NOT FATAL ERROR 
          STM    BFMS        FORCE EOI SECTOR 
          STM    BFMS+1 
 LDB6     LDD    RA          CHECK FOR STORAGE MOVE 
          LMD    PR 
          ZJN    LDB7        IF NOT STORAGE MOVED 
          RJM    SAR         SET ABSOLUTE READ BUFFER ADDRESSES 
  
*         CHECK IF NEW TRACK. 
  
 LDB7     LDD    T6          SET CURRENT TRACK IN CONTROL WORD
          STM    CWBA+1 
          LDD    T7          SET CURRENT SECTOR IN CONTROL WORD 
          STM    CWBA+2 
          LDM    BFMS        CHECK FIRST CONTROL BYTE 
          NJN    LDB8        IF NOT EOF OR EOI
          LDM    BFMS+1 
          NJN    LDB8        IF EOF 
          LDN    1           SET EOI FLAG 
          STM    EOIF 
          LDN    0
          LJM    LDB13       WRITE SECTOR TO CM BUFFER
  
 LDB8     STD    T7          SET NEXT TRACK 
          STD    FS+3 
          SHN    6
          PJN    LDB9        IF NOT NEW TRACK 
          SHN    -6 
          STD    T6          SET NEW TRACK
          STD    FS+2 
          LDN    0
          STD    T7          CLEAR SECTOR 
          STD    FS+3 
  
*         CHECK LENGTH FOR DUMP FILES.
  
 LDB9     UJN    *+1         PERFORM LENGTH CHECK 
*         UJN    LDB12       (LENGTH CHECK SUPPRESSED)
 LDBC     EQU    *-1
          SOD    LF+1        DECREMENT FILE LENGTH
          PJN    LDB10       IF NO BORROW 
          SOD    LF 
          AOD    LF+1        CANCEL END AROUND BORROW 
 LDB10    ADD    LF 
          NJN    LDB12       IF NOT END OF FILE 
          LDD    LL          CHECK IF LENGTH LEFT 
          ADD    LL+1 
          ZJN    LDB11       IF NO MORE LENGTH LEFT 
          AOD    P5          SET RECALL EXIT FLAG 
          UJN    LDB12       WRITE SECTOR TO CM BUFFER
  
 LDB11    STM    BFMS        CLEAR LINKAGE BYTES
          STM    BFMS+1 
          AOM    CWBA        SET LENGTH ERROR FLAG
          STM    EOIF        SET EOI FLAG 
 LDB12    LDM    BFMS        CHECK FOR EOF OR EOI 
          ZJN    LDB13       IF EOF OR EOI
          LDM    BFMS+1      GET WORD COUNT 
 LDB13    ADN    1           ADD 1 FOR CONTROL WORD 
          STD    T1 
  
*         CHECK FOR LIMIT REACHED IN THIS SECTOR. 
  
          LDD    IN          CHECK IN + WORD COUNT
          SHN    14 
          ADD    IN+1 
          ADD    T1 
          ADC    *           SET SECOND PART WORD COUNT 
 LDBD     EQU    *-2         (-LIMIT) 
          STD    T2 
          PJN    LDB14       IF WRAP AROUND SECTOR
  
*         PROCESS NORMAL SECTOR.
  
          LDD    IN          STORE BUFFER 
          SHN    14 
          ADD    IN+1 
          ADC    *           READ SECTOR
 LDBE     EQU    *-2         (RA) 
          CWM    CWBA,T1
  
*         ADVANCE IN POINTER. 
  
          LDD    T1          ADVANCE IN 
          RAD    IN+1 
          SHN    -14
          RAD    IN 
          UJN    LDB17       CHECK OUT POINTER
  
*         PROCESS WRAP AROUND SECTOR. 
  
 LDB14    LDD    T1          SET FIRST PART WORD COUNT
          SBD    T2 
          STD    T3 
          ZJN    LDB15       IF NO FIRST PART 
          LDD    IN          STORE FIRST PART 
          SHN    14 
          ADD    IN+1 
          ADC    *           WRITE SECOND PART OF SECTOR
 LDBF     EQU    *-2         (RA) 
          CWM    CWBA,T3
 LDB15    LDD    T2          CHECK SECOND PART LENGTH 
          ZJN    LDB16       IF NO SECOND PART
          LDD    T3          SET PP BUFFER ADDRESS
          SHN    2
          ADD    T3 
          ADC    CWBA 
          STM    LDBH 
          LDC    *           WRITE SECOND PART OF SECTOR
 LDBG     EQU    *-2         (RA+FIRST) 
          CWM    CWBA,T2
 LDBH     EQU    *-1         (PP BUFFER ADDRESS)
 LDB16    LDD    T2          SET NEW IN POINTER 
          ADC    *
 LDBI     EQU    *-2         (FIRST)
          STD    IN+1 
          SHN    -14
          STD    IN 
  
*         CHECK FET OUT POINTER.
  
 LDB17    LDC    *           UPDATE OUT POINTER 
 LDBJ     EQU    *-2         (RA + FET ADDRESS OF OUT POINTER)
          CRD    CM 
          LDD    CM+3 
          STD    OT 
          SHN    14 
          LMD    CM+4 
          STD    OT+1 
          ADC    *           VALIDATE OUT POINTER 
 LDBK     EQU    *-2         (-LIMIT) 
          MJN    LDB18       IF OUT .LT. LIMIT
          ERROR  ECBAE       PROCESS BUFFER ARGUMENT ERROR
  
*         WRITE UPDATED IN POINTER. 
  
 LDB18    LDD    IN          SET IN POINTER 
          STD    CM+3 
          LDD    IN+1 
          STD    CM+4 
          LDC    *           WRITE IN POINTER TO FET
 LDBL     EQU    *-2         (RA + FET ADDRESS OF IN POINTER) 
          CWD    CM 
  
*         CHECK TERMINATIONS. 
  
          LDM    EOIF        CHECK EOI FLAG 
          ZJN    LDB20       IF NOT EOI 
 LDB19    LJM    LDBX        RETURN 
  
 LDB20    LDD    P5          CHECK IF RECALL FLAG SET 
          NJN    LDB19       IF RECALL FLAG SET 
          LJM    LDB1        LOOP FOR ANOTHER SECTOR
  
  
 EOIF     BSSZ   1           EOI FLAG 
  
 LDBM     BSS    0           CODE TO DISABLE FILE LENGTH CHECK
          LOC    LDBC 
          UJN    LDB12       SKIP FILE LENGTH CHECK 
          LOC    *O 
  
 LDBN     BSSZ   2           AVAILABLE CM BUFFER
 SSPF     CON    0           SYSTEM SECTOR PROCESS FLAG 
 SSPE     CON    0           SYSTEM SECTOR ERROR STATUS 
 DLSA     BSS    5           MASTER DEVICE STATUS 
 BEGF     BSS    3           BEGINNING FILE FLAGS 
 PDA      SPACE  4,15 
**        PDA - PROCESS DIRECT ACCESS FILE. 
* 
*         ENTRY  (A) = RESIDENCY DEVICE NUMBER. 
*                (DN) = MASTER DEVICE NUMBER. 
*                (FS+2) = FIRST TRACK OF FILE.
* 
*         EXIT   (T4 - T7) = MASS STORAGE PARAMETERS FOR FILE.
*                (DN) = RESIDENCY DEVICE NUMBER.
*                (DA) = NON-ZERO. 
*                (DLSA) = MASTER DEVICE NUMBER. 
*                ERROR EXIT TAKEN IF RESIDENCY DEVICE NOT FOUND.
* 
*         USES   CM, DA, DN, P1, T6.
* 
*         CALLS  IRA, SDN.
* 
*         MACROS ENDMS, ERROR.
  
  
 PDA      SUBR               ENTRY/EXIT 
          STD    P1 
          LDD    DN          GET DEVICE NUMBER
          STM    DLSA 
          LMD    P1 
          ZJN    PDA2        IF FILE RESIDES ON MASTER DEVICE 
  
*         PROCESS ALTERNATE DEVICE. 
  
          ENDMS 
          LDD    P1          SET UP DAF ORDINAL 
          STD    DN 
          STD    CM 
          LDC    ** 
 PDAA     EQU    *-1         (FAMILY EST ORDINAL) 
          RJM    SDN         SEARCH FOR DEVICE NUMBER 
          PJN    PDA1        IF DEVICE FOUND
          ERROR  ECDNF       PROCESS *DEVICE NOT FOUND* ERROR 
  
 PDA1     RJM    IRA         INITIALIZE RANDOM ADDRESS PROCESSORS 
          LDD    FS+2        RESET TRACK
          STD    T6 
  
 PDA2     LDN    1           SET DIRECT ACCESS FILE FLAG
          STD    DA 
          UJN    PDAX        RETURN 
 SAR      SPACE  4,10 
**        SAR - SET ABSOLUTE READ BUFFER ADDRESSES. 
* 
*         ENTRY  (RA) = CURRENT REFERENCE ADDRESS.
*                (FT - FT+1) = BUFFER FIRST.
*                (IR+3 - IR+4) = FET ADDRESS. 
* 
*         EXIT   (PR) = CURRENT REFERENCE ADDRESS.
*                ABSOLUTE READ BUFFER ADDRESSES SET.
* 
*         USES   PR.
* 
*         MACROS FETA.
  
  
 SAR      SUBR               ENTRY/EXIT 
          LDD    RA          SAVE CURRENT RA
          STD    PR 
          SHN    6           SET RA 
          STM    LDBE+1 
          STM    LDBF+1 
          SHN    -14
          LMC    ADCI 
          STM    LDBE 
          STM    LDBF 
          LDD    FT          SET RA+FIRST 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    FT+1 
          STM    LDBG+1 
          SHN    -14
          LMC    LDCI 
          STM    LDBG 
          FETA   FTIN        SET RA+FET ADDRESS OF IN POINTER 
          STM    LDBL+1 
          SHN    -14
          LMC    LDCI 
          STM    LDBL 
          FETA   FTOT        SET RA+FET ADDRESS OF OUT POINTER
          STM    LDBJ+1 
          SHN    -14
          LMC    LDCI 
          STM    LDBJ 
          LJM    SARX        RETURN 
 SBA      SPACE  4,20 
**        SBA - SET BUFFER ARGUMENTS. 
* 
*         READ BUFFER POINTERS INTO DIRECT CELLS. 
* 
*         ENTRY  (IR+3 - IR+4) = FET ADDRESS. 
* 
*         EXIT   (FT - FT+1) = FIRST. 
*                (IN - IN+1) = IN.
*                (OT - OT+1) = OUT. 
*                (LM - LM+1) = LIMIT. 
* 
*         USES   CM - CM+4, FT - FT+1, IN - IN+1, LM - LM+1, OT - OT+1. 
* 
*         MACROS FETA.
  
  
 SBA      SUBR               ENTRY/EXIT 
          FETA   FTLM        READ LIMIT 
          CRD    LM-3 
          SBN    1           READ OUT 
          CRD    OT-3 
          SBN    1           READ IN
          CRD    CM 
          LDD    CM+3 
          STD    IN 
          LDD    CM+4 
          STD    IN+1 
          FETA   FTFT        READ FIRST 
          CRD    CM 
          LDD    CM+3 
          LPN    77 
          STD    FT 
          LDD    CM+4 
          STD    FT+1 
          UJN    SBAX        RETURN 
 SCT      SPACE  4,20 
**        SCT - SET CATALOG TRACK.
* 
*         ENTRY  (P1 - P5) = 24/,18/PFD,18/AUI. 
*                            PFD = ADDRESS OF PF DESCRIPTION WORD.
*                            AUI = ADDRESS OF USER INDEX. 
* 
*         EXIT   (T5) = EST ORDINAL.
*                (T6) = TRACK.
*                (UI - UI+1) = USER INDEX.
*                ERROR EXIT TAKEN IF CATALOG TRACK NOT FOUND. 
* 
*         USES   CM - CM+4, UI - UI+1.
* 
*         CALLS  SCA. 
* 
*         MACROS ERROR, VADDR.
  
  
 SCT      SUBR               ENTRY/EXIT 
          VADDR  P3,LEFT     GET ADDRESS OF PF DESCRIPTION
          SHN    14          FORM ABSOLUTE ADDRESS
          ADD    RA 
          SHN    6
          CRM    SCTA,ON     READ PF DESCRIPTION
          VADDR  P4          GET ADDRESS OF USER INDEX
          SHN    14          FORM ABSOLUTE ADDRESS
          ADD    RA 
          SHN    6
          CRD    CM          READ USER INDEX
          LDD    CM+3 
          LPN    77 
          STD    UI 
          LDD    CM+4 
          STD    UI+1 
          LDC    SCTA        SET CATALOG ADDRESS
          RJM    SCA
          PJN    SCTX        IF CATALOG TRACK FOUND 
          ERROR  ECCNF       PROCESS CATALOG NOT FOUND ERROR
  
 SCTA     BSSZ   5           PF DESCRIPTION WORD STORAGE
 SFC      SPACE  4,15 
**        SFC - SET FILE COMPLETE.
* 
*         ENTRY  (FS - FS+4) = FILE STATUS. 
*                (FA) = FNT ADDRESS (0, IF FILE NOT SET BUSY).
* 
*         EXIT   (FA) = 0.
*                (FS - FS+4) = COMPLETED FST ENTRY. 
*                FILE STATUS SET COMPLETE AND WRITTEN TO CENTRAL. 
* 
*         USES   FA, FS+4.
* 
*         MACROS NFA. 
  
  
 SFC      SUBR               ENTRY/EXIT 
          AOD    FS+4        SET STATUS COMPLETE
          LDD    FA 
          ZJN    SFCX        IF NO FST ADDRESS
          NFA    FA,R        WRITE FST
          ADN    FSTL 
          CWD    FS 
          LDN    0           CLEAR BUSY FILE INDICATION 
          STD    FA 
          UJN    SFCX        RETURN 
 SRR      SPACE  4,10 
**        SRR - SET RELATIVE READ BUFFER ADDRESSES. 
* 
*         ENTRY  (FT - FT+1) = BUFFER FIRST POINTER.
*                (LM - LM+1) = BUFFER LIMIT POINTER.
* 
*         EXIT   RELATIVE READ BUFFER ADDRESSES SET.
  
  
 SRR      SUBR               ENTRY/EXIT 
          LDD    LM          SET LIMIT-FIRST
          SBD    FT 
          SHN    14 
          ADD    LM+1 
          SBD    FT+1 
          STM    LDBA+1 
          SHN    -14
          LMC    ADCI 
          STM    LDBA 
          LDC    ADCI+77     SET -LIMIT 
          LMD    LM 
          STM    LDBD 
          STM    LDBK 
          LCN    0
          LMD    LM+1 
          STM    LDBD+1 
          STM    LDBK+1 
          LDD    FT+1        SET FIRST
          STM    LDBI+1 
          LDD    FT 
          LMC    ADCI 
          STM    LDBI 
          LJM    SRRX        RETURN 
 VCA      SPACE  4,10 
**        VCA - VALIDATE CENTRAL ADDRESS. 
* 
*         ENTRY  (A) = CENTRAL ADDRESS TO VALIDATE. 
* 
*         EXIT   (A) = 0 IF ADDR .LE. 1 OR ADDR .GE. FL (BAD ADDRESS).
*                (A) = CENTRAL ADDRESS IF VALID.
*                (T1 - T2) = CENTRAL ADDRESS (RIGHT JUSTIFIED). 
* 
*         USES   T1 - T2. 
  
  
 VCA1     STD    T1          CLEAR UPPER PART OF ADDRESS
 VCA2     LDN    0           SET BAD ADDRESS FLAG 
  
 VCA      SUBR               ENTRY/EXIT 
          STD    T2          SAVE LOWER PART OF ADDRESS 
          SCN    1           TEST FOR ADDRESS .LE. 1
          ZJN    VCA1        IF ADDRESS .LE. 1
          SCN    77          SAVE UPPER PART OF ADDRESS 
          SHN    6
          STD    T1 
          SHN    6           TEST FOR ADDRESS .GE. FL 
          SBD    FL 
          PJN    VCA2        IF ADDRESS .GE. FL 
          LDD    T1          RESTORE VALID ADDRESS
          SHN    14 
          LMD    T2 
          UJN    VCAX        RETURN 
 VME      SPACE  4,15 
**        VME - VALIDATE MASS STORAGE EST ORDINAL.
* 
*         ENTRY  (A) = ADDRESS OF WORD CONTAINING EST ORDINAL.
* 
*         EXIT   (T5) = EST ORDINAL.
*                ERROR EXIT TAKEN IF NOT MASS STORAGE.
* 
*         USES   CM - CM+4, T1, T5. 
* 
*         CALLS  IRA. 
* 
*         MACROS ERROR. 
  
  
 VME1     RJM    IRA         INITIALIZE RANDOM ADDRESS PROCESSORS 
  
 VME      SUBR               ENTRY/EXIT 
          STD    T1          GET EST ORDINAL
          LDI    T1 
          LPC    777
          STD    T5 
          SFA    EST         READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDD    CM          CHECK IF MASS STORAGE
          SHN    21-13
          MJN    VME1        IF MASS STORAGE DEVICE 
          ERROR  ECPAR       PROCESS PARAMETER ERROR
          TITLE  COMMON DECKS.
*         COMMON DECKS. 
  
  
 IRA$     EQU    1           SELECT INITIALIZATION BY *COMPIRA* 
*CALL     COMPCRA 
*CALL     COMPSCA 
*CALL     COMPSDN 
 SEI$     EQU    1           SELECT *TRT* UPDATE CODE 
*CALL     COMPSEI 
*CALL     COMPSFB 
*CALL     COMPSES 
*CALL     COMPSNT 
*CALL     COMPSRA 
*CALL     COMPTGB 
  
*         *COMPIRA* MUST FOLLOW ALL RANDOM PROCESSORS IT IS TO
*         INITIALIZE. 
  
*CALL     COMPIRA 
          SPACE  4,10 
          USE    LITERALS 
          SPACE  4,10 
*         OVERLAY ORIGIN ADDRESS. 
  
  
 OVLA     EQU    *+5         OVERLAY ORIGIN ADDRESS 
          SPACE  4,10 
*         COMMON DECKS FOR FUNCTION PROCESSORS. 
  
  
*CALL     COMPCRS 
*CALL     COMPCTI 
*CALL     COMPCUT 
 EJT$     EQU    1           ENABLE EJT PROCESSING
 FNT$     EQU    1           ENABLE SYSTEM FNT PROCESSING 
 IFP$     EQU    1           INITIALIZE FNT PROCESS 
*CALL     COMPGFP 
 RIS$     SET    0           PROVIDE FOR IAPF SYSTEM SECTOR PROCESSING
*CALL     COMPRSS 
*CALL     COMPSTI 
*CALL     COMPSUT 
 OPN      TITLE  FUNCTION PROCESSORS (EXCEPT LOAD). 
***       OPN - OPEN FILE.
*         FUNCTION 00 - CTOP - NO WRITE LOCKOUT.
*         FUNCTION 01 - CTOL - WITH WRITE LOCKOUT.
* 
*         ENTRY  (IR+2) = 0 FOR NO WRITE LOCKOUT. 
*                       = 1 FOR WRITE LOCKOUT.
*                (IR+3 - IR+4) = VALIDATED FET ADDRESS. 
* 
*T FET       42/  FILE NAME,18/ 
*T FET+FTPM  60/  FST 
* 
*         FST = FST FOR FILE. 
* 
*         EXIT   (FS - FS+4) = FST ENTRY FOR FILE.
*                (FA) = FNT ADDRESS OF FILE.
*                FNT/FST ENTRY CREATED FOR FILE.
*                ERROR EXIT TAKEN IF FILE ALREADY EXISTS. 
* 
*T FET+1     12/  EN,48/  UNCHANGED 
*T FET+FTLM  12/  FA,48/  UNCHANGED 
* 
*         EN = DEVICE MNEMONIC. 
*         FA = FNT ADDRESS OF FILE. 
* 
*         USES   FA, T5, CM - CM+4, FN - FN+4, FS - FS+4. 
* 
*         CALLS  *0BF*. 
* 
*         MACROS ERROR, EXECUTE, FETA, MONITOR, NFA, SFA. 
  
  
 OPN      SUBR               ENTRY/EXIT 
          FETA               READ FILE NAME 
          CRD    FN 
          LDD    FN+3 
          SCN    77 
          ADD    IR+2 
          STD    FN+3 
          LDN    NEEQ        ASSIGN FILE TO NULL EQUIPMENT
          STD    FS 
          LDN    4           SELECT RETURN ON LOCAL FILE LIMIT
          STM    OVL-1
          EXECUTE  0BF,OVL
          UJN    OPN1        CHECK RETURN STATUS
  
          LDN    0           CLEAR BUSY FILE INDICATION 
          STD    FA 
          ERROR  ECDFN       PROCESS *DUPLICATE FILE NAME* ERROR
  
 OPN1     ZJN    OPN2        IF FNT ENTRY CREATED 
          LDN    FLET        SET LOCAL FILE LIMIT ERROR FLAG
          STD    CM+1 
          MONITOR  CEFM 
          LJM    OPNX        RETURN 
  
*         SET LIBRARY FILE TYPE.
  
 OPN2     LDD    FN+4        SET LIBRARY FILE TYPE
          LPN    77 
          ERRNZ  LIFT-10     CANNOT USE DIRECT CELL *TH*
          LMD    TH 
          STD    FN+4        STORE FILE TYPE
  
*         GET FST ENTRY.
  
          FETA   FTPM        GET FST ENTRY
          CRD    FS 
          LDD    FS+4        FORCE STATUS BUSY
          SCN    1
          STD    FS+4 
          LDD    FS          SET EST ORDINAL
          STD    T5 
  
*         WRITE FNT ENTRY.
  
          FETA   FTLM        SET FNT POINTER IN FET 
          CRD    CM 
          LDD    FA 
          STD    CM 
          NFA    FA,R 
          CWD    FN          WRITE FNT ENTRY
          FETA   FTLM 
          CWD    CM 
  
*         SET DEVICE TYPE.
  
          FETA   1           SET DEVICE TYPE IN FET 
          CRD    FN 
          SFA    EST,T5 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+3 
          STD    FN 
          FETA   1
          CWD    FN 
          LJM    OPNX        RETURN 
 ACF      EJECT 
***       ACF - ADVANCE CATALOG FILE. 
*         FUNCTION 02 - CTAC. 
* 
*         ADVANCE POSITION OF CATALOG FILE TO NEXT TRACK IN CHAIN AND 
*         ADVANCE CATALOG INTERLOCK IF SET. 
* 
*         ENTRY  (IR+3 - IR+4) = VALIDATED FET ADDRESS. 
* 
*T FET    42/  FILE NAME,18/
* 
*         EXIT   (FS - FS+4) = UPDATED FST ENTRY FOR FILE.
*                (FA) = FNT ADDRESS.
*                NEW CATALOG TRACK INTERLOCKED IF OLD CATALOG TRACK 
*                  INTERLOCKED ON ENTRY.
*                ERROR EXIT TAKEN IF ERROR FLAG DETECTED WHILE
*                  ADVANCING CATALOG INTERLOCK. 
* 
*T FET+FTPM  60/ FST
* 
*         FST = UPDATED FST ENTRY FOR FILE. 
* 
*         USES   T6.
* 
*         CALLS  FFE, SNT, UCF, VME.
  
  
 ACF      SUBR               ENTRY/EXIT 
          LDN    0           SELECT NORMAL PROCESSING 
          RJM    FFE         FIND FNT ENTRY 
          LDN    FS          ADDRESS OF EST ORDINAL 
          RJM    VME         VALIDATE MASS STORAGE EST ORDINAL
          LDD    FS+1        SET CURRENT CATALOG TRACK
          STD    T6 
          RJM    SNT         SET NEXT CATALOG TRACK 
          STD    T6 
          RJM    UCF         UPDATE CATALOG FILE PARAMETERS 
          UJN    ACFX        RETURN 
 RRD      EJECT 
***       RRD - READ DATA LIST. 
*         FUNCTION 03 - CTRL. 
* 
*         READ LIST OF FILES FROM DISK TO CM BUFFER.
* 
*         ENTRY  (IR+3 - IR+4) = VALIDATED FET ADDRESS. 
* 
*T FET       42/  DATA FILE NAME,18/
*T FET+FTRE  12/  RF,12/  ME,12/  AD,24/  RL
*T FET+FTDL  24/  DL,24/,12/  EC
*T FET+FTPM  12/  4000+DN,12/  FE,1/U,35/ 
* 
*         RF = RECALL FLAG. 
*              0    = NOT RECALL CALL (WHOLE WORD IS ZERO). 
*              7776 = RA+1 RECALL CALL WITH SYSTEM SECTOR 
*                     PROCESSING OUTSTANDING. 
*              7777 = RA+1 RECALL CALL. 
*         ME = MASTER DEVICE EST ORDINAL. 
*         AD = ALTERNATE DEVICE NUMBER. 
*         RL = REMAINING FILE LENGTH. 
*         DL = DATA LIST ADDRESS. 
*         EC = ELEMENT COUNT OF DATA LIST.
*         DN = DEVICE NUMBER. 
*         FE = FAMILY EST ORDINAL.
*         U  = 0 IF NOT TO CHECK FILE BUSY IN UPDATE MODE.
*         U  = 1 IF TO CHECK FILE BUSY IN UPDATE MODE.
* 
*         EACH SECTOR READ IS PRECEDED BY A CONTROL WORD IN THE 
*           FOLLOWING FORMAT -
* 
*T CW     12/ EF,12/ CT,12/ CS,12/ CB0,12/ CB1
* 
*         EF = ERROR FLAGS. 
*             FOR SYSTEM SECTOR - 10/ 0,1/S,1/Z,1/B 
*               S = ERROR IN SYSTEM SECTOR OR SYSTEM SECTOR READ ERROR. 
*               Z = ZERO LENGTH FILE. 
*               B = FILE BUSY.
*             FOR DATA SECTOR - 10/ 0,1/R,1/F 
*               R = READ ERROR. 
*               F = FATAL READ ERROR. 
*                   0 = SECTOR OF BAD DATA TRANSFERRED. 
*                   1 = SECTOR DATA NOT TRANSFERRED AND READ TERMINATED 
*                       WITH FORCED EOI.
*         CT = CURRENT TRACK. 
*         CS = CURRENT SECTOR.
*         CB0 = CURRENT SECTOR CONTROL BYTE 0.
*         CB1 = CURRENT SECTOR CONTROL BYTE 1.
* 
*         EXIT   FILES SPECIFIED BY DATA LIST READ AND TRANSFERED TO
*                  CIRCULAR BUFFER. 
*                ERROR EXIT TAKEN IF DEVICE NUMBER NOT SPECIFIED. 
* 
*         USES   CM - CM+4, DA, DN, FN - FN+4, FS - FS+4, LF - LF+1,
*                LL - LL+1, P2 - P4, OT - OT+1, T5 - T7.
* 
*         CALLS  FFE, IRA, LDB, PDA, RFF, SBA, SDL, SRR, VME. 
* 
*         MACROS ENDMS, ERROR, FETA, NFA, PAUSE, SETMS. 
  
  
 RRD      SUBR               ENTRY/EXIT 
          FETA   FTRE        CHECK RECALL STATUS WORD 
          CRD    CM 
          LDD    CM 
          ZJN    RRD1        IF NOT RECALL ENTRY
          LDN    2           SUPPRESS LIBRARY TYPE FILE CHECK 
 RRD1     RJM    FFE         FIND FNT ENTRY 
          LDN    0           CLEAR WORD COUNT REMAINING FOR FILE
          STD    LL 
          STD    LL+1 
          LDN    FS          ADDRESS OF EST ORDINAL 
          RJM    VME         VALIDATE MASS STORAGE EST ORDINAL
          SETMS  IO          INSURE MASS STORAGE DRIVER LOADED
          FETA   FTPM        SET DEVICE NUMBER
          CRD    CM 
          LDD    CM 
          NJN    RRD2        IF DEVICE NUMBER SPECIFIED 
          ERROR  ECNDS       PROCESS *NO DEVICE SPECIFIED*
  
*         PRESET READ LIST LOOP.
  
 RRD2     LPN    77          SAVE DEVICE NUMBER 
          STD    DN 
          LDD    CM+1        SET FAMILY EST ORDINAL 
          STM    PDAA 
          LDD    CM+2        SET CHECK UPDATE MODE FLAG 
          SHN    3-13 
          LPN    10 
          RAM    CDSA 
          RJM    SBA         SET BUFFER ARGUMENTS 
          LDN    0           CLEAR DIRECT ACCESS FLAG 
          STM    DLSA 
          STD    DA 
          FETA   FTDL        READ DATA LIST PARAMETERS
          CRD    CM 
          LDD    CM          STORE DATA LIST ADDRESS
          STD    P2 
          LDD    CM+1 
          STD    P3 
          LDD    CM+4        STORE NUMBER OF ELEMENTS 
          STD    P4 
          PAUSE  NE 
          RJM    SRR         SET RELATIVE READ BUFFER ADDRESSES 
  
*         GET READ LIST ELEMENT.
  
 RRD3     LDN    0           CLEAR FIRST BYTE OF CONTROL WORD 
          STM    CWBA 
          LDD    P2          READ DATA LIST ELEMENT 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    P3 
          CRD    CM 
          AOD    P3          INCREMENT DATA LIST ADDRESS
          SHN    -14
          RAD    P2 
          FETA   FTDW        SET DATA LIST WORD IN FET
          CWD    CM 
  
*         CHECK FOR READ LIST RECALL CALL.
  
          FETA   FTRE        CHECK FOR RECALL ENTRY 
          CRM    RRDA,ON
          LDM    RRDA 
          ZJN    RRD4        IF NOT RECALL ENTRY
          LJM    RRD7        PROCESS RECALL ENTRY 
  
 RRD4     LDD    CM+1        SET FILE LENGTH
          STD    LF 
          LDD    CM+2 
          STD    LF+1 
          LDN    1           SET SYSTEM SECTOR PROCESS FLAG 
          STM    SSPF 
          LDD    CM+3        STORE TRACK
          STD    FS+1 
          STD    FS+2 
          STD    T6 
          LDD    CM+4        STORE SECTOR 
          STD    FS+3 
          STD    T7 
          SHN    21-13
          MJN    RRD5        IF DIRECT ACCESS FILE
          NFA    FA,R        WRITE FST ENTRY
          ADN    FSTL 
          CWD    FS 
          UJN    RRD6        DUMP FILE
  
*         PROCESS DIRECT ACCESS FILE. 
  
 RRD5     LDD    T5          SAVE EST ORDINAL 
          STM    RRDB 
          LDD    T7 
          LPN    77 
          RJM    PDA         PROCESS DIRECT ACCESS
          LDD    T5          SET EST ORDINAL
          STD    FS 
          LDN    0           SET SECTOR TO SYSTEM SECTOR
          STD    T7 
          STD    FS+3 
          NFA    FA,R        WRITE FST ENTRY
          ADN    FSTL 
          CWD    FS 
 RRD6     LJM    RRD9        DUMP FILE
  
*         SET UP LENGTH AND DIRECT CELL FROM RECALL.
  
 RRD7     LDN    ZERL        CLEAR RECALL WORD IN FET 
          CRD    FN 
          FETA   FTRE 
          CWD    FN 
          LDM    RRDA+4      SET LENGTH OF FILE 
          STD    LF+1 
          LDM    RRDA+3 
          STD    LF 
          LDM    RRDA        CHECK RECALL FLAG
          SHN    21-0 
          MJN    RRD8        IF SYSTEM SECTOR ALREADY PROCESSED 
          LDN    1           SET SYSTEM SECTOR PROCESS FLAG 
          STM    SSPF 
 RRD8     LDD    FS+2        SET TRACK
          STD    T6 
          LDD    FS+3        SET SECTOR 
          STD    T7 
          LDD    CM+4        CHECK FILE TYPE
          SHN    21-13
          PJN    RRD9        IF INDIRECT ACCESS FILE
          RJM    SDL         SET DIRECT LENGTH
          LDN    1           SET DIRCT ACCESS FLAG
          STD    DA 
          LDM    RRDA+1      SET MASTER DEVICE EST ORDINAL
          STM    RRDB 
          LDD    DN          SET MASTER DEVICE NUMBER 
          STM    DLSA 
          LDM    RRDA+2      SET ALTERNATE DEVICE NUMBER
          STD    DN 
  
*         READ DATA TO CENTRAL BUFFER.
  
 RRD9     SETMS  READSTR
          RJM    LDB         LOAD BUFFER
          ENDMS 
          LDM    SSPE 
          ZJN    RRD10       IF NO SYSTEM SECTOR PROCESS ERROR
          LDN    0           CLEAR SYSTEM SECTOR PROCESS ERROR
          STM    SSPE 
          UJN    RRD11       FORCE TERMINATION OF FILE PROCESSING 
  
 RRD10    LDM    EOIF 
          ZJN    RRD12       IF NOT EOI 
 RRD11    LJM    RRD16       PROCESS EOI
  
*         CHECK IF TIME TO DROP OUT.
  
 RRD12    LDN    PPAL        FETCH PP AVAILABILITY WORD 
          CRD    CM 
          LDD    CM+4 
          ZJN    RRD13       IF NO PP-S AVAILABLE 
          LDD    P5 
          ZJN    RRD13       IF NOT DIRECT FILE LONGER THAN FL
          PAUSE  NE          PAUSE FOR STORAGE MOVE 
          FETA   FTOT        READ OUT POINTER 
          CRD    CM 
          LDD    CM+3 
          STD    OT 
          LDD    CM+4 
          STD    OT+1 
          LDD    LL          SET LENGTH FOR NEXT READ 
          STD    LF 
          LDD    LL+1 
          STD    LF+1 
          RJM    SDL         SET DIRECT LENGTH
          LJM    RRD9        CONTINUE READING 
  
*         SET UP RECALL INFORMATION IN FST ENTRY. 
  
 RRD13    LDD    FS+4        SET FILE STATUS
          SCN    17 
          LMN    4
          STD    FS+4 
          LDD    T6          SET TRACK
          STD    FS+2 
          LDD    T7          SET SECTOR 
          STD    FS+3 
  
*         SET UP SPECIAL RECALL WORD IN FET+FTRE. 
  
          LDD    LL+1        SET REMAINING FILE LENGTH
          ADD    LF+1 
          STD    CM+4 
          SHN    -14
          ADD    LL 
          ADD    LF 
          STD    CM+3 
          LDD    DN          SET ALTERNATE DEVICE NUMBER
          STD    CM+2 
          LDM    RRDB        SET MASTER DEVICE EST ORDINAL
          STD    CM+1 
          LCN    0           SET RECALL STATUS
          LMM    SSPF        SAVE SYSTEM SECTOR PROCESS FLAG
          STD    CM 
          FETA   FTRE        WRITE RECALL WORD IN FET 
          CWD    CM 
  
*         RESET POSITION OF DATA LIST POINTER AND COUNT.
  
          LDN    ZERL        CLEAR DATA LIST WORD 
          CRD    CM 
          SOD    P3          SET CORRECT DATA LIST POSITION 
          PJN    RRD14       IF NO BORROW 
          SOD    P2 
          STD    CM 
          AOD    P3 
          STD    CM+1 
          UJN    RRD15       SET ELEMENT COUNT
  
 RRD14    STD    CM+1 
          LDD    P2 
          STD    CM 
 RRD15    LDD    P4          SET ELEMENT COUNT
          STD    CM+4 
          FETA   FTDL        WRITE DATA LIST WORD 
          CWD    CM 
          LJM    RRDX        RETURN 
  
*         PROCESS EOI ON DIRECT ACCESS FILE.
  
 RRD16    LDD    DA          CHECK IF DIRECT ACCESS FILE
          ZJN    RRD17       IF NOT DIRECT ACCESS FILE
          RJM    RFF         RETURN FAST ATTACH FILE
          LDD    DN          CHECK IF MASTER DEVICE NUMBER
          LMM    DLSA 
          ZJN    RRD17       IF MASTER DEVICE NUMBER
  
*         RESTORE MASTER DEVICE PARAMETERS. 
  
          LDM    RRDB        RESTORE OLD EST ORDINAL
          STD    T5 
          STD    FS 
          RJM    IRA         INITIALIZE RANDOM ACCESS PROCESSORS
          LDM    DLSA        RESTORE DEVICE NUMBER
          STD    DN 
 RRD17    LDN    0           CLEAR DIRECT ACCESS FILE PARAMETERS
          STM    DLSA 
          STD    DA 
  
*         CHECK FOR MORE DATA LIST ELEMENTS.
  
          SOD    P4          DECREMENT ELEMENT COUNT
          ZJN    RRD18       IF LIST EXHAUSTED
          LJM    RRD3        LOOP FOR MORE FILES
  
*         FINISH READ LIST PROCESSING.
  
 RRD18    LDN    ZERL        CLEAR DATA WORD
          CRD    CM 
          FETA   FTDW 
          CWD    CM 
  
*         UPDATE FILE STATUS AND RETURN.
  
          LDN    0
          STD    FS+1        CLEAR FIRST TRACK NUMBER 
          STD    FS+2        CLEAR CURRENT TRACK NUMBER 
          STD    FS+3        CLEAR CURRENT SECTOR NUMBER
          LJM    RRDX        EXIT 
  
  
 RRDA     BSS    5           RECOVERY WORD
 RRDB     BSS    1           OLD EST ORDINAL
 CDS      SPACE  4,20 
**        CDS - CHECK DUMP STATUS.
* 
*         ENTRY  (FA) = FNT ADDRESS (FILE BUSY).
*                (T5) = EST ORDINAL FOR DATA FILE.
*                (T6) = FIRST TRACK OF FILE BEING PROCESSED.
*                (CDSA BIT 3) = 0 IF TO DUMP UPDATE MODE FILES. 
*                (CDSA BIT 3) = 1 IF NOT TO DUMP UPDATE MODE FILES. 
*                (BFMS - BFMS+501) = SYSTEM SECTOR OF FILE BEING
*                                    PROCESSED. 
* 
*         EXIT   (A) = 0 IF FILE SHOULD BE DUMPED.
*                    = 1 IF DUMPING UPDATE MODE FILES, AND FILE 
*                      ATTACHED IN WRITE, MODIFY, OR APPEND MODE. 
*                    = 1 IF NOT DUMPING UPDATE MODE FILES, AND
*                      FILE IN FAST-ATTACH MODE OR ATTACHED IN ANY
*                      WRITEABLE MODE.
*                (FN - FN+4) = FNT ENTRY FOR DATA FILE. 
*                MODE FIELD OF DATA FILE SET TO REFLECT FILE USAGE. 
*                FILE IS FAST ATTACHED IN READ/ALLOW UPDATE MODE AND
*                THE DATA FILE IS SET TO PERMANENT FILE TYPE IF THE 
*                FILE HAS FAST ATTACH STATUS. 
* 
*         CALLS  FAF, SFT.
  
  
 CDS3     LDC    LIFT*10000+FMRD-PMFT*10000-FMRU  LIBRARY AND READ ONLY 
 CDS4     ADC    PMFT*10000+FMRU  PERMANENT AND READ/ALLOW UPDATE 
          RJM    SFT         SET DATA FILE TYPE AND MODE
          LDN    0           SET STATUS TO *DUMP FILE*
  
 CDS      SUBR               ENTRY/EXIT 
          LDM    FISS        CHECK FAST ATTACH STATUS 
          SHN    21-13
          PJN    CDS1        IF NOT FAST ATTACH STATUS
          LDM    CDSA 
          LPN    10 
          NJN    CDS2        IF NOT DUMPING UPDATE MODE FILES 
          RJM    FAF         FAST ATTACH FILE 
          ZJN    CDS4        IF FILE CAN BE ATTACHED
          PJN    CDS2        IF FILE BUSY 
 CDS1     LDM    CASS        CHECK FILE ACCESS MODE 
 CDSA     LPN    22 
*         LPN    32          (NOT DUMPING UPDATE MODE FILES)
          ZJN    CDS3        IF FILE NOT BUSY 
 CDS2     LDN    1           SET *WRITE MODE* STATUS
          UJN    CDSX        EXIT 
 CSS      SPACE  4,35 
**        CSS - CHECK SYSTEM SECTOR.
* 
*         ENTRY  (T4) = CHANNEL.
*                (T5) = EST ORDINAL.
*                (T6) = FIRST TRACK OF FILE.
*                (T7) = SECTOR NUMBER OF SYSTEM SECTOR. 
*                (DA) = 0, IF INDIRECT ACCESS FILE. 
*                     = NON-ZERO, IF DIRECT ACCESS FILE.
*                (FS+1) = FIRST TRACK OF FILE.
* 
*         EXIT   (A) = STATUS FOR FILE (0 = DUMP).
*                (T6) = FIRST DATA TRACK OF FILE. 
*                (T7) = FIRST DATA SECTOR OF FILE.
*                (LF - LF+1) = LENGTH OF FILE TO DUMP BEFORE RECALL.
*                (LL - LL+1) = LENGTH OF FILE TO DUMP AFTER RECALL. 
*                (BFMS - BFMS+1+100*5) CONTAINS THE SYSTEM SECTOR.
*                ONE WORD WRITTEN TO CENTRAL BUFFER AS FOLLOWS. 
* 
*T        12/  ST,24/  LF,24/  LB 
* 
*         ST = FILE STATUS. 
*              0 = DUMP FILE. 
*              1 = FILE IN WRITE MODE.
*              2 = ZERO LENGTH FILE (NO EOI). 
*              4 = BAD SYSTEM SECTOR. 
*         LF = LENGTH OF FILE (INCLUDES EOI). 
*         = 12/ TRACK, 12/ SECTOR IF ERROR. 
*         LB = SYSTEM SECTOR LINKAGE BYTES. 
* 
*         USES   IN - IN+1, LF - LF+1, T6 - T7. 
* 
*         CALLS  CDS, RSS, SAR, SDL, SEI, UFP.
* 
*         MACROS ENDMS, SETMS.
  
  
 CSS      SUBR               ENTRY/EXIT 
          SETMS  READSTR
          LDN    0           CLEAR CONTROL WORD FILE LENGTH 
          STM    CWBA+1 
          STM    CWBA+2 
*         LDN    0           SELECT NO FILE NAME CHECK
          RJM    RSS         READ SYSTEM SECTOR 
          ZJN    CSS2        IF SYSTEM SECTOR GOOD
          LDD    T6          SET TRACK
          STM    CWBA+1 
          LDN    4           SET BAD SYSTEM SECTOR STATUS 
          LJM    CSS5        WRITE FILE CONTROL WORD
  
 CSS2     LDD    T6          SAVE CURRENT TRACK 
          STM    CSSA 
          LDD    T7          SAVE CURRENT SECTOR
          STM    CSSB 
          LDD    DA 
          ZJN    CSS3.1      IF PROCESSING INDIRECT ACCESS FILE 
          RJM    CDS         CHECK DUMP STATUS
          NJN    CSS5        IF FILE NOT TO BE DUMPED 
          ENDMS 
          LDN    0           UPDATE TRT 
          RJM    SEI         SET EOI
          LDM    CSSA        RESTORE CURRENT TRACK
          STD    T6 
          LDM    CSSB        RESTORE CURRENT SECTOR 
          STD    T7 
          LDD    T2          SET FILE LENGTH
          STD    LF 
          STM    CWBA+1 
          LDD    T3 
          STD    LF+1 
          STM    CWBA+2 
          ADD    T2 
          NJN    CSS4        IF NOT ZERO LENGTH FILE
          LDD    T6          SET TRACK
          STM    CWBA+1 
          LDN    2
 CSS3.1   UJN    CSS5        SET ZERO LENGTH FILE STATUS
  
 CSS4     RJM    SDL         SET DIRECT LENGTH
          LDN    0
 CSS5     STM    CWBA 
  
*         WRITE FILE CONTROL WORD TO CM BUFFER. 
  
          LDD    RA          CHECK FOR STORAGE MOVE 
          LMD    PR 
          ZJN    CSS6        IF NOT STORAGE MOVED 
          RJM    SAR         SET ABSOLUTE READ BUFFER ADDRESSES 
 CSS6     LDD    IN          WRITE STATUS WORD TO CENTRAL BUFFER
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IN+1 
          CWM    CWBA,ON
          AOD    IN+1        UPDATE IN
          SHN    -14
          RAD    IN 
          SBD    LM 
          NJN    CSS7        IF LIMIT NOT REACHED 
          LDD    IN+1 
          SBD    LM+1 
          NJN    CSS7        IF LIMIT NOT REACHED 
          LDD    FT 
          STD    IN 
          LDD    FT+1 
          STD    IN+1 
 CSS7     RJM    UFP         UPDATE FET POINTERS
          LDM    CWBA        SET ERROR STATUS 
          LJM    CSSX        RETURN 
  
 CSSA     CON    0           CURRENT TRACK
 CSSB     CON    0           CURRENT SECTOR 
 FAF      SPACE  4,20 
**        FAF - FAST ATTACH FILE. 
* 
*         ENTRY  (T5) = EST ORDINAL FOR FAST ATTACH FILE. 
*                (T6) = FIRST TRACK OF FAST ATTACH FILE.
* 
*         EXIT   (A) = 0 IF FILE FAST ATTACHED. 
*                    = -1 IF NO *FAFT* FNT ENTRY FOUND FOR FILE.
*                    .GT. 0 IF FILE WAS BUSY. 
*                FILE FAST ATTACHED IN READ/ALLOW UPDATE MODE IF
*                POSSIBLE.
* 
*         USES   T1, CM - CM+4, CN - CN+4.
* 
*         MACROS ENDMS, MONITOR, PAUSE, SFA.
  
  
 FAF7     LCN    1           SET *FILE NOT FOUND* STATUS
  
 FAF      SUBR               ENTRY/EXIT 
  
*         SEARCH FNT FOR CORRECT FAST ATTACH FILE.
  
          ENDMS 
          LDN    FNTP        GET FNT POINTER
          CRD    CM 
          LDN    0           CLEAR FNT INDEX
          STD    T1 
 FAF1     AOD    T1          ADVANCE FNT INDEX
          LMD    CM+2 
          ZJN    FAF7        IF END OF FNT
          SFA    FNT,T1 
          CRD    CN 
          LDD    CN+4        CHECK FOR FAST ATTACH FNT ENTRY
          SHN    -6 
          LMN    FAFT 
          NJN    FAF1        IF NOT FAST ATTACH FNT ENTRY 
          LDD    CN+3        CHECK IF LOCAL OR GLOBAL FILE
          LPN    77 
          STM    FAFA 
          SFA    FNT,T1      READ FST ENTRY 
          ADN    FSTG 
          CRD    CN 
          LDD    CN+1        CHECK FIRST TRACK
          LMD    T6 
          NJN    FAF1        IF NOT CORRECT FIRST TRACK 
          LDD    CN          CHECK EST ORDINAL
          LMD    T5 
          NJN    FAF1        IF NOT CORRECT EST ORDINAL 
  
*         ATTACH FAST ATTACH FILE.
  
 FAF2     LDD    T1          SET FNT ORDINAL
          STD    CM+4 
          LDC    ** 
 FAFA     EQU    *-1         (*FAT* INDEX)
          ZJN    FAF3        IF NOT GLOBAL FAST ATTACH FILE 
          LDD    T5 
 FAF3     STD    CM+1 
          LDN    PTRU        SELECT READ/ALLOW UPDATE MODE
          STD    CM+2 
          LDN    AFAS        SELECT FAST ATTACH SUBFUNCTION 
          STD    CM+3 
          MONITOR  AFAM      FAST ATTACH FILE 
          LDD    CM+1        STATUS FROM ATTACH 
          NJN    FAF5        IF FILE NOT ATTACHED 
          LDC    2000        SET FAST ATTACH STATUS 
          RAD    FS+4 
          LDD    T5          SET EST ORDINAL
          STD    CM+1 
          LDN    IUCS        SELECT TO INCREMENT USER COUNT 
          STD    CM+3 
          MONITOR  SMDM      INCREMENT USER COUNT 
 FAF4     LJM    FAFX        RETURN 
  
 FAF5     LDD    CM+4 
          SHN    21-1 
          PJN    FAF6        IF NOT ATTACHED WITH NON-ROLLABLE OPTION 
          LDC    FADL 
          SBN    1
          NJN    *-1         IF NOT END OF DELAY
          PAUSE 
          LDD    CM+1        CHECK ERROR FLAG 
          LMN    ORET 
          ZJN    FAF6        IF OVERRIDE ERROR FLAG SET 
          LJM    FAF2        RETRY FILE ATTACH
  
 FAF6     LDN    1           SET *FILE BUSY* STATUS 
          UJN    FAF4        RETURN 
 RFF      SPACE  4,20 
**        RFF - RETURN FAST ATTACH FILE.
* 
*         ENTRY  (FA) = FNT INDEX OF FILE (FILE BUSY).
*                (FS - FS+4) = FST ENTRY FOR DATA FILE. 
*                FNT ENTRY FOR DATA FILE SET TO PERMANENT FILE TYPE IF
*                IT REPRESENTS A FAST ATTACH FILE.
* 
*         EXIT   FAST ATTACH FILE RETURNED. 
*                FNT ENTRY FOR DATA FILE CHANGED TO LIBRARY TYPE. 
* 
*         USES   FS+4, CM - CM+4, FN - FN+4.
* 
*         CALLS  SFT, *0FA*.
* 
*         MACROS EXECUTE, NFA, SFA. 
  
  
 RFF2     LDC    10000*LIFT+FMRD   SET LIBRARY TYPE AND READ MODE 
          RJM    SFT
          LDD    FS+4        CLEAR FAST ATTACH STATUS 
          LPC    5777 
          STD    FS+4 
  
 RFF      SUBR               ENTRY/EXIT 
  
*         CHECK IF FILE FAST ATTACHED.
  
          NFA    FA,R 
          CRD    FN 
          LDD    FN+4        CHECK FOR FAST ATTACHED PERMANENT FILE 
          SHN    -6 
          LMN    PMFT 
          NJN    RFFX        IF NOT PERMANENT FILE
          LDD    FN+3        SET FILE MODE
          LPN    35 
          STM    OVL-1
  
*         SEARCH FNT FOR CORRECT FAST ATTACH FILE ENTRY.
  
          LDN    FNTP        READ FNT POINTER 
          CRD    FN 
          LDN    0
          STD    FN+4 
 RFF1     AOD    FN+4 
          LMD    FN+2 
          ZJN    RFF2        IF END OF FNT
          SFA    FNT,FN+4 
          CRD    CM 
          LDD    CM+4        CHECK FOR FAST ATTACH FILE 
          SHN    -6 
          LMN    FAFT 
          NJN    RFF1        IF NOT FAST ATTACH FILE ENTRY
          SFA    FNT,FN+4 
          ADN    FSTG 
          CRD    CM 
          LDD    CM+1        CHECK FIRST TRACK
          LMD    FS+1 
          NJN    RFF1        IF NOT CORRECT FIRST TRACK 
          LDD    CM          CHECK EST ORDINAL
          LMD    FS 
          NJN    RFF1        IF NOT CORRECT EST ORDINAL 
  
*         RETURN FAST ATTACH FILE.
  
          EXECUTE  0FA,OVL   RETURN FAST ATTACH FILE
          LCN    0           FORCE TO RESET PARAMETERS
          STD    DN 
          LJM    RFF2        CHANGE DATA FILE TYPE
 SDL      SPACE  4,15 
**        SDL - SET DIRECT ACCESS FILE LENGTH.
* 
*         ENTRY  (LF - LF+1) = LENGTH OF FILE.
* 
*         EXIT   (LF - LF+1) = FL IF LENGTH IS GREATER THAN FL. 
*                            = UNCHANGED IF LESS THAN FL. 
*                (LL - LL+1) = 0 IF LENGTH LESS THAN FL.
*                            = REMAINDER OF LENGTH - FL IF LENGTH 
*                              GREATER THAN FL. 
* 
*         USES   LF - LF+1, LL - LL+1.
  
  
 SDL2     LDN    0           CLEAR LENGTH LEFT
          STD    LL 
          STD    LL+1 
  
 SDL      SUBR               ENTRY/EXIT 
  
*         COMPARE LENGTH WITH FL. 
  
          LDD    LF+1        LL = LF - FL 
          SBD    FL 
          STD    LL+1 
          SHN    -21
          ZJN    SDL1        IF NO END AROUND BORROW
          AOD    LL+1        CANCEL END AROUND BORROW 
          LCN    1           SET CORRECT BORROW 
 SDL1     ADD    LF 
          STD    LL 
          MJN    SDL2        IF LENGTH LESS THAN FL 
  
*         SET FILE LENGTH TO FIELD LENGTH.
  
          LDD    FL          SET LENGTH EQUAL TO FL 
          STD    LF+1 
          LDN    0
          STD    LF 
          UJN    SDLX        RETURN 
 SFT      SPACE  4,15 
**        SFT - SET FILE TYPE.
* 
*         ENTRY  (A) = 6/FT,6/0,6/MD. 
*                      FT = DESIRED FILE TYPE.
*                      MD = DESIRED FILE MODE.
*                (FA) = FNT ADDRESS.
*                FILE SET BUSY. 
* 
*         EXIT   FILE TYPE AND MODE CHANGED TO THAT SPECIFIED.
*                (FN - FN+4) = UPDATED FNT ENTRY. 
* 
*         USES   T1, T2, FN - FN+4. 
* 
*         MACROS NFA. 
  
  
 SFT      SUBR               ENTRY/EXIT 
          STD    T1          SAVE FILE MODE 
          SHN    -6          SAVE FILE TYPE 
          STD    T2 
          NFA    FA,R 
          CRD    FN 
          LDD    FN+4        SET FILE TYPE
          LPN    77 
          LMD    T2 
          STD    FN+4 
          LDD    FN+3        SET FILE MODE
          SCN    77 
          LMD    T1 
          STD    FN+3 
          NFA    FA,R 
          CWD    FN 
          UJN    SFTX        RETURN 
 UFP      SPACE  4,15 
**        UFP - UPDATE FET POINTERS.
* 
*         ENTRY  (IN - IN+1) = CURRENT BUFFER IN POINTER. 
*                (IR+3 - IR+4) = FET ADDRESS. 
* 
*         EXIT   (IN - IN+1) = WRITTEN TO FET.
*                (OT - OT+1) = UPDATED FROM FET.
*                ERROR EXIT TAKEN ON BUFFER ARGUMENT ERROR. 
* 
*         USES   CM - CM+4, OT - OT+1.
* 
*         MACROS ERROR, FETA. 
  
  
 UFP1     LDD    IN          SET IN POINTER 
          STD    CM+3 
          LDD    IN+1 
          STD    CM+4 
          FETA   FTIN        WRITE IN POINTER TO FET
          CWD    CM 
  
 UFP      SUBR               ENTRY/EXIT 
          FETA   FTOT        READ OUT POINTER 
          CRD    CM 
          LDD    CM+3        SET OUT POINTER DIRECT CELL
          STD    OT 
          SHN    14 
          LMD    CM+4 
          STD    OT+1 
          SBD    LM+1        VALIDATE OUT POINTER 
          SHN    6
          SBD    LM 
          SHN    14 
          MJN    UFP1        IF OUT .LT. LIMIT
          ERROR  ECBAE       PROCESS BUFFER ARGUMENT ERROR
 STU      EJECT 
***       STU - SET PERMANENT FILE UTILITY INTERLOCK. 
*         FUNCTION 05 - CTSU. 
* 
*         ENTRY  (IR - IR+4) = INPUT REGISTER.
*                (IR+3 - IR+4) = VALIDATED FET ADDRESS. 
*                MUST BE CALLED WITH AUTO RECALL. 
* 
*T FET+FTPM  12/ EQ, 30/, 18/ INTF
* 
*         EQ = EST ORDINAL OF EQUIPMENT TO SET UTILITY INTERLOCK ON.
*         INTF = INTERLOCK FLAG ADDRESS.  THIS WORD IS SET TO ONE WHEN
*                THE PF UTILITY INTERLOCK IS SET.  OTHERWISE, *PFU* 
*                IS PLACED ON RECALL. 
* 
*         EXIT   (INTF) = 1.
*                PERMANENT FILE UTILITY INTERLOCK SET ON EST ORDINAL. 
*                *PFU* PLACED ON RECALL IF INTERLOCK COULD NOT BE SET.
* 
*         USES   P1 - P5. 
* 
*         CALLS  FAR, RPP, SUT, VME, WIF. 
* 
*         MACROS FETA, VADDR. 
  
  
 STU      SUBR               ENTRY/EXIT 
  
*         VALIDATE PARAMETERS.
  
          RJM    FAR         FORCE CALL WITH AUTO RECALL
          FETA   FTPM        READ PARAMETER WORD
          CRD    P1 
          VADDR  P4          VALIDATE INTERLOCK FLAG ADDRESS
          LDN    P1          ADDRESS OF EST ORDINAL 
          RJM    VME         VALIDATE MASS STORAGE EST ORDINAL
  
*         SET UTILITY INTERLOCK.
  
          RJM    SUT         SET UTILITY INTERLOCK
          NJN    STU1        IF UTILITY INTERLOCK NOT SET 
          LDN    1           SET INTERLOCK FLAG IN CENTRAL PROGRAM
          RJM    WIF
          UJN    STUX        RETURN 
  
*         PLACE *PFU* ON RECALL.
  
 STU1     LJM    RPP         PLACE *PFU* ON RECALL
 CLU      EJECT 
***       CLU - CLEAR PERMANENT FILE UTILITY INTERLOCK. 
*         FUNCTION 06 - CTCU. 
* 
*         ENTRY  (IR+3 - IR+4) = VALIDATED FET ADDRESS. 
* 
*T FET+FTPM  12/ EQ, 30/, 18/ INTF
* 
*         EQ = EST ORDINAL OF EQUIPMENT TO CLEAR UTILITY INTERLOCK ON.
*         INTF = INTERLOCK FLAG ADDRESS.  IF THIS WORD IS EQUAL TO ONE
*                THE UTILITY INTERLOCK WILL BE CLEARED, OTHERWISE THE 
*                ROUTINE EXITS WITH NO CHANGES MADE.
* 
*         EXIT   (INTF) = 0.
*                PERMANENT FILE UTILITY INTERLOCK CLEARED.
* 
*         USES   CM - CM+4, P1 - P5.
* 
*         CALLS  CUT, VME, WIF. 
* 
*         MACROS FETA, VADDR. 
  
  
 CLU      SUBR               ENTRY/EXIT 
  
*         VALIDATE PARAMETERS.
  
          FETA   FTPM        READ PARAMETER WORD
          CRD    P1 
          VADDR  P4          VALIDATE INTERLOCK FLAG ADDRESS
          LDN    P1          ADDRESS OF EST ORDINAL 
          RJM    VME         VALIDATE MASS STORAGE EST ORDINAL
  
*         DETERMINE INTERLOCK TYPE. 
  
          LDD    P4          FORM ABSOLUTE INTERLOCK FLAG ADDRESS 
          LPN    77 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    P5 
          CRD    CM          READ INTERLOCK FLAG
          LDD    CM+4 
          ZJN    CLUX        IF DEVICE NOT INTERLOCKED
  
*         CLEAR PF UTILITY INTERLOCK. 
  
          RJM    CUT         CLEAR PF UTILITY INTERLOCK 
  
*         CLEAR INTERLOCK FLAG IN CENTRAL PROGRAM.
  
          LDN    0           CLEAR INTERLOCK FLAG IN CENTRAL PROGRAM
          RJM    WIF
          UJN    CLUX        RETURN 
 RCF      EJECT 
***       RCF - REWIND CATALOG FILE.
*         FUNCTION 07 - CTRC. 
* 
*         REWIND IS DONE WITH THE ASSUMPTION THAT THE FILE HAS NO 
*         SYSTEM SECTOR.
* 
*         ENTRY  (IR+3 - IR+4) = VALIDATED FET ADDRESS. 
* 
*T FET    42/  FILE NAME,18/
* 
*         EXIT   (FS - FS+4) = UPDATED FST ENTRY. 
*                (FA) = FNT ADDRESS.
* 
*         CALLS  FFE, VME.
  
  
 RCF      SUBR               ENTRY/EXIT 
          LDN    0           SELECT NORMAL PROCESSING 
          RJM    FFE         FIND FNT ENTRY 
          LDN    FS          ADDRESS OF EST ORDINAL 
          RJM    VME         VALIDATE MASS STORAGE EST ORDINAL
          LDD    FS+4        SET FILE STATUS
          SCN    16 
          LMN    4
          STD    FS+4 
          LDN    0           SECTOR = 0 
          STD    FS+3 
          LDD    FS+1        CURRENT TRACK = FIRST TRACK
          STD    FS+2 
          UJN    RCFX        RETURN 
          SPACE  4,10 
**        LOCATION FREE OVERLAY LOAD ADDRESS. 
*         FUNCTION PROCESSORS BEYOND THIS POINT SHOULD NOT CALL 
*         LOCATION FREE OVERLAYS. 
  
  
 OVL      EQU    *+1         ZERO LEVEL OVERLAY LOAD ADDRESS
          ERRNG  CWBA-OVL-/ZOL/ZBFL  OVERFLOW FOR *0BF* 
          ERRNG  CWBA-OVL-/ZOL/ZFAL  OVERFLOW FOR *0FA* 
 SFL      EJECT 
***       SFL - SET FILE LENGTH.
*         FUNCTION 11 - CTFL. 
* 
*         ENTRY  (IR+3 - IR+4) = VALIDATED FET ADDRESS. 
* 
*T FET       42/  FILE NAME,18/ 
*T FET+FTPM  12/ EQ, 36/, 12/ TK
* 
*         EQ = EST ORDINAL OF EQUIPMENT WHERE FILE RESIDES. 
*         TK = FIRST TRACK OF FILE.  IF ZERO THE FIRST TRACK IS TAKEN 
*              FROM THE FST FOR THE FILE. 
* 
*         EXIT   (FS - FS+4) = FST ENTRY FOR FILE.
*                (FA) = FNT ADDRESS.
* 
*T FET+FTPM  36/,24/  FILE LENGTH 
* 
*         USES   CM - CM+4, T6. 
* 
*         CALLS  FFE, SEI, VME. 
* 
*         MACROS FETA.
  
  
 SFL      SUBR               ENTRY/EXIT 
          LDN    0           SELECT NORMAL PROCESSING 
          RJM    FFE         FIND FNT ENTRY 
          FETA   FTPM        SET EST ORDINAL AND TRACK
          CRD    CM 
          LDD    CM+4 
          NJN    SFL1        IF TRACK SPECIFIED 
          LDD    FS+1        GET TRACK FROM FST ENTRY 
 SFL1     STD    T6 
          LDN    CM          ADDRESS OF EST ORDINAL 
          RJM    VME         VALIDATE MASS STORAGE EST ORDINAL
  
*         DETERMINE LENGTH. 
  
          LDN    0           SELECT EOI SEARCH WITH TRT UPDATE
          RJM    SEI         SEARCH FOR END-OF-INFORMATION
          LDD    T2          RETURN FILE LENGTH 
          STD    CM+3 
          LDD    T3 
          STD    CM+4 
  
*         RETURN FILE LENGTH. 
  
          FETA   FTPM 
          CWD    CM 
          UJN    SFLX        RETURN 
 SEC      EJECT 
***       SEC - SET CATALOG TRACK INTERLOCK.
*         FUNCTION 12 - CTSC. 
* 
*         ENTRY  (IR+3 - IR+4) = VALIDATED FET ADDRESS. 
* 
*T FET    42/  FILE NAME,18/
* 
*         EST ORDINAL, FIRST TRACK OF FILE DEFINE TRACK TO INTERLOCK. 
* 
*         EXIT   (FA) = FNT ADDRESS.
*                (FS - FS+4) = FST ENTRY FOR FILE.
*                INTERLOCK SET ON FIRST TRACK OF FILE.
*                ERROR EXIT TAKEN IF ERROR FLAG IS DETECTED WHILE 
*                INTERLOCKING TRACK OR IF TRACK INTERLOCK IS ALREADY
*                SET FOR THE FILE.
* 
*         USES   FS+4, T6.
* 
*         CALLS  FFE, STI, VME. 
* 
*         MACROS ERROR. 
  
  
 SEC      SUBR               ENTRY/EXIT 
          LDN    0           SELECT NORMAL PROCESSING 
          RJM    FFE         FIND FNT ENTRY 
          LDN    FS          ADDRESS OF EST ORDINAL 
          RJM    VME         VALIDATE MASS STORAGE EST ORDINAL
          LDD    FS+4        CHECK IF INTERLOCK ALREADY SET 
          SHN    21-11
          MJN    SEC2        IF INTERLOCK ALREADY SET 
          LDD    FS+1        SET TRACK
          STD    T6 
          RJM    STI         SET TRACK INTERLOCK
          NJN    SEC1        IF ERROR FLAG DETECTED 
          LDD    TH          SET INTERLOCK FLAG IN FST
          RAD    FS+4 
          UJN    SECX        RETURN 
  
*         PROCESS *ERROR FLAG DETECTED*.
  
 SEC1     ERROR  ECEFD       PROCESS *ERROR FLAG DETECTED*
  
*         PROCESS *TRACK INTERLOCK SET* ERROR.
  
 SEC2     ERROR  ECIAS       PROCESS *TRACK INTERLOCK SET* ERROR
 CLC      EJECT 
***       CLC - CLEAR CATALOG TRACK INTERLOCK.
*         FUNCTION 13 - CTCC. 
* 
*         ENTRY  (IR+3 - IR+4) = VALIDATED FET ADDRESS. 
* 
*T FET    42/  FILE NAME,18/
* 
*         EST ORDINAL AND FIRST TRACK OF FILE DEFINE TRACK TO CLEAR 
*         INTERLOCK ON. 
* 
*         EXIT   (FA) = FNT ADDRESS.
*                (FS - FS+4) = FST ENTRY FOR FILE.
*                CATALOG TRACK INTERLOCK CLEARED. 
*                ERROR EXIT TAKEN IF TRACK INTERLOCK ALREADY CLEAR FOR
*                FILE.
* 
*         USES   FS+4.
* 
*         CALLS  CTI, FFE, VME. 
  
  
 CLC      SUBR               ENTRY/EXIT 
          LDN    0           SELECT NORMAL PROCESSING 
          RJM    FFE         FIND FNT ENTRY 
          LDN    FS          ADDRESS OF EST ORDINAL 
          RJM    VME         VALIDATE MASS STORAGE EST ORDINAL
          LDD    FS+4        CHECK IF INTERLOCK ALREADY CLEAR 
          SHN    21-11
          PJN    CLC1        IF INTERLOCK ALREADY CLEAR 
          LDD    FS+1        CLEAR TRACK INTERLOCK
          RJM    CTI
          LDC    -1000       CLEAR INTERLOCK FLAG IN FST
          RAD    FS+4 
          UJN    CLCX        RETURN 
  
*         PROCESS *TRACK INTERLOCK CLEAR* ERROR.
  
 CLC1     ERROR  ECIAC       PROCESS *TRACK INTERLOCK CLEAR* ERROR
 EIS      EJECT 
***       EIS - SET ERROR IDLE STATUS.
*         FUNCTION 14 - CTEI. 
* 
*         ENTRY  (IR+3 - IR+4) = VALIDATED FET ADDRESS. 
* 
*T FET    12/ EQ, 48/ 
* 
*         EQ = EST ORDINAL OF EQUIPMENT TO SET ERROR IDLE STATUS ON.
* 
*         EXIT   ERROR IDLE STATUS SET. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  SES, VME.
* 
*         MACROS FETA, SMSTF. 
  
  
 EIS      SUBR               ENTRY/EXIT 
          FETA               READ PARAMETER WORD
          CRD    CM 
          LDN    CM          ADDRESS OF EST ORDINAL 
          RJM    VME         VALIDATE MASS STORAGE EST ORDINAL
          LDN    STEI        SET ERROR IDLE STATUS
          RJM    SES
          SMSTF  GDEI        SET ERROR IDLE 
          UJN    EISX        RETURN 
 LCT      EJECT 
***       LCT - LOCATE CATALOG TRACK. 
*         FUNCTION 15 - CTCT. 
* 
*         ENTRY 
* 
*T FET+FTPM  24/,18/  PFD,18/  AUI
* 
*         PFD = ADDRESS OF PERMANENT FILE DESCRIPTION WORD. 
*         AUI = ADDRESS OF USER INDEX WORD. 
*T PFD    42/ NAME, 6/, 12/ EST ORDINAL 
* 
* 
*         EXIT
* 
*T FET+FTPM  36/0, 12/ EQ, 12/ CT 
* 
*         EQ = EST ORDINAL OF MASTER DEVICE.
*         CT = CATALOG TRACK OF USER. 
* 
*         USES   P1 - P5, T0 - T4.
* 
*         CALLS  SCT. 
* 
*         MACROS FETA.
  
  
 LCT      SUBR               ENTRY/EXIT 
          FETA   FTPM        READ PARAMETER WORD
          CRD    P1 
          RJM    SCT         SET CATALOG TRACK
          LDN    ZERL        CLEAR UPPER BYPE OF PARAMETER WORD 
          CRD    T0 
          FETA   FTPM        WRITE EST ORDINAL AND TRACK TO FET 
          CWD    T2 
          UJN    LCTX        RETURN 
 IAC      EJECT 
***       IAC - INCREMENT PERMANENT FILE ACTIVITY COUNT.
*         FUNCTION 16 - CTIA. 
* 
*         ENTRY  (IR - IR+4) = INPUT REGISTER.
*                (IR+3 - IR+4) = VALIDATED FET ADDRESS. 
*                MUST BE CALLED WITH AUTO RECALL. 
* 
*T FET+FTPM  12/ EQ, 30/, 18/ INTF
* 
*         EQ = EST ORDINAL OF EQUIPMENT TO INCREMENT COUNT ON.
*         INTF = INTERLOCK FLAG ADDRESS.  THIS WORD IS SET TO ONE WHEN
*                THE PF ACTIVITY COUNT IS INCREMENTED.
* 
*         EXIT   (INTF) = 1.
*                PERMANENT FILE ACTIVITY COUNT INCREMENTED. 
*                *PFU* PLACED ON RECALL IF ACTIVITY COUNT COULD NOT BE
*                INCREMENTED. 
* 
*         USES   CM - CM+4, P1 - P5.
* 
*         CALLS  FAR, RPP, VME, WIF.
* 
*         MACROS FETA, MONITOR, VADDR.
  
  
*         SET INTERLOCK FLAG IN CENTRAL PROGRAM.
  
 IAC1     LDN    1           SET INTERLOCK FLAG IN CENTRAL PROGRAM
          RJM    WIF
  
 IAC      SUBR               ENTRY/EXIT 
  
*         VALIDATE PARAMETERS.
  
          RJM    FAR         FORCE CALL WITH AUTO RECALL
          FETA   FTPM        READ PARAMETER WORD
          CRD    P1 
          VADDR  P4          VALIDATE INTERLOCK FLAG ADDRESS
          LDN    P1          ADDRESS OF EST ORDINAL 
          RJM    VME         VALIDATE MASS STORAGE EST ORDINAL
  
*         INCREMENT PF ACTIVITY COUNT.
  
          LDN    IPAS        INCREMENT PF ACTIVITY COUNT
          STD    CM+3 
          LDD    T5          EST ORDINAL
          STD    CM+1 
          MONITOR  STBM 
          LDD    CM+1 
          ZJN    IAC1        IF PF ACTIVITY COUNT INCREMENTED 
          LJM    RPP         PLACE *PFU* ON RECALL
 DAC      EJECT 
***       DAC - DECREMENT PERMANENT FILE ACTIVITY COUNT.
*         FUNCTION 17 - CTDA. 
* 
*         ENTRY  (IR+3 - IR+4) = VALIDATED FET ADDRESS. 
* 
*T FET+FTPM  12/ EQ, 30/, 18/ INTF
* 
*         EQ = EST ORDINAL OF EQUIPMENT TO DECREMENT COUNT ON.
*         INTF = INTERLOCK FLAG ADDRESS.  THIS WORD IS SET TO ZERO WHEN 
*                THE PF ACTIVITY COUNT IS DECREMENTED.
* 
*         EXIT   (INTF) = 0.
*                PERMANENT FILE ACTIVITY COUNT DECREMENTED. 
* 
*         USES   CM - CM+4, P1 - P5.
* 
*         CALLS  VME, WIF.
* 
*         MACROS FETA, MONITOR, VADDR.
  
  
 DAC      SUBR               ENTRY/EXIT 
  
*         VALIDATE PARAMETERS.
  
          FETA   FTPM        READ PARAMETER WORD
          CRD    P1 
          VADDR  P4          VALIDATE INTERLOCK FLAG ADDRESS
          LDN    P1          ADDRESS OF EST ORDINAL 
          RJM    VME         VALIDATE MASS STORAGE EST ORDINAL
  
*         DECREMENT PF ACTIVITY COUNT.
  
          LDN    DPAS        DECREMENT PF ACTIVITY COUNT
          STD    CM+3 
          LDD    T5          EST ORDINAL
          STD    CM+1 
          MONITOR  STBM 
*         LDN    0
          RJM    WIF         CLEAR INTERLOCK FLAG IN CENTRAL PROGRAM
          UJN    DACX        RETURN 
 TSU      EJECT 
***       TSU - TEST PERMANENT FILE UTILITY INTERLOCK.
*         FUNCTION 20 - CTTU. 
* 
*         ENTRY  (IR+3 - IR+4) = VALIDATED FET ADDRESS. 
* 
*T FET+FTPM  12/ EQ, 30/, 18/ INTF
* 
*         EQ = EST ORDINAL TO TEST UTILITY INTERLOCK ON.
*         INTF = INTERLOCK FLAG ADDRESS.  THIS WORD IS SET TO ONE IF
*                THE UTILITY INTERLOCK IS SET AND TO ZERO IF THE
*                INTERLOCK IS CLEAR.
* 
*         EXIT   (INTF) = INTERLOCK STATUS. 
*                THE CALLING PROGRAM SHOULD HAVE INCREMENTED THE PF 
*                ACTIVITY COUNT BEFORE USING THIS FUNCTION.  THIS WILL
*                INSURE THAT THE UTILITY INTERLOCK WILL NOT BECOME SET
*                WHILE THE CALLING PROGRAM IS PROCESSING THE DEVICE 
*                SINCE OTHER PROGRAMS WILL NOT SET THE UTILITY
*                INTERLOCK WHILE PF ACTIVITY EXISTS.
* 
*         USES   CM - CM+4, P1 - P5.
* 
*         CALLS  VME, WIF.
* 
*         MACROS FETA, MONITOR, SFA, VADDR. 
  
  
 TSU      SUBR               ENTRY/EXIT 
  
*         VALIDATE PARAMETERS.
  
          FETA   FTPM        READ PARAMETER WORD
          CRD    P1 
          VADDR  P4          VALIDATE INTERLOCK FLAG ADDRESS
          LDN    P1          ADDRESS OF EST ORDINAL 
          RJM    VME         VALIDATE MASS STORAGE EST ORDINAL
  
*         TEST UTILITY INTERLOCK. 
  
          LDD    T5          SET EST ORDINAL PARAMETER
          STD    CM+1 
          LDN    UTRS        ENSURE UP TO DATE TRT
          STD    CM+3 
          MONITOR  STBM 
          SFA    EST,T5      READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4 
          SHN    3
          ADK    TDGL        CHECK UTILITY INTERLOCK
          CRD    CM 
          LDD    CM+1 
          SHN    0-6
          LPN    1
          RJM    WIF         RETURN INTERLOCK STATUS
          UJN    TSUX        RETURN 
 CDI      EJECT 
***       CDI - CONTROL DEVICE INTERLOCK. 
*         FUNCTION 21 - CTGE. 
*         FUNCTION 22 - CTRE. 
*         FUNCTION 25 - CTGU. 
*         FUNCTION 26 - CTRU. 
* 
*         ENTRY  (IR+2) = VALIDATED FUNCTION CODE.
*                (IR+3 - IR+4) = VALIDATED CONTROL WORD ADDRESS.
* 
*T CWD+0  18/ FAM,18/ DMA,12/ RSP,6/ AT,5/,1/C
* 
*         FAM = RELATIVE ADDRESS OF THE CENTRAL MEMORY LOCATION 
*               CONTAINING THE PERMANENT FILE FAMILY NAME IN THE
*               UPPER 42 BITS.
*         DMA = RELATIVE ADDRESS OF THE CENTRAL MEMORY LOCATION 
*               CONTAINING THE DEVICE MASK IN THE LOWER 8 BITS. 
*         RSP = RESPONSE CODE FROM THE *TDAM* REQUEST.
*         AT  = ALTERNATE STORAGE TYPE. 
*         C = COMPLETION BIT. 
* 
*         EXIT   THE DESIRED FUNCTION, *CTGE*, *CTRE*, *CTGU* OR
*                *CTRU*, IS ISSUED TO THE APPROPRIATE ALTERNATE 
*                STORAGE EXECUTIVE VIA A *TDAM* MONITOR FUNCTION. 
* 
*T TDAM+0 6/ FC,54/ 
*T TDAM+1 42/ FAMILY,10/,8/ DM
* 
*         FC = FUNCTION CODE. 
*              02 - FOR *CTGE*. 
*              03 - FOR *CTRE*. 
*              06 - FOR *CTGU*. 
*              07 - FOR *CTRU*. 
*         DM = DEVICE MASK. 
* 
*         USES   CM - CM+4, P1, P2, P3, P4. 
* 
*         CALLS  ITD. 
* 
*         MACROS FETA, VADDR. 
  
  
 CDI      SUBR               ENTRY/EXIT 
  
*         VALIDATE FET PARAMETERS.
  
          FETA               COMPUTE FET ADDRESS
          CRD    CM          FETCH FET+0
          LDD    CM+4        GET ALTERNATE STORAGE TYPE 
          SHN    -6 
          NJN    CDI1        IF *AT* SPECIFIED
          LDN    ATMS        DEFAULT TO *MSS* 
 CDI1     STD    P4          *AT* 
          VADDR  CM,L        VALIDATE FAMILY NAME ADDRESS 
          STD    P2          SAVE ADDRESS 
          SHN    6
          LPN    77 
          STD    P1 
          VADDR  CM+1        VALIDATE DEVICE MASK ADDRESS 
          SHN    14          COMPUTE ABSOLUTE ADDRESS 
          ADD    RA 
          SHN    6
          CRD    CM          GET DEVICE MASK
          LDD    CM+4 
          LPC    377
          STD    P3          SAVE DEVICE MASK 
          LDD    P1          FETCH ADDRESS OF FAMILY NAME 
          SHN    6           COMPUTE ABSOLUTE ADDRESS 
          ADD    RA 
          SHN    6
          ADD    P2 
          CRD    CM          GET FAMILY NAME
          LDD    CM+3 
          SCN    77          INSURE 42 BIT FAMILY NAME
          STD    CM+3 
          LDD    P3          FETCH DEVICE MASK
          STD    CM+4        INSERT DEVICE MASK INTO REQUEST
          LDD    MA          INSERT INTO MESSAGE BUFFER 
          ADN    1
          CWD    CM 
          LDN    ZERL        CLEAR CM BUFFER
          CRD    CM 
          LDD    IR+2        FETCH *PFU* FUNCTION CODE
          ADK    TDGE-CTGE/100  DETERMINE *TDAM* FUNCTION CODE
          SHN    6
          STD    CM 
          LDD    MA          INSERT INTO MESSAGE BUFFER 
          CWD    CM 
          RJM    ITD         ISSUE *TDAM* REQUEST 
          STD    P1          SAVE REPLY 
          FETA               COMPUTE FET ADDRESS
          CRD    CM 
          LDD    P1          SET *TDAM* REPLY 
          STD    CM+3 
          FETA
          CWD    CM 
          LJM    CDIX        RETURN 
  
          ERRNZ  CTRE-CTGE-100  IF FUNCTION RELATIONSHIP CHANGED
          ERRNZ  CTGU-CTGE-400  IF FUNCTION RELATIONSHIP CHANGED
          ERRNZ  CTRU-CTGE-500  IF FUNCTION RELATIONSHIP CHANGED
 ITD      SPACE  4,10 
**        ITD - ISSUE *TDAM* TO ALTERNATE STORAGE EXECUTIVE.
* 
*         ENTRY  *TDAM* PARAMETERS SET IN MESSAGE BUFFER. 
*                (P4) = ALTERNATE STORAGE TYPE. 
* 
*         EXIT   (A) = *TDAM* REPLY.
* 
*         USES   P1, P2, CM - CM+4. 
* 
*         MACROS DELAY, MONITOR, PAUSE. 
  
  
 ITD      SUBR               ENTRY/EXIT 
          LDN    TDRT        INITIALIZE ATTEMPT COUNTER 
          STD    P1 
 ITD1     LDN    TDWT        SET WRITE CODE 
          STD    CM+1 
          LDM    ITDA,P4     ALTERNATE STORAGE SUBSYSTEM IDENTIFIER 
          ZJP    ITD3        IF NO SUBSYSTEM ID 
          STD    CM+2 
          LDC    6*100B+MIRE/10000B  SET SIZE AND DESTINATION 
          STD    CM+3 
          LDK    MIRE 
          STD    CM+4 
          MONITOR  TDAM 
          LDD    CM+1 
          ZJN    ITDX        IF *TDAM* COMPLETED NORMALLY 
          STD    P2          SAVE RESPONSE
          SBN    TDNA 
          ZJN    ITD2        IF EXECUTIVE NOT ACTIVE
          SOD    P1 
          ZJN    ITD2        IF ATTEMPT COUNT EXHAUSTED 
          PAUSE  NE 
          DELAY 
          UJN    ITD1        REISSUE REQUEST
  
 ITD2     LDD    P2          RETURN STATUS CODE 
          LJM    ITDX        RETURN 
  
 ITD3     ERROR  ECITD       PROCESS *TDAM* REQUEST ERROR 
  
 ITDA     INDEX              TABLE OF ALTERNATE STORAGE SUBSYSTEMS
          INDEX  ATMS,MFSI   *MSS*
          INDEX  ATAS,ASSI   *MSE*
          INDEX  ATOD,0 
          INDEX  ATMAX+1
  
          ERRNZ  ATMAX-ATOD  ADD NEW ENTRY TO *ITDA*
 PSR      EJECT 
***       PSR - PROCESS STAGING REQUEST.
*         FUNCTION 23 - CTSR. 
* 
*         ENTRY  (IR+3 - IR+4) = VALIDATED CONTROL WORD ADDRESS.
* 
*T CWD+0  18/ PFC,18/ PFID,12/ RSP,11/,1/ C 
* 
*         PFC = RELATIVE CENTRAL ADDRESS OF *PFC* ENTRY.
*         PFID = RELATIVE CENTRAL ADDRESS OF *PFID* LIST. 
*         RSP = RESPONSE CODE FROM *TDAM* REQUEST.
*         C = COMPLETION BIT. 
* 
*T PFID+0 42/  FN,18/ 
*T PFID+1 54/,6/  DN
*T PFID+2 48/,12/  TK 
*T PFID+3 48/,12/  SC 
*T PFID+4 58/,2/  CO
* 
*         FN = FAMILY NAME. 
*         DN = DEVICE NUMBER. 
*         TK = TRACK NUMBER.
*         SC = SECTOR NUMBER. 
*         CO = ORDINAL OF *PFC* ENTRY IN *SEC*. 
* 
*         EXIT   *TDAM* ISSUED TO ALTERNATE STORAGE EXECUTIVE.
*                *RSP* = RESPONSE FROM *TDAM* REQUEST.
* 
*T TDAM+0 6/ FC,3/ AL,15/ RESERVED,4/ F,2/CO,6/ DN,12/ TK,12/ SC
*T TDAM+1 18/,6/ AT,36/ ASA 
*T TDAM+2 42/ FILE NAME,18/ USER
*T TDAM+3 24/ JOB SEQUENCE NAME,15/ RESERVED,21/ EVENT
*T TDAM+4 42/ FAMILY,18/
*T TDAM+5 1/I,23/ LENGTH,36/ CREATION DATE
* 
*         FC = FUNCTION CODE (01).
*         AL = ACCESS LEVEL OF FILE.
*         F  = FLAGS. 
*              BIT 35 - FREE CARTRIDGE FLAG.
*              BIT 34 - RESERVED. 
*              BIT 33 - ASA VERIFY FLAG.
*              BIT 32 - PSEUDO-RELEASE FLAG.
*         CO = CATALOG ENTRY ORDINAL (LOCATION WITHIN SECTOR).
*         DN = DEVICE NUMBER. 
*         TK = TRACK NUMBER.
*         SC = SECTOR NUMBER. 
*         AT = ALTERNATE STORGE TYPE CODE.
*         ASA = ALTERNATE STORAGE ADDRESS.
*         I  = SET IF INDIRECT ACCESS FILE. 
* 
*         USES   CM - CM+4, CN - CN+4, P1 - P5. 
* 
*         CALLS  ITD. 
* 
*         MACROS FETA, VADDR. 
  
  
 PSR      SUBR               ENTRY/EXIT 
  
*         VALIDATE FET PARAMETERS.
  
          FETA
          CRD    CM 
          VADDR  CM,L        VALIDATE *PFC* FWA 
          STD    P2          SAVE FWA 
          SHN    6
          LPN    77 
          STD    P1 
          SHN    14          VALIDATE *PFC* LWA 
          ADD    P2 
          ADN    NWCE-1 
          STD    P4 
          SHN    6
          LPN    77 
          STD    P3 
          VADDR  P3 
          VADDR  CM+1        VALIDATE *PFID* LIST FWA 
          ADN    PFIDL-1     VALIDATE *PFID* LIST LWA 
          STD    P4 
          SHN    6
          LPN    77 
          STD    P3 
          VADDR  P3 
  
*         READ *PFID* LIST. 
  
          LDN    PFIDL       SET LIST LENGTH
          STD    P5 
          LDD    P3          COMPUTE ABSOLUTE ADDRESS OF LIST 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    P4 
          SBN    PFIDL-1
          CRM    BFMS,P5     READ LIST
  
*         BUILD *TDAM* PARAMETER BLOCK. 
  
          LDM    BFMS+4+3*5  SECTOR 
          STD    CM+4 
          LDM    BFMS+4+2*5  TRACK
          STD    CM+3 
          LDM    BFMS+4+1*5  DEVICE 
          LPN    77 
          SHN    14 
          LMM    BFMS+4+4*5  ORDINAL
          SHN    6
          LPC    377
          STD    CM+2 
          ERRNZ  TDSR-1      CANNOT USE DIRECT CELL *HN*
          LDD    HN          ALTERNATE STORAGE EXECUTIVE FUNCTION CODE
          STD    CM 
          LDN    0
          STD    CM+1 
          LDD    P1          COMPUTE *PFC* ABSOLUTE ADDRESS 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    P2 
          ADN    FCAF/5+FCAA*  *ASA* INFORMATION ADDRESS
          CRD    CN          GET *ASA* FLAGS
          ADN    FCAL/5-FCAF/5
          CRD    T0          GET ACCESS LEVEL 
          LDD    T0+1 
          LPN    7
          SHN    3           SET ACCESS LEVEL 
          RAD    CM 
          LDD    CN 
          LPC    AFPDRM+AFVERM+AFFREM 
          SHN    6-1
          RAD    CM+2 
          LDD    MA 
          CWD    CM          FIRST WORD OF PARAMETER BLOCK
          LDD    CN+1        LEAVE ONLY ALTERNATE STORAGE TYPE/ADDRESS
          LPN    77 
          STD    CN+1 
          STD    P4          SAVE *AT*
          LDN    0
          STD    CN 
          LDD    MA 
          ADN    1
          CWD    CN          SECOND WORD OF PARAMETER BLOCK 
          LDD    P1          *PFC* ABSOLUTE ADDRESS 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    P2 
          ADK    FCFN/5      FILE NAME AND USER INDEX 
          CRD    CM 
          LDD    MA 
          ADN    2
          CWD    CM          THIRD WORD OF PARAMETER BLOCK
          LDD    CP          GET JSN
          ADN    TFSW 
          CRD    CM 
          SFA    EJT,CM 
          CRD    CM 
          LDN    0
          STD    CM+2 
          STD    CM+3 
          STD    CM+4 
          LDD    MA 
          ADN    3
          CWD    CM          FOURTH WORD OF PARAMETER BLOCK 
          LDM    BFMS+3      FAMILY NAME
          SCN    77 
          STM    BFMS+3 
          LDN    0
          STM    BFMS+4 
          LDD    MA 
          ADN    4
          CWM    BFMS,ON     FIFTH WORD OF PARAMETER BLOCK
          LDD    P1          *PFC* ABSOLUTE ADDRESS 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    P2 
          ADN    FCCD/5      CREATION DATE
          CRD    CM 
          SBN    FCCD/5-FCLF/5
          CRD    CN          FETCH FILE LENGTH
          LDD    CN 
          STD    CM 
          LDD    CN+1 
          STD    CM+1 
          LDD    CN+4        SET INDIRECT FILE FLAG 
          LPC    4000 
          LMC    4000 
          RAD    CM 
          LDD    MA 
          ADN    5
          CWD    CM          SIXTH WORD OF PARAMETER BLOCK
          RJM    ITD         ISSUE *TDAM* MONITOR FUNCTION
          STD    P5          SAVE REPLY 
          FETA               SET RESPONSE INTO *FET*
          CRD    CM 
          LDD    P5 
          SHN    1
          STD    CM+3 
          FETA
          CWD    CM 
          LJM    PSRX        RETURN 
  
          ERRNG  FCCD/5-FCLF/5  CREATION DATE/LENGTH POSITIONS CHANGE 
 UUD      EJECT 
***       UUD - UTILITY UPDATE PFC ENTRY. 
*         FUNCTION 24 - CTUU - UPDATE UTILITY CONTROL DATE/TIME.
*         FUNCTION 27 - CTSL - SET *TFLOK*/*AFLOK* FLAG.
* 
*         ENTRY  (IR+3 - IR+4) = VALIDATED CONTROL WORD ADDRESS.
*                CATALOG TRACK INTERLOCKED BY CALLING UTILITY.
* 
*T CWD+0  18/,18/ PAR,12/ RSP,11/,1/ C
* 
*         PAR = RELATIVE ADDRESS OF PFC VERIFICATION BLOCK. 
*         RSP = RESPONSE FROM DISK UPDATE.
*         C = COMPLETION BIT. 
* 
*T PAR+0  42/  NAME,18/  UI 
*T PAR+1  1/A,23/,36/  CDT
*T PAR+2  22/,2/CO,12/  EQ,12/  TK, 12/  SC 
* 
*         NAME = PERMANENT FILE NAME. 
*         UI = USER INDEX.
*         A  = 0, IF SETTING *TFLOK*. 
*              1, IF SETTING *AFLOK*. 
*         CDT = CREATION DATE/TIME. 
*         CO = ORDINAL OF THE DESIRED *PFC* ENTRY IN
*               THE INDICATED CATALOG SECTOR. 
*         EQ = EST ORDINAL CONTAINING THE *PFC* ENTRY.
*         TK = TRACK CONTAINING THE *PFC* ENTRY.
*         SC = SECTOR CONTAINING THE *PFC* ENTRY. 
* 
*         EXIT   IF CTUU, THE UTILITY CONTROL DATE FIELD IS SET TO THE
*                  CURRENT DATE/TIME. 
*                IF CTSL, THE *TFLOK* FLAG IS SET IN THE PFC ENTRY. 
*                *RSP* = 0, IF OPERATION COMPLETED NORMALLY.
*                *RSP* = 1, IF DISK READ ERROR OCCURRED.
*                *RSP* = 2, IF VERIFICATION ERROR IS DETECTED.
*                *RSP* = 3, IF DISK WRITE ERROR OCCURRED AND DATA WAS 
*                           TRANSFERRED TO THE DEVICE.
*                *RSP* = 4, IF DISK WRITE ERROR OCCURRED AND NO DATA
*                           WAS TRANSFERRED TO THE DEVICE.
* 
*         USES   CN - CN+4, P1 - P5, T6 - T7. 
* 
*         CALLS  RDS, VCA, VME, WDS.
* 
*         MACROS ENDMS, ERROR, FETA, SETMS, VADDR.
  
  
 UUD      SUBR               ENTRY/EXIT 
          LDN    0           INITIALIZE RESPONSE CODE 
          STD    P5 
          FETA               COMPUTE FET ADDRESS
          CRD    CM          FETCH CONTROL WORD 
          VADDR  CM+1        VALIDATE PARAMETER BLOCK FWA 
          STD    P2          SAVE FWA 
          SHN    6
          LPN    77 
          STD    P1 
          SHN    14          VALIDATE PARAMETER BLOCK LWA 
          ADD    P2 
          ADN    UUPL-1 
          RJM    VCA
          NJN    UUD1        IF VALID ADDRESS 
          ERROR  ECPAR       PROCESS PARAMETER ERROR
  
 UUD1     SHN    14          FETCH THIRD WORD OF PARAMETER BLOCK
          ADD    RA 
          SHN    6
          CRD    CN 
  
*         SET UP PARAMETERS FOR DISK I/O. 
  
          LDD    CN+1        ORDINAL
          LPN    3
          STD    P3 
          LDD    CN+3        TRACK
          STD    T6 
          LDN    CN+2        EST ORDINAL ADDRESS
          RJM    VME         VALIDATE MASS STORAGE EST ORDINAL
          LDD    CN+4        SECTOR 
          STD    T7 
  
*         READ CATALOG SECTOR.
  
          SETMS  IO 
          LDC    BFMS        INPUT BUFFER ADDRESS 
          RJM    RDS         READ DISK SECTOR 
          PJN    UUD2        IF NO READ ERROR OCCURRED
          LDN    UURE        SET READ ERROR CODE
          STD    P5 
          LJM    UUD7        SET ERROR RETURN 
  
*         VERIFY *PFC* ENTRY. 
  
 UUD2     ENDMS 
          LDD    P3          COMPUTE *PFC* ENTRY ADDRESS WITHIN SECTOR
          SHN    NWCES
          STD    P4          CM WORD DISPLACEMENT 
          SHN    2
          ADD    P4          PP BYTE DISPLACEMENT 
          ADC    BFMS+2+FCFN+FCUI*  ADJUST FOR FILE NAME/USER INDEX 
          STD    P4 
          LDD    P1          GET FILE NAME AND USER INDEX 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    P2 
          CRD    CM 
          LDN    CM          COMPARE FILE NAME AND INDEX
          STD    P3 
 UUD3     LDI    P4 
          SBI    P3 
          NJN    UUD4        IF COMPARE ERROR 
          AOD    P4 
          AOD    P3 
          LMN    CM+5 
          NJN    UUD3        IF MORE BYTES TO COMPARE 
          UJN    UUD5        CHECK CREATION DATE/TIME 
  
 UUD4     LDN    UUVE        SET VERIFICATION ERROR CODE
          STD    P5 
          LJM    UUD8        SET ERROR RETURN 
  
 UUD5     LDD    P1          CHECK CREATION DATE/TIME 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    P2 
          ADN    1
          CRD    CM 
          LDN    FCCD-FCFN-5 COMPARE CREATION DATE/TIME 
          RAD    P4 
          LDN    CM+2 
          STD    P3 
 UUD6     LDI    P4 
          SBI    P3 
          NJN    UUD4        IF COMPARE ERROR 
          AOD    P4 
          AOD    P3 
          LMN    CM+5 
          NJN    UUD6        IF MORE BYTES TO COMPARE 
          LDD    IR+2        DETERMINE FUNCTION TYPE
          LMN    CTSL/100 
          ZJN    UUD6.0      IF SET *TFLOK*/*AFLOK* FUNCTION
  
*         SET UTILITY CONTROL DATE/TIME.
  
          LDN    FCUD-FCCD-3 ADJUST FOR UTILITY CONTROL DATE/TIME 
          RAD    P4 
          LDN    PDTL        OBTAIN CURRENT DATE/TIME 
          CRD    CM 
          LDD    CM+2 
          STI    P4          SET DATE INTO *PFC*
          LDD    CM+3 
          STM    1,P4 
          LDD    CM+4 
          STM    2,P4 
          UJN    UUD6.2      REWRITE CATALOG SECTOR 
  
*         SET *TFLOK*/*AFLOK* FLAG. 
  
 UUD6.0   LDD    P1          READ *TFLOK*/*AFLOK* FLAG
          SHN    6
          ADD    RA 
          SHN    6
          ADD    P2 
          ADN    1
          CRD    CM 
          LDN    FCAF-FCCD-3 SET FOR CARTRIDGE ALTERNATE STORAGE FLAGS
          RAD    P4 
          LDD    CM 
          SHN    6
          MJN    UUD6.1      IF SETTING *AFLOK* 
          LDN    FCTF-FCAF   SET FOR TAPE ALTERNATE STORAGE FLAGS 
          RAD    P4 
 UUD6.1   LDI    P4 
          LPC    -TFLOKM     SET FLAG 
          LMC    TFLOKM 
          STI    P4 
  
*         REWRITE CATALOG SECTOR. 
  
 UUD6.2   SETMS  IO,RW
          LDC    BFMS 
          RJM    WDS
          PJN    UUD7        IF NO WRITE ERROR OCCURRED 
          LDN    UUWE        SET WRITE ERROR CODE 
          STD    P5 
          LDM    RDCT        CHECK DRIVER STATUS
          SHN    21-13
          PJN    UUD7        IF DATA TRANSFERRED
          LDN    UUWN        SET WRITE ERROR WITH NO DATA TRANSFERRED 
          STD    P5 
  
*         SET RESPONSE CODE.
  
 UUD7     ENDMS 
 UUD8     FETA               COMPUTE FET ADDRESS
          CRD    CM          FETCH FET+0
          LDD    P5          FETCH RESPONSE CODE
          STD    CM+3        SET RESPONSE 
          FETA
          CWD    CM 
          LJM    UUDX        RETURN 
 PCF      EJECT 
***       PCF - POSITION CATALOG FILE.
*         FUNCTION 30 - CTPC. 
* 
*         ADVANCE POSITION OF CATALOG FILE ACCORDING TO USER INDEX AND
*         ADVANCE CATALOG INTERLOCK IF SET. 
* 
*         ENTRY  (IR+3 - IR+4) = VALIDATED FET ADDRESS. 
* 
*T FET       42/  FILE NAME,18/ 
*T FET+FTPM  24/,18/  PFD,18/  AUI
* 
*         PFD = ADDRESS OF PERMANENT FILE DESCRIPTION WORD. 
*         AUI = ADDRESS OF USER INDEX WORD. 
* 
*T PFD    42/ NAME, 6/, 12/ EST ORDINAL 
* 
*         EXIT   (FS - FS+4) = UPDATED FST ENTRY FOR FILE.
*                (FA) = FNT ADDRESS.
*                NEW CATALOG TRACK INTERLOCKED IF OLD CATALOG TRACK 
*                  INTERLOCKED ON ENTRY.
*                ERROR EXIT TAKEN IF ERROR FLAG DETECTED WHILE
*                  ADVANCING CATALOG INTERLOCK. 
* 
*T FET+FTPM  60/ FST
* 
*         FST = UPDATED FST ENTRY FOR FILE. 
* 
*         USES   P1 - P1+4. 
* 
*         CALLS  FFE, SCT, UCF, VME.
* 
*         MACROS FETA.
  
  
 PCF      SUBR               ENTRY/EXIT 
          LDN    0           SELECT NORMAL PROCESSING 
          RJM    FFE         FIND FNT ENTRY 
          LDN    FS          ADDRESS OF EST ORDINAL 
          RJM    VME         VALIDATE MASS STORAGE EST ORDINAL
          FETA   FTPM        READ PARAMETER WORD
          CRD    P1 
          RJM    SCT         SET CATALOG TRACK
          RJM    UCF         UPDATE CATALOG TRACK PARAMETERS
          UJN    PCFX        RETURN 
 UCF      SPACE  4,15 
**        UCF - UPDATE CATALOG FILE PARAMETERS. 
* 
*         ENTRY  (FS - FS+4) = CURRENT FST ENTRY. 
*                (T6) = NEW CATALOG TRACK.
* 
*         EXIT   (FS - FS+4) = NEW FST ENTRY. 
*                NEW FST ENTRY WRITTEN TO FET *FTPM* WORD.
*                TO *ERR* IF ERROR FLAG DETECTED WHEN SETTING TRACK 
*                  INTERLOCK. 
* 
*         USES   FS+1 - FS+4. 
* 
*         CALLS  CTI, STI.
* 
*         MACROS ERROR, FETA. 
  
  
 UCF      SUBR               ENTRY/EXIT 
          LDD    FS+4        CHECK IF INTERLOCK SET 
          SHN    21-11
          PJN    UCF1        IF INTERLOCK NOT SET 
          LDD    FS+1        CLEAR OLD TRACK INTERLOCK
          RJM    CTI
          LDC    -1000       CLEAR INTERLOCK FLAG IN FST
          RAD    FS+4 
          RJM    STI         SET NEW TRACK INTERLOCK
          NJN    UCF2        IF ERROR FLAG DETECTED 
          LDD    TH          SET INTERLOCK FLAG IN FST
          RAD    FS+4 
 UCF1     LDD    T6          SET NEW CATALOG TRACK
          STD    FS+1 
          STD    FS+2        REWIND CATALOG 
          LDN    0
          STD    FS+3 
          FETA   FTPM        WRITE FST TO FET 
          CWD    FS 
          UJN    UCFX        RETURN 
  
*         PROCESS *ERROR FLAG DETECTED*.
  
 UCF2     ERROR  ECEFD       PROCESS *ERROR FLAG DETECTED*
          TITLE  FUNCTION SUBROUTINES (EXCEPT LOAD).
 FAR      SPACE  4,10 
**        FAR - FORCE AUTO RECALL.
* 
*         EXIT   ERROR EXIT TAKEN IF NOT CALLED WITH AUTO RECALL. 
* 
*         CALLS  CRS. 
  
  
 FAR      SUBR               ENTRY/EXIT 
          RJM    CRS         CHECK AUTO RECALL STATUS 
          NJN    FARX        IF CALLED WITH AUTO RECALL 
          ERROR  ECPAR       PROCESS PARAMETER ERROR
 RPP      SPACE  4,20 
**        RPP - RECALL PP.
* 
*         ENTRY  (IR - IR+4) = INPUT REGISTER.
*                THIS ROUTINE IS ENTERED BY A JUMP RATHER THAN A RETURN 
*                JUMP AND EXITS TO PP RESIDENT. 
*                PP MUST HAVE BEEN CALLED WITH AUTO RECALL. 
* 
*         EXIT   TIMED RECALL REQUEST SET IN RECALL STACK.
* 
*         USES   IR+1, CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 RPP      LDD    IR+1        SET AUTO RECALL FLAG 
          SCN    77 
          STD    IR+1 
          LDN    ZERL 
          CRD    CM 
          LDN    PTMF        SET TIMED RECALL 
          STD    CM+1 
          LDC    4*1000D     SET TIME TO 4 SECONDS
          STD    CM+4 
          LDD    MA 
          CWD    IR 
          MONITOR  RECM      RECALL PP REQUEST
          LJM    PPR         EXIT TO PP RESIDENT
 WIF      SPACE  4,10 
**        WIF - WRITE INTERLOCK FLAG. 
* 
*         ENTRY  (A) = 0 TO CLEAR INTERLOCK FLAG IN CENTRAL.
*                    = 1 TO SET INTERLOCK FLAG IN CENTRAL.
*                (P4 - P5) = 6/,18/INTF 
*                            INTF = INTERLOCK FLAG ADDRESS. 
* 
*         EXIT   INTERLOCK FLAG WRITTEN AT *INTF*.
* 
*         USES   T1, CM - CM+4. 
  
  
 WIF      SUBR               ENTRY/EXIT 
          STD    T1          FORM FLAG WORD 
          LDN    ZERL 
          CRD    CM 
          LDD    T1 
          STD    CM+4 
          LDD    P4          FORM ABSOLUTE INTERLOCK FLAG ADDRESS 
          LPN    77 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    P5 
          CWD    CM          WRITE FLAG TO CENTRAL
          UJN    WIFX        RETURN 
  
  
          ERRNG  CWBA-*      FUNCTION PROCESSOR OVERFLOW
          TITLE  PFU - PRESET.
 PRS      SPACE  4,15 
**        PRS - PRESET. 
* 
*         ENTRY  (IR+3 - IR+4) = FET ADDRESS. 
*                (IR+2) = FUNCTION CODE.
* 
*         EXIT   (IR+3 - IR+4) = VALIDATED FET ADDRESS. (6/0,18/ADDR).
*                (IR+2) = VALIDATED FUNCTION CODE.
*                (T1) = FUNCTION PROCESSOR ADDRESS. 
*                (A) = OVERLAY NAME IF NOT A RESIDENT PROCESSOR.
* 
*         USES   FA, IR+3, T1, CM - CM+4. 
* 
*         CALLS  IFP, VCA.
* 
*         MACROS ERROR, FETA. 
  
  
*         CHECK FET ADDRESS.
  
 PRS      SUBR               ENTRY/EXIT 
          LDN    0           CLEAR BUSY FILE INDICATION 
          STD    FA 
          RJM    IFP         INITIALIZE FNT PROCESS 
          LDD    IR+3        CHECK FET ADDRESS
          LPN    77 
          STD    IR+3 
          SHN    14 
          LMD    IR+4 
          RJM    VCA         VALIDATE CENTRAL ADDRESS 
          ZJN    PRS1        IF FET ADDRESS OUTSIDE FIELD LENGTH
          ADN    12          CHECK IF FET WITHIN FIELD LENGTH 
          RJM    VCA
          ZJN    PRS1        IF FET OUTSIDE FIELD LENGTH
  
*         CHECK FET STATUS. 
  
          FETA               CHECK FET COMPLETION BIT 
          CRD    CM 
          LDD    CM+4 
          SHN    21-0 
          PJN    PRS3        IF FET NOT ALREADY COMPLETE
  
*         PROCESS PFU CALL ERRORS.
  
 PRS1     ERROR  ECPAR       PROCESS PARAMETER ERROR
  
 PRS2     ERROR  ECNSJ       PROCESS *NOT SPECIAL SYSTEM JOB* ERROR 
  
*         CHECK FOR SPECIAL SYSTEM JOB. 
  
 PRS3     LDD    CP 
          ADC    SEPW 
          CRD    CM 
          LDD    CM 
          SHN    21-2 
          PJN    PRS2        IF NOT *SSJ=* JOB
  
*         CHECK FUNCTION CODE.
  
          LDD    IR+2        CHECK FUNCTION CODE
          SBN    TFCNL
          PJN    PRS1        IF AN ILLEGAL FUNCTION CODE
  
*         CHECK FOR EXISTING ERROR FLAG.
  
          LDD    CP 
          ADN    STSW 
          CRD    CM 
          LDD    CM+1 
          NJN    PRS5        IF ERROR FLAG DETECTED 
  
*         PROCESS FUNCTION. 
  
          LDM    TFCN,IR+2   SET PROCESSOR ADDRESS
          STD    T1 
          ZJN    PRS1        IF AN UNDEFINED FUNCTION 
          SBD    HN 
          PJN    PRS4        IF A RESIDENT PROCESSOR
          LDC    EXR         PROCESSOR ADDRESS = OVERLAY PROCESSOR
          STD    T1 
          LDM    TFCN,IR+2   SET OVERLAY NAME 
          LMC    2L"OVLB" 
 PRS4     LJM    PRSX        RETURN 
  
 PRS5     ERROR  ECEFD       PROCESS *ERROR FLAG DETECTED*
 TFCN     SPACE  4,10 
**        TFCN - TABLE OF FUNCTION CODE PROCESSORS. 
* 
*         ONE WORD ENTRIES = ENTRY ADDRESS FOR RESIDENT PROCESSORS OR 
*         THE LAST CHARACTER OF THE OVERLAY NAME FOR OVERLAY PROCESSORS.
  
  
 TFCN     FNCT               FWA OF FUNCTION CODE TABLE 
          FNCT   CTOP,OPN    OPEN FILE (NO LOCKOUT) 
          FNCT   CTOL,OPN    OPEN FILE (LOCKOUT)
          FNCT   CTAC,ACF    ADVANCE CATALOG FILE 
          FNCT   CTRL,RRD    READ LIST
          FNCT   CTLM,LML    LOAD PROCESSOR 
          FNCT   CTSU,STU    SET PF UTILITY INTERLOCK 
          FNCT   CTCU,CLU    CLEAR PF UTILITY INTERLOCK 
          FNCT   CTRC,RCF    REWIND CATALOG FILE
          FNCT   CTCF,0      UNUSED 
          FNCT   CTFL,SFL    SET FILE LENGTH
          FNCT   CTSC,SEC    SET CATALOG TRACK INTERLOCK
          FNCT   CTCC,CLC    CLEAR CATALOG TRACK INTERLOCK
          FNCT   CTEI,EIS    SET ERROR IDLE STATUS
          FNCT   CTCT,LCT    LOCATE CATALOG TRACK 
          FNCT   CTIA,IAC    INCREMENT PF ACTIVITY COUNT
          FNCT   CTDA,DAC    DECREMENT PF ACTIVITY COUNT
          FNCT   CTTU,TSU    TEST PF UTILITY INTERLOCK
          FNCT   CTGE,CDI    GET MSS CATALOG MODIFY MODE INTERLOCK
          FNCT   CTRE,CDI    RELEASE MSS CATALOG MODIFY MODE INTERLOCK
          FNCT   CTSR,PSR    STAGE FILE FROM CARTRIDGE
          FNCT   CTUU,UUD    UPDATE UTILITY CONTROL DATE
          FNCT   CTGU,CDI    GET MSS CATALOG UPDATE MODE INTERLOCK
          FNCT   CTRU,CDI    RELEASE MSS CATALOG UPDATE MODE INTERLOCK
          FNCT   CTSL,UUD    SET *TFLOK* FLAG 
          FNCT   CTPC,PCF    POSITION CATALOG FILE
 TFCNL    FNCT               LENGTH OF TABLE
          SPACE  4,10 
 IFP      HERE               *COMPGFP* INITIALIZATION CODE
          SPACE  4,10 
          OVERFLOW           CHECK FOR OVERLAY OVERFLOW 
 LML      OVERLAY (PFLOAD ROUTINES.),OVLA 
***       LML - LOAD MAIN LOOP  (FUNCTION 4)
* 
*         ENTRY  (IR+3 - IR+4) = *CATS* FET ADDRESS.
* 
*T FET+FTPM  6/  DN,6/,18/  DATA,18/  PETS,18/  PAFL
* 
*         DN = MASTER DEVICE NUMBER.
*         DATA = ADDRESS OF DATA FILE FET.
*              = 0 IF NO DATA FET.
*         PETS = ADDRESS OF PERMITS FILE FET. 
*              = 0 IF NO PERMITS FET. 
*         PAFL = *PFU* ACTIVE FLAG ADDRESS.  THIS WORD IS SET TO ONE
*                WHEN THE *PFU* LOAD PROCESSOR IS ACTIVATED AND SET TO
*                ZERO WHEN THE *PFU* LOAD PROCESSOR COMPLETES OR
*                ABORTS.
* 
*         EXIT   PERMANENT FILE DEVICE LOADED.
*                TRT WRITTEN TO PERMANENT FILE DEVICE 
*                ERROR EXIT TAKEN IF ERROR FLAG DETECTED. 
* 
*         USES   TF, CM - CM+4, IR+3 - IR+4.
* 
*         CALLS  CAU, CIO, PCF, PCR, PCW, PDF, PDW, PIO, PLL, PPF, PPW, 
*                SDS. 
* 
*         MACROS ERROR, FETA, PAUSE.
  
  
*LML      SUBR               ENTRY/EXIT 
          RJM    PLL         PRESET LOAD LOOP 
 LML1     PAUSE              PAUSE FOR STORAGE MOVE 
          DELAY 
          LDD    CM+1        CHECK ERROR FLAG 
          ZJN    LML1.1      IF NO ERROR
          LDN    0           CLEAR FET ADDRESS
          STD    IR+3 
          STD    IR+4 
          ERROR  ECEFD       PROCESS *ERROR FLAG DETECTED*
  
 LML1.1   LDD    CM+2 
          LPN    1
          ZJN    LML2        IF ROLLOUT NOT REQUESTED 
          ERROR  ECRFD       PROCESS *ROLLOUT FLAG DETECTED.* 
  
*         CHECK FET FOR ACTION TO BE TAKEN. 
  
 LML2     LDD    CA          SET CATALOG FILE FET ADDRESS 
          STD    IR+3 
          LDD    CA+1 
          STD    IR+4 
          FETA
          CRD    CM 
          LDD    CM+4 
          ZJN    LML3        IF CATALOG FILE POSITION REQUEST 
          LMN    2
          ZJN    LML4        IF CATALOG FILE WRITE REQUEST
          LMN    4&2
          NJN    LML5        IF NOT CATALOG FILE READ REQUEST 
  
*         PROCESS CATALOG READ. 
  
          LDN    3           SET TYPE FILE
          STD    TF 
          RJM    PIO         PRESET I/O 
          RJM    PCR         PROCESS CATALOG READ 
          RJM    CIO         COMPLETE IO
          UJN    LML5        CHECK PERMIT FET 
  
*         PROCESS CATALOG POSITION. 
  
 LML3     RJM    PCF         POSITION CATALOG FILE
          UJN    LML5        CHECK PERMIT FET 
  
*         PROCESS CATALOG WRITE.
  
 LML4     LDN    1           SET CATALOG FILE TYPE
          STD    TF 
          RJM    PIO         PRESET I/O 
          RJM    PCW         PROCESS CATALOG WRITE
          RJM    CIO         COMPLETE IO
  
*         CHECK PERMIT FILE REQUEST.
  
 LML5     LDD    PF          SET *PETS* ADDRESS 
          STD    IR+3 
          LDD    PF+1 
          STD    IR+4 
          ADD    IR+3 
          ZJN    LML7        IF NO PERMIT FILE
          FETA
          CRD    CM 
          LDD    CM+4 
          ZJN    LML6        IF PERMIT FILE POSITION REQUEST
          LMN    2
          NJN    LML7        IF NOT PERMIT FILE WRITE REQUEST 
  
*         PROCESS PERMIT WRITE. 
  
          LDN    2           SET TYPE FILE
          STD    TF 
          RJM    PIO         PRESET I/O 
          RJM    PPW         PROCESS PRMIT WRITE
          RJM    CIO         COMPLETE IO
          UJN    LML7        CHECK DATA FET 
  
*         PROCESS PERMIT FILE POSITION REQUEST. 
  
 LML6     RJM    PPF         POSITION PERMIT FILE 
  
*         CHECK DATA FILE REQUEST.
  
 LML7     LDD    DF          SET DATA FILE FET ADDRESS
          STD    IR+3 
          LDD    DF+1 
          STD    IR+4 
          ADD    IR+3 
          ZJN    LML10       IF NO DATA FILE
          FETA
          CRD    CM 
          LDD    CM+4 
          ZJN    LML9        IF DATA FILE POSITION REQUEST
          LMN    2
          NJN    LML11       IF NOT DATA FILE WRITE REQUEST 
  
*         PROCESS DATA WRITE. 
  
          LDN    0           SET TYPE FILE
          STD    TF 
          RJM    PIO         PRESET I/O 
          RJM    PDW         PROCESS DATA WRITE 
          RJM    SDS         SAVE DATA FILE STATE 
          RJM    CIO         COMPLETE IO
 LML8     LJM    LML1        PAUSE AND CHECK ERROR FLAG 
  
*         PROCESS DATA FILE POSITION REQUEST. 
  
 LML9     RJM    PDF         POSITION DATA FILE 
          UJN    LML8        PAUSE AND CHECK ERROR FLAG 
  
 LML10    LDD    CA          SET CATALOG FILE FET ADDRESS 
          STD    IR+3 
          LDD    CA+1 
          STD    IR+4 
          FETA
          CRD    CM 
  
*         CHECK FOR TERMINATION OF LOAD.
  
 LML11    LDD    CM+4        CHECK FOR TERMINATION OF LOAD
          LMN    10 
          NJN    LML8        IF NOT TERMINATION FUNCTION
  
*         TERMINATE LOAD. 
  
          RJM    CAU         CLEAR ACTIVE UTILITY FLAG
          LJM    LMLX        RETURN 
          TITLE  PFLOAD SUBROUTINES.
 AVT      SPACE  4,25 
**        AVT - ALLOCATE AND VERIFY TRACK.
* 
*         ENTRY  (CM - CM+4) = CURRENT CONTROL WORD.
*                (T4 - T7) = MASS STORAGE PARAMETERS. 
*                (FS - FS+4) = FST ENTRY. 
* 
*         EXIT   (A) = NEW TRACK ALLOCATED. 
*                    = 0 IF NO TRACK ALLOCATED OR WRITE ERROR 
*                        OCCURRED.
*                (T4 - T7) = MASS STORAGE PARAMETERS. 
*                (FS - FS+4) = UPDATED FST ENTRY. 
*                (SC) = PREVIOUS LAST TRACK OF FILE.
*                (T3) = NEW TRACK ALLOCATED TO FILE.
*                NEW TRACK ALLOCATED, WRITTEN WITH EOI SECTORS AND
*                VERIFIED.
*                WRITE ERROR PROCESSOR CALLED IF TRACK NOT ALLOCATED. 
* 
*         USES   FS+2, FS+3, SC, T2, T3, T6, T7.
* 
*         CALLS  DFT, RTK, SEI, SWE, WEI, WVE.
* 
*         MACROS ENDMS. 
  
  
 AVT      SUBR               ENTRY/EXIT 
          LDD    CM          CHECK FOR REWRITE REQUEST
          SHN    21-5 
          MJN    AVT1        IF REWRITE REQUEST 
          RJM    WEI         WRITE EOI SECTOR 
          MJP    AVT7        IF WRITE ERROR 
 AVT1     ENDMS 
          LDD    T6          SAVE CURRENT TRACK 
          STD    FS+2 
          LDD    T7          SAVE CURRENT SECTOR
          STD    FS+3 
          LDN    0           SELECT EOI SEARCH WITH TRT UPDATE
          RJM    SEI         SEARCH FOR EOI 
          LDD    T6          SAVE LAST TRACK
          STD    SC 
  
*         ALLOCATE OVERFLOW TRACK.
  
 AVT2     LMC    400000      REQUEST SINGLE LINKED TRACK
          RJM    RTK
          ZJN    AVT4        IF TRACK NOT AVAILABLE 
          STD    T6          SAVE NEW TRACK 
          LDN    0           CLEAR SECTOR 
          STD    T7 
          LDD    FS+1        SET FIRST TRACK
          STD    T2 
          LDC    BFMS        WRITE AND VERIFY WITH EOI SECTORS
          RJM    WVE
          ZJN    AVT3        IF WRITE AND VERIFY GOOD 
          LDM    RDCT        SAVE DRIVER STATUS 
          STD    T3 
          LDD    SC          DROP BAD TRACK 
          LPC    3777 
          RJM    DFT
          LDD    T3          RESTORE DRIVER STATUS
          STM    RDCT 
          LPN    77 
          LMN    PARE 
          NJN    AVT6        IF NOT MEDIA ERROR 
          LDD    SC          GET LAST TRACK 
          UJN    AVT2        REQUEST ANOTHER TRACK
  
 AVT3     LDD    T6          SAVE NEW TRACK 
 AVT4     STD    T3 
          LDD    FS+2        RESTORE CURRENT TRACK
          STD    T6 
          LDD    FS+3        RESTORE CURRENT SECTOR 
          STD    T7 
          LDD    T3          GET NEW TRACK
 AVT5     LJM    AVTX        RETURN 
  
 AVT6     LDD    FS+2        RESTORE CURRENT TRACK
          STD    T6 
          LDD    FS+3        RESTORE CURRENT SECTOR 
          STD    T7 
          LDM    RDCT        DRIVER STATUS
          LPC    3777 
          ADC    4000        SET NO DATA TRANSFERRED
          STM    RDCT 
 AVT7     RJM    SWE         SET WRITE ERROR STATUS 
          UJN    AVT5        RETURN WITH (A) = 0
 CIO      SPACE  4,20 
**        CIO - COMPLETE IO.
* 
*         COMPLETE FST WRITE AND SET FET STATUS COMPLETE. 
* 
*         ENTRY  OPERATION COMPLETED ON FILE. 
*                (T5) = EST ORDINAL.
*                (T6) = TRACK.
*                (T7) = SECTOR. 
* 
*         EXIT   FET STATUS SET COMPLETE. 
*                FST WRITTEN. 
* 
*         USES   FS, FS+2 - FS+4. 
* 
*         CALLS  CFS, SFC.
  
  
 CIO      SUBR               ENTRY/EXIT 
  
*         UPDATE FST ENTRY AND WRITE. 
  
          LDD    FS+4        SET FILE STATUS
          SCN    16 
          LMN    4
          STD    FS+4 
          LDD    T6          SET TRACK
          STD    FS+2 
          LDD    T7          SET SECTOR 
          STD    FS+3 
          LDD    T5          SET EST ORDINAL
          STD    FS 
          RJM    SFC         WRITE FILE STATUS
  
*         SET COMPLETION BIT IN FET.
  
          RJM    CFS         COMPLETE FET STATUS
          UJN    CIOX        RETURN 
 CLS      SPACE  4,10 
**        CLS - CHECK TRACK LIMIT STATUS. 
* 
*         ENTRY  (CM - CM+4) = CONTROL POINT AREA WORD *STSW*.
*                (T5) = EST ORDINAL.
* 
*         EXIT   (A) = 0 IF NOT FATAL ERROR.
*                    = *FEEI* IF ERROR IDLE STATUS SET ON DEVICE. 
*                    = *FETL* IF ERROR FLAG DETECTED AT CONTROL POINT.
* 
*         USES   T1, CM - CM+4. 
* 
*         MACROS SFA. 
  
  
 CLS3     LDN    FEEI        SET ERROR IDLE ERROR CODE
  
 CLS      SUBR               ENTRY/EXIT 
          LDD    CM+2 
          LPN    1
          NJN    CLS1        IF ROLLOUT FLAG SET
          LDD    CM+1 
          ZJN    CLS2        IF NO ERROR FLAG SET 
 CLS1     LDN    FETL        SET TRACK LIMIT ERROR CODE 
 CLS2     STD    T1 
          SFA    EST,T5      CHECK ERROR IDLE STATUS
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4 
          SHN    3
          ADN    ACGL 
          CRD    CM 
          LDD    CM+4 
          LPN    MGDEI
          NJN    CLS3        IF ERROR IDLE SET
          LDD    T1 
          UJN    CLSX        RETURN 
 DFT      SPACE  4,20 
**        DFT - DROP TRACKS.
* 
*         ENTRY  (A) = 1/0,11/FT.  ALL TRACKS AFTER *FT* ARE DROPPED
*                      AND THE EOI IS SET TO SECTOR ZERO OF *FT*. 
*                    = 1/1,11/FT.  ALL TRACKS FROM *FT* TO END OF CHAIN 
*                      ARE DROPPED. 
*                (T5) = EST ORDINAL.
* 
*         EXIT   TRACK CHAIN DROPPED. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 DFT      SUBR               ENTRY/EXIT 
  
*         DROP TRACK CHAIN. 
  
          STD    CM+2        SET FIRST TRACK TO DROP
          LDN    0           CLEAR EOI SECTOR NUMBER
          STD    CM+3 
          LDD    T5          SET EST ORDINAL
          LMC    4000        SET CHECKPOINT BIT 
          STD    CM+1 
          MONITOR  DTKM      DROP TRACK CHAIN 
          UJN    DFTX        RETURN 
 DNT      SPACE  4,20 
**        DNT - DETERMINE NEXT TRACK. 
* 
*         ENTRY  (TF) = TYPE OF FILE. 
*                (CM - CM+4) = CURRENT CONTROL WORD.
* 
*         EXIT   (A) = 0 IF TRACK NOT AVAILABLE OR WRITE ERROR
*                        OCCURRED.
*                (SC) = NEXT TRACK IF AVAILABLE.
*                WRITE ERROR PROCESSOR CALLED IF TRACK NOT AVAILABLE. 
*                ABSOLUTE ADDRESSES SET IF STORAGE MOVED AND TRACK
*                AVAILABLE. 
* 
*         USES   SC.
* 
*         CALLS  AVT, RTK, SAW, SNT, SWE, WEI.
* 
*         MACROS CMSTF, ENDMS, SETMS, SMSTF.
  
  
*         DETERMINE NEXT DATA TRACK.
  
 DNT5     RJM    SNT         SET NEXT TRACK 
          STD    SC 
          SHN    21-13
          MJN    DNTX        IF TRACK AVAILABLE 
          RJM    WEI         WRITE EOI SECTOR 
          PJN    DNT5.1      IF NO ERROR
          RJM    SWE         SET WRITE ERROR STATUS 
          UJN    DNTX        RETURN WITH (A) = 0
  
 DNT5.1   ENDMS 
          LDD    T6          REQUEST LINKED TRACKS
          RJM    RTK
          ZJN    DNTX        IF TRACK NOT ASSIGNED
          STD    SC          SAVE NEW TRACK 
 DNT6     SETMS  IO,,WEBA 
          LDD    PR          CHECK IF STORAGE MOVED 
          LMD    RA 
          ZJN    DNT7        IF NOT STORAGE MOVED 
          RJM    SAW         SET ABSOLUTE WRITE BUFFER ADDRESSES
 DNT7     LDN    1           SET TRACK AVAILABLE STATUS 
  
 DNT      SUBR               ENTRY/EXIT 
          LDD    TF          CHECK FILE TYPE
          ZJP    DNT5        IF DATA FILE TYPE
          LMN    1
          ZJN    DNT1        IF CATALOG FILE TYPE 
  
*         ALLOCATE NEXT PERMIT TRACK. 
  
          RJM    AVT         ALLOCATE AND VERIFY PERMIT TRACK 
 DNT0     ZJN    DNTX        RETURN 
          STD    SC          SAVE NEW PERMIT TRACK
 DNT0.1   UJN    DNT6        POSITION MASS STORAGE DEVICE 
  
*         DETERMINE NEXT CATALOG TRACK. 
  
 DNT1     LDD    CM+1 
          ZJN    DNT2        IF NOT RANDOM REQUEST
          LDD    CM+3        SAVE LINK TRACK
          STD    SC 
          NJN    DNTX        IF LINK TRACK PRESENT
  
*         SET OVERFLOW BIT IN MST.  NOTE - THE OVERFLOW BIT MUST BE 
*         SET BEFORE THE TRACK IS REQUESTED TO PREVENT THE *VMSM* 
*         FUNCTION FROM GETTING FALSE ERRORS. 
  
 DNT2     ENDMS 
          SMSTF  GCTO        SET CATALOG TRACK OVERFLOW FLAG
          LDD    CM+1        SAVE STATUS
          RAM    DNTA 
  
*         ALLOCATE OVERFLOW CATALOG TRACK.
  
          RJM    AVT         ALLOCATE AND VERIFY TRACK
          ZJN    DNT3        IF TRACK NOT ALLOCATED 
          UJN    DNT0.1      POSITION MASS STORAGE DEVICE 
  
 DNT3     LDN    0
 DNTA     EQU    *-1
*         LDN    1           (OVERFLOW NOT ORIGINALLY SET)
          NJN    DNT4        IF OVERFLOW BIT WAS ORIGINALLY SET 
  
*         CLEAR CATALOG TRACK OVERFLOW BIT IN MST.
  
          CMSTF  GCTO        CLEAR CATALOG TRACK OVERFLOW 
 DNT4     LDN    0           SET TRACK NOT AVAILABLE STATUS 
          UJN    DNT0        RETURN 
 EDF      SPACE  4,15 
**        EDF - END DIRECT ACCESS FILE. 
* 
*         ENTRY  (T4 - T7) = MASS STORAGE PARAMETERS FOR DAPF.
*                (FS - FS+3) = FILE PARAMETERS FOR DAPF.
*                (DLSA - DLSA+4) = MASS STORAGE PARAMETERS FOR IAPF 
*                                  CHAIN. 
* 
*         EXIT   (T4 - T7) = MASS STORAGE PARAMETERS FOR IAPF CHAIN.
*                (FS - FS+3) = FILE PARAMETERS FOR IAPF CHAIN.
*                (DN) = DEVICE NUMBER FOR IAPF CHAIN. 
*                (DA) = 0.
* 
*         USES   DA, DN, FS - FS+3, T5 - T7.
* 
*         CALLS  IRA. 
  
  
 EDF      SUBR               ENTRY/EXIT 
          LDM    DLSA+1      CHECK FOR DAPF ON MASTER DEVICE
          SBD    T5 
          ZJN    EDF1        IF DAPF ON MASTER DEVICE 
          RAD    FS          RESTORE MASTER DEVICE EST ORDINAL
          STD    T5 
          LDM    DLSA        RESTORE MASTER DEVICE NUMBER 
          STD    DN 
          RJM    IRA         INITIALIZE RANDOM ADDRESS PROCESSORS 
 EDF1     LDM    DLSA+2      RESTORE IAPF FIRST TRACK 
          STD    FS+1 
          LDM    DLSA+3      RESTORE IAPF CURRENT TRACK 
          STD    T6 
          STD    FS+2 
          LDM    DLSA+4      RESTORE IAPF CURRENT SECTOR
          STD    T7 
          STD    FS+3 
          LDN    0           CLEAR DAPF FLAG
          STD    DA 
          UJN    EDFX        RETURN 
 EMB      SPACE  4,20 
**        EMB - EMPTY THE BUFFER. 
* 
*         ENTRY  (T4 - T7) = MASS STORAGE PARAMETERS. 
*                (FT - FT+1) = FIRST. 
*                (IN - IN+1) = IN.
*                (OT - OT+1) = OUT. 
*                (LM - LM+1) = LIMIT. 
*                (FS - FS+4) = FST ENTRY. 
*                (P2) = SECTOR COUNT TO WRITE.
*                SUB-ROUTINE *SRW* EXECUTED PRIOR TO THE FIRST
*                ENTRY OR ANY ENTRY SUBSEQUENT TO A PAUSE.
* 
*         EXIT   (A) = 0 IF BUFFER EMPTY OR IF ERROR DETECTED.
*                    = .GT. 0 IF BUFFER IS NOT EMPTY BUT EOI WAS
*                      WRITTEN. 
*                DATA COPIED FROM CM BUFFER TO MASS STORAGE.
*                WRITE ERROR PROCESSOR CALLED IF ERROR DETECTED.
* 
*         USES   P1, SC, T6, T7, CM - CM+4, FN - FN+4.
* 
*         CALLS  DNT, RCB, SAW, SSC, SWE, UOP, WDS, WEI.
* 
*         MACROS ERROR, SETMS.
  
  
 EMB      SUBR               ENTRY/EXIT 
  
*         PRESET EMPTY BUFFER LOOP. 
  
          SETMS  IO,,WEBA 
          LDN    ZERL 
          CRD    FN 
          LDN    0           CLEAR EOI FLAG 
          STM    BEGF,TF
          RJM    SAW         SET ABSOLUTE WRITE BUFFER ADDRESSES
  
*         PROCESS CENTRAL BUFFER. 
  
 EMB1     LDD    OT          READ CONTROL WORD
          SHN    14 
          ADD    OT+1 
          ADC    *
 EMBA     EQU    *-2         (RA) 
          CRD    CM 
          LDD    HN 
          SBD    CM+4 
          PJN    EMB2        IF LEGAL WORD COUNT
          FETA               READ FILE NAME 
          CRD    FN 
          ERROR  ECBCW       PROCESS BUFFER CONTROL WORD ERROR
  
 EMB2     AOD    CM+4 
          STD    P1 
  
*         DETERMINE NEXT SECTOR.
  
          LDD    T7          SET NEXT SECTOR
          ADN    1
          STD    SC 
          LMM    SLM
          NJN    EMB3        IF NOT END OF TRACK
          LDD    CM          CHECK FOR EOI SECTOR 
          SHN    -6 
          SBN    2
          PJN    EMB3        IF EOI SECTOR
          RJM    DNT         DETERMINE NEXT TRACK 
          NJN    EMB3        IF NO ERROR
 EMB2.1   LJM    EMBX        RETURN 
  
*         READ SECTOR FROM CENTRAL BUFFER.
  
 EMB3     RJM    RCB         READ CENTRAL BUFFER
  
*         SET LINKAGE BYTES.
  
          LDM    CWBA 
          SHN    -6 
          ZJN    EMB7        IF NOT EOF OR EOI
          LMN    1
          ZJN    EMB6        IF EOF 
          RJM    WEI         WRITE EOI SECTOR 
          PJN    EMB8        IF NO MASS STORAGE ERROR 
 EMB5     RJM    SWE         SET WRITE ERROR STATUS 
          UJN    EMB2.1      RETURN WITH (A) = 0
  
 EMB6     LDD    SC          SET SECOND LINKAGE BYTE
          STM    BFMS+1 
 EMB7     LMD    SC          SET FIRST LINKAGE BYTE 
          STM    BFMS 
  
*         WRITE SECTOR. 
  
          LDC    BFMS+WCSF   WRITE SECTOR 
          RJM    WDS
          MJN    EMB5        IF MASS STORAGE ERROR
 EMB8     LDD    RA          CHECK FOR STORAGE MOVE 
          LMD    PR 
          ZJN    EMB9        IF NOT STORAGE MOVED 
          RJM    SAW         SET ABSOLUTE WRITE BUFFER ADDRESSES
  
*         ADVANCE SECTOR. 
  
 EMB9     LDM    BFMS 
          NJN    EMB10       IF TRACK OR SECTOR PRESENT 
          LDM    BFMS+1 
          NJN    EMB10       IF TRACK OR SECTOR PRESENT 
          LDN    1           SET BEGINNING OF FILE FLAG 
          STM    BEGF,TF
          UJN    EMB11       UPDATE OUT POINTER 
  
 EMB10    STD    T7          SET NEXT SECTOR
          SHN    21-13
          PJN    EMB11       IF NOT TRACK 
          SHN    -6 
          STD    T6 
          LDN    0           SET SECTOR 
          STD    T7 
  
*         UPDATE OUT POINTER. 
  
 EMB11    LDD    OT          POSITION OUT POINTER FOR CM WRITE
          STD    FN+3 
          LDD    OT+1 
          STD    FN+4 
          LDC    ** 
 EMBB     EQU    *-2         (RA + FET ADDRESS OF OUT POINTER)
          CWD    FN          WRITE OUT POINTER INTO FET 
  
*         DETERMINE WHETHER TO EXIT.
  
          SOD    P2          DECREMENT SECTOR COUNT 
          NJN    EMB14       IF SECTORS LEFT IN BUFFER
          RJM    SSC         SET SECTOR COUNT 
          LDD    P2 
          NJN    EMB14       IF SECTORS LEFT IN BUFFER
 EMB13    LJM    EMBX        RETURN 
  
 EMB14    LDM    BEGF,TF     CHECK FOR EOI
          NJN    EMB13       IF EOI 
          LJM    EMB1        LOOP FOR MORE SECTORS
 PBF      SPACE  4,50 
**        PBF - PROCESS BEGINNING OF FILE.
* 
*         ENTRY  (T4 - T7) = DATA FILE MASS STORAGE PARAMETERS FOR
*                            INDIRECT FILE CHAIN. 
*                (FS - FS+4) = DATA FILE PARAMETERS FOR INDIRECT ACCESS 
*                              FILE CHAIN.
*                (CWBA - CWBA+4) = BUFFER CONTROL WORD. 
*                (DN) = MASTER DEVICE NUMBER. 
*                (BEGF+(TF)) = BEGINNING OF FILE FLAG.
*                (P2) = COUNT OF SECTORS IN CENTRAL BUFFER. 
* 
*         EXIT   (A) = 0, IF NO ERROR DETECTED. 
*                    = NON-ZERO, IF ERROR DETECTED. 
*                (BEGF+(TF)) = 0. 
*                (P2) = UPDATED COUNT OF SECTORS IN CENTRAL BUFFER. 
*                SYSTEM SECTOR WRITTEN. 
*                TRACK AND SECTOR OF CM CATALOG ENTRY UPDATED TO
*                NEW BEGINNING ADDRESS OF FILE. 
*                WRITE ERROR PROCESSOR CALLED, IF ERROR DETECTED. 
* 
*                IF INDIRECT ACCESS FILE -- 
*                (T4 - T7) = DATA FILE MASS STORAGE PARAMETERS FOR
*                            FIRST DATA SECTOR OF FILE WITHIN 
*                            THE INDIRECT FILE CHAIN. 
* 
*                IF DIRECT ACCESS FILE -- 
*                (T4 - T7) = DATA FILE MASS STORAGE PARAMETERS FOR
*                            FIRST DATA SECTOR OF DIRECT ACCESS FILE. 
*                (FS - FS+4) = DATA FILE PARAMETERS FOR DIRECT ACCESS 
*                              FILE.
*                (DA) = DIRECT ACCESS FILE FLAG SET.
*                (DN) = RESIDENT DEVICE NUMBER OF DIRECT ACCESS FILE. 
*                INDIRECT ACCESS FILE CHAIN PARAMETERS SAVED -- 
*                (DLSA)   = MASTER DEVICE NUMBER. 
*                (DLSA+1) = MASTER DEVICE EST ORDINAL.
*                (DLSA+2) = IAPF CHAIN FIRST TRACK. 
*                (DLSA+3) = IAPF CHAIN CURRENT TRACK. 
*                (DLSA+4) = IAPF CHAIN CURRENT SECTOR.
*                FST ENTRY WRITTEN TO CENTRAL MEMORY. 
* 
*         USES   BEGF+(TF), /COMSWSS/FA, P1, P2, T1, T4, T5, T6, T7,
*                CM+1 - CM+3, DLSA - DLSA+4, FS - FS+4. 
* 
*         CALLS  PDA, PWE, RBA, RCB, RTK, SAW, SNT, UOP, WSS. 
* 
*         MACROS ERROR, MONITOR, NFA, SETMS.
  
  
 PBF      SUBR               ENTRY/EXIT 
          LDM    BEGF,TF
          ZJN    PBFX        IF NOT BEGINNING OF FILE 
          RJM    SAW         SET ABSOLUTE WRITE BUFFER ADDRESSES
  
*         READ OLD SYSTEM SECTOR, IF AVAILABLE. 
  
          LDM    CWBA        CHECK TYPE OF FIRST SECTOR 
          SHN    -6 
          LMN    4
          NJN    PBF3        IF NOT SYSTEM SECTOR 
          LDM    CWBA+4      CHECK SYSTEM SECTOR LENGTH 
          ZJN    PBF1        IF ZERO LENGTH 
          LDD    HN 
          SBM    CWBA+4 
          PJN    PBF2        IF LEGAL LENGTH
 PBF1     ERROR  ECBCW       PROCESS BUFFER CONTROL WORD ERROR
  
 PBF2     LDM    CWBA+4      SET LENGTH 
          ADD    ON 
          STD    P1 
          RJM    RCB         READ SYSTEM SECTOR FROM CM BUFFER
          SOD    P2          DECREMENT SECTOR COUNT 
          UJN    PBF5        UPDATE SYSTEM SECTOR 
  
*         CLEAR SYSTEM SECTOR BUFFER IF BUILDING NEW SYSTEM SECTOR. 
  
 PBF3     LDC    FNSS-5      INITIALIZE LOOP CONTROLS 
          STM    PBFA 
 PBF4     LDN    5           INCREMENT
          RAM    PBFA 
          LDN    ZERL 
          CRM    FNSS,ON     ZERO OUT 5 BUFFER WORDS
 PBFA     EQU    *-1
          LDM    PBFA 
          SBK    FNSS+5*77
          MJN    PBF4        IF MORE WORDS TO ZERO OUT
  
*         UPDATE SYSTEM SECTOR FILE NAME AND CATALOG ENTRY IMAGE. 
  
 PBF5     LDN    NWCE        SET LENGTH OF CATALOG ENTRY
          STD    T1 
          LDM    CWBA        SET CM ADDRESS OF CATALOG ENTRY
          LPN    77 
          SHN    6
          ADD    RA 
          SHN    6
          ADM    CWBA+1 
          CRM    FNSS,ON     READ FILE NAME 
          SBN    1
          CRM    CTSS,T1     READ CATALOG ENTRY 
  
*         DETERMINE FILE TYPE.
  
          LDM    CWBA+3 
          NJN    PBF6        IF DIRECT ACCESS FILE
          LJM    PBF9        PROCESS INDIRECT ACCESS FILE 
  
*         SAVE INDIRECT ACCESS FILE CHAIN PARAMETERS. 
  
 PBF6     LDD    T5          SAVE MASTER DEVICE EST ORDINAL 
          STM    DLSA+1 
          LDD    FS+1        SAVE IAPF CHAIN FIRST TRACK
          STM    DLSA+2 
          LDD    T6          SAVE IAPF CHAIN CURRENT TRACK
          STM    DLSA+3 
          LDD    T7          SAVE IAPF CHAIN CURRENT SECTOR 
          STM    DLSA+4 
  
*         DETERMINE WHERE TO LOAD DIRECT ACCESS FILE. 
  
          LDM    CTSS+FCDN   CHECK DEVICE RESIDENCY 
          LPN    77 
          NJN    PBF7        IF NOT RESIDENT ON MASTER DEVICE 
          LDD    DN          SET MASTER DEVICE NUMBER 
 PBF7     RJM    PDA         PROCESS DIRECT ACCESS FILE 
          LDD    T5          SET EST ORDINAL IN FST 
          STD    FS 
          LDN    0
          STD    T7 
          LDC    400000 
          RJM    RTK         REQUEST SINGLE NON-LINKED TRACK
          NJN    PBF13       IF TRACK AVAILABLE 
          LDN    1           SET ERROR STATUS 
 PBF8     LJM    PBFX        RETURN 
  
*         DETERMINE WHERE TO LOAD INDIRECT ACCESS FILE. 
  
 PBF9     AOD    T7          ADVANCE IAPF CHAIN TO NEXT SECTOR
          LMM    SLM
          ZJN    PBF10       IF END OF TRACK
          LDD    T6          USE CURRENT IAPF CHAIN TRACK 
          UJN    PBF14       SET FIRST TRACK
  
 PBF10    STD    T7          SET TO FIRST SECTOR OF NEXT TRACK
 PBF11    RJM    SNT         SET NEXT TRACK 
          SHN    21-13
          PJN    PBF12       IF TRACK NOT AVAILABLE 
          SHN    13-21
          UJN    PBF14       SET FIRST TRACK
  
 PBF12    LDD    T6 
          RJM    RTK         REQUEST MULTIPLE LINKED TRACKS 
          NJN    PBF11       IF NO ERROR
          LDN    1           SET ERROR STATUS 
          UJN    PBF8        RETURN 
  
*         SET FIRST TRACK.
  
 PBF13    STD    FS+1        IN FST ENTRY 
          STD    CM+2        IN *SET PRESERVED FILE STATUS* FUNCTION
 PBF14    STD    T6          IN RMS TRACK POSITIONING DIRECT CELL 
          STM    FTSS        IN SYSTEM SECTOR FST IMAGE 
          STM    CTSS+FCBT   IN SYSTEM SECTOR CATALOG ENTRY IMAGE 
          LDM    CWBA+3 
          NJN    PBF15       IF DIRECT ACCESS FILE
          LJM    PBF16       PROCESS INDIRECT ACCESS FILE 
  
*         SET PRESERVED FILE STATUS.
  
 PBF15    LDN    SPFS        SET SUB-FUNCTION CODE
          STD    CM+3 
          LDD    T5          SET EST ORDINAL
          STD    CM+1 
          MONITOR  STBM      SET PRESERVED FILE STATUS TRACK BIT
  
*         CLEAR DIRECT ACCESS FILE MODE/USAGE FIELDS. 
  
          LDM    FNSS+3      FILE ATTACH MODE BITS
          SCN    77 
          STM    FNSS+3 
          LDN    ZERL 
          CRM    CASS+FISS*,ON  ACCESS MODE BITS / FAST ATTACH FLAGS
          LDN    ZERL 
          CRM    UCSS,ON     USER COUNTS
          LDN    ZERL 
          CRM    UCSS+1*5,ON
          LDN    ZERL 
          CRM    UCSS+2*5,ON
          LDN    ZERL 
          CRM    UCSS+3*5,ON
          LDN    ZERL 
          CRM    UCSS+4*5,ON
  
*         SET FILE TYPE AND FIRST SECTOR FOR DIRECT ACCESS FILE.
  
          LDC    PMFT*100    SET FILE TYPE
          STM    FNSS+4 
          LCN    0           SET FIRST SECTOR = DAPF IDENTIFIER 
          STM    CTSS+FCBS
          UJN    PBF18       UPDATE CM CATALOG ENTRY
  
*         SET FILE TYPE AND FIRST SECTOR FOR INDIRECT ACCESS FILE.
  
 PBF16    LDC    PMFT*100    SET FILE TYPE
          STM    FNSS+4 
          LDD    T7          SET FIRST SECTOR 
          STM    CTSS+FCBS
          ADN    1
          LMM    SLM
          NJN    PBF18       IF NEXT SECTOR WITHIN SECTOR LIMIT 
 PBF17    RJM    SNT         FIND NEXT TRACK
          SHN    21-13
          MJN    PBF18       IF NEXT TRACK AVAILABLE
  
          LDD    T6 
          RJM    RTK         REQUEST MULTIPLE LINKED TRACKS 
          NJN    PBF17       IF NO ERROR
          LDN    1           SET ERROR STATUS 
          LJM    PBFX        RETURN 
  
*         UPDATE TRACK AND SECTOR OF CM CATALOG ENTRY.
  
 PBF18    RJM    RBA         RETURN BEGINNING ADDRESS OF FILE TO CM 
  
*         WRITE SYSTEM SECTOR.
  
          LDN    0           DESELECT FNT PROCESSING BY *WSS* 
          STD    /COMPWSS/FA
          SETMS  IO,,WEBA 
          RJM    WSS         WRITE SYSTEM SECTOR
          SHN    0-21 
          STD    T1          SAVE REPLY STATUS
          LDM    CWBA+3 
          ZJN    PBF18.1     IF INDIRECT ACCESS FILE
  
*         WRITE FST ENTRY TO CENTRAL MEMORY.
  
          NFA    FA,R 
          ADN    FSTL 
          CWD    FS          WRITE FST
  
*         CHECK FOR WRITE ERROR ON SYSTEM SECTOR. 
  
 PBF18.1  LDD    T1          CHECK REPLY STATUS FROM *WSS*
          ZJN    PBF19       IF NO ERROR
          ERRNZ  FEWE-1      CODE ASSUMES *FEWE* = 1
          RJM    PWE         PROCESS WRITE ERROR
          LDN    1
          UJN    PBF21       RETURN WITH (A) .NE. 0 
  
*         UPDATE OUT POINTER IN FET.
  
 PBF19    LDD    RA          CHECK FOR STORAGE MOVE 
          LMD    PR 
          ZJN    PBF20       IF NO STORAGE MOVE 
          RJM    SAW         SET ABSOLUTE WRITE BUFFER ADDRESSES
 PBF20    RJM    UOP         UPDATE OUT POINTER IN FET
          LDN    0           CLEAR BEGINNING OF FILE FLAG 
          STM    BEGF,TF
 PBF21    LJM    PBFX        RETURN 
 PCA      SPACE  4,10 
**        PCA - PROCESS *CATS* ADDRESSING.
* 
*         ENTRY  (CWBA+1 - CWBA+2) = MASS STORAGE ADDRESS.
* 
*         EXIT   (T6 - T7) = MASS STORAGE ADDRESS (IF PRESENT). 
*                (FS+2 - FS+3) = MASS STORAGE ADDRESS (IF PRESENT). 
* 
*         USES   FS+2, FS+3, T6, T7.
  
  
 PCA      SUBR               ENTRY/EXIT 
          LDM    CWBA+1 
          ZJN    PCAX        RETURN IF TRACK NOT PRESENT
  
*         SET UP DIRECT CELLS.
  
          STD    T6          SET TRACK
          STD    FS+2 
          LDM    CWBA+2 
          STD    T7 
          STD    FS+3 
          UJN    PCAX        RETURN 
 PCF      SPACE  4,15 
**        PCF - POSITION CATALOG FILE.
* 
*         ENTRY  (IR+3 - IR+4) = CATALOG FILE FET ADDRESS.
*                (FET+FTCA) = 24/,18/PFD,18/AUI.
*                             PFD = ADDRESS OF PF DESCRIPTION WORD. 
*                             AUI = ADDRESS OF USER INDEX.
*T PFD    42/ NAME, 6/, 12/ EST ORDINAL 
* 
*         EXIT   CATALOG FILE POSITIONED FOR THE SPECIFIED USER INDEX.
* 
*         USES   T7, P1 - P5. 
* 
*         CALLS  CIO, PIO, SCT. 
* 
*         MACROS FETA.
  
  
 PCF      SUBR               ENTRY/EXIT 
          RJM    PIO         PRESET I/O 
          FETA   FTCA        READ PARAMETER WORD
          CRD    P1 
          RJM    SCT         SET CATALOG TRACK
          LDN    0           SET FIRST SECTOR 
          STD    T7 
          STM    SSCC+1      CLEAR SECTOR COUNTER 
          RJM    CIO         COMPLETE I/O 
          UJN    PCFX        RETURN 
 PCR      SPACE  4,10 
**        PCR - PROCESS CATALOG READ. 
* 
*         EXIT   CATALOGS READ TO CENTRAL.
* 
*         CALLS  LDB, SRR.
* 
*         MACROS ENDMS, SETMS.
  
  
 PCR      SUBR               ENTRY/EXIT 
          LDM    LDBM        BYPASS FILE LENGTH CHECKING
          STM    LDBC 
  
*         READ CATALOGS.
  
          RJM    SRR         SET RELATIVE READ BUFFER ADDRESSES 
          SETMS  READSTR
          RJM    LDB         LOAD BUFFER
          ENDMS 
          UJN    PCRX        RETURN 
 PCW      SPACE  4,10 
**        PCW - PROCESS CATALOG WRITE.
* 
*         ENTRY  (T4 - T7) = CATALOG FILE MASS STORAGE PARAMETERS.
* 
*         EXIT   (T4 - T7) = UPDATED CATALOG FILE MASS STORAGE
*                            PARAMETERS.
*                CATALOG DATA WRITTEN TO MASS STORAGE.
* 
*         CALLS  EMB, PCA, RCW, SSC, SWE, WEI.
* 
*         MACROS ENDMS. 
  
  
 PCW2     ENDMS 
 PCW3     LDN    0           CLEAR SECTOR COUNTER 
          STM    SSCC,TF
  
 PCW      SUBR               ENTRY/EXIT 
          RJM    SSC         SET SECTOR COUNT 
          LDD    P2 
          ZJN    PCW3        IF NO SECTORS
  
*         WRITE CATALOG SECTORS.
  
 PCW1     RJM    RCW         READ BUFFER CONTROL WORD 
          RJM    PCA         PROCESS CATALOG ADDRESSING 
          RJM    EMB         EMPTY BUFFER 
          NJN    PCW1        IF DATA LEFT IN BUFFER 
          LDM    BEGF,TF
          NJN    PCW2        IF EOI ALREADY WRITTEN 
          LDM    CWBA        CHECK FOR REWRITE REQUEST
          SHN    21-5 
          MJN    PCW2        IF REWRITE REQUEST 
          RJM    WEI         WRITE EOI
          PJN    PCW2        IF NO ERROR
          RJM    SWE         SET WRITE ERROR STATUS 
          UJN    PCW3        CLEAR SECTOR COUNTER 
 PDF      SPACE  4,30 
**        PDF - POSITION DATA FILE. 
* 
*         ENTRY  (IR+3 - IR+4) = DATA FILE FET ADDRESS. 
*                (FET+FTPM) = 36/,12/TK,1/F,11/PM.
*                     F = 0 IF *TRACK AND SECTOR POSITION* REQUEST. 
*                         TK = TRACK NUMBER.
*                         PM = SECTOR NUMBER. 
*                         FILE IS POSITIONED TO THE PRU PRECEDING THE 
*                         SPECIFIED TRACK AND SECTOR. 
*                     F = 1 IF *DROP TRACKS* REQUEST. 
*                         TK = FIRST TRACK TO BE DROPPED. 
*                         PM = EST ORDINAL. 
*                         THE SPECIFIED TRACK CHAIN IS DROPPED. 
* 
*                (DA) = 0 IF DATA FILE SET FOR IAPF.
*                     = NON-ZERO IF DATA FILE SET FOR DAPF. 
* 
*         EXIT   (DA) = 0.
*                (BEGF) = 1.
*                DATA FILE SET FOR IAPF.
*                ERROR EXIT TAKEN IF RANDOM ADDRESS NOT ON FILE.
* 
*         USES   P1 - P5, T5 - T7.
* 
*         CALLS  CIO, DFT, EDF, PIO, SDS, STE, TSP, VME.
* 
*         MACROS ERROR, FETA. 
  
  
 PDF2     ERROR  ECPAR       PROCESS PARAMETER ERROR
  
 PDF3     RJM    TSP         PROCESS *TRACK AND SECTOR POSITION*
          MJN    PDF2        IF ADDRESS NOT ON FILE 
          RJM    STE         SET EOI IN TRT 
 PDF4     RJM    SDS         SAVE DATA FILE STATE 
          RJM    CIO         COMPLETE I/O 
  
 PDF      SUBR               ENTRY/EXIT 
          RJM    PIO         PRESET I/O 
          LDD    DA 
          ZJN    PDF1        IF NOT DIRECT ACCESS FILE
          RJM    EDF         END DIRECT ACCESS FILE 
 PDF1     LDN    1           SET BEGINNING OF FILE FLAG 
          STM    BEGF 
          FETA   FTPM        READ PARAMETER WORD
          CRD    P1 
          LDD    P5          CHECK REQUEST TYPE 
          SHN    21-13
          PJN    PDF3        IF *TRACK AND SECTOR POSITION* REQUEST 
          LDN    P5          VALIDATE EST ORDINAL 
          RJM    VME
          LDD    P4          SET FIRST TRACK TO DROP
          RJM    DFT         DROP TRACKS
          LDD    FS          RESTORE IAPF EST ORDINAL 
          STD    T5 
          LDD    FS+2        RESTORE IAPF CURRENT TRACK 
          STD    T6 
          LDD    FS+3        RESTORE IAPF CURRENT SECTOR
          STD    T7 
          LJM    PDF4        SAVE DATA FILE STATE 
 PDW      SPACE  4,20 
**        PDW - PROCESS DATA WRITE. 
* 
*         ENTRY  (T4 - T7) = MASS STORAGE PARAMETERS FOR FILE BEING 
*                            PROCESSED. 
*                (BEGF+(TF)) = 0 IF NOT START OF FILE.
*                            = NON-ZERO IF START OF FILE. 
*                (DA) = 0 IF START OF FILE OR MIDDLE OF IAPF. 
*                     = NON-ZERO IF MIDDLE OF DAPF. 
* 
*         EXIT   (T4 - T7) = UPDATED MASS STORAGE PARAMETERS. 
*                (BEGF+(TF)) = 0 IF AT END OF PERMANENT FILE. 
*                            = NON-ZERO IF IN MIDDLE OF PERMANENT FILE. 
*                (DA) = 0 IF END OF PERMANENT FILE OR MIDDLE OF IAPF. 
*                     = NON-ZERO IF IN MIDDLE OF DAPF.
*                DATA IN BUFFER WRITTEN TO MASS STORAGE.
* 
*         CALLS  EMB, PBF, PEF, RCW, SSC, STE, SWE, WEI.
* 
*         MACROS ENDMS. 
  
  
*         PROCESS END OF PERMANENT FILE.
  
 PDW4     LDM    BEGF,TF
          ZJN    PDW5        IF EOI NOT WRITTEN 
 PDW4.1   ENDMS 
          LDN    1           SELECT IAPF PROCESSING 
          RJM    PEF         PROCESS END OF FILE
          UJN    PDWX        RETURN 
  
*         PROCESS EMPTY BUFFER. 
  
 PDW5     RJM    WEI         FORCE EOI SECTOR 
          PJN    PDW5.1      IF NO ERROR
          RJM    SWE         SET WRITE ERROR STATUS 
          UJN    PDW4.1      PROCESS END OF PERMANENT FILE
  
 PDW5.1   ENDMS 
          RJM    STE         SET EOI IN TRT 
  
 PDW      SUBR               ENTRY/EXIT 
          RJM    SSC         SET SECTOR COUNT 
          LDD    P2 
          ZJN    PDWX        IF NO DATA IN BUFFER 
          RJM    RCW         READ BUFFER CONTROL WORD 
 PDW1     RJM    PBF         PROCESS BEGINNING OF FILE
          NJN    PDW4        IF ERROR 
          LDD    P2 
          NJN    PDW2        IF DATA IN BUFFER
          RJM    SSC         SET SECTOR COUNT 
          LDD    P2 
          ZJN    PDW5        IF NO DATA IN BUFFER 
 PDW2     RJM    EMB         EMPTY BUFFER 
          NJN    PDW3        IF BUFFER NOT EMPTY
          LJM    PDW4        PROCESS END OF PERMANENT FILE
  
 PDW3     ENDMS 
          RJM    RCW         READ BUFFER CONTROL WORD 
          LDM    CWBA+3 
          RJM    PEF         PROCESS END OF FILE
          UJN    PDW1        PROCESS NEXT FILE
 PEF      SPACE  4,30 
**        PEF - PROCESS END OF PERMANENT FILE.
* 
*         ENTRY  (A) = 0 IF NO IAPF PROCESSING DESIRED. 
*                    = NON-ZERO IF IAPF PROCESSING DESIRED. 
*                (DA) = 0 IF PROCESSING IAPF. 
*                     = NON-ZERO IF PROCESSING DAPF.
*                (T4 - T7) = MASS STORAGE PARAMETERS FOR FILE BEING 
*                            PROCESSED. 
*                (FS - FS+3) = FILE PARAMETERS. 
*                (DLSA - DLSA+4) = MASS STORAGE PARAMETERS FOR IAPF 
*                                  CHAIN. 
*                (DN) = RESIDENCY DEVICE OF FILE BEING PROCESSED. 
* 
*         EXIT   (DA) = 0.
*                (T4 - T7) = MASS STORAGE PARAMETERS FOR IAPF CHAIN.
*                (FS - FS+3) = FILE PARAMETERS FOR IAPF CHAIN.
*                (DN) = DEVICE NUMBER FOR IAPF CHAIN. 
*                EOI SET IN TRT FOR DAPF AND FOR IAPF IF IAPF 
*                PROCESSING WAS SELECTED. 
* 
*         CALLS  EDF, STE.
  
  
 PEF      SUBR               ENTRY/EXIT 
          ADD    DA 
          ZJN    PEFX        IF IAPF BUT NO IAPF PROCESSING WANTED
          RJM    STE         SET EOI IN TRT 
          LDD    DA 
          ZJN    PEFX        IF PROCESSING IAPF 
          RJM    EDF         END DIRECT ACCESS FILE 
          UJN    PEFX        RETURN 
 PIO      SPACE  4,15 
**        PIO - PRESET I/O. 
* 
*         SET SECTOR COUNT AND DIRECT CELLS FOR READ OR WRITE.
* 
*         ENTRY  (IR+3 - IR+4) = VALIDATED FET ADDRESS. 
* 
*         EXIT   (FA) = FNT ADDRESS OF FILE.
*                (FS - FS+4) = FST ENTRY FOR FILE.
*                (T5) = EST ORDINAL.
*                (T6) = CURRENT TRACK.
*                (T7) = CURRENT SECTOR. 
* 
*         USES   T6 - T7. 
* 
*         CALLS  FFE, SBA, SRW, VME.
  
  
 PIO      SUBR               ENTRY/EXIT 
          LDN    0           SELECT NORMAL PROCESSING 
          RJM    FFE         FIND FNT ENTRY 
          LDN    FS          ADDRESS OF EST ORDINAL 
          RJM    VME         VALIDATE MASS STORAGE EST ORDINAL
          LDD    FS+2        SET TRACK
          STD    T6 
          LDD    FS+3        SET SECTOR 
          STD    T7 
          RJM    SBA         SET BUFFER ADDRESSES 
          RJM    SRW         SET RELATIVE WRITE BUFFER ADDRESSES
          UJN    PIOX        RETURN 
 PPF      SPACE  4,20 
**        PPF - POSITION PERMIT FILE. 
* 
*         ENTRY  (IR+3 - IR+4) = PERMIT FILE FET ADDRESS. 
*                (FET+FTPM) = 36/,24/RANDOM PRU NUMBER. 
* 
*         EXIT   PERMIT FILE POSITIONED TO THE SPECIFIED PRU NUMBER.
*                ERROR EXIT TAKEN IF RANDOM ADDRESS NOT ON FILE.
* 
*         USES   T6, P1 - P5, RI - RI+1.
* 
*         CALLS  CIO, CRA, PIO. 
* 
*         MACROS ERROR, FETA. 
  
  
 PPF1     RJM    CIO         COMPLETE I/O 
  
 PPF      SUBR               ENTRY/EXIT 
          RJM    PIO         PRESET I/O 
          FETA   FTPM        READ PARAMETER WORD
          CRD    P1 
          LDD    P4          SET RANDOM PRU NUMBER
          STD    RI 
          LDD    P5 
          STD    RI+1 
          LDD    FS+1        SET FIRST TRACK
          STD    T6 
          RJM    CRA         CONVERT RANDOM PRU TO TRACK AND SECTOR 
          PJN    PPF1        IF ADDRESS ON FILE 
          ERROR  ECPAR       PROCESS PARAMETER ERROR
 PPW      SPACE  4,15 
**        PPW - PROCESS PERMIT WRITE. 
* 
*         ENTRY  (T4 - T7) = PERMIT FILE MASS STORAGE PARAMETERS. 
* 
*         EXIT   (T4 - T7) = UPDATED PERMIT FILE MASS STORAGE 
*                            PARAMETERS.
*                DATA IN BUFFER WRITTEN TO MASS STORAGE.
* 
*         CALLS  EMB, SSC, STE, SWE, WEI. 
* 
*         MACROS ENDMS. 
  
  
 PPW      SUBR               ENTRY/EXIT 
          RJM    SSC         SET SECTOR COUNT 
          LDD    P2 
          ZJN    PPWX        IF NO DATA IN BUFFER 
 PPW1     RJM    EMB         EMPTY BUFFER 
          NJN    PPW1        IF BUFFER NOT EMPTY
          LDM    BEGF,TF
          NJN    PPW2        IF EOI ALREADY WRITTEN 
          RJM    WEI         FORCE EOI
          PJN    PPW2        IF NO ERROR
          RJM    SWE         SET WRITE ERROR STATUS 
 PPW2     ENDMS 
          RJM    STE         SET EOI IN TRT 
          UJN    PPWX        RETURN 
 PWE      SPACE  4,20 
**        PWE - PROCESS WRITE ERROR.
* 
*         ENTRY  (A) = ERROR CODE.
*                (P2) = SECTOR COUNT. 
*                (TF) = TYPE OF FILE. 
*                (FS - FS+4) = FST ENTRY. 
*                (T6 - T7) = CURRENT MASS STORAGE POSITION. 
*                (RDCT) = DRIVER STATUS IF WRITE MASS STORAGE ERROR 
*                         OCCURRED. 
* 
*         EXIT   (BEGF+(TF)) = 1. 
*                (FS - FS+4) = UPDATED FST ENTRY. 
*                (FET+FTPM) = UPDATED FST ENTRY.
*                (SSC+(TF)) = SET TO REFLECT AMOUNT OF DATA IN BUFFER.
*                WRITE ERROR CODE SET IN FET. 
* 
*         USES   FS+2, FS+3, T1, CM - CM+4. 
* 
*         MACROS FETA.
  
  
 PWE      SUBR               ENTRY/EXIT 
          STD    T1          SAVE ERROR CODE
          LMN    FEWE 
          NJN    PWE0        IF NOT WRITE MASS STORAGE ERROR
          LDM    RDCT        CHECK DRIVER STATUS
          SHN    21-13
          PJN    PWE0        IF DATA TRANSFERRED
          LDN    FEWN        SET WRITE ERROR WITH NO DATA TRANSFERRED 
          STD    T1 
 PWE0     LDM    SSCC,TF     RESET SECTOR COUNTER 
          SBD    P2 
          PJN    PWE1        IF THRESHOLD WAS NOT REACHED 
          ADC    4000        ADD THRESHOLD
 PWE1     STM    SSCC,TF
          FETA               SET ERROR CODE IN FET
          CRD    CM 
          LDD    CM+3 
          SCN    77 
          LMD    T1 
          STD    CM+3 
          FETA
          CWD    CM 
          LDN    1           SET EOI FLAG 
          STM    BEGF,TF
          LDD    T6          SET CURRENT TRACK
          STD    FS+2 
          LDD    T7          SET CURRENT SECTOR 
          STD    FS+3 
          FETA   FTPM        WRITE FST ENTRY TO FET 
          CWD    FS 
          LJM    PWEX        RETURN 
 RBA      SPACE  4,20 
**        RBA - RETURN BEGINNING ADDRESS. 
* 
*         SET FILE BEGINNING TRACK AND SECTOR IN CATALOG ENTRY. 
* 
*         ENTRY  (CWBA - CWBA+1) = ADDRESS OF CATALOG ENTRY.
*                (DA) = DIRECT ACCESS FILE FLAG.
* 
*         EXIT   ADDRESS WRITTEN TO CATALOG ENTRY IN CENTRAL. 
* 
*         USES   CM - CM+4, T0 - T1.
  
  
 RBA      SUBR               ENTRY/EXIT 
  
*         READ SECOND WORD OF CATALOG.
  
          LDM    CWBA 
          LPN    37 
          SHN    6
          ADD    RA 
          SHN    6
          ADM    CWBA+1 
          ADN    1
          CRD    CM 
          STD    T1          SAVE CENTRAL ADDRESS 
          SHN    -14
          STD    T0 
  
*         UPDATE TRACK AND SECTOR.
  
          LDD    T6          SET TRACK AND SECTOR 
          STD    CM+3 
          LDD    DA 
          NJN    RBA1        IF DAPF
          LDD    T7 
          STD    CM+4 
  
*         WRITE UPDATED CATALOG BACK TO CENTRAL.
  
 RBA1     LDD    T0          WRITE TO CENTRAL 
          SHN    14 
          ADD    T1 
          CWD    CM 
          UJN    RBAX        RETURN 
 RCB      SPACE  4,20 
**        RCB - READ CENTRAL MEMORY BUFFER. 
* 
*         ENTRY  (P1) = SECTOR LENGTH IN CM WORDS.
*                (OT - OT+1) = OUT POINTER. 
*                SUB-ROUTINES *SAW* AND *SRW* EXECUTED PRIOR TO THE 
*                FIRST ENTRY OR ANY ENTRY SUBSEQUENT TO A PAUSE.
* 
*         EXIT   (OT - OT+1) = UPDATED OUT POINTER. 
*                (CWBA - BFMS+5*(P1)-3) = SECTOR PRECEEDED BY ITS 
*                                         CONTROL WORD. 
* 
*         USES   T1, T2, OT - OT+1. 
  
  
*         PROCESS NORMAL SECTOR.
  
 RCB4     LDD    OT          READ BUFFER
          SHN    14 
          ADD    OT+1 
          ADC    ** 
 RCBB     EQU    *-2         (RA) 
          CRM    CWBA,P1
          LDD    P1          UPDATE OUT POINTER 
          RAD    OT+1 
          SHN    -14
          ZJN    RCBX        IF NOT CROSSING 10K WORD BOUNDARY
          RAD    OT 
  
 RCB      SUBR               ENTRY/EXIT 
  
*         CHECK FOR BUFFER WRAP.
  
          LDD    OT          CHECK FOR BUFFER WRAP
          SHN    14 
          ADD    OT+1 
          ADD    P1 
          ADC    -* 
 RCBA     EQU    *-2         (COMPLEMENT OF LIMIT)
          MJN    RCB4        IF BUFFER NOT WRAPPED
          STD    T2          SET SECOND PART WORD COUNT 
  
*         PROCESS WRAP AROUND SECTOR. 
  
          LDD    P1          SET FIRST PART WORD COUNT
          SBD    T2 
          STD    T1 
          SHN    2
          ADD    T1 
          ADC    CWBA 
          STM    RCBE        SET PP BUFFER ADDRESS TO THIS POINT
          LDD    OT          READ FIRST PART OF SECTOR
          SHN    14 
          ADD    OT+1 
          ADC    *
 RCBC     EQU    *-2         (RA) 
          CRM    CWBA,T1
          LDD    T2          CHECK SECOND PART LENGTH 
          ZJN    RCB3        IF NO SECOND PART
          LDC    *           READ SECOND PARD OF SECTOR 
 RCBD     EQU    *-2         (RA + FIRST) 
          CRM    CWBA,T2
 RCBE     EQU    *-1         (PP BUFFER ADDRESS)
          LDD    T2          UPDATE OUT POINTER 
 RCB3     ADC    ** 
 RCBF     EQU    *-2         (FIRST)
          STD    OT+1 
          SHN    -14
          STD    OT 
          UJP    RCBX        RETURN 
 RCW      SPACE  4,10 
**        RCW - READ BUFFER CONTROL WORD. 
* 
*         ENTRY  (OT - OT+1) = ADDRESS OF BUFFER CONTROL WORD.
* 
*         EXIT   (CWBA - CWBA+4) = BUFFER CONTROL WORD. 
  
  
 RCW      SUBR               ENTRY/EXIT 
          LDD    OT          SET BUFFER CONTROL WORD ADDRESS
          SHN    6
          ADD    RA 
          SHN    6
          ADD    OT+1 
          CRM    CWBA,ON     READ BUFFER CONTROL WORD 
          UJN    RCWX        RETURN 
 RTK      SPACE  4,20 
**        RTK - REQUEST TRACKS. 
* 
*         ENTRY  (A) = 1/S,5/,12/LT.
*                      S = SINGLE TRACK REQUEST FLAG. 
*                        = 0 FOR MULTIPLE TRACK REQUEST.
*                        = 1 FOR SINGLE TRACK REQUEST.
*                      LT = LINK TRACK. 
*                         = 0 IF TRACKS NOT TO BE LINKED. 
*                         = TRACK NUMBER THAT NEW TRACKS
*                           ARE TO BE LINKED TO.
*                (T5) = EST ORDINAL.
* 
*         EXIT   (A) = FIRST TRACK ASSIGNED.
*                    = 0 IF TRACK NOT ASSIGNED. 
*                (T3) = FIRST TRACK ASSIGNED. 
*                PAUSE FOR STORAGE MOVE HAS OCCURRED. 
*                WRITE ERROR PROCESSOR CALLED IF TRACK NOT ASSIGNED.
* 
*         USES   CM+1 - CM+4, T1 - T3.
* 
*         CALLS  CLS, C2D, PWE. 
* 
*         MACROS DELAY, MONITOR, PAUSE. 
  
  
*         PROCESS FATAL TRACK LIMIT CONDITION.
  
 RTK6     RJM    PWE         PROCESS WRITE ERROR
          LDN    0           CLEAR EVENT FLAG 
          STM    RTKA 
  
 RTK      SUBR               ENTRY/EXIT 
          STD    T2          SAVE LINK TRACK
          SHN    -21
 RTK1     STD    T1          SAVE SINGLE TRACK FLAG 
          NJN    RTK2        IF SINGLE TRACK REQUEST
          LDM    SLM         SET 8 TRACK SECTOR COUNT 
          SHN    3
 RTK2     STD    CM+4        SET SECTOR COUNT 
          SHN    -14
          STD    CM+3 
          LDD    T5          SET EST ORDINAL
          STD    CM+1 
          LDD    T2          SET TRACK LINK 
          STD    CM+2 
          MONITOR  RTCM      REQUEST TRACK CHAIN
          LDD    CM+4        SAVE FIRST TRACK ASSIGNED
          STD    T3 
          PAUSE              PAUSE FOR STORAGE MOVE 
          LDD    T3 
          ZJN    RTK3        IF TRACK NOT ASSIGNED
          LDN    0           CLEAR EVENT FLAG 
          STM    RTKA 
          LDD    T3          ASSIGNED TRACK 
          LJM    RTKX        RETURN 
  
*         PROCESS TRACK LIMIT.
  
 RTK3     LDD    T1 
          ZJP    RTK5        IF NOT SINGLE TRACK REQUEST
          RJM    CLS         CHECK TRACK LIMIT STATUS 
          NJP    RTK6        IF FATAL CONDITION 
          LDD    T5          CONVERT UPPER TWO DIGITS OF EST ORDINAL
          SHN    -3 
          RJM    C2D
          STM    RTKB+1 
          LDD    T5          CONVERT LOWER DIGIT OF EST ORDINAL 
          LPN    7
          SHN    6
          ADC    2R0, 
          STM    RTKB+2 
          LDD    CP          DISPLAY MESSAGE AT CONTROL POINT 
          ADN    MS2W 
          CWM    RTKB,TR
          LDC    0           EVENT NOT ISSUED 
*         LDC    1           (EVENT ALREADY ISSUED) 
 RTKA     EQU    *-1
          NJN    RTK4        IF EVENT ALREADY ISSUED
          LDN    ZERL        ISSUE TRACK LIMIT EVENT
          CRD    CM 
          LDN    TKLE        TRACK LIMIT
          STD    CM+4 
          MONITOR  EATM 
 RTK4     DELAY              DELAY 130 MICROSECONDS 
 RTK5     LDN    1           SET SINGLE TRACK REQUEST 
          STM    RTKA        SET EVENT FLAG 
          LJM    RTK1        REQUEST SINGLE TRACK 
  
 RTKB     DATA   C*EQXXX, TRACK LIMIT.* 
 SAW      SPACE  4,10 
**        SAW - SET ABSOLUTE WRITE BUFFER ADDRESSES.
* 
*         ENTRY  (RA) = CURRENT RA. 
*                (FT - FT+1) = BUFFER FIRST ADDRESS.
*                (IR+3 - IR+4) = FET ADDRESS. 
* 
*         EXIT   (PR) = CURRENT RA. 
*                ABSOLUTE WRITE BUFFER ADDRESSES SET. 
* 
*         USES   PR.
* 
*         MACROS FETA.
  
  
 SAW      SUBR               ENTRY/EXIT 
          LDD    RA          SAVE CURRENT RA
          STD    PR 
          SHN    6           SET RA 
          STM    EMBA+1 
          STM    RCBB+1 
          STM    RCBC+1 
          SHN    -14
          LMC    ADCI 
          STM    EMBA 
          STM    RCBB 
          STM    RCBC 
          LDD    FT          SET RA+FIRST 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    FT+1 
          STM    RCBD+1 
          SHN    -14
          LMC    LDCI 
          STM    RCBD 
          FETA   FTOT        SET RA+FET ADDRESS OF OUT POINTER
          STM    UOPA+1 
          STM    EMBB+1 
          SHN    -14
          LMC    LDCI 
          STM    UOPA 
          STM    EMBB 
          LJM    SAWX        RETURN 
 SDS      SPACE  4,20 
**        SDS - SAVE DATA FILE STATE. 
* 
*         ENTRY  (BEGF) = BEGINNING OF FILE FLAG FOR DATA FILE. 
*                (DA) = DIRECT ACCESS FILE FLAG.
*                (DLSA+1 - DLSA+4) = MASS STORAGE PARAMETERS FOR IAPF 
*                                    CHAIN IF PROCESSING A DAPF.
*                (IR+3 - IR+4) = DATA FILE FET ADDRESS. 
* 
*         EXIT   (FET+FTDL) = 12/ST,48/MP.
*                             ST = 0 IF BEGINNING OF FILE.
*                                = 1 IF MIDDLE OF IAPF. 
*                                = 3 IF MIDDLE OF DAPF. 
*                             MP = MASS STORAGE PARAMETERS FOR IAPF 
*                                  CHAIN IF MIDDLE OF DAPF. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS FETA.
  
  
 SDS      SUBR               ENTRY/EXIT 
          LDN    ZERL        CLEAR STATE INFORMATION
          CRD    CM 
          LDM    BEGF 
          NJN    SDS2        IF BEGINNING OF FILE 
          LDD    DA 
          ZJN    SDS1        IF PROCESSING IAPF 
          LDD    MA          MOVE IAPF PARAMETERS 
          CWM    DLSA,ON
          SBN    1
          CRD    CM 
          LDN    2           SET MIDDLE OF DAPF FLAG
 SDS1     LMN    1           SET MIDDLE OF FILE FLAG
          STD    CM 
 SDS2     FETA   FTDL        WRITE STATE INFORMATION TO FET 
          CWD    CM 
          UJN    SDSX        RETURN 
 SRW      SPACE  4,10 
**        SRW - SET RELATIVE WRITE BUFFER ADDRESSES.
* 
*         ENTRY  (FT - FT+1) = BUFFER FIRST POINTER.
*                (LM - LM+1) = BUFFER LIMIT POINTER.
* 
*         EXIT   RELATIVE WRITE BUFFER ADDRESSES SET. 
  
  
 SRW      SUBR               ENTRY/EXIT 
          LDC    ADCI+77     SET -LIMIT 
          LMD    LM 
          STM    RCBA 
          LCN    0
          LMD    LM+1 
          STM    RCBA+1 
          LDD    FT+1        SET FIRST
          STM    RCBF+1 
          LDD    FT 
          LMC    ADCI 
          STM    RCBF 
          UJN    SRWX        RETURN 
 SSC      SPACE  4,15 
**        SSC - SET SECTOR COUNT. 
* 
*         ENTRY  (IR+3 - IR+4) = FET ADDRESS. 
*                (SSCC+(TF)) = PREVIOUS SECTOR COUNT. 
*                (TF) = 0, IF DATA FILE TYPE. 
*                     = 1, IF CATALOG FILE TYPE.
*                     = 2, IF PERMIT FILE TYPE. 
* 
*T FET+FTSC  42/,18/ SECTOR COUNT 
* 
*         EXIT   (P2) = SECTOR COUNT IN BUFFER. 
* 
*         USES   P2, CM - CM+4. 
* 
*         MACROS FETA.
  
  
 SSC      SUBR               ENTRY/EXIT 
          FETA   FTSC        READ SECTOR COUNTER
          CRD    CM 
          LDD    CM+4 
          SBM    SSCC,TF     SET SECTOR COUNT (CURRENT - PREVIOUS)
          PJN    SSC1        IF SECTOR COUNTER DID NOT ROLL OVER
          ADC    4000 
 SSC1     STD    P2 
          LDD    CM+4 
          STM    SSCC,TF
          UJN    SSCX        RETURN 
  
  
 SSCC     BSSZ   3           TABLE OF SECTOR COUNTERS 
 STE      SPACE  4,15 
**        STE - SET TRT EOI.
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (T6) = CURRENT TRACK.
*                (T7) = CURRENT SECTOR. 
* 
*         EXIT   EOI SET IN TRT AT CURRENT POSITION.
* 
*         USES   CM+1 - CM+3. 
* 
*         MACROS MONITOR. 
  
  
 STE      SUBR               ENTRY/EXIT 
          LDD    T5          SET EST ORDINAL
          LMC    4000        SET CHECKPOINT BIT 
          STD    CM+1 
          LDD    T6          SET TRACK
          LPC    3777        SELECT EOI MODE
          STD    CM+2 
          LDD    T7          SET SECTOR 
          STD    CM+3 
          MONITOR  DTKM      DROP TRACKS AND SET EOI
          UJN    STEX        RETURN 
 SWE      SPACE  4,10 
**        SWE - SET WRITE ERROR STATUS. 
* 
*         ENTRY  (RDCT) = DRIVER STATUS.
*                MASS STORAGE WRITE ERROR OCCURRED. 
* 
*         EXIT   (A) = 0. 
* 
*         CALLS  PWE. 
  
  
 SWE      SUBR               ENTRY/EXIT 
          LDN    FEWE        SET MASS STORAGE WRITE ERROR 
          RJM    PWE         PROCESS WRITE ERROR
          LDN    0
          UJN    SWEX        RETURN WITH (A) = 0
 TSP      SPACE  4,20 
**        TSP - TRACK AND SECTOR POSITION.
* 
*         ENTRY  (FS+1) = FIRST TRACK OF FILE.
*                (P4) = RANDOM TRACK NUMBER.
*                (P5) = RANDOM SECTOR NUMBER. 
* 
*         EXIT   (A) = .GE. 0 IF ADDRESS ON FILE. 
*                    = .LT. 0 IF ADDRESS NOT ON FILE. 
*                (T6) = NEW TRACK.
*                (T7) = NEW SECTOR. 
*                THE NEW POSITION PARAMETERS (T6 AND T7) ARE SET FOR
*                THE PRU PRECEDING THE SPECIFIED TRACK AND SECTOR.
* 
*         USES   T6, T7, RI - RI+1. 
* 
*         CALLS  CRA, SRA.
  
  
 TSP1     SOD    RI+1        BACKSPACE PRU
          PJN    TSP2        IF NOT BEFORE BOI
          AOD    RI+1 
          SOD    RI 
          MJN    TSPX        IF BEFORE BOI
 TSP2     LDD    FS+1        SET FIRST TRACK
          STD    T6 
          RJM    CRA         CONVERT RANDOM PRU TO TRACK AND SECTOR 
  
 TSP      SUBR               ENTRY/EXIT 
          LDD    P4          SET RANDOM TRACK 
          STD    T6 
          LDD    P5          SET RANDOM SECTOR
          STD    T7 
          LDD    FS+1        SET FIRST TRACK
          RJM    SRA         CONVERT TRACK AND SECTOR TO RANDOM PRU 
          ZJN    TSP1        IF TRACK AND SECTOR ON FILE
          LCN    1           SET BAD ADDRESS FLAG 
          UJN    TSPX        RETURN 
 UOP      SPACE  4,10 
**        UOP - UPDATE OUT POINTER IN FET.
* 
*         ENTRY  (OT - OT+1) = OUT POINTER TO BE WRITTEN INTO FET.
*                SUB-ROUTINE *SAW* EXECUTED PRIOR TO THE FIRST
*                ENTRY OR ANY ENTRY SUBSEQUENT TO A PAUSE.
* 
*         EXIT   OUT POINTER IN FET UPDATED.
* 
*         USES   FN - FN+4. 
  
  
 UOP      SUBR               ENTRY/EXIT 
          LDN    ZERL 
          CRD    FN 
          LDD    OT          POSITION OUT POINTER FOR CM WRITE
          STD    FN+3 
          LDD    OT+1 
          STD    FN+4 
          LDC    *
 UOPA     EQU    *-2         (RA + FET ADDRESS OF OUT POINTER)
          CWD    FN          WRITE OUT POINTER INTO FET 
          UJN    UOPX        RETURN 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPC2D 
*CALL     COMPWEI 
          QUAL   COMPWSS     DEFINE SCRATCH *FST* ADDRESS FOR *COMPWSS* 
 FA       EQU    P1 
 WCS$     SET    0           PROVIDE FOR CONSECUTIVE SECTOR WRITING 
 WIS$     SET    0           PROVIDE FOR IAPF SYSTEM SECTOR PROCESSING
          QUAL   *
*CALL     COMPWSS 
*CALL     COMPWVE 
          SPACE  4,10 
          USE    PRS
          SPACE  4,10 
          ERRNG  WEBA-*      OVERFLOW INTO WRITE ERROR BUFFER 
          TITLE  LOAD PRESET SUBROUTINES. 
**        PLL - PRESET LOAD LOOP. 
* 
*         ENTRY  (IR+3 - IR+4) = *CATS* FET ADDRESS.
* 
*T FET+FTPM  6/  DN,6/,18/  DATA,18/  PETS,18/  PAFL
* 
*         DN = MASTER DEVICE NUMBER.
*         DATA = ADDRESS OF DATA FILE FET.
*              = 0 IF NO DATA FET.
*         PETS = ADDRESS OF PERMITS FILE FET. 
*              = 0 IF NO PERMITS FET. 
*         PAFL = *PFU* ACTIVE FLAG ADDRESS.  THIS WORD IS SET TO ONE
*                WHEN THE *PFU* LOAD PROCESSOR IS ACTIVATED AND SET TO
*                ZERO WHEN THE *PFU* LOAD PROCESSOR COMPLETES OR
*                ABORTS.
* 
*         EXIT   (CA - CA+1) = *CATS* ADDRESS.
*                (DF - DF+1) = *DATA* ADDRESS.
*                (PF - PF+1) = *PETS* ADDRESS.
*                (DN) = DEVICE NUMBER.
*                (IR+3 - IR+4) = *DATA* ADDRESS IF SPECIFIED, OTHERWISE 
*                                *CATS* ADDRESS.
*                (PAFL - PAFL+1) = *PFU* ACTIVE FLAG ADDRESS. 
* 
*         USES   DN, CA - CA+1, CM - CM+4, DF - DF+1, IR+3 - IR+4,
*                PF - PF+1, P1 - P5.
* 
*         CALLS  CFS, POF, SAU. 
* 
*         MACROS FETA, VADDR. 
  
  
*         SAVE FET ADDRESSES. 
  
 PLL      SUBR               ENTRY/EXIT 
          FETA   FTPM        READ PARAMETER WORD
          CRD    P1 
          LDD    P1          SAVE MASTER DEVICE NUMBER
          SHN    -6 
          STD    DN 
          LDD    IR+3        SAVE *CATS* FET ADDRESS
          STD    CA 
          LDD    IR+4 
          STD    CA+1 
          RJM    SAU         SET *PFU* ACTIVE FLAG
          RJM    CFS         SET *CATS* FET COMPLETE
          LDD    P4          CHECK *PETS* ADDRESS 
          SCN    77 
          ADD    P3 
          ZJN    PLL1        IF *PETS* ADDRESS NOT SPECIFIED
          VADDR  P3,LEFT     VALIDATE *PETS* ADDRESS
 PLL1     STD    PF+1        SAVE *PETS* ADDRESS
          SHN    -14
          STD    PF 
          LDD    P1          CHECK *DATA* ADDRESS 
          LPN    77 
          ADD    P2 
          NJN    PLL2        IF *DATA* ADDRESS SPECIFIED
          STD    DF          CLEAR *DATA* ADDRESS 
          STD    DF+1 
          LJM    PLLX        RETURN 
  
*         INITIALIZE *DATA* FILE PARAMETERS.
  
 PLL2     VADDR  P1          VALIDATE *DATA* ADDRESS
          STD    DF+1        SAVE *DATA* ADDRESS
          STD    IR+4 
          SHN    -14
          STD    DF 
          STD    IR+3 
          RJM    POF         POSITION FILES 
          RJM    CFS         SET *DATA* FET COMPLETE
          LJM    PLLX        RETURN 
 POF      SPACE  4,50 
**        POF - POSITION FILES. 
* 
*         ENTRY  (IR+3 - IR+4) = VALIDATED DATA FET ADDRESS.
*                (DN) = MASTER DEVICE NUMBER. 
* 
*T FET+FTDW  42/,6/  FE,12/ 
*T FET+FTDL  12/  ST,12/  EQ,12/  FT,12/  TK,12/  SC
* 
*         FE = EST ORDINAL OF A FAMILY DEVICE.
*         ST = 0 IF BEGINNING OF FILE.
*            = 1 IF MIDDLE OF IAPF. 
*            = 3 IF MIDDLE OF DAPF. 
*         EQ = MASTER DEVICE EST ORDINAL IF MIDDLE OF DAPF. 
*         FT = FIRST TRACK OF IAPF CHAIN IF MIDDLE OF DAPF. 
*         TK = CURRENT TRACK OF IAPF CHAIN IF MIDDLE OF DAPF. 
*         SC = CURRENT SECTOR OF IAPF CHAIN IF MIDDLE OF DAPF.
* 
*         EXIT   (IR+3 - IR+4) = DATA FET ADDRESS RESTORED FROM 
*                                (DF - DF+1). 
*                (PDAA) = EST ORDINAL OF A FAMILY DEVICE. 
*                (DLSA) = MASTER DEVICE NUMBER. 
*                (DLSA+1 - DLSA+4) = IAPF CHAIN PARAMETERS IF MIDDLE OF 
*                                    DAPF.
*                (BEGF) = BEGINNING OF FILE FLAG SET FOR DATA FILE. 
*                (DA) = DIRECT ACCESS FILE FLAG.
*                DATA FILE FST SET TO EOI.
*                IF *PETS* FET ADDRESS SPECIFIED, *PETS* FILE FST SET 
*                TO EOI AND *PETS* FILE SECTOR COUNT RETURNED TO THE
*                FET AS FOLLOWS - 
* 
*T FET+FTSC  24/  SECTOR COUNT,48/  UNCHANGED 
* 
*         USES   CM - CM+4, DA, FS+2, FS+3, IR+3, IR+4, T6. 
* 
*         CALLS  CFS, FFE, SEI, SFC, VME. 
* 
*         MACROS FETA.
  
  
 POF      SUBR               ENTRY/EXIT 
  
*         SET UP MASTER DEVICE. 
  
          LDN    0           SELECT NORMAL PROCESSING 
          RJM    FFE         FIND FNT ENTRY 
          LDN    FS          ADDRESS OF EST ORDINAL 
          RJM    VME         VALIDATE MASS STORAGE EST ORDINAL
          LDD    FS+1        RETRIEVE *DATA* FIRST TRACK
          STD    T6 
          LDN    0           SELECT EOI SEARCH WITH TRT UPDATE
          RJM    SEI         SEARCH FOR EOI 
          FETA   FTDW 
          CRD    CM 
          LDD    CM+3        SET FAMILY EST ORDINAL 
          STM    PDAA 
          FETA   FTDL        GET *DATA* FILE STATE INFORMATION
          CRM    DLSA,ON
          LDM    DLSA 
          NJN    POF1        IF NOT BEGINNING OF FILE 
          LDN    1           SET BEGINNING OF FILE FLAG 
          STM    BEGF 
 POF1     SHN    -1          DETERMINE DAPF FLAG
          LPN    1
          STD    DA 
  
*         SET DATA LAST TRACK AND SECTOR. 
  
          LDD    DN          SET MASTER DEVICE NUMBER 
          STM    DLSA 
          LDD    T6          SET LAST TRACK 
          STD    FS+2 
          LDD    T7          SET LAST SECTOR
          STD    FS+3 
          RJM    SFC         WRITE UPDATED FILE STATUS
  
*         SET PERMIT LAST TRACK AND SECTOR. 
  
          LDD    PF          SET *PETS* FET ADDRESS 
          STD    IR+3 
          LDD    PF+1 
          STD    IR+4 
          ADD    IR+3 
          NJN    POF2        IF PERMITS FET PRESENT 
          LJM    POF3        SET *DATA* FET ADDRESS 
  
 POF2     LDN    0
          RJM    FFE         FIND FNT ENTRY 
          LDN    FS          ADDRESS OF EST ORDINAL 
          RJM    VME         VALIDATE MASS STORAGE
          LDD    FS+1        SET *PETS* FIRST TRACK 
          STD    T6 
          LDN    0           SELECT EOI SEARCH WITH TRT UPDATE
          RJM    SEI         SEARCH FOR EOI 
          LDD    T6 
          STD    FS+2 
          LDD    T7 
          STD    FS+3 
          RJM    SFC         WRITE UPDATED FILE STATUS
  
*         SEND PERMIT SECTOR COUNT TO CENTRAL.
  
          FETA   FTSC        SEND *PETS* SECTOR COUNT TO CENTRAL
          CRD    CM 
          LDD    T2 
          STD    CM 
          LDD    T3 
          STD    CM+1 
          FETA   FTSC 
          CWD    CM 
          RJM    CFS         SET *PETS* FET COMPLETE
  
*         SET *DATA* FET ADDRESS IN IR+3 - IR+4.
  
 POF3     LDD    DF          RESET *DATA* FET ADDRESS 
          STD    IR+3 
          LDD    DF+1 
          STD    IR+4 
          LJM    POFX        RETURN 
 SAU      SPACE  4,15 
**        SAU - SET *PFU* ACTIVE FLAG.
* 
*         ENTRY  (P4 - P5) = *PFU* ACTIVE FLAG ADDRESS. 
* 
*         EXIT   (PFAF - PFAF+1) = *PFU* ACTIVE FLAG ADDRESS. 
*                *PFU* ACTIVE FLAG ADDRESS VALIDATED. 
*                *PFU* ACTIVE FLAG IN CENTRAL PROGRAM SET = 1.
* 
*         USES   CM - CM+4. 
* 
*         MACROS VADDR. 
  
  
 SAU      SUBR               ENTRY/EXIT 
          LDN    ZERL        SET FLAG WORD = 1
          CRD    CM 
          AOD    CM+4 
          VADDR  P4          VALIDATE FLAG ADDRESS
          STM    PFAF+1      SAVE FLAG ADDRESS
          SHN    -14
          STM    PFAF 
          SHN    6           FORM ABSOLUTE ADDRESS
          ADD    RA 
          SHN    6
          ADD    P5 
          CWD    CM          SET *PFU* ACTIVE FLAG
          UJN    SAUX        RETURN 
          SPACE  4,10 
          OVERFLOW  OVLA     CHECK FOR OVERLAY OVERFLOW 
 ERP      OVERLAY  (ERROR PROCESSOR.),OVLA
 ERP      SPACE  4,20 
**        ERP - ERROR PROCESSOR.
* 
*         ENTRY  (P1) = ERROR CODE. 
*                (FA) = FNT ADDRESS, (FILE SET BUSY). 
*                     = 0 IF NO FILE SET BUSY.
*                (FS - FS+4) = FST ENTRY. 
*                (FN - FN+3) = FILE NAME. 
*                (IR+3 - IR+4) = FET ADDRESS. 
*                (PFAF - PFAF+1) = *PFU* ACTIVE FLAG ADDRESS. 
* 
*         EXIT   TO *PPR*, AFTER *DPPM*.
*                ERROR MESSAGE ISSUED TO DAYFILE. 
*                FILE SET COMPLETE. 
*                FET SET COMPLETE.
*                *PFU* ACTIVE FLAG CLEARED IN CENTRAL PROGRAM IF SET. 
* 
*         USES   CM+1.
* 
*         CALLS  CAU, CFS, IDM, SFC.
* 
*         MACROS MONITOR. 
  
  
*ERP      SUBR               ENTRY/EXIT 
          RJM    IDM         ISSUE DAYFILE MESSAGE
          LDD    P1          CHECK IF ERROR FLAG DETECTED 
          LMN    ECEFD
          ZJN    ERP1        IF ERROR FLAG DETECTED 
          LMN    ECRFD&ECEFD
          ZJN    ERP1        IF ROLLOUT FLAG DETECTED 
          LDN    PPET        SET PP ABORT ERROR FLAG
          STD    CM+1 
          MONITOR  CEFM 
 ERP1     RJM    SFC         SET FILE COMPLETE
          RJM    CFS         COMPLETE FET STATUS
          RJM    CAU         CLEAR *PFU* ACTIVE FLAG
          MONITOR  DPPM      DROP PP
          LJM    PPR         EXIT TO PP RESIDENT
          TITLE  TABLE OF ERROR MESSAGES. 
 TOEM     SPACE  4,10 
**        TOEM - TABLE OF ERROR MESSAGES. 
* 
*         ONE WORD ENTRIES INDEXED BY ERROR CODE.  ENTRY IS THE ADDRESS 
*         OF THE ERROR MESSAGE IN *Z* CODE.  MESSAGES NOT TERMINATED
*         WITH A PERIOD WILL HAVE THE FILE NAME AND FET ADDRESS 
*         APPENDED TO THEM. 
  
  
 TOEM     EQU    *           TABLE OF ERROR MESSAGES
          QUAL
          LOC    0
 ECBAE    CON    =Z*BUFFER ARGUMENT ERROR ON *
 ECBCW    CON    =Z*BUFFER CTL WORD ERROR ON *
 ECCNF    CON    =Z*CATALOG TRACK NOT FOUND.* 
 ECDFN    CON    =Z*DUPLICATE FILE, * 
 ECDNF    CON    =Z*ALTERNATE DEVICE NOT FOUND.*
 ECEFD    CON    =Z*CONTROL POINT ERROR FLAG DETECTED * 
 ECFNF    CON    =Z*FILE NOT FOUND, * 
 ECIAC    CON    =Z*TRACK INTERLOCK CLEAR ON *
 ECIAS    CON    =Z*TRACK INTERLOCK SET ON *
 ECIOS    CON    =Z*I/O SEQUENCE ERROR ON * 
 ECNDS    CON    =Z*NO DEVICE SPECIFIED.* 
 ECNSJ    CON    =Z*NOT SPECIAL SYSTEM JOB.*
 ECPAR    CON    =Z*PARAMETER ERROR.* 
 ECRFD    CON    =Z*ROLLOUT FLAG DETECTED.* 
 ECITD    CON    =Z*TDAM REQUEST ERROR.*
          LOC    *O 
          QUAL   *
          TITLE  ERROR PROCESSOR SUBROUTINES. 
 IDM      SPACE  4,15 
**        IDM - ISSUE DAYFILE MESSAGES. 
* 
*         ENTRY  (P1) = ERROR CODE. 
*                (FN - FN+3) = FILE NAME. 
*                (IR+3 - IR+4) = FET ADDRESS. 
* 
*         EXIT   ERROR MESSAGE ISSUED TO DAYFILE. 
* 
*         USES   FN+3, T1, CM - CM+4. 
* 
*         CALLS  ACS, ANS, DFM. 
  
  
 IDM      SUBR               ENTRY/EXIT 
          LDC    STRB        SET STRING BUFFER ADDRESS
          STD    T1 
          LDN    0           SET END OF LINE BYTE 
          STI    T1 
          LDC    =Z* PFU - * SET MESSAGE PREFIX 
          RJM    ACS
          LDM    TOEM,P1     APPEND ERROR MESSAGE 
          RJM    ACS
          LDI    T1          CHECK LAST BYTE
          SHN    14 
          NJN    IDM1        IF NOT END OF LINE BYTE
          LDM    -1,T1
 IDM1     LPN    77          CHECK TERMINATOR 
          LMN    1R.
          ZJN    IDM4        IF TERMINATED WITH PERIOD
          LDD    P1 
          LMK    ECEFD
          NJN    IDM2        IF NOT CPA ERROR FLAG DETECTION MESSAGE
          LDD    CP          GET ERROR FLAG 
          ADK    STSW 
          CRD    CM 
          LDD    CM+1        GET CPA ERROR FLAGS FROM *STSW*
          UJN    IDM3        APPEND TO MESSAGE
  
 IDM2     LDD    FN+3        CLEAR EIGHTH CHARACTER OF FILE NAME
          SCN    77 
          STD    FN+3 
          LDN    FN          APPEND FILE NAME 
          RJM    ACS
          LDC    =Z* AT *    APPEND * AT *
          RJM    ACS
          LDD    IR+3        APPEND FET ADDRESS 
          SHN    14 
          LMD    IR+4 
 IDM3     RJM    ANS
          LDC    =Z*.*       APPEND *.* 
          RJM    ACS
 IDM4     LDC    STRB        ISSUE ERROR MESSAGE
          RJM    DFM
          LJM    IDMX        RETURN 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPACS 
*CALL     COMPANS 
          SPACE  4,10 
*         BUFFERS.
  
  
          USE    BUFFERS
 STRB     EQU    *           STRING BUFFER
 STRBL    EQU    STRB+80D/2+1  LWA+1 OF STRING BUFFER 
          ERRNG  7777-STRBL  STRING BUFFER OVERFLOW 
          SPACE  4,10 
          OVERFLOW  OVLA     CHECK FOR OVERLAY OVERFLOW 
          SPACE  4,10 
          TTL    PFU - PF UTILITY PROCESSOR.
          END 
