PFM 
          IDENT  PFM,PFM
          PERIPH
          BASE   MIXED
          SST 
 EOR$     SET    0           UNCONDITIONAL POSITIONING IN *COMPRNS* 
 EQV$     SET    0           DON-T VERIFY EST ORDINAL IN SYSTEM SECTOR
 QUAL$    SET    0           DEFINE UNQUALIFIED COMMON DECKS
 MSR$     SET    0           ERROR PROCESSING RNS MASS STORAGE READS
 IRA$     SET    0           EXTERNAL PRESET OF RANDOM ADDRESSING DECKS 
 SCA$     SET    0           SET NO REJECT ON *UNLOAD*
*COMMENT  PFM - PERMANENT FILE MANAGER. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  PFM - PERMANENT FILE MANAGER.
          SPACE  4,10 
***       PFM - PERMANENT FILE MANAGER. 
*         R. A. LARSEN.      71/01/19.
*         J. L. WARDELL.     72/07/14.
*         S. L. BETH.        74/10/25.
*         S. L. KSANDER.     75/02/20.
*         W. B. CHAPIN.      79/04/27.
*         P. C. SMITH.       79/04/27.
*         M. D. LEMBCKE.     83/01/12.
*         P. C. SMITH.       83/12/07.
*         B. J. SALCEDO.     85/01/22.
          SPACE  4,15 
***       *PFM* IS A PERMANENT FILE DRIVER CAPABLE OF CREATING
*         PERMANENT FILES ON ANY SYSTEM MASS STORAGE DEVICE.  FILES 
*         MAY BE OF ANY LENGTH AND ARE ALLOCATED ON THE DEVICE
*         ACCORDING TO THEIR LENGTH.
* 
*         *PFM* WILL PERFORM ALL THE NECESSARY TASKS TO COMPLETE THE
*         PERMANENT FILE REQUEST.  THESE TASKS ARE SEARCH, CREATE OR
*         MODIFY USERS FILE CATALOG AND TRANSFER FILE FROM MASS 
*         STORAGE TO MASS STORAGE IF REQUIRED.
* 
*         *PFM* MAY BE CALLED BY ANY ROUTINE THAT SETS UP THE PROPER
*         CALL BLOCK IN CENTRAL MEMORY. 
 QUAL     SPACE  4,10 
*         DEFINE QUAL BLOCK ORDER.
  
  
          QUAL   PRS
          QUAL   3PA
          QUAL   3PB
          QUAL   3PC
          QUAL   3PD
          QUAL   3PE
          QUAL   3PF
          QUAL   3PG
          QUAL   3PH
          QUAL   3PI
          QUAL   3PJ
          QUAL   3PK
          QUAL   3PL
          QUAL   3PM
          QUAL   3PN
          QUAL   3PO
          QUAL   3PP
          QUAL   3PQ
          QUAL   3PR
          QUAL   3PS
          QUAL   3PT
          QUAL   3PU
          QUAL
 SPFM     SPACE  4,10 
          LIST   F,X
*CALL     COMSPFM 
          LIST   *
          SPACE  4,10 
**        ROUTINES USED.
* 
*         0AV - ACCOUNT VERIFICATION. 
*         0BF - BEGIN FILE. 
*         0DF - DROP FILES. 
*         0RF - UPDATE RESOURCE FILE. 
          TITLE  MACRO DEFINITIONS. 
          SPACE  4,10 
**        MACROS. 
 COMPARE  SPACE  4,15 
**        COMPARE - COMPARE TWO 36 BIT FIELDS.
* 
*         COMPARE X,Y 
* 
*         ENTRY  X = FIELD TO BE COMPARED WITH *PFC* ENTRY FIELD Y. 
*                Y = FIELD IN *PFC* ENTRY TO BE COMPARED WITH X.
*                (CI) = *PFC* ENTRY BASE ADDRESS. 
* 
*         EXIT   (A) = ZERO IF FIELDS ARE IDENTICAL.
* 
*         CALLS  COF. 
* 
*         USES   T1, T2, T3.
  
  
 COMPARE  MACRO  X,Y
          MACREF COMPARE
   LDC X
   STD T1 
   LDC Y
   RJM COF
 COMPARE  ENDM
 ERROR    SPACE  4,25 
**        ERROR - CALL ERROR PROCESSOR. 
* 
*         ERROR  MNE,CH,IW,EQ,EXC,EI
* 
*         ENTRY  MNE = ERROR MESSAGE MNEMONIC.
*                CH = IF SET DO NOT RELEASE CHANNEL.
*                IW = IF SET DO NOT CLEAR CATALOG INTERLOCK 
*                     (DUMMY PARAMETER).
*                EQ = IF SET, (EQ) = EST ORDINAL OF DEVICE FOR ERROR
*                                    PROCESSING.
*                     IF CLEAR, (A) = EST ORDINAL.
*                EXC = EXIT CASE FOR COMPLETION PROCESSING: 
*                  0   NORMAL ERROR PROCESSING (EP CONTROLLED). 
*                  1   TIME-DEPENDENT ROLLOUT (EP AND UP CONTROLLED). 
*                  2   PF-STAGE ROLLOUT (UP OR RT CONTROLLED).
*                  3   UNCONDITIONAL ABORT. 
*                  4   TIME-DEPENDENT RECALL (EP AND UP CONTROLLED).
*                  5   SECURITY VIOLATION ERROR PROCESSING. 
*                  6   TIME-DEPENDENT ROLLOUT (RT CONTROLLED).
*                  7   ISSUE ERRLOG MESSAGE BUT DO NOT ABORT JOB. 
*                EI = IF SET, SET ERROR IDLE ON DEVICE GIVEN IN *EQ*. 
* 
*         NOTES  IF MODIFYING THIS MACRO, CHECK ALL CALLS TO IT.
  
  
 ERROR    MACRO  MNE,CH,IW,EQ,EXC,EI
          MACREF ERROR
 .A       IFC    NE,$EQ$$ 
          LDD    EQ 
 .A       ENDIF 
  
          RJM    ERR
          VFD    3/EXC,7//ERRMSG/MNE,1/EI,1/CH
 ERROR    ENDM
 ERRMSG   SPACE  4,10 
**        ERRMSG - SETUP ERROR MESSAGE CONSTANTS. 
* 
*NUM      ERRMSG CLASS,MSG
* 
*         ENTRY  *NUM* = ERROR CODE MNEMONIC. 
*                *CLASS* = ERROR TYPE FOR MESSAGE PROCESSING. 
*                *MSG* = ERROR MESSAGE INCLOSED IN PARENTHESIS. 
  
  
          NOREF  .LEN 
  
          MACRO  ERRMSG,NUM,CLASS,MSG 
          MACREF ERRMSG 
          INDEX  /ERRMSG/NUM,CLASS
 ERRMT    RMT 
          INDEX  /ERRMSG/NUM,(=C*MSG*)
 ERRMT    RMT 
 .MSGM    MICRO  1,,*MSG* 
 .LEN     MICCNT .MSGM
 .A       IFEQ   CLASS,0
          ERRNG  29D-.LEN    MESSAGE TOO LONG 
 .A       ELSE
          ERRNG  38D-.LEN    MESSAGE TOO LONG 
 .A       ENDIF 
          ENDM
 EXIT     SPACE  4,15 
**        EXIT - CALL ERROR PROCESSING FOR SPECIAL (NON-ABORT) EXIT.
* 
*         EXIT   MNE,CH,IW,EQ,EXC,EI
* 
*         SEE *ERROR* MACRO FOR EXPLANATION OF PARAMETERS.
  
 EXIT     MACRO  MNE,CH,IW,EQ,EXC,EI
          MACREF EXIT 
 .A       IFC    NE,$EQ$$ 
          LDD    EQ 
 .A       ENDIF 
  
          RJM    ERR
          VFD    3/EXC,7//ERRMSG/MNE,1/EI,1/CH
 EXIT     ENDM
 OVERLAY  SPACE  4,10 
**        OVERLAY CONTROL.
  
  
 .N       SET    0
 OVLB     MICRO  1,, 3P      BASE OVERLAY NAME
 OVERLAY  SPACE  4,10 
**        OVERLAY - GENERATE OVERLAY CONSTANTS. 
* 
* 
*         OVERLAY (TEXT),LOAD,NQ
*         ENTRY  *TEXT* = TEXT OF SUBTITLE. 
*                *LOAD* = IF DEFINED SPECIFIES ORGIN ADDRESS. 
*                *NQ* IF SPECIFIED OVERLAY IS NOT QUALIFIED.
  
  
          PURGMAC OVERLAY 
  
 OVERLAY  MACRO  TEXT,LOAD,NQ 
          QUAL
          NOREF  .N 
 .N       SET    .N+1 
 .M       MICRO  .N,1, ABCDEFGHIJKLMNOPQRSTUVWXYZ 
 .O       MICRO  1,3, "OVLB"".M"
 .P       MICRO  2,2, ".O"
 .Q       MICRO  1,3, O".P" 
          IFC    EQ,*NQ**,1 
          QUAL   ".O" 
          TTL    PFM/".O" - TEXT
          TITLE 
          IDENT  ".O",".Q"X  TEXT 
*COMMENT  PFM - TEXT
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          ORG    LOAD OVLC
 ".Q"     SUBR
          MACREF OVERLAY
          ENDM
 CSR      SPACE  4,10 
**        CSR - DEFINE 24 BIT QUANTITY FROM 18 BIT EQUATE.
* 
*         CSR    R
*                *R* = VALUE TO BE EXPANDED TO 24 BITS. 
  
  
 CSR      MACRO  R
          LOCAL  N,O,P,Q
          MACREF CSR
 N        SET    R
 O        SET    R/100B 
 P        SET    O*100B 
 Q        SET    R-P
          CON    O,Q*100B 
          ENDM
          TITLE  COMMON DECKS.
          SPACE  4,10 
*CALL     COMPMAC 
*CALL     COMSACC 
*CALL     COMSCPS 
*CALL     COMSEVT 
*CALL     COMSLFD 
*CALL     COMSLSD 
*CALL     COMSMMF 
*CALL     COMSMLS 
 MSP$     EQU    1
*CALL     COMSMSP 
*CALL     COMSMST 
          QUAL   MTX
*CALL     COMSMTX 
          QUAL   *
*CALL     COMSPIM 
*CALL     COMSREM 
          QUAL   RSX
*CALL     COMSRSX 
          QUAL   *
*CALL     COMSSCD 
*CALL     COMSSRU 
*CALL     COMSSSD 
*CALL     COMSSSJ 
*CALL     COMSWEI 
*CALL     COMSZOL 
          SPACE  4,10 
          TITLE  STORAGE ASSIGNMENTS AND ASSEMBLY CONSTANTS.
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 FS       EQU    20 - 24     FST ENTRY
 UI       EQU    25 - 26     USER INDEX 
 LF       EQU    27 - 30     LENGTH OF FILE 
 CN       EQU    30 - 34     SCRATCH
 P0       EQU    31          TEMPORARY LOCATIONS
 P1       EQU    32 
 P2       EQU    33 
 P3       EQU    34 
 EB       EQU    35          END BUFFER 
 PI       EQU    36 - 37     PERMITTED USER INDEX 
 FN       EQU    40 - 44     FILE NAME
 PB       EQU    45          POINTER TO PERMIT BUFFER 
 PP       EQU    46          INDEX IN PERMIT BUFFER 
 NF       EQU    45 - 46     NUMBER OF FILES IN CATALOG 
 SA       EQU    45 - 46     SPACE AVAILABLE
 HL       EQU    47          LENGTH OF HOLE 
 FA       EQU    57          LOCAL FNT ENTRY OFFSET 
 EQ       EQU    60          PERMANENT FILE EST ORDINAL 
 RI       EQU    61 - 62     PERMIT RANDOM INDEX
 CS       EQU    61 - 62     CUMULATIVE SIZE OF FILES IN CATALOG
 BB       EQU    63          BUFFER BASE ADDRESS
*         THE NEXT FIVE CELLS MUST BE CONTIGUOUS. 
 HB       EQU    63          POINTER TO HOLE BUFFER 
 HP       EQU    64          INDEX IN HOLE BUFFER 
 CB       EQU    65          POINTER TO FILE CATALOG BUFFER 
 RT       EQU    CB          *RT* BOOLEAN (1 = SET) 
 CI       EQU    66          INDEX IN FILE CATALOG BUFFER 
 UP       EQU    CI          *UP* BOOLEAN (1 = SET) 
 EP       EQU    67          END BUFFER POINTER 
*EP       EQU    EP          *EP* BOOLEAN (1 = SET) 
  
 CC       EQU    IR+2        COMMAND CODE 
  
****
          SPACE  4,10 
*         ASSEMBLY CONSTANTS. 
  
  
 BUF1     EQU    BFMS-505    CATALOG BUFFER + TRACK AND SECTOR POINTERS 
 BUF2     EQU    BUF1-505    CATALOG BUFFER + TRACK AND SECTOR POINTERS 
 MXRL     EQU    7           MAXIMUM TDAM RETRY COUNT 
 SSLE     EQU    10          LENGTH OF SYSTEM SECTOR DATA (CM WORDS)
 UIRT     EQU    300         UTILITY INTERLOCK ROLLOUT TIME 
          SPACE  4,10 
*         *ERROR*/*EXIT* MACRO PARAMETER VALUES.
  
  
 EC0      EQU    0           NORMAL ERROR PROCESSING (EP CONTROLLED)
 EC1      EQU    1           TIME-DEPENDENT ROLLOUT (EP/UP CONTROLLED)
 EC2      EQU    2           PF-STAGE ROLLOUT (UP OR RT CONTROLLED) 
 EC3      EQU    3           UNCONDITIONAL ABORT
 EC4      EQU    4           TIME-DEPENDENT RECALL (EP/UP CONTROLLED) 
 EC5      EQU    5           SECURITY VIOLATION 
 SVE      EQU    EC5         SECURITY VIOLATION 
 EC6      EQU    6           TIME-DEPENDENT ROLLOUT (RT CONTROLLED) 
 EC7      EQU    7           ISSUE ERRLOG MESSAGE BUT DO NOT ABORT JOB
  
 CH       EQU    1           CHANNEL NOT INTERLOCKED
 EI       EQU    1           SET ERROR IDLE 
  
          TITLE  MEMORY ASSIGNMENTS.
 PFM      SPACE  4,10 
**        PFM - PERMANENT FILE MANAGER RESIDENT MEMORY LOCATIONS. 
  
  
          ORG    PPFW 
  
 PFM      LJM    /PRS/PRS 
 PFAC     EQU    *-2         ACCOUNTING WORD OF USER
          BSSZ   3
 PFSN     BSSZ   5           SYSTEM FILE NAME 
  
  
*         THE NEXT 5 BYTES MUST BE CONTIGUOUS.
  
 SVAL     CON    0           SECURITY VALIDATION BITS 
 PFAL     CON    0           JOB ACCESS LEVEL 
 PFFC     BSSZ   3           JOB ACCESS CATEGORIES
  
  
*         THE NEXT 8 CM WORDS MUST REMAIN IN THE SAME ORDER AS THE
*         CALL BLOCK (FET). 
  
 TFET     EQU    *
 PFFN     BSSZ   5           PERMANENT FILE NAME
 PFSR     EQU    PFFN+3      SPECIAL REQUESTS 
 MODE     EQU    PFFN+4      MODE OF FILE PERMISSION
 PFOU     BSSZ   5           USER NAME
 CTDN     EQU    PFOU+3      DEVICE NUMBER FOR CATALOG LIST 
 PRU      EQU    PFOU+3      PRUS DESIRED FOR DEFINE
 PFPW     BSSZ   3           PASSWORD 
 EMRA     BSSZ   2           ERROR MESSAGE RETURN ADDRESS 
 PUCW     BSSZ   5           USER CONTROL WORD
 PFPN     BSSZ   5           PF CONTROL WORD (42/ PN, 6/, 12/ FAM EQ) 
*                            PN = PACK NAME.
 PFNF     BSSZ   5           NEW FILE NAME
 PFXT     EQU    PFNF+3      ACCESS EXPIRATION DATE/TERM
          BSSZ   5
 PFRS     EQU    *           PREFERRED RESIDENCE *PR* 
 PFBR     EQU    *           BACKUP REQUIREMENT *BR*
 PFSS     CON    0           SUBSYSTEM *SS* (3/PR,3/BR,6/SS)
 PFAP     BSSZ   1           ALTERNATE CATLIST PERMISSION 
          BSSZ   1           RESERVED 
 PFRB     BSSZ   2           (6/0,18/RB)
*                            RB = SPECIAL REQUEST BLOCK POINTER 
 TFETL    EQU    *-TFET      LENGTH OF FET PARAMETERS 
  
  
*         THE NEXT 4 CM WORDS MUST REMAIN IN THE SAME ORDER AS THE
*         SPECIAL REQUEST BLOCK.
  
 PFSB     BSSZ   2           RESERVED 
 PFID     BSSZ   3           PERMANENT FILE CATALOG ADDRESS 
 PFES     BSSZ   1           ALTERNATE STORAGE ERROR STATUS 
 PFAT     BSSZ   1           CARTRIDGE ALTERNATE STORAGE TYPE 
 PFTS     EQU    PFAT        TAPE ALTERNATE STORAGE TAPE SEQUENCE NUMBER
 PFAA     BSSZ   3           CARTRIDGE ALTERNATE STORAGE ADDRESS
 PFTV     EQU    PFAA+1      TAPE ALTERNATE STORAGE TAPE VSN
 PFOA     BSSZ   2           OPTICAL DISK ADDRESS 
 PFCD     BSSZ   3           CREATION DATE
 PFFM     BSSZ   3           FAMILY AND USER INDEX
 PFSU     BSSZ   2           USER INDEX 
  
  
*         THE FOLLOWING THREE BYTES ARE USED FOR ONE PURPOSE
*         FOR DIRECT ACCESS FUNCTIONS, AND FOR A DIFFERENT PURPOSE
*         FOR INDIRECT ACCESS FUNCTIONS.
  
 FRSM     BSS    0           DEVICE ACCESS MASK FOR FILE RESIDENCY
*                            1/A,1/B,2/,8/DEVICE MASK 
*                            A = SPECIAL USER INDEX PRESENT 
*                            B = *LIFT* FILES ALLOWED.
 MXFS     CON    0           MAXIMUM INDIRECT FILE SIZE ALLOWED 
 MXDS     BSS    0           MAXIMUM DIRECT ACCESS FILE SIZE (2 WORDS)
 MXCS     CON    0,0         MAXIMUM CUMULATIVE INDIRECT FILE 
*                            ALLOWED
 MXNF     CON    0           MAXIMUM NUMBER OF FILES ALLOWED
  
  
*         THE NEXT TWO TERMS MUST BE CONTIGUOUS.
  
 ACNF     CON    0,0         ACTUAL NUMBER OF FILES 
 CIFS     CON    0,0         ACTUAL CUMULATIVE INDIRECT FILE SIZE 
  
  
*         DEVICE TO DEVICE TRANSFER POINTERS
*         (CATALOG SEARCH POINTERS).
  
 SDAA     CON    0           EST ORDINAL
 SDAB     CON    0           TRACK
 SDAC     CON    0           SECTOR 
  
  
*         *PFM* INTERNAL STATUS BITS. 
  
 STAT     CON    0           *PFM* INTERNAL STATUS BITS 
  
 STXD     EQU    1           PASSWORD EXPIRATION DATE SPECIFIED 
 STRX     EQU    2           RESEX INITIATED ON THIS REQUEST
 STAB     EQU    4           ABORT AFTER PERMIT CHECK (*APPEND*)
 STTA     EQU    10          TAPE ALTERNATE STORAGE REQUEST 
 STPR     EQU    20          PERMITS HAVE BEEN READ 
 STBR     EQU    40          *BFMS* (*END* BUFFER) HAS BEEN REUSED
 STAC     EQU    100         STATISTICAL ACCUMULATION ENABLED 
 STPD     EQU    200         PRIVATE DEVICE 
 STEC     EQU    400         APPEND TO END OF CHAIN 
 STBD     EQU    1000        MASTER DEVICE IS BUFFERED DEVICE 
 STNS     EQU    2000        NO JOB SUSPENSION WHEN DEVICE INACCESSIBLE 
 STXC     EQU    4000        EXTENDING INDIRECT CHAIN 
  
 STAU     CON    0           *PFM* INTERNAL STATUS BITS (PART 2)
  
 STAJ     BITSET 0           ABORT JOB
 STDP     BITSET 1           DROP PP
 STDS     BITSET 2           DROP PP WITH ERROR STATUS IN FET 
 STRP     BITSET 3           RECALL *PFM* 
  
  
*         *PFM* RESTART FLAGS FOR RECALL. 
  
 PWRF     BSS    1           RESTART FLAGS
  
 RFAM     BITSET 0           ACCOUNTING MESSAGES ISSUED FLAG
 RFAC     BITSET 1           ACCESS COUNTS UPDATED FLAG 
 RFPC     BITSET 2           PERMIT COUNTS UPDATED FLAG 
 RFRR     BITSET 3           RETRY REQUEST FLAG 
  
  
*         MISCELLANEOUS MEMORY LOCATIONS. 
  
 ACCM     CON    0           ACTUAL ACCESS MODE (ON *GET*/*OLD*)
 AILK     CON    0           TRACK FOR ALLOCATION INTERLOCK 
 AIPF     CON    0,0         ACCUMULATOR INCREMENT FOR PF ACCESS
 AIPR     CON    0,0         ACCUMULATOR INCREMENT FOR PRU COUNT
 APDK     BSSZ   5           DEFERRED DELINK REQUEST (*APPEND*) 
*                            (SECOND BYTE NONZERO IF DELINK REQUESTED)
 APLF     CON    0,0         LENGTH OF APPENDAGE
 APSC     CON    0           FIRST SECTOR OF *APPEND* ORIGINAL FILE 
 APTK     CON    0           FIRST TRACK OF *APPEND* ORIGINAL FILE
 CPTF     CON    0           CPU TRANSFER FLAG
 DAHP     CON    0           DIRECT ACCESS HOLE TRACK 
          CON    0           DIRECT ACCESS HOLE SECTOR
          CON    0           DIRECT ACCESS HOLE OFFSET
 DAIF     CON    0           DIRECT ACCESS FILE INTERLOCK FLAG
 DTMD     CON    EPRW        DEVICE TRANSFER MODE (NONZERO = REWRITE) 
 DVLW     BSSZ   5           DEVICE LAYOUT WORD 
 EBSC     CON    0           END BUFFER SECTOR, IF END BUFFER IN *BFMS* 
 EBTK     CON    0           END BUFFER TRACK, IF END BUFFER IN *BFMS*
 EPFA     CON    0           EST ORDINAL IF PF ACTIVITY COUNT SET 
 EPOP     CON    0           ERROR OPTIONS (7/,1/SA,1/UP,1/EP,1/RT,1/IP)
 EXPC     CON    0           EXPLICIT PERMIT COUNT
 FERT     CON    0           NON-ZERO IF REAL-TIME BIT SET IN FET 
 FETL     CON    TFETL/5+10B MAXIMUM POSITION OF FET PF PARAMETERS
 FNMD     CON    0           *FNT* STATUS MODE EQUIVALENCE
 FNTA     CON    0           FNT ADDRESS FOR LOCAL FILE 
 FNTB     CON    0           FNT ADDRESS FOR /PFM*PFN/
 FNTC     CON    0           FNT ADDRESS FOR /PFM*ILK/
 FNTD     CON    0           FNT ADDRESS FOR /PFM*APF/
 IACP     CON    100         INCREMENT ACCESS COUNT IN PERMIT 
 IAIF     CON    0           INDIRECT ALLOCATION INTERLOCK FLAG 
 JORG     CON    0           JOB ORIGIN TYPE
 LFAL     CON    0           LOCAL FILE ACCESS LEVEL
 LFEF     CON    0           LOCAL FILE EMPTY FLAG
 MSTA     CON    0           ADDRESS OF MASTER DEVICE MST/10
 NPHA     CON    0           NEXT PERMIT HOLE ADDRESS (FROM *SPI*)
 PFCA     CON    0           ADDRESS OF PFC ENTRY (*SAVE*/*REPLACE*)
 PFDN     CON    0           DEVICE NUMBER OF EXISTING FILE 
 PFEQ     CON    0           DIRECT ACCESS PERMANENT FILE EST ORDINAL 
 PFFT     CON    0           DIRECT ACCESS PERMANENT FILE FIRST TRACK 
 PFPT     CON    0077        MULTI-LEVEL PERMISSION FLAG
 PFSP     CON    0           SECURITY PROCESSING BIT
 PFUC     BSSZ   1           USER CONTROLS
 PTKT     CON    0           PRESERVED TRACK
 PWCC     CON    0           *PFM* COMMAND CODE FROM *RPFSTAT* REQUEST
 PXDT     BSSZ   2           PASSWORD EXPIRATION DATE 
 RQDT     VFD    5/0,1/0,18/DFPT  REQUESTED DEVICE TYPE 
*                (BIT 18 SET IF DEVICE TYPE SPECIFIED IN FET) 
*                (THE ACTUAL VALUE OF *DFPT* IS READ FROM *PFNL*) 
 RTKE     CON    0           RESERVED TRACK EST ORDINAL 
 RTKT     CON    0           RESERVED TRACK 
 SAPF     CON    20          SET ACCOUNTING PERMIT FLAG 
 SSID     CON    0           SUBSYSTEM ID 
 SSJS     CON    0           NONZERO IF CALLER IS *SSJ=* PROGRAM
 SSOM     CON    0           OPERATING SYSTEM SECURITY MODE 
 SSYS     CON    0           NON-ZERO IF CALLER IS SUBSYSTEM
          TITLE  RESIDENT SUBROUTINES.
 SFA      SPACE  4,10 
**        SFA - SET FET ADDRESS.
* 
*         ENTRY  (SFAA - SFAA+1) PRESET TO FET ADDRESS BY *PRS*.
* 
*         EXIT   (A) = ABSOLUTE FET ADDRESS.
  
  
 SFA      SUBR               ENTRY/EXIT 
 SFAB     LDN    0
*         LDD    RA          (FET ADDRESS VALIDATED)
          SHN    6
 SFAA     ADC    0           PRESET FET ADDRESS 
          UJN    SFAX        RETURN 
 CCI      SPACE  4,10 
**        CCI - CLEAR CATALOG INTERLOCK.
* 
*         ENTRY  (EQ) = MASTER DEVICE EST ORDINAL.
*                (CCIA) = CATALOG TRACK.
*                (CCIB) = NONZERO IF CATALOG TRACK INTERLOCK SET. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 CCI      SUBR               ENTRY
 CCIB     LDN    0           (NONZERO IF INTERLOCK SET) 
          ZJN    CCIX        IF CATALOG TRACK INTERLOCK NOT SET 
          LDD    EQ 
          STD    CM+1 
          LDC    **          (CATALOG TRACK)
 CCIA     EQU    *-1
          STD    CM+2 
          LDN    CTIS        CLEAR TRACK INTERLOCK
          STD    CM+3 
          MONITOR STBM
          SOM    CCIB        CLEAR *INTERLOCK SET* FLAG 
          UJN    CCIX        RETURN 
 CTA      SPACE  4,10 
**        CTA - CALCULATE TRT ADDRESS.
* 
*         ENTRY  (A) = ADDRESS OF *TRLL* IN MST.
* 
*         EXIT   (A) = FWA OF TRT.
* 
*         USES   CM - CM+4. 
  
  
 CTA      SUBR               ENTRY/EXIT 
          CRD    CM          GET FWA OF TRT 
          LDD    CM+3 
          LPN    77 
          SHN    14 
          LMD    CM+4 
          UJN    CTAX        RETURN 
 ERR      SPACE  4,25 
**        ERR - PROCESS ERROR.
* 
*         ENTRY  (A) = EST ORDINAL IF REQUIRED FOR THE ERROR. 
*                (T4) = CHANNEL TO BE RELEASED. 
*                ((ERR)) = VFD 3/EXC,7/MNE,1/EIF,1/CIF. 
*                (EXC) = EXIT CASE. 
*                (MNE) = MESSAGE MNEUMONIC ERROR CODE VALUE.
*                (EIF) = ERROR IDLE FLAG. 
*                (CIF) = CHANNEL NOT INTERLOCKED FLAG.
*                (CSWD - CSWD+4) = CATALOG STATUS INTERLOCK WORD. 
*                (ERRB) = 0 IF PFM CREATED FNT/FST ENTRY. 
*                (ERRC) = FOLDED EVENT FOR ROLLOUT. 
*                (ERRD) = ROLLOUT TIME. 
*                (ERRE) = EST ORDINAL FOR EVENT.
* 
*         EXIT   (P1) = (ERR+0).
*                (P2) = EST ORDINAL.
* 
*         USES   P1, P2, T1.
* 
*         CALLS  CCI. 
* 
*         MACROS ENDMS, EXECUTE.
  
  
 ERR      CON    0           ENTRY, PARAMETER ADDRESS 
          STD    P2          SAVE EST ORDINAL 
          LDM    ERR         SAVE PARAMETERS *EXC*, *MNE*, *ERC*
          STD    T1 
          LDI    T1 
          STD    P1 
          LPN    1
          NJN    ERR1        IF CHANNEL NOT INTERLOCKED 
          ENDMS              RELEASE CHANNEL IF RESERVED
 ERR1     RJM    CCI         CLEAR CATALOG INTERLOCK IF SET 
          EXECUTE  3PT       PROCESS ERROR
  
 ERRB     CON    0           FILE PRESENT BOOLEAN 
 ERRC     CON    0           FOLDED EVENT FOR ROLLOUT 
*                            (TRACK FOR BAD CATALOG/PERMIT SECTOR)
 ERRD     CON    0           ROLLOUT TIME 
*                            (SECTOR FOR BAD CATALOG/PERMIT SECTOR) 
 ERRE     CON    0           EST ORDINAL FOR EVENT
 HNG      SPACE  4,10 
**        HNG - HANG PP.
* 
*         MACROS MONITOR. 
  
  
 HNG      CON    0           ENTRY (RETURN ADDRESS) 
 HNG1     MONITOR  HNGM      HANG 
          UJN    HNG1        CONTINUE TO HANG 
 PDA      SPACE  4,20 
**        PDA - PROCESS DEVICE AVAILABILITY.
* 
*         ENTRY  (A) = 0 IF DEVICE AVAILABLE. 
*                (A) .NE. 0 IF DEVICE INACCESSIBLE. 
*                (T4) = CHANNEL FOR DEVICE, IF RESERVED.
*                (T5) = EST ORDINAL OF DEVICE.
*                (FERT) = REAL-TIME PROCESSING FLAG.
*                (STAT) = *STNS* BIT SET FOR NO JOB SUSPENSION. 
*                (SSYS) = SUBSYSTEM FLAG. 
*                DRIVER SOFTWARE IS LOADED. 
* 
*         EXIT   RETURN IF PROCESSING IS TO CONTINUE. 
* 
*                TO *ERR* IF DEVICE IS INACCESSIBLE AND CALLER HAS
*                REAL-TIME PROCESSING SET IN FET OR IS NOT A SUBSYSTEM. 
* 
*         MACROS ERROR. 
  
  
 PDA      SUBR               ENTRY/EXIT 
          ZJN    PDAX        IF DEVICE AVAILABLE, RETURN
          LDM    STAT 
          LPK    STNS 
          NJN    PDAX        IF PROCESSING TO CONTINUE, RETURN
          LDM    FERT 
          NJN    PDA1        IF REAL-TIME PROCESSING SELECTED 
          LDM    SSYS 
          NJN    PDAX        IF SUBSYSTEM, RETURN 
 PDA1     ERROR  WID,,,T5,EC6  * WAITING - INACCESSIBLE DEVICE.*
 PDV      SPACE  4,20 
**        PDV - PROCESS DEVICE STATUS.
* 
*         ENTRY  (T4) = CHANNEL FOR DEVICE, IF RESERVED.
*                (T5) = EST ORDINAL OF DEVICE.
*                (FERT) = REAL-TIME PROCESSING FLAG.
*                (STAT) = *STNS* BIT SET FOR NO JOB SUSPENSION. 
*                (SSYS) = SUBSYSTEM FLAG. 
*                DRIVER SOFTWARE IS LOADED. 
* 
*         EXIT   RETURN IF PROCESSING IS TO CONTINUE. 
* 
*         CALLS  PDA. 
  
  
 PDV      SUBR               ENTRY/EXIT 
          LDM    MSD         GET DEVICE STATUS
          LPC    100
          RJM    PDA         PROCESS DEVICE AVAILABILITY
          UJN    PDVX        IF PROCESSING TO CONTINUE, RETURN
 PES      SPACE  4,15 
**        PES - PROCESS I/O ERROR STATUS. 
* 
*         ENTRY  (T4) = CHANNEL FOR DEVICE. 
*                (T5) = EST ORDINAL OF DEVICE.
*                (RDCT) = DRIVER STATUS.
*                A MASS STORAGE DRIVER HAS ENCOUNTERED AN I/O ERROR.
* 
*         EXIT   ERROR IS UNRECOVERABLE.
*                DEVICE IS INACCESSIBLE BUT CALLER IS ALLOWED 
*                TO PROCEED.
* 
*         CALLS  PDA. 
  
  
 PES      SUBR               ENTRY/EXIT 
          LDM    RDCT        CHECK DRIVER STATUS
          SHN    21-12
          MJN    PESX        IF UNRECOVERABLE ERROR, RETURN 
*         LDN    1           DEVICE INACCESSIBLE
          RJM    PDA         PROCESS DEVICE STATUS
          UJN    PESX        RETURN 
 SFN      SPACE  4,10 
**        SFN - SET FILE NAME.
* 
*         ENTRY  (A) = ADDRESS OF FILE NAME TO BE MOVED.
* 
*         EXIT   (FN - FN+3) = FILE NAME. 
*                (FN+4) = FNT STATUS FIELD. 
* 
*         USES   FN - FN+4. 
  
  
 SFN      SUBR               ENTRY/EXIT 
          STM    SFNA 
          LDD    MA 
          CWM    *,ON 
 SFNA     EQU    *-1
          SBN    1
          CRD    FN 
          LDD    FN+3 
          SCN    77 
          STD    FN+3 
 SFNB     LDN    0           SET FILE STATUS
*         LDN    ST          (FILE STATUS FIELD FOR FNT)
          STD    FN+4 
          UJN    SFNX 
          SPACE  4,10 
*         RESIDENT COMMON DECKS.
  
  
*CALL     COMPSEI 
          SPACE  4,10 
 OVLA     EQU    *+5         OVERLAY LOAD ADDRESS 
 SPN      SPACE  4,15 
**        SPN - SET PERMANENT FILE NAME.
* 
*         SETS PERMANENT FILE NAME INTO (FN - FN+4).
* 
*         ENTRY  (PFFN - PFFN+4) = PERMANENT FILE NAME. 
*                (PFSN - PFSN+4)= LOCAL FILE NAME.
* 
*         EXIT   (FN - FN+4) = PERMANENT FILE NAME. 
* 
*         CALLS  SFN. 
  
  
 SPN      SUBR               ENTRY/EXIT 
          LDM    PFFN 
          ZJN    SPN1        IF PF NAME NOT SPECIFIED 
          LDN    PFFN-PFSN
 SPN1     ADC    PFSN 
          RJM    SFN
          UJN    SPNX 
          SPACE  4,15 
 OVLD     EQU    *+5         LOCAL FILE PROCESSING LOAD ADDRESS 
          TITLE  PRESET.
          QUAL   PRS
***       PFM PRESET PROCESSING INCLUDES -
* 
*         VERIFICATION OF FET PARAMETERS. 
*         VERIFICATION OF USER VALIDATION ALLOWANCES. 
*         PLACING REQUEST IN RECALL IF CATALOG REQUIRED IS INTERLOCKED. 
*         ISSUING ACCOUNTING MESSAGES.
*         LOADING OF PROPER FUNCTION PROCESSOR OVERLAY. 
          SPACE  4,10 
***       DAYFILE MESSAGES. 
* 
*         FOR DESCRIPTIONS OF ERROR MESSAGES CONSULT DOCUMENTATION OF 
*         ERROR PROCESSING OVERLAY (3PT). 
          SPACE  4,15 
***       ACCOUNT FILE MESSAGES.
* 
*         ACCOUNTING MESSAGES ARE ISSUED EVEN IF OPERATION IS 
*         NOT SUCCESSFUL.  I.E. FILE NOT FOUND, ETC.... 
*         MESSAGE IS OF FOLLOWING FORMAT. 
* 
*         GPFC, FILENAME, USERNAME, PACKNAME. 
* 
*                GPFC - G=GROUP (S=STATISTICS, A=ACCOUNTING,
*                                M=MULTI LEVEL SECURITY). 
*                       P=PERMANENT FILE RELATED MESSAGE. 
*                       FC=PF FUNCTION CODE MNEMONIC. 
* 
*         COMMA SEPARATORS WILL BE PRESENT EVEN IF DATA FIELD IS
*         EMPTY.  (E.G.  GPFC, FILENAME, ,PACKNAME.)
* 
* 
*         *SPAC, FILENAME, USERNAME, PACKNAME.* 
*                *SETPFAC* OPERATION. 
* 
*         *SPAL, FILENAME, USERNAME, PACKNAME.* 
*                *SETPFAL* OPERATION. 
* 
*         *SPAP, FILENAME, USERNAME, PACKNAME.* 
*                *APPEND* OPERATION.
* 
*         *SPAS, FILENAME, USERNAME, PACKNAME.* 
*                *ASSIGNPF* OPERATION.
* 
*         *SPCG, FILENAME, USERNAME, PACKNAME.* 
*                *CHANGE* OPERATION.
* 
*         *SPCT, FILENAME, USERNAME, PACKNAME.* 
*                *CATLIST* OPERATION. 
* 
*         *SPDD, FILENAME, USERNAME, PACKNAME.* 
*                *DROPDS* OPERATION.
* 
*         *SPDF, FILENAME, USERNAME, PACKNAME.* 
*                *DEFINE* OPERATION.
* 
*         *SPDI, FILENAME, USERNAME, PACKNAME.* 
*                *DROPIDS* OPERATION. 
* 
*         *SPDP, FILENAME, USERNAME, PACKNAME.* 
*                *DELPFC* OPERATION.
* 
*         *SPGT, FILENAME, USERNAME, PACKNAME.* 
*                *GET* OR *OLD* OPERATION.
* 
*         *SPPG, FILENAME, USERNAME, PACKNAME.* 
*                *PURGE* OPERATION. 
* 
*         *SPPM, FILENAME, USERNAME, PACKNAME.* 
*                *PERMIT* OPERATION.
* 
*         *SPRP, FILENAME, USERNAME, PACKNAME.* 
*                *REPLACE* OPERATION. 
* 
*         *SPRS, FILENAME, USERNAME, PACKNAME.* 
*                *RPFSTAT* OPERATION. 
* 
*         *SPSA, FILENAME, USERNAME, PACKNAME.* 
*                *SETASA* OPERATION.
* 
*         *SPSD, FILENAME, USERNAME, PACKNAME.* 
*                *SETDA* OPERATION. 
* 
*         *SPSF, FILENAME, USERNAME, PACKNAME.* 
*                *SETAF* OPERATION. 
* 
*         *SPSP, FILENAME, USERNAME, PACKNAME.* 
*                *STAGEPF* OPERATION. 
* 
*         *SPSV, FILENAME, USERNAME, PACKNAME.* 
*                *SAVE* OPERATION.
* 
*         *SPUA, FILENAME, USERNAME, PACKNAME.* 
*                *UATTACH* OPERATION. 
* 
*         *SPUG, FILENAME, USERNAME, PACKNAME.* 
*                *UGET* OPERATION.
* 
*         *SPUR, FILENAME, USERNAME, PACKNAME.* 
*                *UREPLACE* OPERATION.
* 
* 
*         *MFFI, FILENAME, LEVELNAME.*
*                AN INVALID ATTEMPT WAS MADE TO CHANGE THE ACCESS 
*                LEVEL ON FILE FILENAME TO LEVEL LEVELNAME. 
* 
*         *MPNF, FILENAME, USERNAME, PACKNAME.* 
*                AN UNSUCCESSFUL ATTEMPT WAS MADE TO ACCESS FILE
*                FILENAME UNDER ALTERNATE USER USERNAME ON PACK 
*                PACKNAME.
* 
* 
*         *STRS, FILENAME, USERINDEX, FAMPACK.* 
*                A REQUEST HAS BEEN SENT TO *MAGNET* TO STAGE FILE
*                FILENAME, OF USER INDEX USERINDEX ON FAMILY/PACK 
*                FAMPACK, TO DISK FROM TAPE ALTERNATE STORAGE.
 PRS      SPACE  4,35 
**        PRS - PRESET ROUTINE. 
*         CHECK INPUT PARAMETERS. 
* 
*         ENTRY  (IR - IR+4) = CALL.
*                (MP - MP+4) = PARAMETER WORD FROM MESSAGE BUFFER.
* 
*         EXIT   (UI - UI+1) = CALLING USER INDEX.
*                (PFUI - PFUI+1) = CALLING USER INDEX.
*                (PI - PI+1) = OPTIONAL USER INDEX. 
*                (PFPI - PFPI+1) = OPTIONAL USER INDEX. 
*                (SFAA - SFAA+1) = RELATIVE FET ADDRESS.
*                (PCPD) = CURRENT PACKED DATE.
*                (PFAL) = JOB ACCESS LEVEL. 
*                (PFFC - PFFC+2) = JOB ACCESS CATEGORY SET. 
*                (PFFN - PFFN+3) = PERMANENT FILE NAME. 
*                (PFSN - PFSN+3) = SYSTEM FILE NAME.
*                (PFAC - PFAC+4) = USER NAME OF CALLING JOB.
*                (PFOU - PFOU+4) = ALTERNATE USER NAME IN CALL BLOCK. 
*                (PFPW - PFPW+3) = FILE PASSWORD. 
*                (PUCW - PUCW+4) = USER CONTROL WORD. 
*                (PFPN - PFPN+3) = PACKNAME + FAMILY EST ORDINAL. 
*                (PFUC) = USER CONTROLS.
*                (PFNF - PFNF+3) = NEW FILE NAME. 
*                (PWCC) = COMMAND CODE FROM *RPFSTAT* REQUEST.
*                (PWRF) = RESTART FLAGS FOR *PFM* RECALL. 
*                (PXDT - PXDT+1) = VALIDATED EXPIRATION DATE. 
*                (PXDT - PXDT+1) = 0 IF NONEXPIRING PASSWORD/PERMIT.
*                (SSID) = SUBSYSTEM ID. 
*                (SSOM) = OPERATING SYSTEM SECURITY MODE. 
*                (SSYS) = SUBSYSTEM FLAG. 
*                (SVAL) = SECURITY VALIDATION BITS. 
*                ACCOUNTING MESSAGE ISSUED. 
*                USER CONTROLS SET (SEE *SUC* EXIT CONDITIONS.) 
  
  
 PRS      BSS    0           ENTRY
          LDD    MP          SAVE RESTART FLAGS FOR *PFM* RECALL
          STM    PWRF 
          LDD    MP+2        SAVE COMMAND CODE FROM *RPFSTAT* REQUEST 
          STM    PWCC 
          LDD    MP+3        SET EST ORDINAL FROM *RPFSTAT* REQUEST 
          STD    EQ 
          LDN    ZERL        CLEAR *MS2W* 
          CRD    CM 
          LDD    CP 
          ADK    MS2W 
          CWD    CM 
          LDN    0           CLEAR FST POINTER
          STD    FA 
          LDD    CP          FETCH EJT ORDINAL
          ADN    TFSW 
          CRD    CM 
          SFA    EJT,CM      READ EJT 
          ADN    SCLE 
          CRD    CM 
          LDD    CM          SET SERVICE CLASS
          SHN    14 
          RAM    SUCA 
          SHN    -14         SET JOB ORIGIN TYPE
          LPN    17 
          STM    JORG 
          RJM    VFA         VERIFY FET ADDRESS 
          MJN    PRS1        IF ADDRESS OUT OF RANGE
          RJM    SEP         SET ERROR PROCESSING OPTIONS 
          LDD    CP 
          ADN    STSW 
          CRD    CM 
          ADN    JCIW-STSW
          CRD    CN 
          LDD    CN+2        SAVE SUBSYSTEM ID
          STM    SSID 
          SBK    LSSI+1 
          MJN    PRS0.1      IF NOT A SUBSYSTEM 
          LDN    1           SET SUBSYSTEM FLAG 
          STM    SSYS 
 PRS0.1   LDD    CC          CHECK FUNCTION CODE
          LPN    77 
          ZJN    PRS1        IF ZERO FUNCTION CODE
          STD    CC 
          SBN    CCRS 
          ZJN    PRS3        IF *RPFSTAT* COMMAND 
          LDD    CM+1 
          NJN    PRS2        IF ERROR AT CONTROL POINT
          LDD    CC 
          SBN    CCLM 
          MJN    PRS3        IF LEGAL COMMAND CODE
 PRS1     ERROR  PAE,CH,IW   * PFM ARGUMENT ERROR.* 
  
 PRS2     EXECUTE  3PU       TERMINATE PROGRAM
  
 PRS3     RJM    VUA         VALIDATE USER ACCESS 
          LDK    SSML        SAVE SYSTEM SECURITY MODE
          CRD    CM 
          LDD    CM 
          LPN    7
          STM    SSOM 
 PRS4     RJM    PFP         PROCESS FET PARAMETERS 
  
*         CHECK FOR VALID USER INDEX. 
  
          LDD    CN+3        SET USER INDEX OF CALLING USER 
          LPN    37 
          STM    PRSJ 
          STD    UI 
          SHN    14 
          ADD    CN+4 
          STM    PRSJ+1 
          STD    UI+1 
          ZJN    PRS5        IF USER INDEX NOT SPECIFIED
          LMC    IFUI 
          NJN    PRS6        IF NOT INDIRECT FLAW USER INDEX
 PRS5     ERROR  PFN,CH,IW   * DEVICE UNAVAILABLE.* 
  
*         DETERMINE USERS PERMISSION TO CREATE PERMANENT FILES. 
  
 PRS6     LDM    TCTL,CC
          SHN    21-3 
          PJN    PRS8        IF COMMAND NOT CREATING INDIRECT FILES 
          LDD    FN+4        COMPARE ACCESS CONTROL BITS
          SHN    21-3 
          MJN    PRS9        IF USER ALLOWED TO CREATE INDIRECT FILES 
 PRS7     ERROR  IUA,CH,IW   *USER ACCESS NOT VALID.* 
  
 PRS8     SHN    21-2-21+3
          PJN    PRS10       IF USER NOT CREATING DIRECT FILE 
          LDD    FN+4 
          SHN    21-2 
          PJN    PRS7        IF USER NOT ALLOWED TO CREATE DIRECT FILES 
  
 PRS9     LDM    PFPN 
          ZJN    PRS10       IF NOT REMOVABLE PACK REQUEST
          LDD    FN+4 
          SHN    21-10
          PJN    PRS7        IF USER NOT ALLOWED TO CREATE FILES ON RP
  
*         VERIFY FILE NAMES.
  
 PRS10    LDD    CC 
          LMN    CCCG        CHECK FOR CHANGE COMMAND 
          NJN    PRS11       IF NOT CHANGE
          LDM    PFNF 
          ZJN    PRS11       IF NEW NAME NOT SPECIFIED
          LDC    PFNF 
          RJM    SFN
          RJM    VFN
          ZJN    PRS12       IF ERROR IN NAME 
  
 PRS11    RJM    SFA         READ SYSTEM FILE NAME
          CRM    PFSN,ON
          LDM    PFSN+3 
          SCN    77 
          STM    PFSN+3 
          LDC    PFSN        VERIFY SYSTEM FILE NAME
          RJM    SFN
          RJM    VFN
          NJN    PRS13       IF NAME OK 
  
 PRS12    ERROR  FNE,CH,IW   *FILE NAME ERROR.* 
  
 PRS13    LDM    PFFN 
          ZJN    PRS14       IF NO PF NAME SPECIFIED
          LDC    PFFN        VERIFY PF NAME 
          RJM    SFN
          RJM    VFN
          ZJN    PRS12       IF ERROR IN NAME 
  
*         CHECK RANGE ON SPECIAL REQUEST SUBFUNCTION. 
  
 PRS14    LDM    PFSR        GET SPECIAL REQUEST
          LPN    77 
          SBN    SRLM 
          PJN    PRS16       IF INVALID SPECIAL REQUEST VALUE 
  
*         CHECK PARAMETER RANGE.
  
          LDM    PFFN+4      CHECK MODE RANGE 
          STD    T0 
          LPN    37 
          SBN    PTLM 
          MJN    PRS17       IF MODE IN RANGE 
  
 PRS16    ERROR  ILR,CH,IW   *PFM INCORRECT REQUEST.* 
  
 PRS17    LDD    T0          CHECK CATALOG TYPE 
          SHN    -6 
          LPN    37 
          SBN    FCPB+1 
          PJN    PRS16       IF CATALOG TYPE OUT OF RANGE 
          RJM    CRX         CHECK FOR *RESEX*/*CPUPFM* ERROR STATUS
          LDD    CC 
          LMN    CCRS 
          NJN    PRS18       IF NOT *RPFSTAT* REQUEST 
          LDM    PWCC        ORIGINAL COMMAND CODE
          ZJP    PRS7        IF *CPUPFM* HAS NOT JUST BEEN CALLED 
          LDD    CM+2        ERROR REPLY
          RJM    PER         PROCESS ERROR REPLY
          RAM    PRSK        SET PARAMETER WORD FOR *ERROR* MACRO 
          RJM    FIF         FIND INTERLOCK FILES 
          LJM    PRS41       SKIP *RESEX* PROCESSING
  
*         DETERMINE CATALOG TO ACCESS AND SET ADDRESS.
  
 PRS18    RJM    POA         PROCESS OPTIONAL USER NAME 
          MJN    PRS16       IF INCORRECT REQUEST 
          LDC    PFPN        SET CATALOG ADDRESS
          RJM    GCA
          STM    MSTA        MST ADDRESS/10B
          MJN    PRS22       IF CATALOG NOT AVAILABLE 
          SHN    3
          ADN    PUGL        READ MST USER NAME WORD
          CRD    FS 
          ADN    STLL-PUGL   READ DEVICE STATUS WORD
          CRD    CM 
          LDD    CM 
          LPN    MLUNL
          ZJN    PRS19       IF UNLOAD NOT REQUESTED
          RJM    CRR         CHECK FOR CURRENT ATTACHMENT TO PACK 
          ZJN    PRS22       IF FIRST ACCESS TO PACK
 PRS19    LJM    PRS25       CHECK FOR AUXILIARY DEVICE 
  
*         CATALOG NOT AVAILABLE.
  
 PRS20    LDD    MA          SET PACK NAME FOR *0RF*
          CWM    PFPN,ON
          SBN    1
          CRD    FN 
          LDN    0           CLEAR EST ORDINAL
          STD    EQ 
          RJM    CRF         *UNLOAD* REMOVABLE PACK RESOURCE 
 PRS21    ERROR  PFN,CH,IW   * PERMANENT FILES NOT AVAILABLE.*
  
 PRS22    LDM    PFPN 
          ZJN    PRS21       IF NOT AUXILIARY DEVICE REQUEST
          LDM    EPOP        CHECK ERROR PROCESSING STATUS
          SHN    21-2 
          PJN    PRS20       IF ERROR PROCESSING NOT SELECTED 
          SHN    21-3-21+2+22  CHECK USER ERROR PROCESSING SELECTED 
          MJN    PRS20       IF USER ERROR PROCESSING SELECTED
          RJM    CRX         CHECK RESEX STATUS 
          NJN    PRS24       IF RESEX HAS BEEN ACTIVATED
 PRS23    LJM    RSX         ACTIVATE RESEX 
  
 PRS24    LPN    /STATUS/MV  CHECK RESEX STATUS 
          ZJN    PRS23       IF PACK AVAILABLE
  
          ERROR  RSE,CH,IW   * RESEX FAILURE.*
*                            NON-FATAL ERROR DETECTED WITH
*                            NO PACK AVAILABLE AND ERROR
*                            PROCESSING SET.
  
*         CATALOG AVAILABLE - DETERMINE IF REQUEST CAN BE CONTINUED.
  
 PRS25    LDM    PFPN        CHECK AUXILIARY DEVICE REQUEST 
          NJN    PRS26       IF AUXILIARY DEVICE REQUEST
          LJM    PRS39       CHECK CATALOG ACCESSABILITY
  
*         PROCESS AUXILIARY DEVICE REQUEST. 
*         DETERMINE IF DEVICE FOUND IS PROPER TYPE. 
  
 PRS26    LDM    RQDT+1      PRESET REQUESTED DEVICE TYPE 
          STM    PRSA+1 
          LDM    RQDT 
          LPN    77 
          LMC    LMCI 
          STM    PRSA 
          SFA    EST,T5      READ EST 
          ADK    EQDE 
          CRD    T7 
          LDD    T7 
          SHN    21-10
          PJN    PRS27       IF NOT REMOVABLE 
          LDD    T7+4        GET UNIT COUNT 
          SHN    3
          ADN    DDLL 
          CRD    CM+3 
          LDD    CM+3 
          LPN    7
          ADN    1R1
          SHN    14 
          LMD    T7+3        DEVICE TYPE
          SHN    6
 PRSA     LMC    *           CHECK DEVICE TYPE
*         LMC    (RQDT)      PRESET TO REQUESTED TYPE 
          NJN    PRS26.1     IF NOT PROPER TYPE 
          LDD    T7 
          LPN    2
          ZJN    PRS27       IF DEVICE *ON* OR *IDLE* 
 PRS26.1  ERROR  IDR,CH,IW   *INCORRECT DEVICE REQUEST.*
  
*         DETERMINE IF ALTERNATE ACCESS TO PRIVATE DEVICE.
  
 PRS27    LDD    FS 
          NJN    PRS28       IF PRIVATE DEVICE
          LJM    PRS36       CHECK EST OF DEVICE
  
 PRS28    LDM    PFUC        DISABLE ALL BUT INDIRECT FILE SIZE LIMITS
          LPN    7
          LMC    7770 
          STM    PFUC 
          LDK    STPD        SET *PRIVATE DEVICE* FLAG
          RAM    STAT 
          LDM    TCTL,CC     CHECK FUNCTION TYPE
          LPN    2
          NJN    PRS29       IF NOT ALTERNATE CATALOG ACCESS
          LDM    PFOU        SET CATALOG FOR ACCESS 
          ZJN    PRS29       IF NO OPTIONAL USER
          LDC    PFOU 
          UJN    PRS30       SET UP OPTIONAL USER 
  
 PRS29    LDC    PFAC        GET USER NAME OF CALLER
 PRS30    RJM    SFN
          LDN    3
          STD    T1 
          LDD    FS+3        CLEAR LOWER CHARACTER OF USER NAME 
          SCN    77 
          STD    FS+3 
 PRS31    LDM    FN,T1       COMPARE NEXT BYTE OF USER NAMES
          LMM    FS,T1
          NJN    PRS31.1     IF NOT CORRECT USER
          SOD    T1 
          PJN    PRS31       IF MORE BYTES TO COMPARE 
          UJN    PRS34       PROCESS ACCESS BY/SPECIFYING DEVICE OWNER
  
 PRS31.1  LDM    TCTL,CC     CHECK FUNCTION TYPE
          LPN    14 
          ZJN    PRS32       IF NOT FILE CREATION REQUEST 
          LJM    PRS21       *DEVICE UNAVAILABLE.*
  
*         ALTERNATE ACCESS TO PRIVATE DEVICE. 
  
 PRS32    LDM    TCTL,CC     CHECK FUNCTION TYPE
          LPN    2
          NJN    PRS35       IF NOT ALTERNATE CATALOG ACCESS
          LDM    PFOU        CHECK USER NAME
          NJN    PRS35       IF OPTIONAL USER CALL
          LDD    MA          SET DEVICE OWNER AS OPTIONAL USER
          CWD    FS          COPY ALTERNATE USER NAME 
          CRM    PFOU,ON
          RJM    POA         PROCESS OPTIONAL USER NAME 
          PJN    PRS33       IF USER NAME VALID 
          ERROR  ILR,CH,IW   *PFM INCORRECT REQUEST*
  
 PRS33    LDM    TCTL,CC     CHECK FUNCTION TYPE
          LPN    2
          NJN    PRS35       IF NOT ALTERNATE CATALOG ACCESS
  
*         CHECK IF RESOURCE CONTROL NEEDED. 
  
 PRS34    LDC    PFPN        RESET CATALOG POINTER
          RJM    GCA         GET CATALOG ADDRESS
          STM    MSTA        MST ADDRESS/10B
          PJN    PRS36       IF CATALOG FOUND 
          LJM    PRS22       TREAT AS IF CATALOG NOT FOUND
  
 PRS35    RJM    SPN         SET PERMANENT FILE NAME
          ERROR  FNF,CH,IW   * (FILENAM) NOT FOUND.*
  
 PRS36    SFA    EST,T5      READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDD    CM 
          SHN    21-10
          PJN    PRS39       IF NOT REMOVABLE 
          RJM    CRX         CHECK RESEX RETURN STATUS
          NJN    PRS38       IF *RESEX* HAS BEEN ACTIVATED
          LDM    TCTL,CC
          SHN    21-5 
          PJN    PRS39       IF NOT DA REQUEST
          RJM    CRR         CHECK IF FIRST AUXILIARY REQUEST ON DEVICE 
          NJN    PRS39       IF NOT 1ST DA FILE ON THIS PACK
          RJM    CCA         CHECK FOR ERROR IDLE OR PF UTILITY ACTIVE
          LJM    RSX         ACTIVATE *RESEX* 
  
 PRS37    EXIT   PFN,CH,IW   * DEVICE UNAVAILABLE.* 
  
 PRS38    LPN    /STATUS/MV  CHECK RESEX STATUS 
          NJN    PRS37       IF PACK NOT AVAILABLE
          LDD    CM+2 
          LPN    /STATUS/OK 
          NJN    PRS39       IF REQUEST COMPLETE
  
          ERROR  RSE,CH,IW   * RESEX FAILURE.*
  
*         REQUEST CAN BE PROCESSED DETERMINE IF CATALOG CAN BE ACCESSED 
  
 PRS39    RJM    CCA         CHECK CATALOG ACCESSABILITY
  
*         CATALOG CAN BE ACCESSED - PROCEED WITH REQUEST. 
  
          LDM    TCTL,CC     CHECK COMMAND
          SHN    21-4 
          PJN    PRS40       IF USER CONTROLS NOT NEEDED
          RJM    SUC         SET USER CONTROLS
 PRS40    RJM    SRF         SET RESERVE FNT
  
*         SET UP APPROPRIATE ACCOUNTING MESSAGE.
  
 PRS41    LDM    PWRF        RESTART FLAGS
          LPK    RFAM 
          NJN    PRS43       IF ACCOUNTING MESSAGES ISSUED
          LDK    RFAM        SET ACCOUNTING MESSAGES ISSUED FLAG
          RAM    PWRF 
          LDD    CC 
          LMN    CCPM 
          ZJN    PRS42       IF PERMIT FUNCTION 
          LDN    PFOU&PFAC   SPECIFY USER NAME
 PRS42    LMC    PFAC        SPECIFY REQUESTING USER NAME 
          RJM    SAM         SET UP ACCOUNTING MESSAGE
  
*         ISSUE DAYFILE MESSAGE(S). 
  
          LDC    PRSF+ACFN   ISSUE *S* TYPE ACCOUNT LOG MESSAGE 
          RJM    DFM
          LDM    TCTL,CC     CHECK IF *A* TYPE MESSAGE NEEDED 
          SHN    21-6 
          PJN    PRS43       IF *A* TYPE MESSAGE NOT NEEDED 
          LDC    2RAP        PRESET MESSAGE CODE
          STM    PRSF 
          LDC    PRSF+ACFN   ISSUE *A* TYPE ACCOUNT LOG MESSAGE 
          RJM    DFM
  
*         INCREMENT ACCOUNTING INFORMATION. 
  
 PRS43    LDM    TPFI,CC     PF INCREMENT FOR REQUESTED FUNCTION
          RAM    AIPF+1 
          LDM    PFPN        CHECK AUXILIARY PACK REQUEST 
          ZJN    PRS44       IF NOT AUXILIARY PACK REQUEST
          LDN    IPAD        PF INCREMENT FOR AUXILIARY DEVICE
          RAM    AIPF+1 
 PRS44    LDM    PFOU        CHECK FOR OPTIONAL USER
          ZJN    PRS45       IF NO OPTIONAL USER
          LDN    IPVA        PF INCREMENT FOR *VALIDUS* ACCESS
          RAM    AIPF+1 
  
 PRS45    LDM    PRSJ 
          STD    UI 
          LDM    PRSJ+1 
          STD    UI+1 
          LDM    STAT        CHECK *CPUPFM*/*RESEX* STATUS
          LPK    STRX 
          ZJN    PRS46       IF *CPUPFM*/*RESEX* NOT ACTIVATED
          LDN    ZERL        CLEAR SPCW STATUS
          CRD    CM 
          LDD    CP 
          ADC    SPCW 
          CWD    CM 
          LDD    CC 
          LMN    CCRS 
          NJN    PRS46       IF NOT *RPFSTAT* REQUEST 
          LDN    CAPS        CLEAR *CPUPFM* ACTIVE STATUS 
          STD    CM+1 
          MONITOR  SJCM 
          EXIT   NEC,CH,IW,EQ  PROCESS ERROR CODE FROM *CPUPFM*, IF ANY 
 PRSK     EQU    *-1         (ERROR CODE) 
  
*         PROCESS RESOURCE FILE CLEAN UP. 
  
 PRS46    LDM    TCTL,CC     CHECK ACCESS TYPE
          SHN    21-5 
          PJN    PRS47       IF NOT DIRECT ACCESS OPERATION 
          SHN    21-7-21+5+22 
          PJN    PRS47       IF NO FNT CREATED
          NFA    FNTA,R      SET EST ORDINAL IN FST 
          ADK    FNTL 
          CRD    CN 
          ADN    FSTL-FNTL
          CRD    CM 
          LDD    EQ 
          STD    CM 
          LDD    CN+4 
          LPN    77 
          LMC    PMFT*100B
          STD    CN+4 
          NFA    FNTA,R 
          ADK    FNTL 
          CWD    CN 
          ADN    FSTL-FNTL
          CWD    CM 
          UJN    PRS48       PROCESS REQUEST
  
 PRS47    RJM    CRF         *UNLOAD* REMOVABLE PACK RESOURCE 
 PRS48    LDN    ZERL 
          CRD    FS 
          LDD    CC          CHECK COMMAND CODE 
          LMN    CCCT 
          NJN    PRS49       IF NOT CATLIST COMMAND 
          EXECUTE  3PJ       EXIT TO CATLIST PROCESSOR
  
 PRS49    LMN    CCPM&CCCT   CHECK COMMAND CODE 
          ZJN    PRS51       IF *PERMIT* COMMAND
          LDM    PFOU        CHECK USER NAME
          ZJN    PRS51       IF NO USER NAME
  
*         PROCESS USER NAME.
  
          RJM    CUN         COMPARE USER NAME
          NJN    PRS50       IF NOT A MATCH 
          STM    PFPT        SET MATCH OF MULTI LEVEL USER DETECTED 
 PRS50    RJM    SWI         SWAP INDICES 
  
*         DETERMINE CATALOG ADDRESS AND ACCESSABILITY.
  
 PRS51    LDC    PFPN        SET CATALOG ADDRESS
          RJM    GCA
          MJP    PRS21       IF DEVICE NOT FOUND
  
*         PRESERVE CATALOG ADDRESS PARAMETERS.
  
          STM    MSTA        MST ADDRESS/10B
          SHN    3
          ADK    DILL        CHECK FOR BUFFERED DEVICE
          CRD    T0 
          LDD    T0+3 
          SHN    21-12
          PJN    PRS52       IF NOT BUFFERED DEVICE 
          LDC    STBD        SET *BUFFERED DEVICE* FLAG 
          RAM    STAT 
 PRS52    LDD    T5          SAVE EST ORDINAL OF MASTER DEVICE
          STD    EQ 
          STM    SDAA 
          LDD    T6          SAVE CATALOG TRACK 
          STM    CCIA 
  
*         PROCESS LOCAL FILE AS REQUIRED IN *TCTL*. 
  
          LDM    TCTL,CC
          SHN    21-11
          MJN    PRS53       IF LOCAL FILE PROCESSING REQUIRED
          RJM    SPN         SET PERMANENT FILE NAME
          EXECUTE 3PC        EXIT TO COMMAND PROCESSOR
  
 PRS53    EXECUTE  3PA       EXIT TO LOCAL FILE PROCESSOR 
          SPACE  4,10 
 PRSB     DATA   2H,         MESSAGE SEPARATOR
          CON    0           END OF STRING
 PRSC     DATA   1L.         MESSAGE TERMINATOR 
  
*         ACCOUNTING MESSAGE ASSEMBLY AREA. 
  
 PRSF     DATA   6HSPXX,     MESSAGE CODE 
  
*         ACCOUNTING CODES. 
  
 PRSH     CON    0           (ZERO WORD REQUIRED FOR *COMPACS* CALL)
          LOC    1
  
          DATA   2HSV        SAVE 
          DATA   2HGT        GET
          DATA   2HPG        PURGE
          DATA   2HCT        CATLIST
          DATA   2HPM        PERMIT 
          DATA   2HRP        REPLACE
          DATA   2HAP        APPEND 
          DATA   2HDF        DEFINE 
          DATA   2HAT        ATTACH 
          DATA   2HCG        CHANGE 
          DATA   2HUA        UATTACH
          DATA   2HSA        SETASA 
          DATA   2HSF        SETAF
          DATA   2HSD        SETDA
          DATA   2HDD        DROPDS 
          DATA   2HAS        ASSIGNPF 
          DATA   2HGT        OLD
          DATA   2HAC        SETPFAC
          DATA   2HAL        SETPFAL
          DATA   2HUG        UGET 
          DATA   2HUR        UREPLACE 
          DATA   2HDI        DROPIDS
          DATA   2HDP        DELPFC 
          DATA   2HRS        RPFSTAT
          DATA   2HSP        STAGEPF
          LOC    *O 
  
 .1       MAX    *,PRSF+20   DAYFILE MESSAGE AREA 
          ORG    .1 
 PRSJ     CON    0,0         USER INDEX 
 TCTL     SPACE  4,30 
**        TCTL - TABLE OF COMMAND CODE CONTROLS.
* 
*T        1/L,1/K,1/J,1/I,1/H,1/G,1/F,1/E,1/D,1/C,1/B,1/A 
* 
*                A           PREVENT ALTERNATE CATALOG ACCESS.
*                B           PREVENT SET OF UI FOR ALTERNATE CATALOG
*                C           CREATE DA FILE 
*                D           CREATE IDA FILE
*                E           SET USER CONTROLS
*                F           DA REQUEST 
*                G           ISSUE *A* TYPE ACCOUNTING MESSAGE
*                H           FNT POTENTIALLY REQUIRED 
*                I           ALLOW EXPIRATION DATE
*                J           LOCAL FILE PROCESSING REQUIRED 
*                K           SPECIAL REQUEST BLOCK FUNCTIONS. 
*                L           CALL WITHOUT AUTO RECALL (EP/UP REQUEST) 
  
  
 TCTL     EQU    *-1         FWA OF COMMAND CODE CONTROLS 
          LOC    1
  
          CON    1431        SAVE 
          CON    1200        GET
          CON    2000        PURGE
          CON    0000        CATLIST
          CON    0402        PERMIT 
          CON    1420        REPLACE
          CON    1020        APPEND 
          CON    1665        DEFINE 
          CON    1260        ATTACH 
          CON    0401        CHANGE 
          CON    3261        UATTACH
          CON    3000        SETASA 
          CON    2000        SETAF
          CON    3060        SETDA
          CON    2001        DROPDS 
          CON    3265        ASSIGNPF 
          CON    1200        OLD
          CON    0001        SETPFAC
          CON    0001        SETPFAL
          CON    7201        UGET 
          CON    7020        UREPLACE 
          CON    2001        DROPIDS
          CON    3000        DELPFC 
          CON    0000        RPFSTAT
          CON    2000        STAGEPF
  
          LOC    *O 
 TPFI     SPACE  4,20 
**        TPFI - TABLE OF PF INCREMENT VALUES BY FUNCTION.
  
  
 TPFI     EQU    *-1         FWA OF PF INCREMENT VALUES BY FUNCTION 
          LOC    1
  
          CON    IPSV        SAVE 
          CON    IPGT        GET
          CON    IPPG        PURGE
          CON    IPCT        CATLIST
          CON    IPPM        PERMIT 
          CON    IPRP        REPLACE
          CON    IPAP        APPEND 
          CON    IPDF        DEFINE 
          CON    IPAT        ATTACH 
          CON    IPCG        CHANGE 
          CON    IPUA        UATTACH
          CON    IPSA        SETASA 
          CON    IPAF        SETAF
          CON    IPSD        SETDA
          CON    IPDD        DROPDS 
          CON    IPAN        ASSIGNPF 
          CON    IPGT        OLD
          CON    IPAC        SETPFAC
          CON    IPAL        SETPFAL
          CON    IPUG        UGET 
          CON    IPUR        UREPLACE 
          CON    IPDI        DROPIDS
          CON    IPDP        DELPFC 
          CON    IPRS        RPFSTAT
          CON    IPSP        STAGEPF
  
          LOC    *O 
          TITLE  PRESET SUBROUTINES.
 CCA      SPACE  4,60 
**        CCA - CHECK CATALOG ACCESSABILITY.
* 
*         CHECK CATALOG TRACK INTERLOCK, PF UTILITY INTERLOCK AND 
*         ERROR IDLE STATUS; INCREMENT PF ACTIVITY COUNT.  NONE OF
*         THIS IS DONE FOR *ATTACH* WITH *FA* SPECIAL REQUEST.  FOR 
*         *ATTACH* WITH *MA* SPECIAL REQUEST, OR FOR ANY REQUEST FROM 
*         A SUBSYSTEM WITH EP/UP SET, OR FOR ANY REQUEST FROM ANYONE
*         WITH EP/IP SET, CATALOG TRACK INTERLOCK STATUS IS NOT 
*         CHECKED.  FOR *ASSIGNPF*, *CATLIST*, AND *DELPFC*, CATALOG
*         TRACK INTERLOCK STATUS AND PF UTILITY INTERLOCK STATUS ARE
*         NOT CHECKED AND PF ACTIVITY COUNT IS NOT INCREMENTED. 
*         ERROR IDLE IS IGNORED FOR *UATTACH*/*UGET*, AND FOR ANY 
*         REQUEST WITH THE *IE* SPECIAL REQUEST SPECIFIED.
* 
*         ENTRY  (CC) = COMMAND CODE. 
*                (EPOP) = ERROR PROCESSING OPTIONS. 
*                (MSTA) = MST ADDRESS/10B.
*                (PFSR) = SPECIAL REQUEST FROM *FET*. 
*                (SSJS) = *SSJ=* STATUS.
*                (T5) = MASTER DEVICE EST ORDINAL.
* 
*         EXIT   (EPFA) = EST ORDINAL IF PF ACTIVITY COUNT SET. 
*                (EQ) = MASTER DEVICE EST ORDINAL.
* 
*                TO *ERR* IF ERROR IDLE SET ON THE DEVICE.
*                TO *ERR* IF PF UTILITY ACTIVE. 
*                TO *RCL* IF CATALOG TRACK INTERLOCK NOT AVAILABLE
*                (UNLESS CALLER HAS *EP* AND *IP* SET, OR UNLESS
*                 CALLER IS SUBSYSTEM, WITH *EP* AND *UP* SET). 
* 
*                THE FOLLOWING CELLS ARE SETUP FOR EXITS WHICH MAY
*                CAUSE THE JOB TO BE ROLLED.
*                (ERRC) = SET FOR ROLLOUT EVENT.
*                (ERRD) = SET FOR EVENT TIME. 
*                (ERRE) = SET FOR EVENT TYPE. 
* 
*         USES   EQ, CM - CM+4. 
* 
*         CALLS  DTS. 
* 
*         MACROS MONITOR, ERROR, EXIT, SFA. 
  
  
 CCA      SUBR               ENTRY/EXIT 
          LDD    T5          SET EST ORDINAL
          STD    EQ 
          STD    CM+1 
  
*         CHECK FOR *ATTACH* WITH *FA* OR *MA* SPECIAL REQUEST. 
  
          LDD    CC          CHECK COMMAND CODE 
          LMN    CCAT 
          NJN    CCA1        IF NOT *ATTACH* REQUEST
          LDM    PFSR        CHECK FOR SPECIAL REQUEST
          LPN    77 
          LMN    SRFA 
          ZJN    CCAX        IF *FA* SPECIAL REQUEST
          LMN    SRMA&SRFA
          ZJN    CCA2.1      IF *MA* SPECIAL REQUEST
  
*         CHECK CATALOG TRACK INTERLOCK AVAILABILITY. 
  
 CCA1     LDD    CC          CHECK FOR *ASSIGNPF* 
          LMN    CCAN 
          ZJN    CCA2        IF INTERLOCK NOT NEEDED
          LMN    CCCT&CCAN   CHECK FOR *CATLIST*
          ZJN    CCA2        IF INTERLOCK NOT NEEDED
          LMN    CCDP&CCCT   CHECK FOR *DELPFC* 
          ZJN    CCA2        IF INTERLOCK NOT NEEDED
          LMN    CCSP&CCDP   CHECK FOR *STAGEPF*
 CCA2     ZJP    CCA6        IF INTERLOCK NOT NEEDED
          RJM    DTS         DETERMINE TRACK INTERLOCK STATUS 
          PJN    CCA3.1      IF CATALOG TRACK NOT ALREADY INTERLOCKED 
  
*         PROCESS CATALOG TRACK ALREADY INTERLOCKED.  IF THE CALLER 
*         HAS EP/IP SET, OR IF CALLER IS A SUBSYSTEM WITH EP/UP SET,
*         CONTINUE TO PROCESS REQUEST.  OTHERWISE, RECALL *PFM* 
*         IMMEDIATELY.
  
          LDM    EPOP        CHECK ERROR PROCESSING OPTIONS 
          LPN    5
          LMN    5
 CCA2.1   ZJN    CCA4        IF *EP* AND *IP* SET 
          LDM    EPOP        CHECK ERROR PROCESSING OPTION
          LPN    14 
          LMN    14 
          NJN    CCA3        IF EITHER *EP* OR *UP* IS NOT SET
          LDM    SSID 
          NJN    CCA4        IF SUBSYSTEM 
 CCA3     LDK    /ERRMSG/INA * INTERLOCK NOT AVAILABLE* 
          LJM    RCL         RECALL PFM 
  
*         CHECK DEVICE ACCESSIBILITY. 
  
 CCA3.1   NJN    CCA4        IF NOT INACCESSIBLE DEVICE 
          ERROR  WID,CH,IW,T5,EC6 
  
*         INCREMENT PF ACTIVITY.
  
 CCA4     LDD    T5          EST ORDINAL
          STD    CM+1 
          LDN    IPAS        INCREMENT PF ACTIVITY
          STD    CM+3 
          MONITOR  STBM 
          LDD    CM+1 
          ZJN    CCA5        IF ACTIVITY INCREMENTED
          LDM    MSTA        CHECK MST
          SHN    3
          ADK    TDGL 
          CRD    CM 
          LDD    CM+1 
          SHN    21-6 
          MJN    CCA4.1      IF PF UTILITY INTERLOCK SET
          EXIT   PEA,CH,IW,,EC4  * PFM EXCESS ACTIVITY.*
  
*         PROCESS PF UTILITY INTERLOCK SET. 
  
 CCA4.1   LDN    PFUE        SET EVENT FOR ROLLOUT
          STM    ERRC 
          LDC    UIRT        SET USER INTERLOCK ROLLOUT TIME
          STM    ERRD 
          EXIT   PFA,CH,IW,,EC2  * PF UTILITY ACTIVE.*
  
 CCA5     LDD    T5          SET EST ORDINAL FOR PF ACTIVITY INCREMENT
          STM    EPFA 
  
*         CHECK FOR ERROR IDLE. 
  
 CCA6     SFA    EST,T5 
          ADK    EQDE 
          CRD    CM 
          LDD    CC 
          LMN    CCUA 
          ZJN    CCA7        IF *UATTACH*, IGNORE ERROR IDLE
          LMN    CCUG&CCUA
          ZJN    CCA7        IF *UGET*, IGNORE ERROR IDLE 
          LDD    CM+4        CHECK FOR ERROR IDLE 
          SHN    3
          ADN    ACGL 
          CRD    CM 
          LDD    CM+4 
          LPN    20 
          NJN    CCA8        IF ERROR IDLE
 CCA7     LJM    CCAX        RETURN 
  
 CCA8     LDM    SSJS 
          ZJN    CCA9        IF NOT *SSJ=* JOB
          LDM    PFSR 
          LPN    77 
          LMN    SRIE 
          ZJN    CCA7        IF *IGNORE ERROR IDLE* SPECIAL REQUEST 
          LDN    VSNE/10000  SET EVENT TYPE 
 CCA9     ERROR  PFN,CH,IW   * DEVICE UNAVAILABLE.* 
 CRF      SPACE  4,15 
**        CRF - CALL *0RF*. 
* 
*         ENTRY  (EQ) = REMOVABLE DEVICE EST ORDINAL. 
*                     = 0, IF DEVICE UNAVAILABLE. 
*                (FN - FN+4) = PACK NAME, IF DEVICE UNAVAILABLE.
* 
*         EXIT   (FA) = 0.
* 
*         USES   FS - FS+4. 
* 
*         CALLS  PES, *0RF*.
* 
*         MACROS EXECUTE, NFA.
  
  
 CRF      SUBR               ENTRY/EXIT 
          LDM    STAT        CHECK *RESEX* STATUS 
          LPN    STRX 
          ZJN    CRF2        IF *RESEX* NOT ACTIVATED 
          LDK    RFCN+FSTL
          STD    FA          SET FNT POINTER
          NFA    FA,R 
          ADN    FSTL        FETCH RESOURCE FILE STATUS 
          CRD    FS 
          LDD    FS+1        CHECK ERROR ON PREVIOUS UPDATE 
          SCN    1
          NJN    CRF1        IF PROCESSING ERROR
          LDD    EQ 
          STD    FS          SET EST ORDINAL
          LDN    5
          STD    FS+1        SET *0RF* OPTION 
 CRF1     LDN    1
          STM    LOCF-1      SET RESOURCE UPDATE CONTROL
          EXECUTE  0RF,LOCF 
          LPC    1S17        CLEAR FNT POINTER
 CRF2     STD    FA 
          PJN    CRF3        IF RESOURCE FILE UPDATED 
          RJM    PES         PROCESS ERROR STATUS 
 CRF3     LJM    CRFX        RETURN 
 CRR      SPACE  4,10 
**        CRR - CHECK AUXILIARY DEVICE REQUEST. 
* 
*         ENTRY  (T5) = EST ORDINAL OF DEVICE TO BE ACCESSED. 
* 
*         EXIT   (A) = 0 IF FIRST ACCESS TO PACK. 
* 
*         USES   T1, T2, CM - CM+4, FN - FN+4.
  
  
 CRR3     LCN    1           INDICATE EQUIPMENT ASSIGNED
  
 CRR      SUBR               ENTRY/EXIT 
  
*         SEARCH FNT FOR ANOTHER FILE ASSIGNED TO DEVICE. 
  
          LDD    CP          SET NFL SIZE 
          ADN    FLSW 
          CRD    FN 
          LDD    FN 
          SHN    6
          ADN    1
          STD    T1 
          LDC    FNTN        SET FIRST FNT ENTRY ADDRESS
          STD    T2 
 CRR1     NFA    T2,R 
          ADK    FNTL 
          CRD    FN 
          ADN    FSTL-FNTL
          CRD    CM 
          LDD    CM          CHECK EQUIPMENT ASSIGNMENT 
          LMD    T5 
          NJN    CRR2        IF NO MATCH ON EST ORDINAL 
          LDD    FN+4        CHECK FILE TYPE
          SHN    -6 
          LMN    PMFT 
          ZJN    CRR3        IF *PMFT* FILE ON CORRECT EQUIPMENT
 CRR2     LDN    LENF        ADVANCE FNT ADDRESS
          RAD    T2 
          SBD    T1 
          MJN    CRR1        IF NOT END OF NFL
          LDN    0
          UJN    CRRX 
 CRX      SPACE  4,30 
**        CRX - CHECK *CPUPFM*/*RESEX* RETURN STATUS. 
* 
*         ENTRY  (CP) = CP ADDRESS. 
* 
*         EXIT   (A) = (CM+2) = RETURN STATUS.
*T,       3/ PI,9/ RS 
*                PI = PROCESSOR INDEX (0 = *RESEX*,  1 = *CPUPFM*). 
*                RS = RETURN STATUS.
*                (CM - CM+4) = CP WORD *SPCW*.
* 
*         *RESEX* RETURN STATUS - 
*T,       3/ 0,3/ ST,2/ 0,1/ P,1/ O,1/ E,1/ C 
*                ST = ERROR CODE. 
*                            0 = *RESEX* FAILURE - SYSTEM ERROR.
*                            1 = INCORRECT DEVICE REQUEST.
*                            2 = UNRECOGNIZED EQUIPMENT TYPE. 
*                            3 = INCORRECT USER REQUEST.
* 
*                P = 0 IF PACK AVAILABLE. 
*                E = 1 IF ERROR.
*                O = 1 IF ASSIGNMENT WILL OVERCOMMIT. 
*                C = 1 IF OPERATION ALLOWED.
* 
*                TO *ERR* IF *RESEX* ERROR STATUS DETECTED. 
* 
*         *CPUPFM* RETURN STATUS -
*T,       3/ 1,9/ EC
*                EC = *PFM* ERROR CODE. 
*                EC = 0 IF NORMAL COMPLETION. 
  
  
 CRX2     LDN    0           SET *CPUPFM*/*RESEX* NOT ACTIVATED 
  
 CRX      SUBR
          LDD    CP          READ RETURN STATUS 
          ADC    SPCW 
          CRD    CM 
          LDD    CM 
          NJN    CRX2        IF *DMP=* PROGRAM IN PROGRESS
          LDD    CM+2        CHECK RETURN STATUS
          ZJN    CRX2        IF *DMP=* PROGRAM NOT ACTIVATED
          SHN    -11
          NJN    CRX1        IF NOT *RESEX* 
          LDD    CM+2 
          LPN    /STATUS/FE  CHECK RESEX STATUS 
          ZJN    CRX1        IF NOT FATAL ERROR 
          ERROR  NEM,CH,IW   ABORT WITH NO MESSAGE
  
 CRX1     LDM    STAT        SET *CPUPFM*/*RESEX* ACTIVATED STATUS
          SCN    STRX 
          LMN    STRX 
          STM    STAT 
          LDD    CM+2        SET RETURN STATUS
          UJN    CRXX        RETURN 
 CUN      SPACE  4,15 
**        CUN - COMPARE USER NAMES. 
* 
*         ENTRY  (PFOU) = USER NAME SPECIFIED IN FET. 
*                (PFAC) = USER NAME OF CALLING JOB. 
* 
*         EXIT   (A) = 0 IF USER NAMES MATCH. 
*                (A) .NE. 0 IF USER NAMES DO NOT MATCH. 
* 
*         USES   T1, T2, CM - CM+4. 
* 
*         CALLS  SFN. 
  
  
 CUN      SUBR               ENTRY/EXIT 
          LDC    PFOU        SET USER NAME
          RJM    SFN
          LDD    MA          TRANSFER USER NAME 
          CWM    PFAC,ON
          SBN    1
          CRD    CM 
          LDD    CM+3        CLEAR LOWER CHARACTER OF USER NAME 
          SCN    77 
          STD    CM+3 
          LDN    0           INITIALIZE COUNT 
          STD    T1 
  
*         COMPARE USER NAMES ALLOWING A (*) IN (CM) TO MATCH ANY
*         CORRESPONDING CHARACTER IN THE USER NAME IN (FN). 
  
 CUN1     AOD    T1          TEST FOR END OF LOOP 
          LMN    5
          ZJN    CUNX        IF USER NAMES MATCH
          LDM    CM-1,T1     USER NAME OF THE REQUESTOR JOB 
          STD    T2 
          LMC    2R** 
          ZJN    CUN1        IF (**), SKIP CHARACTER COMPARE
          SCN    77 
          ZJN    CUN3        IF UPPER CHARACTER = (*) 
          LDD    T2          COMPARE UPPER CHARACTER
          LMM    FN-1,T1
          SCN    77 
 CUN2     NJN    CUNX        IF USER NAME DOES NOT MATCH
          LDD    T2          CHECK LOWER CHARACTER FOR (*)
          LMN    1R*
          LPN    77 
          ZJN    CUN1        IF LOWER CHARACTER = (*) 
 CUN3     LDD    T2          COMPARE LOWER CHARACTER
          LMM    FN-1,T1
          LPN    77 
          ZJN    CUN1        IF LOWER CHARACTER MATCHES 
          UJN    CUN2        RETURN, USER NAMES DO NOT MATCH
 FIF      SPACE  4,10 
**        FIF - FIND INTERLOCK FILES. 
* 
*         EXIT   (FNTB, FNTC, FNTD) = FNT ADDRESSES, IF FILES PRESENT.
* 
*         CALLS  SAF, SFN.
  
  
 FIF      SUBR               ENTRY/EXIT 
          LDC    FIFA        SEARCH FOR /PFM*ILK/ 
          RJM    SFN
          RJM    SAF
          ZJN    FIF2        IF NOT FOUND 
          LDD    FA          SAVE FNT ADDRESS 
          STM    FNTC 
 FIF2     LDC    FIFB        SEARCH FOR /PFM*PFN/ 
          RJM    SFN
          RJM    SAF
          ZJN    FIF3        IF NOT FOUND 
          LDD    FA          SAVE FNT ADDRESS 
          STM    FNTB 
 FIF3     LDC    FIFC        SEARCH FOR /PFM*APF/ 
          RJM    SFN
          RJM    SAF
          ZJN    FIF4        IF NOT FOUND 
          LDD    FA          SAVE FNT ADDRESS 
          STM    FNTD 
 FIF4     UJP    FIFX        RETURN 
  
  
 FIFA     VFD    60/7L"ILK" 
 FIFB     VFD    60/7L"PFN" 
 FIFC     VFD    60/7L"APF" 
 FMS      SPACE  4,15 
**        FMS - FORM MASK FOR FILE RESIDENCE CHECK. 
* 
*         ENTRY  (UI - UI+1) = USER INDEX.
*                (JORG) = JOB ORIGIN. 
* 
*         EXIT   (FRSM) = MASK FOR FILE RESIDENCE CHECK.
  
  
 FMS      SUBR               ENTRY/EXIT 
          LDD    UI+1        FORM MASK FOR ACCESS CHECK 
          LPN    7
          LMC    SHNI 
          STM    FMSA 
          LDN    1           POSITION MASK
 FMSA     PSN    0
*         SHN    N           N = SHIFT COUNT TO POSITION MASK 
          STM    FRSM        SAVE MASK
          LDD    UI          CHECK FOR SPECIAL USER INDEX 
          SHN    14 
          LMD    UI+1 
          ADC    -AUIMX 
          MJN    FMS1        IF NOT SPECIAL USER INDEX
          LDC    4000        SET SPECIAL USER INDEX 
          RAM    FRSM 
 FMS1     LDM    JORG        CHECK JOB ORIGIN 
          LMK    SYOT 
          NJN    FMS2        IF NOT SYSTEM ORIGIN 
          LDM    SSJS 
          ZJN    FMS2        IF NOT SSJ= PROCESS
          LDC    2000        SET *LIFT* FILE ALLOWED FOR DEFINE 
          RAM    FRSM 
 FMS2     LJM    FMSX        RETURN 
 GCA      SPACE  4,20 
**        GCA - GET CATALOG ADDRESS.
* 
*         ENTRY  (A) = ADDRESS OF PERMANENT FILE DEVICE DESCRIPTION.
*                (UI - UI+1) = USER INDEX.
*                (FERT) = REAL-TIME PROCESSING FLAG.
*                (SSYS) = SUBSYSTEM FLAG. 
* 
*         EXIT   (A) = ADDRESS OF MST/10B IF DEVICE FOUND.
*                (A) .LT. 0 IF CATALOG NOT AVAILABLE. 
*                (T5) = EST ORDINAL.
*                (T6) = CATALOG TRACK.
* 
*                TO *ERR* IF CATALOG NOT AVAILABLE AT THIS TIME 
*                AND CALLER HAS REAL-TIME PROCESSING SET IN FET 
*                OR IS NOT A SUBSYSTEM. 
* 
*         CALLS  SCA. 
* 
*         MACROS ERROR. 
  
  
 GCA2     LCN    0           RETURN WITH (A) .LT. 0 
  
 GCA      SUBR               ENTRY/EXIT 
          RJM    SCA         SET CATALOG ADDRESS
          PJN    GCAX        IF DEVICE AVAILABLE
          ADN    1
          NJN    GCA2        IF DEVICE NOT FOUND
          LDM    FERT 
          NJN    GCA1        IF REAL-TIME PROCESSING SELECTED 
          LDM    SSYS 
          NJN    GCA2        IF SUBSYSTEM 
 GCA1     ERROR  WID,CH,IW,T5,EC6  * WAITING - INACCESSIBLE DEVICE.*
 POA      SPACE  4,25 
**        POA - PROCESS OPTIONAL USER NAME. 
* 
*         ENTRY  (CC) = COMMAND CODE
*                (UI - UI+1) = CALLING USER INDEX.
*                (FERT) = REAL-TIME PROCESSING FLAG.
*                (RDCT) = DRIVER STATUS.
*                (SSYS) = SUBSYSTEM FLAG. 
* 
*         EXIT   (A) .LT. 0 IF INCORRECT REQUEST. 
*                (UI - UI+1) = USER INDEX OF CATALOG TO BE ACCESSED.
*                (PI - PI+1) = USER INDEX OF OPTIONAL USER. 
*                (PFUC) = USER CONTROLS.
* 
*         ERROR  (STAU) = *STDP* BIT SET TO DROP PP.
*                TO *3PU* IF USER NAME NOT VALID ON *CATLIST* REQUEST 
*                AND NO FILE NAME WAS SPECIFIED.
* 
*                TO *ERR* IF UNRECOVERABLE ERROR ON VALIDUS FILE
*                OR DEVICE INACCESSIBLE.
* 
*         USES   FN+3, FN+4, T4, T6, T7, CM - CM+4, CN - CN+4.
* 
*         CALLS  CPN, SFA, SFN, SLT, SPN, *0AV*.
* 
*         MACROS ERROR, EXECUTE, NFA, SFA.
  
  
 POA14    LCN    1           SET INCORRECT REQUEST
  
 POA      SUBR               ENTRY/EXIT 
          LDN    0
          STD    PI          CLEAR OPTIONAL USER INDEX
          STD    PI+1 
          LDD    CC 
          LMN    CCPM 
          ZJN    POAX        IF *PERMIT* REQUEST
          LDM    PFOU        OPTIONAL USER
 POA0     ZJN    POAX        IF NO OPTIONAL USER NAME 
          LMM    PFAC        JOB USER NAME
          NJN    POA2        IF USER NAMES DO NOT MATCH 
          LDM    PFOU+1 
          LMM    PFAC+1 
          NJN    POA2        IF USER NAMES DO NOT MATCH 
          LDM    PFOU+2 
          LMM    PFAC+2 
          NJN    POA2        IF USER NAMES DO NOT MATCH 
          LDM    PFOU+3 
          LMM    PFAC+3 
          SHN    -6 
          NJN    POA2        IF USER NAMES DO NOT MATCH 
          STM    PFOU        CLEAR OPTIONAL USER NAME 
 POA1     UJN    POA0        RETURN 
  
 POA2     LDM    PFRB        CHECK FOR SPECIAL REQUEST BLOCK
          LPN    37 
          ADM    PFRB+1 
          ZJN    POA3        IF NO SPECIAL REQUEST BLOCK
 POA2.1   LDN    0           IGNORE OPTIONAL USER NAME
          UJN    POA1        RETURN 
  
 POA3     LDM    TCTL,CC     CHECK ALTERNATE CATALOG ACCESS LEGAL 
          SHN    21-0 
          PJN    POA3.1      IF ALTERNATE CATALOG ACCESS VALID
          SHN    21-12-21+0+22
          MJN    POA2.1      IF SRB-TYPE FUNCTION WITH NO SRB 
          AOM    POAC        INDICATE NONVALID ALTERNATE CATALOG ACCESS 
 POA3.1   LDM    SSJS 
          ZJN    POA4        IF NOT *SSJ=*
          LDM    JORG        CHECK JOB ORIGIN 
          LMK    SYOT 
          ZJN    POA6        IF SYSTEM ORIGIN 
 POA4     LDN    0
*         LDN    1           (ALTERNATE CATALOG ACCESS NOT VALID) 
 POAC     EQU    *-1
          NJN    POA4.1      IF ALTERNATE CATALOG ACCESS NOT ALLOWED
          LDD    CC 
          LMN    CCCT 
          NJN    POA6        IF NOT *CATLIST* REQUEST 
          LDM    PFFN+4 
          ZJN    POA6        IF NOT PERMIT LIST 
          LDM    PFFN 
          NJN    POA5        IF FILE NAME SPECIFIED 
 POA4.1   LJM    POA14       RETURN INCORRECT REQUEST STATUS
  
 POA5     LDN    2           SET TO BYPASS PRESET OF USER INDEX 
          RAM    TCTL,CC
  
*         CHECK USER NAME CACHE IN NFL/CPA. 
  
 POA6     LDC    PFOU        SET USER NAME
          RJM    SFN
          LDD    CP          CHECK USER NAME CACHE IN CPA 
          ADK    PFCW 
          CRD    CN 
          NFA    PUCN 
          CRD    CM 
          LDN    FN 
          RJM    CPN         COMPARE USER NAMES 
          NJN    POA6.0      IF NO MATCH
          LDD    CM+4        SET USER INDEX 
          STD    T2 
          LDD    CM+3 
          LPN    37 
          STD    T1 
          LDD    CN+2        SET VALIDATIONS
          STM    PFUC 
          LJM    POA7        CONTINUE 
  
*         CHECK COMMON LIBRARY TABLE IN CMR.
  
 POA6.0   SFA    EST,PFPN+4  SET FAMILY NAME
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4        READ FAMILY NAME 
          SHN    3
          ADN    PFGL 
          CRD    CN 
          RJM    SLT         CHECK COMMON LIBRARY TABLE 
          STM    POAA        SAVE SEARCH RESULT 
          ZJP    POA7        IF VALIDATION NOT REQUIRED 
  
*         CALL *0AV* TO VALIDATE USER.
  
          LDN    0           SET VALIDATION FUNCTION
          STD    FN+4 
          EXECUTE 0AV,LOCF   VALIDATE USER NAME 
          PJN    POA6.3      IF NO ERROR
          LDM    RDCT        DRIVER STATUS
          SHN    21-12
          MJN    POA6.2      IF UNRECOVERABLE ERROR 
          LDM    SSYS 
          ZJN    POA6.1      IF NOT A SUBSYSTEM 
          LDM    FERT 
          ZJN    POA6.2      IF REAL-TIME PROCESSING NOT SELECTED 
 POA6.1   ERROR  WID,CH,IW,T5,EC6  * WAITING - INACCESSIBLE DEVICE.*
  
 POA6.2   ERROR  MSE,CH,IW,T5  *EQXXX,DNYY, MASS STORAGE ERROR.*
  
*         CHECK FOR VALID USER NAME.
  
 POA6.3   LDM    AHFC*5,T3   SAVE USER LIMIT INDICES
          STM    PFUC 
 POA7     LDD    T1 
          STD    PI 
          RAD    FN+3 
          LPN    77          SAVE ONLY USER INDEX PORTION OF BYTE 
          SHN    14 
          ADD    T2 
          STD    PI+1 
          STD    FN+4 
          ZJN    POA8        IF USER NAME NOT VALID 
          LMC    IFUI 
          ZJN    POA8        IF INDIRECT FLAW USER INDEX SPECIFIED
          LJM    POA10       PROCESS VALID USER NAME
  
*         PROCESS NON-VALID USER NAME.
  
 POA8     LDD    CC          CHECK COMMAND CODE 
          LMN    CCCT 
          NJN    POA9        IF NOT *CATLIST* REQUEST 
          LDM    PFFN+4 
          NJN    POA10       IF PERMIT CATLIST
          LDM    PFFN 
          NJN    POA9        IF FILE NAME SPECIFIED 
          RJM    SFA         SET EOI STATUS TO INDICATE EMPTY CATALOG 
          CRD    CM 
          LDD    CM+3 
          SCN    77 
          STD    CM+3 
          LDD    CM+4 
          LPN    2
          ADC    1031 
          STD    CM+4 
          RJM    SFA
          CWD    CM 
          LDK    STDP        SET *DROP PP* STATUS BIT 
          RAM    STAU 
          EXECUTE  3PU       DROP PP
  
 POA9     RJM    SPN         SET PERMANENT FILE NAME
          ERROR  FNF,CH,IW   *(FILENAME) NOT FOUND.*
  
*         PROCESS VALID USER NAME.
  
 POA10    LDM    TCTL,CC
          LPN    2
          NJN    POA11       IF NOT ALTERNATE USER ACCESS 
          LDD    PI          SET CATALOG TO BE ACCESSED 
          STD    UI 
          LDD    PI+1 
          STD    UI+1 
 POA11    LDC    7776 
*         LDC    7776        (NORMAL USER NAME - NOT IN CLT)
*         LDC    0           (USER NAME AND VALIDATION INFO IN CLT) 
*         LDC    1           (USER NAME BUT NOT VALIDATION INFO IN CLT) 
 POAA     EQU    *-1
          ZJN    POA12       IF ALL INFORMATION IN CLT
          SBN    1
          ZJN    POA13       IF VALIDATION INFORMATION NEEDED IN CLT
  
*         UPDATE USER NAME CACHE IN NFL/CPA.
  
          LDD    CP 
          ADK    PFCW 
          CRD    CN 
          LDM    PFUC        UPDATE USER VALIDATION INFORMATION 
          STM    CN+2 
          LDD    CP 
          ADK    PFCW 
          CWD    CN 
          NFA    PUCN        SAVE USER NAME AND USER INDEX
          CWD    FN 
          LDN    0           SET RETURN STATUS
 POA12    LJM    POAX        RETURN 
  
*         UPDATE COMMON LIBRARY TABLE ENTRY.
  
 POA13    LDD    CN+3        CLEAR DEVICE NUMBER FROM FAMILY NAME 
          SCN    77 
          STD    CN+3 
          LDD    T5          SAVE NEW EST ORDINAL 
          STD    CN+4        MERGE EST ORDINAL WITH FAMILY NAME 
          STM    PFPN+4      CHANGE EST ORDINAL 
          LDC    0           GET ENTRY ORDINAL
 POAB     EQU    *-1
          STD    T4 
          SFA    CLT
          ADK    CLTU 
          CWD    FN          WRITE USER INDEX IN TABLE
          ADN    CLTF-CLTU
          CWD    CN          WRITE FAMILY NAME AND EST ORDINAL IN TABLE 
          ADN    CLTV-CLTF   SET PERMANENT FILE VALIDATION INFORMATION
          CRD    CM 
          LDM    PFUC 
          STD    CM+4 
          SFA    CLT,T4 
          ADN    CLTV 
          CWD    CM 
          LJM    POAX        RETURN 
 RCL      SPACE  4,15 
**        RCL - RECALL PFM. 
* 
*         ENTRY  (A) = ERROR CODE.
*                (PWRF) = RESTART FLAGS.
* 
*         EXIT   (CN - CN+4) = INPUT REGISTER FOR *PFM* RECALL. 
*                (FN - FN+4) = RECALL REQUEST FOR MONITOR.
*                (MP - MP+4) = PARAMETER WORD FOR *PFM* RECALL. 
*                (AIPF, AIPF+1) = 0.
*                (STAU) = *STRP* BIT SET TO RECALL *PFM*. 
*                TO *3PU* TO RECALL *PFM*.
* 
*         USES   P1, CN - CN+4, FN - FN+4, MP - MP+4. 
* 
*         MACROS EXECUTE. 
  
  
 RCL      BSS    0           ENTRY
          STD    P1          SAVE ERROR CODE
          LDN    0           CLEAR PF ACCUMULATOR INCREMENT 
          STM    AIPF 
          STM    AIPF+1 
          LDN    ZERL 
          CRD    FN          SET RECALL REQUEST 
          CRD    MP 
          LDM    PWRF        SET RESTART FLAGS FOR RECALL 
          STD    MP 
          LDD    P1          SET ERROR CODE 
          STD    MP+1 
          LDD    IA          READ INPUT REQUEST REGISTER
          CRD    CN 
          LDC    PTMF        SET TIMED RECALL 
          STD    FN+1 
          LDC    250D        SET DELAY TO 250D MILLISECONDS 
          STD    FN+4 
          LDK    STRP        SET *RECALL PFM* STATUS BIT
          RAM    STAU 
          EXECUTE  3PU       RECALL *PFM* 
 RSX      SPACE  4,10 
**        RSX - REQUEST RESOURCE VALIDATION.
* 
*         CALL *RESEX* AS A *DMP=* PROGRAM. 
* 
*         EXIT   TO *RCL*.
* 
*         USES   CM - CM+4, FN - FN+4.
* 
*         MACROS ERROR, MONITOR.
  
  
 RSX      BSS    0           ENTRY
          LDD    CP          CHECK FOR *DMP=* IN PROGRESS 
          ADC    SPCW 
          CRD    CM 
          LDD    CM+1 
          SHN    -6 
          ADD    CM 
          ZJN    RSX1        IF NOT *DMP=* IN PROGRESS
          ERROR  ILR,CH,IW   * PFM INCORRECT REQUEST.*
  
 RSX1     LDD    MA          SET INPUT REGISTER 
          CWD    IR 
          CRD    FN 
          LDD    FN+1 
          SCN    77 
          LMN    20          SET STATUS TO LEAVE RA+1 SET WITH PFM CALL 
          STD    FN+1 
          LDN    0           CLEAR RETURN STATUS
          STD    FN+2 
          LDD    CP          WRITE CP REQUEST 
          ADC    SPCW 
          CWD    FN 
          LDN    ROSR        REQUEST SCHEDULER ROLLOUT
          STD    CM+1 
          MONITOR ROCM
*         LDN    0           (NO ERROR CODE)
          LJM    RCL         RECALL PFM 
 SAM      SPACE  4,15 
**        SAM - SET UP ACCOUNTING MESSAGE.
* 
*         ENTRY  (A) = ADDRESS OF USER NAME.
*                (PFPN) = OPTIONAL PACK NAME. 
*                (CC) = COMMAND CODE. 
* 
*         EXIT   (PRSF) - (PRSH+PRSHL-1) = MESSAGE AREA SET UP. 
* 
*         CALLS  ACS, SFN, SPN. 
* 
*         USES   P0, T1, FN - FN+4. 
  
  
 SAM      SUBR               ENTRY/EXIT 
          STD    P0          SAVE ADDRESS OF USER NAME
          LDM    PRSH,CC     SET PFM FUNCTION IN MESSAGE BUFFER 
          STM    PRSF+1 
          RJM    SPN         SET PERMANENT FILE NAME
          LDC    PRSH        INITIALIZE MESSAGE POINTER FOR ACS CALLS 
          STD    T1 
          LDN    FN          INSERT FILE NAME IN MESSAGE BUFFER 
          RJM    ACS
          LDC    PRSB        APPEND COMMA SEPARATOR 
          RJM    ACS
          LDI    P0          CHECK USER NAME
          ZJN    SAM1        IF NULL USER NAME
          LDD    P0          CLEAR LOWER 3 CHARACTERS OF USER NAME
          RJM    SFN
          LDN    FN          APPEND USER NAME IN MESSAGE BUFFER 
          RJM    ACS
 SAM1     LDC    PRSB        APPEND COMMA SEPARATOR 
          RJM    ACS
          LDM    PFPN        CHECK FOR OPTIONAL PACK NAME 
          ZJN    SAM2        IF NO PACK NAME
          LDC    PFPN        CLEAR LOWER 3 CHARACTERS OF PACK NAME
          RJM    SFN
          LDN    FN          APPEND OPTIONAL PACK NAME
          RJM    ACS
 SAM2     LDC    PRSC        APPEND MESSAGE TERMINATOR
          RJM    ACS
          LJM    SAMX        RETURN 
 SRF      SPACE  4,15 
**        SRF - SET UP RESERVE FNT. 
* 
*         RESERVE AN FNT ENTRY IF STATUS *H* IS SET IN *TCTL*.
* 
*         ENTRY  (CC) = COMMAND CODE. 
* 
*         EXIT   (FNTA) = ADDRESS OF RESERVE FNT ENTRY. 
*                (PRSF) = EXIT PROCESSING STATUS. 
* 
*         CALLS  SFN, *0BF*.
* 
*         USES   T4, CM - CM+4, FS - FS+4.
* 
*         MACROS EXECUTE, EXIT. 
  
  
 SRF      SUBR               ENTRY/EXIT 
          LDM    TCTL,CC     CHECK FOR FNT NEEDED 
          SHN    21-7 
 SRF1     PJN    SRFX        IF FNT NOT NEEDED
          LDC    SRFB        SET RESERVED FNT NAME
          RJM    SFN
          LDN    NEEQ        ASSIGN NULL EQUIPMENT
          STD    FS 
          LDN    5           RETURN ON NFL INCREASE, LOCAL FILE LIMIT 
          STM    LOCF-1 
          EXECUTE  0BF,LOCF  CREATE PFM*** FILE 
          NJN    SRF2        IF FILE NOT CREATED
  
*         USE EXISTING FNT ENTRY (ADVANCE EXIT FROM *0BF*). 
  
          LDD    FA          SAVE RESERVE FNT POINTER 
          STM    FNTA 
          LDD    FN+4        SAVE FILE STATUS 
          LPN    77 
          RAM    SFNB 
          LDN    0           CLEAR FST POINTER
          STD    FA 
          LDD    FS          CHECK FOR RESERVED SPACE 
          NJN    SRF1        IF SPACE RESERVED
          EXIT   PFN,CH,IW,,EC4  * DEVICE UNAVAILABLE.* 
  
 SRF2     MJN    SRF5        IF REJECT ON NFL INCREASE
          LMN    4
          NJN    SRF6        IF NOT LOCAL FILE LIMIT
          ERROR  LFL,CH,IW   * LOCAL FILE LIMIT.* 
  
 SRF5     LDN    0           SET SCHEDULER ROLLOUT
          STM    ERRC 
          STM    ERRD 
          EXIT   WNF,CH,IW,,EC1  * WAITING FOR NFL.*
  
 SRF6     EXIT   WNF,CH,IW,,EC4  * WAITING FOR NFL.*
  
  
 SRFB     VFD    60/6LPFM***
 SUC      SPACE  4,30 
**        SUC - SET USER CONTROLS.
*         IF INDIVIDUAL CONTROL NOT SET USE 
*         SERVICE CLASS SPECIFIED LIMITS. 
* 
*         ENTRY  (PFUC) = USER CONTROL. 
*T PFUC   3/ DS, 3/ FC, 3/ CS, 3/ FS
*                DS = INDEX FOR DIRECT ACCESS FILE SIZE.
*                FC = INDEX FOR NUMBER OF FILES IN CATALOG. 
*                CS = INDEX FOR CUMULATIVE SIZE OF INDIRECT FILES.
*                FS = INDEX FOR INDIRECT FILE SIZE. 
*                (JORG) = JOB ORIGIN. 
* 
* 
*         EXIT   (MXFS) = MAXIMUM INDIRECT FILE SIZE/10B. 
*                (IMSK) SET TO DEVICE ACCESS MASK FOR *DEFINE*. 
*                (MXNF) = MAXIMUM NUMBER OF FILES/100B. 
*                (MXCS - MXCS+1) = MAXIMUM CUMULATIVE SIZE FOR IAPF-S.
*                (MXDS - MXDS+1) = MAXIMUM SIZE OF DIRECT ACCESS FILE.
* 
*         CALLS  FMS, RJC.
* 
*         USES   FS - FS+4, T1. 
  
  
 SUC      SUBR               ENTRY/EXIT 
  
*         SET PERMANENT FILE CONTROLS.
  
 SUCA     LDN    0           (SERVICE CLASS SET IN *PRS*) 
          LMN    DSSC 
          NJN    SUC1        IF NOT DEADSTART SEQUENCING
          LDN    SSSC&DSSC   USE SUBSYSTEM SERVICE CLASS
 SUC1     LMN    DSSC        READ JOB CONTROL PARAMETERS
          RJM    RJC
          ZJN    SUCX        IF SERVICE CLASS UNDEFINED 
          ADN    PFCT 
          CRD    FS 
  
*         SET LIMIT FOR INDIVIDUAL FILE SIZE. 
  
          LDD    FS          SET SERVICE CLASS CONTROL AS DEFAULT 
          LPN    7
          STD    T1 
          LDM    PFUC        CHECK INDIVIDUAL *FS* VALUE
          LPN    7
          ZJN    SUC2        IF NOT INDIVIDUAL CONTROL SET
          STD    T1 
 SUC2     LDM    TMFS,T1     SET CONTROL VALUE
          STM    MXFS 
  
*         SET LIMIT FOR NUMBER OF FILES.
  
          LDD    FS          SET SERVICE CLASS CONTROL AS DEFAULT 
          SHN    -6 
          LPN    7
          STD    T1 
          LDM    PFUC        CHECK INDIVIDUAL *FC* VALUE
          SHN    -6 
          LPN    7
          ZJN    SUC3        IF NO INDIVIDUAL CONTROL SET 
          STD    T1 
 SUC3     LDM    TMNF,T1     SET CONTROL VALUE
          STM    MXNF 
  
*         SET LIMIT FOR CUMULATIVE SIZE OF INDIRECT ACCESS FILES. 
  
          LDD    FS          SET SERVICE CLASS CONTROL AS DEFAULT 
          SHN    -3 
          LPN    7
          SHN    1
          STD    T1 
          LDM    PFUC        CHECK INDIVIDUAL *CS* VALUE
          SHN    -3 
          LPN    7
          ZJN    SUC4        IF NO INDIVIDUAL CONTROL SET 
          SHN    1
          STD    T1 
 SUC4     LDM    TMCS,T1     SET CONTROL VALUE
          STM    MXCS 
          LDM    TMCS+1,T1
          STM    MXCS+1 
  
*         SET DIRECT ACCESS FILE SIZE CONTROLS. 
  
          LDM    TCTL,CC
          SHN    21-5 
          PJN    SUC6        IF NOT DIRECT ACCESS REQUEST 
          RJM    FMS         FORM MASK FOR FILE RESIDENCE CHECK 
          LDD    FS          SET SERVICE CLASS CONTROL AS DEFAULT 
          SHN    -11
          LPN    7
          SHN    1
          STD    T1 
          LDM    PFUC        CHECK INDIVIDUAL *DS* VALUE
          SHN    -11
          LPN    7
          ZJN    SUC5        IF NO INDIVIDUAL CONTROL SET 
          SHN    1
          STD    T1 
 SUC5     LDM    TMDS,T1     SET INDIVIDUAL CONTROL 
          STM    MXDS 
          LDM    TMDS+1,T1
          STM    MXDS+1 
 SUC6     LJM    SUCX        EXIT 
 SWI      SPACE  4,15 
**        SWI - SWAP USER INDICES.
* 
*         ENTRY  (UI - UI+1) = USER INDEX.
*                (PI - PI+1) = PERMIT INDEX.
* 
*         EXIT   (UI - UI+1) = PERMIT INDEX.
*                (PI - PI+1) = USER INDEX.
  
  
 SWI      SUBR               ENTRY/EXIT 
          LDD    UI          SWAP USER AND PERMIT INDICES 
          STD    T1 
          LDD    PI 
          STD    UI 
          LDD    T1 
          STD    PI 
          LDD    UI+1 
          STD    T1 
          LDD    PI+1 
          STD    UI+1 
          LDD    T1 
          STD    PI+1 
          UJN    SWIX        RETURN 
 TMFS     SPACE  4,15 
**        TABLE OF INDIVIDUAL FILE SIZE LIMITS. 
  
  
 TMFS     BSS    0
          LOC    0
          CON    0
          CON    FSRNG1 
          CON    FSRNG2 
          CON    FSRNG3 
          CON    FSRNG4 
          CON    FSRNG5 
          CON    FSRNG6 
          CON    FSRNG7 
          LOC    *O 
 TMNF     SPACE  4,15 
**        TABLE OF NUMBER OF FILE LIMITS. 
  
  
 TMNF     BSS    0
          LOC    0
          CON    0
          CON    NFRNG1 
          CON    NFRNG2 
          CON    NFRNG3 
          CON    NFRNG4 
          CON    NFRNG5 
          CON    NFRNG6 
          CON    NFRNG7 
          LOC    *O 
 TMCS     SPACE  4,15 
**        TABLE OF CUMULATIVE FILE SIZE LIMITS. 
  
  
 TMCS     BSS    0
          LOC    0
          CON    0,0
          CSR    CSRNG1 
          CSR    CSRNG2 
          CSR    CSRNG3 
          CSR    CSRNG4 
          CSR    CSRNG5 
          CSR    CSRNG6 
          CSR    CSRNG7 
          LOC    *O 
 TMDS     SPACE  4,15 
**        TABLE OF DIRECT ACCESS FILE SIZE LIMITS.
  
  
 TMDS     BSS    0
          LOC    0
          CON    0,0
          CSR    DSRNG1 
          CSR    DSRNG2 
          CSR    DSRNG3 
          CSR    DSRNG4 
          CSR    DSRNG5 
          CSR    DSRNG6 
          CSR    DSRNG7 
          LOC    *O 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPACS 
 DTS$     EQU    0           CHECK FOR INACCESSIBLE DEVICE
*CALL     COMPDTS 
 CLT$     EQU    0           DEFINE *COMPGFP* ACCESS TO CLT 
 EJT$     EQU    0           DEFINE *COMPGFP* ACCESS TO EJT 
*CALL     COMPGFP 
*CALL     COMPRJC 
*CALL     COMPSAF 
*CALL     COMPSCA 
          SPACE  4,10 
 LOCF     EQU    *+5         OVERLAY ADDRESS FOR ZERO-LEVEL OVERLAYS
  
          ERRNG  EPFW-LOCF-ZAVL  CHECK LENGTH OF *0AV*
          ERRNG  EPFW-LOCF-ZBFL  CHECK LENGTH OF *0BF*
          ERRNG  BFMS-LOCF-ZRFL  CHECK LENGTH OF *0RF*
  
  
*         THE FOLLOWING CODE MAY BE OVERLAID BY ZERO-LEVEL OVERLAYS.
          TITLE  OVERLAYABLE PRESET SUBROUTINES.
 CPN      SPACE  4,10 
**        CPN - COMPARE NAMES.
* 
*         ENTRY  (CM - CM+3) = NAME FROM COMMON LIBRARIES TABLE.
*                (A) = ADDRESS OF SECOND NAME.
* 
*         EXIT   (A) = 0 IF MATCH.
* 
*         USES   T7.
  
  
 CPN      SUBR               ENTRY/EXIT 
          STD    T7          SAVE ADDRESS 
          LDI    T7 
          LMD    CM 
          NJN    CPNX        IF NO MATCH
          LDM    1,T7 
          LMD    CM+1 
          NJN    CPNX        IF NO MATCH
          LDM    2,T7 
          LMD    CM+2 
          NJN    CPNX        IF NO MATCH
          LDM    3,T7 
          LMD    CM+3 
          SCN    77 
          UJN    CPNX        RETURN 
 PER      SPACE  4,15 
**        PER - PROCESS ERROR REPLY FROM *CPUPFM*.
* 
*         ENTRY  (A) = ERROR REPLY FROM *CPUPFM*. 
*                (CM - CM+4) = CP WORD *SPCW*.
*                (PWRF) = *PFM* RESTART FLAGS.
* 
*         EXIT   (A) = PARAMETER WORD FOR *ERROR* MACRO.
*                (P1) = ERROR CODE. 
*                (PWRF) = *RFRR* BIT SET IF REQUEST TO BE RETRIED.
*                TO *3PS* TO REDO *DMP=* CALL IF *CPUPFM* DID NOT 
*                COMPLETE.
* 
*         USES   T0.
* 
*         MACROS EXECUTE. 
  
  
 PER      SUBR               ENTRY/EXIT 
          STD    T0 
          SHN    21-11
          PJN    PER3        IF *CPUPFM* DID NOT COMPLETE 
          LDD    T0 
          LPC    177
          STD    P1          ERROR CODE 
          ZJN    PERX        IF NO ERROR
          LMK    /ERRMSG/RTR
          NJN    PER2        IF NOT *RETRY REQUEST* 
          LDM    PWRF        RESTART FLAGS
          LPK    RFRR 
          NJN    PER1        IF REQUEST ALREADY RETRIED 
          LDK    RFRR        SET *RETRY REQUEST* FLAG 
          RAM    PWRF 
          UJN    PER2        FORM PARAMETER WORD FOR *ERROR* MACRO
  
 PER1     LDK    /ERRMSG/MSE SET ERROR CODE TO *MASS STORAGE ERROR* 
          STD    P1 
 PER2     LDD    T0          FORM PARAMETER WORD FOR *ERROR* MACRO
          SHN    1-10 
          LPN    2           ERROR IDLE FLAG
          STD    T0 
          LDD    P1 
          SHN    2           ERROR CODE 
          ADD    T0 
          UJN    PERX        RETURN 
  
*         REDO *DMP=* CALL. 
  
 PER3     LDD    CM 
          EXECUTE  3PS       REDO *DMP=* CALL 
 PFP      SPACE  4,20 
**        PFP - PROCESS FET PARAMETERS. 
* 
*         ENTRY  (IR+3 - IR+4) = FET ADDRESS. 
* 
*         EXIT   (CN - CN+4) = USER NAME/USER INDEX.
*                (FN - FN+4) = ACCESS WORD (*AACW*).
*                (FERT) = REAL-TIME PROCESSING FLAG.
*                (PFUC) = USER CONTROLS.
*                (FETL) = LENGTH OF PF PARAMETERS IN FET. 
*                (PRSA - PRSA+1) = AUXILIARY DEVICE TYPE REQUESTED. 
*                (RQDT - RQDT+1) = REQUESTED DEVICE TYPE. 
*                PARAMETERS FROM FET SET IN PFM PARAMETER BLOCK AREA. 
* 
*         USES   T1, CM - CM+4, CN - CN+4, FN - FN+4. 
* 
*         CALLS  CRS, PSR, PXT, SAP, SFA, VRP.
* 
*         MACROS ERROR. 
  
  
 PFP      SUBR               ENTRY/EXIT 
          RJM    SFA         READ FET+1 
          ADN    1
          CRD    CM 
          LDD    CM          SET DEVICE TYPE FOR AUX PACK PROCESSING
          STM    PFPB 
          LDD    CM+1        SAVE RT STATUS 
          SHN    0-7
          LPN    1
          STM    FERT 
          LDD    CM+1        SAVE SECURITY PROCESSING BIT 
          LPN    10 
          STM    PFSP 
          LDD    CM+3 
          SHN    -6 
          ADN    5           COMPUTE FULL LENGTH
          STD    T1 
  
*         CHECK RECALL STATUS.
  
          LDM    TCTL,CC
          SHN    21-13
          MJN    PFP1.1      IF REQUEST MAY BE MADE WITHOUT AUTO-RECALL 
          RJM    CRS         CHECK RECALL STATUS
          NJN    PFP2        IF CALLED WITH AUTO RECALL 
 PFP1     ERROR  PAE,CH,IW   * PFM ARGUMENT ERROR.* 
  
 PFP1.1   LDD    CM+1        CHECK ERROR PROCESSING OPTIONS 
          SHN    0-10 
          LPN    3
          LMN    3
          NJN    PFP1        IF EITHER *EP* OR *UP* NOT SPECIFIED 
  
*         SET FET PARAMETERS. 
  
 PFP2     LDD    CC 
          LMN    CCCT 
          NJN    PFP2.1      IF NOT *CATLIST* COMMAND 
          LDD    T1 
          SBN    CFCN+1 
          MJN    PFP1        IF FET NOT LONG ENOUGH 
 PFP2.1   LDD    T1          DETERMINE IF FET WILL FIT IN BUFFER AREA 
          SBM    FETL 
          PJN    PFP3        IF FET LONGER THAN PF PARAMETERS 
          RAM    FETL        SET FET LENGTH 
  
 PFP3     LDM    FETL        READ FET PARAMETERS
          SBN    CFPN 
          STD    T1 
          MJN    PFP4        IF NONE TO READ
          ZJN    PFP4        IF NONE TO READ
          RJM    SFA
          ADN    CFPN 
          CRM    PFFN,T1
          LDM    EMRA        CHECK ERROR MESSAGE RETURN ADDRESS 
          LPN    37 
          SHN    14 
          ADM    EMRA+1 
          ADN    3           CHECK ADDRESS
          SHN    -6 
          SBD    FL 
          MJN    PFP4        IF ADDRESS IN RANGE
          LDN    0           CLEAR ERROR MESSAGE RETURN ADDRESS 
          STM    EMRA 
          STM    EMRA+1 
          LJM    PFP1        ISSUE ERROR MESSAGE
  
 PFP4     RJM    SAP         SAVE ACCESS PARAMETERS 
          RJM    PXT         PROCESS EXPIRATION TERM
          LDD    CP          READ USER CONTROL FROM CONTROL POINT 
          ADN    PFCW 
          CRD    FS 
          ADN    UIDW-PFCW   READ USER INDEX
          CRD    CN 
          CRM    PFAC,ON     READ USER NAME 
          ADN    AACW-UIDW-1
          CRD    FN          READ USER VALIDATIONS
          LDM    SSJS 
          ZJN    PFP4.1      IF NOT *SSJ=*
          LDD    CN+3        CHECK USER INDEX 
          LPN    37 
          SHN    14 
          LMD    CN+4 
          LMC    SYUI 
          NJN    PFP4.1      IF NOT *SYSTEMX* 
          LCN    0           SET UNLIMITED VALIDATIONS
          STD    FS+4 
 PFP4.1   LDD    FS+4        SAVE PF USER CONTROL VALIDATIONS 
          STM    PFUC 
          RJM    PSR         PROCESS SPECIAL REQUEST BLOCK
          NJN    PFP5        IF NOT SPECIAL REQUEST 
          LJM    PFPX        RETURN 
  
*         DETERMINE AUXILIARY PACKNAME AND DEVICE TYPE. 
  
 PFP5     RJM    VRP         VERIFY PARAMETERS
          LDK    PFNL        PRESET SYSTEM DEFAULT PACK TYPE
          CRD    CM 
          LDD    CM+1 
          SCN    77 
          SHN    6
          LMD    CM 
          SHN    6
          STM    RQDT+1 
          SHN    -14
          STM    RQDT 
          LDM    PFPN+4      SAVE UNIT COUNT
          STM    PFPA 
          LDD    IA          READ INPUT REGISTER
          CRD    CM 
          LDD    CM+2 
          SCN    77 
          NJN    PFP6        IF *IP* OR *DF* SPECIFIED
          LDM    PFPN 
          ZJN    PFP8        IF PACKNAME NOT SPECIFIED IN FET 
          LMC    1R0*100
          NJP    PFP9        IF NOT *PN.EQ.0* 
  
*         CLEAR PACKNAME. 
  
 PFP6     LDN    0           CLEAR PACKNAME 
          STM    PFPN 
          LDD    CM+2 
          SHN    21-11
          PJN    PFP7        IF NOT *DF* (FORCE SYSTEM DEFAULT FAMILY)
          LDM    SSJS 
          ZJP    PFP1        IF NOT *SSJ=* PROGRAM
          LDC    PFNL 
          CRD    FS 
 PFP7     UJN    PFP9.1      SET FAMILY EQUIPMENT 
  
*         NO PACKNAME IN FET - SET PACKNAME AND DEVICE TYPE FROM CPA. 
  
 PFP8     LDD    CP          SET PACKNAME AND DEVICE TYPE FROM CPA
          ADC    PKNW 
          CRM    PFPN,ON
          LDM    PFPN+4 
          ZJN    PFP9        IF DEVICE TYPE NOT SPECIFIED IN CPA
          STM    RQDT+1      SET DEVICE TYPE
          LDM    PFPN+3 
          LPN    37 
          UJN    PFP10.1     SET USER REQUESTED AND FAMILY EQUIPMENT
  
*         SET DEVICE TYPE FROM FET. 
  
 PFP9     LDN    CFPK        CHECK FET LENGTH 
          SBM    FETL 
 PFP9.1   PJN    PFP11       IF FET TOO SHORT FOR UNIT COUNT
          LDC    *
 PFPA     EQU    *-1         (UNIT COUNT SPECIFIED IN FET)
          NJN    PFP10       IF UNIT COUNT SPECIFIED
          LDN    1           SET DEFAULT COUNT
 PFP10    ADN    1R0         CONVERT TO DISPLAY CODE
          STD    T1 
          LDC    *
 PFPB     EQU    *-1         (DEVICE TYPE SPECIFIED IN FET) 
          ZJN    PFP11       IF NO DEVICE TYPE SPECIFIED
          LPC    3777        SET REQUESTED DEVICE TYPE
          SHN    6
          LMD    T1 
          STM    RQDT+1 
          SHN    -14
 PFP10.1  LMD    HN          SET *USER REQUESTED DEVICE* FLAG 
          STM    RQDT 
  
*         SET FAMILY EQUIPMENT. 
  
 PFP11    LDD    FS+3 
          STM    PFPN+4 
          LJM    PFPX        RETURN 
 PSR      SPACE  4,15 
**        PSR - PROCESS SPECIAL REQUEST BLOCK.
* 
*         ENTRY  (CC) = COMMAND CODE. 
*                (FS - FS+4) = (PFCW) FROM CONTROL POINT AREA.
*                (PFRB - PFRB+1) = SPECIAL REQUEST BLOCK ADDRESS. 
*                (SSJS) .NE. 0 IF CALLED BY *SSJ=* PROGRAM. 
* 
*         EXIT   (A) = 0 IF SPECIAL REQUEST.
*                (CN+3 - CN+4) = USER INDEX.
*                (PFPN - PFPN+4) = 42/ NAME, 6/, 12/ FAMILY EQ. 
*                (PFUC) = USER CONTROLS.
*                (PFSB - PFFN) = SPECIAL REQUEST BLOCK SETUP. 
*                *STTA* SET IN *STAT* IF TAPE ALTERNATE STORAGE REQUEST.
* 
*         USES   T5, T6, CM - CM+4, CN - CN+4, T0 - T0+4, T7 - T7+4.
* 
*         CALLS  VCA. 
* 
*         MACROS ERROR, SFA.
  
  
 PSR12    LDN    1           INDICATE NO SRB
  
 PSR      SUBR               ENTRY/EXIT 
          LDM    TCTL,CC
          SHN    21-12
 PSR1     PJN    PSR12       IF NO SPECIAL REQUEST BLOCK ALLOWED
  
*         READ SPECIAL REQUEST BLOCK (SRB). 
  
 PSR2     LDM    PFRB        CHECK LOCATION OF SPECIAL REQUEST BLOCK
          LPN    37 
          SHN    14 
          ADM    PFRB+1 
          NJN    PSR3        IF ADDRESS SPECIFIED 
  
*         NO SRB SPECIFIED ON FUNCTION WHICH ALLOWS SRB.  FOR *DROPDS*, 
*         *DROPIDS* AND *PURGE* - ALLOW EVEN WITH NO *SSJ=*.
*         FOR *ASSIGNPF*, *UATTACH* AND *UGET* - ALLOW WITH *SSJ=*. 
*         FOR ALL OTHER SRB-TYPE FUNCTIONS - DO NOT ALLOW.
  
          LDD    CC 
          LMN    CCPG 
          ZJN    PSR1        IF *PURGE* 
          LMN    CCDD&CCPG
          ZJN    PSR1        IF *DROPDS*
          LMN    CCDI&CCDD
          ZJN    PSR1        IF *DROPIDS* 
          LMN    CCUA&CCDI
          ZJN    PSR2.1      IF *UATTACH* 
          LMN    CCUG&CCUA
          ZJN    PSR2.1      IF *UGET*
          LMN    CCAN&CCUG
          NJN    PSR4        IF NOT *ASSIGNPF*
 PSR2.1   LDM    SSJS 
          NJN    PSR1        IF *SSJ=*
 PSR2.2   ERROR  ILR,CH,IW   * PFM INCORRECT REQUEST.*
  
 PSR3     ADN    SFBL-1 
          SHN    -6 
          SBD    FL 
          MJN    PSR5        IF IN RANGE OF FIELD LENGTH
 PSR4     ERROR  PAE,CH,IW   * PFM ARGUMENT ERROR.* 
  
 PSR5     LDM    SSJS        ALWAYS REQUIRE *SSJ=* IF SRB SPECIFIED 
          ZJN    PSR2.2      IF NOT *SSJ=*
          LDN    SFBL        READ SPECIAL REQUEST BLOCK 
          STD    T1 
          LDM    PFRB 
          LPN    37 
          SHN    6
          ADD    RA 
          SHN    6
          ADM    PFRB+1 
          CRM    PFSB,T1
          LDM    PFSB+5+1 
          SHN    21-6 
          PJN    PSR5.1      IF NOT TAPE ALTERNATE STORAGE REQUEST
          LDN    STTA        SET TAPE FLAG
          RAM    STAT 
 PSR5.1   LDN    ZERL        INITIALIZE FOR USER INDEX
          CRD    CN 
          LDM    PFSU        SET USER INDEX 
          LPN    77 
          STD    CN+3 
          LDM    PFSU+1 
          STD    CN+4 
  
*         FIND THE FAMILY EST ORDINAL BASED ON THE FAMILY NAME AND
*         DEVICE NUMBER.
  
          LDN    ESTP        READ EST SEARCH POINTERS 
          CRD    T0 
          LDN    NOPE-1      INITIALIZE EST ORDINAL FOR SEARCH
          STD    T5 
          LDD    T0+3        SAVE LAST MASS STORAGE ORDINAL + 1 
          STD    T6 
 PSR6     AOD    T5          ADVANCE EST ORDINAL
          LMD    T6 
          NJN    PSR7        IF NOT END OF MASS STORAGE DEVICES 
          ERROR  IPA,CH,IW   * INCORRECT PFC ADDRESS.*
  
 PSR7     SFA    EST,T5 
          ADK    EQDE 
          CRD    CM 
          LDD    CM          CHECK FOR MASS STORAGE DEVICE
          SHN    -6 
          LPN    41 
          LMN    40 
          NJN    PSR6        IF UNAVAILABLE OR NON-MS DEVICE
          LDD    CM+3        SAVE DEVICE TYPE 
          STM    PSRB 
          LDD    CM+4        READ MST 
          STM    PSRA        SAVE MST ADDRESS 
          SHN    3
          ADN    STLL 
          CRD    T0 
          LDD    T0 
          LPC    MLFPR+MLIAL+MLIHD+MLIFD+MLIPF+MLUNL+MLDUL
 PSR7.1   NJN    PSR6        IF INITIALIZE PENDING OR UNLOADED
          LDM    PSRA 
          SHN    3
          ADN    PFGL 
          CRD    T0 
          LDM    PFFM        COMPARE FAMILY NAME
          LMD    T0 
 PSR8     NJN    PSR7.1      IF FAMILY NAME DOES NOT MATCH
          LDM    PFFM+1 
          LMD    T0+1 
          NJN    PSR8        IF FAMILY NAME DOES NOT MATCH
          LDM    PFFM+2 
          LMD    T0+2 
          NJN    PSR8        IF FAMILY NAME DOES NOT MATCH
          LDM    PFFM+3 
          LMD    T0+3 
          SCN    77 
          NJN    PSR8        IF FAMILY NAME DOES NOT MATCH
          LDD    CC          CHECK COMMAND CODE 
          LMN    CCAN 
          ZJN    PSR9        IF *ASSIGNPF* COMMAND
          LDM    PFID        COMPARE DEVICE NUMBER
          LMD    T0+3 
          LPN    77 
          NJN    PSR8        IF DEVICE NUMBER DOES NOT MATCH
  
*         THE EST ORDINAL HAS BEEN IDENTIFIED.
  
          RJM    VCA         VERIFY THE CATALOG ADDRESS *PFID*
 PSR9     LDD    FS+4        SET USER CONTROL BIT 
          STM    PFUC 
          LDM    PFPN        CHECK FET FIELDS 
          ADM    PFOU 
          NJP    PSR4        IF *PN* OR *UN* SPECIFIED
          LDC    *           CHECK IF DEVICE IS AUXILIARY PACK
 PSRA     EQU    *-1         (MST ADDRESS/10) 
          SHN    3
          ADN    MDGL 
          CRD    T0 
          ADN    DDLL-MDGL
          CRD    T7 
          LDD    T0+0 
          SHN    21-12
          MJN    PSR10       IF AUXILIARY PACK
          LDD    T5          SET EST ORDINAL OF SPECIFIED DEVICE
          UJN    PSR11       SET FAMILY EST ORDINAL 
  
 PSR10    LDD    MA          SET PACKNAME INTO *PFPN* 
          CWM    PFFM,ON
          SBN    1
          CRM    PFPN,ON
          LDD    T7+0        GET UNIT COUNT 
          LPN    7
          ADN    1R1
          SHN    14 
          LMC    *
 PSRB     EQU    *-1         (DEVICE TYPE)
          SHN    6
          STM    RQDT+1      SET REQUESTED DEVICE TYPE
          SHN    -14
          STM    RQDT 
          LDD    FS+3        SET FAMILY EST ORDINAL FROM CPA
 PSR11    STM    PFPN+4      SET FAMILY EST ORDINAL 
          LDN    0           INDICATE SPECIAL REQUEST BLOCK PRESENT 
          LJM    PSRX        RETURN 
 PXT      SPACE  4,20 
**        PXT -  PROCESS EXPIRATION TERM. 
* 
*         CONVERT EXPIRATION TERM INTO PACKED DATE, AND CHECK AGAINST 
*         MAXIMUM ALLOWED BY SYSTEM.
* 
*         ENTRY  (PFXT - PFXT+1) = USER SPECIFIED EXPIRATION DATE/TERM. 
*                (CC) = COMMAND CODE. 
*                (SVAL) = SECURITY VALIDATION BITS. 
* 
*         EXIT   (PXDT - PXDT+1) = VALIDATED EXPIRATION DATE. 
*                (PXDT - PXDT+1) = 0 IF NONEXPIRING PASSWORD/PERMIT.
* 
*         USES   T1, T2, CM - CM+4, CN - CN+4.
* 
*         MACROS ERROR, MONITOR.
  
  
 PXT      SUBR               ENTRY/EXIT 
          LDM    TCTL,CC
          SHN    21-10
          PJN    PXTX        IF COMMAND DOES NOT ALLOW *XT* 
          LDN    ZERL 
          CRD    CM 
          LDN    RIDS        SET UP *RDCM* PARAMETERS 
          STD    CM+1 
          LDM    PFXT        CHECK *XD/XT*
          LPN    77 
          STD    T1 
          SHN    14 
          LMM    PFXT+1 
          STD    T2 
          NJN    PXT1        IF *XD/XT* SPECIFIED 
          LDK    FPXT        USE SYSTEM DEFAULT *XT*
          STD    T2 
          LJM    PXT8        SET DEFAULT *XT* 
  
 PXT1     LDN    STXD        INDICATE THAT DATE WAS SPECIFIED 
          RAM    STAT 
          LDM    SVAL        CHECK PASSWORD EXPIRATION VALIDATION 
          SHN    21-10
          MJN    PXT2        IF USER VALIDATED TO SET EXPIRATION DATE 
          ERROR  NVX,CH,IW   *NOT VALIDATED TO SET XD/XT.*
  
 PXT2     LDD    T1 
          ZJP    PXT7        IF *XT* SPECIFIED RATHER THAN *XD* 
  
*         VALIDATE SPECIFIED EXPIRATION DATE. 
  
 PXT3     LDK    FPXL        READ MAXIMUM *XT* ALLOWED
          LMC    7777 
          ZJN    PXT4        IF MAXIMUM IS UNLIMITED
          LDK    FPXL        CONVERT MAXIMUM *XT* TO *XD* 
          STD    CM+4 
          MONITOR  RDCM 
          LDD    MA 
          CRD    CN          COMPARE *XD* SPECIFIED WITH MAXIMUM *XD* 
          LDD    CN+3 
          SBD    T1 
          MJN    PXT6        IF DATE BEYOND MAXIMUM 
          SHN    14 
          ADD    CN+4 
          SBD    T2 
          MJN    PXT6        IF DATE BEYOND MAXIMUM 
  
*         SAVE PASSWORD/PERMIT EXPIRATION DATE. 
  
 PXT4     LDD    T1 
          SHN    14 
          LMD    T2 
 PXT5     STM    PXDT+1 
          SHN    -14
          STM    PXDT 
          LJM    PXTX        RETURN 
  
 PXT6     ERROR  DEM,CH,IW   *XD/XT EXCEEDS MAXIMUM.* 
  
*         PROCESS EXPIRATION TERM.
  
 PXT7     LDK    FPXL        COMPARE TO MAXIMUM *XT*
          SBD    T2 
          MJN    PXT6        IF MAXIMUM *XT* EXCEEDED 
 PXT8     LDD    T2 
          LMC    7777 
          ZJN    PXT5        IF NON-EXPIRING TERM SPECIFIED 
          LDD    T2          CONVERT *XT* INTO *XD* 
          STD    CM+4 
          MONITOR  RDCM 
          LDD    MA          READ RESULT
          CRD    CN 
          LDD    CN+3 
          SHN    14 
          LMD    CN+4 
          UJN    PXT5        STORE DATE 
 SAP      SPACE  4,15 
**        SAP - SAVE ACCESS PARAMETERS. 
* 
*         ENTRY  (CC) = COMMAND CODE. 
* 
*         EXIT   (PFFC - PFFC+2) = SPECIFIED ACCESS CATEGORY SET. 
*                (PFAL) = JOB ACCESS LEVEL. 
*                (LFAL) = SPECIFIED ACCESS LEVEL(IF ANY),DEFAULT PFAL.
*                (SVAL) = SECURITY VALIDATION BITS. 
* 
*         USES   CN - CN+4, CM - CM+4, T0 - T4. 
* 
*         MACROS ERROR, MONITOR.
  
  
 SAP      SUBR               ENTRY/EXIT 
          LDD    CP          GET JOB DEFAULT VALUES AND VALIDATION
          ADK    JSCW 
          CRM    SVAL,ON
          LDM    SVAL+1      SAVE JOB ACCESS LEVEL
          SHN    -11
          STM    PFAL 
          STM    LFAL 
          LDM    SVAL+2      SAVE JOB ACCESS CATEGORY SET 
          LPC    377
          STM    PFFC 
          ERRNZ  SVAL+2-PFFC CODE DEPENDS ON VALUE
          LDN    ZERL        SET UP FOR *VSAM*
          CRD    CN 
          CRD    CM 
          LDN    VAJS 
          STD    CM+1 
          LDD    CC 
          LMN    CCAC 
          ZJP    SAP4        IF *SETPFAC* REQUEST 
          LMN    CCAL&CCAC
          ZJN    SAP2        IF *SETPFAL* REQUEST 
  
*         PROCESS ACCESS LEVEL FROM FET FOR *SAVE*, *DEFINE*, AND 
*         *ASSIGNPF*, IF *SP* BIT SET.
  
          LMN    CCSV&CCAL
          ZJN    SAP1        IF *SAVE* REQUEST
          LMN    CCDF&CCSV
          ZJN    SAP1        IF *DEFINE* REQUEST
          LMN    CCAN&CCDF
          NJP    SAPX        IF NOT *ASSIGNPF* REQUEST
 SAP1     LDM    PFSP 
          ZJP    SAPX        IF SECURITY PROCESSING BIT NOT SET 
  
*         VALIDATE SPECIFIED ACCESS LEVEL.
  
 SAP2     RJM    SFA         GET SPECIFIED ACCESS LEVEL 
          ADN    CFAL 
          CRD    T0 
          LDD    T0+1        SAVE ACCESS LEVEL
          LPN    7
          STM    LFAL 
          STD    CN+1 
          LDN    1           VALIDATE ACCESS LEVEL ONLY 
          STD    CM+4 
          LDD    MA 
          CWD    CN 
          MONITOR  VSAM 
          LDD    CM+1 
          ZJP    SAPX        IF SPECIFIED ACCESSES VALID
          ERROR  LNJ,CH,IW,,SVE  * ACCESS LEVEL NOT VALID FOR JOB.* 
  
*         VALIDATE SPECIFIED ACCESS CATEGORY SET. 
  
 SAP4     LDN    CFFC 
          SBM    FETL 
          MJN    SAP5        IF FET LONG ENOUGH FOR FUNCTION
          ERROR  ILR,CH,IW   * PFM INCORRECT REQUEST.*
  
 SAP5     RJM    SFA         GET SPECIFIED ACCESS CATEGORY SET
          ADN    CFFC 
          CRD    CN 
          LDD    CN+2 
          LPC    377
          STD    CN+2 
          STM    PFFC        SAVE ACCESS CATEGORY SET 
          LDD    CN+3 
          STM    PFFC+1 
          LDD    CN+4 
          STM    PFFC+2 
          LDN    2           VALIDATE ACCESS CATEGORY SET ONLY
          STD    CM+4 
          LDD    MA 
          CWD    CN 
          MONITOR  VSAM 
          LDD    CM+1 
          ZJP    SAPX        IF SPECIFIED ACCESS CATEGORY SET VALID 
          ERROR  CNJ,CH,IW,,SVE  * ACCESS CATEGORIES NOT VALID FOR JOB* 
 SEP      SPACE  4,10 
**        SEP - SET ERROR PROCESSING OPTIONS. 
* 
*         EXIT   (EPOP) = ERROR PROCESSING OPTIONS. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  SFA. 
  
  
 SEP      SUBR               ENTRY/EXIT 
          RJM    SFA         READ FET+1 
          ADN    1
          CRD    CM 
          LDD    CM+1        SAVE ERROR PROCESSING OPTIONS
          SHN    0-6
          LPN    37 
          STM    EPOP 
          UJN    SEPX        RETURN 
 SLT      SPACE  4,20 
**        SLT - SEARCH COMMON LIBRARY TABLE FOR ALTERNATE USER NAME.
* 
*         ENTRY  (FN - FN+3) = USER NAME FOR ALTERNATE ACCESS.
* 
*         EXIT   (A) = -1 IF USER NAME NOT FOUND. 
*                (A) =  0 IF MATCH AND USER INDEX AND EQ AVAILABLE. 
*                (A) =  1 IF MATCH BUT VALIDATION NEEDED. 
*                (CN - CN+3) = FAMILY IF USER NAME FOUND. 
*                (T1 - T2) = USER INDEX IF FOUND IN THE TABLE.
*                (POAB) = TABLE OFFSET IF ENTRY FOUND.
*                (PFPN+4) = (T5) = EST ORDINAL IF TAKEN FROM THE TABLE. 
*                (PFUC) = PERMANENT FILE VALIDATION.
* 
*         USES   T1 - T7, CM - CM+4.
* 
*         CALLS  CPN. 
* 
*         MACROS SFA. 
  
  
 SLT6     LCN    1           VALUE
  
 SLT      SUBR               ENTRY/EXIT 
          LDC    CLTP        PICK UP COMMON LIBRARIES POINTER 
          CRD    T3 
          LDD    T5 
          ZJN    SLT6        IF NO CLT
          LDN    0           INITIALIZE CLT OFFSET
          STD    T4 
 SLT1     AOD    T4          CHECK NEXT CLT ENTRY 
          LMD    T5 
          ZJN    SLT6        IF END OF CLT
          SFA    CLT,T4 
          CRD    CM          READ COMMON LIBRARIES USER NAME
          LDN    FN          PASS ALTERNATE USER NAME ADDRESS 
          RJM    CPN         COMPARE USER NAMES 
          NJN    SLT1        IF NO MATCH
 SLT2     LDD    T4 
          STM    POAB        SAVE TABLE OFFSET FOR ENTRY
          LDD    CM+3        PICK UP USER INDEX 
          LPN    37 
          STD    T1 
          LDD    CM+4 
          STD    T2 
          SFA    CLT,T4      CHECK FOR EST ORDINAL
          ADN    CLTF-CLTU
          CRD    CN          PICK UP FAMILY NAME AND EST ORDINAL
          LDD    CN+4 
          NJN    SLT5        IF EST ORDINAL IN THE TABLE
 SLT3     LDN    1           SET VALIDATION REQUIRED
 SLT4     LJM    SLTX        RETURN 
  
 SLT5     STD    T5          SAVE EST ORDINAL 
          SFA    EST
          ADK    EQDE 
          CRD    CM          READ EST ENTRY 
          LDD    CM+4        GET MST ADDRESS
          SHN    3
          ADN    PFGL 
          CRD    CM          READ FAMILY OR PACK NAME 
          LDN    CN 
          RJM    CPN         COMPARE FAMILY NAMES 
          NJN    SLT3        IF NO MATCH
          LDD    T5          CHANGE EST ORDINAL 
          STM    PFPN+4 
          SFA    CLT,T4      GET PF VALIDATION
          ADN    CLTV-CLTU
          CRD    CM 
          LDD    CM+4 
          STM    PFUC 
          LDN    0           USER NAME AND INDEX FOUND
          UJN    SLT4        RETURN 
 VCA      SPACE  4,15 
**        VCA - VERIFY CATALOG ADDRESS. 
* 
*         ENTRY  (CM - CM+4) = EST ENTRY OF THE FAMILY AND DEVICE.
*                (T5) = EST ORDINAL FOR THE FAMILY AND DEVICE NUMBER. 
*                (PFID - PFID+2) = 4/,2/PEO,6/DN,12/TRACK,12/SECTOR.
* 
*         EXIT   THE CATALOG ADDRESS IS VERIFIED TO DEFINE A LEGAL
*                PERMANENT FILE CATALOG ADDRESS.
* 
*         USES   CM - CM+4, T0 - T0+4, T6 - T6+4. 
* 
*         CALLS  CTA. 
* 
*         MACROS ERROR. 
  
  
 VCA      SUBR               ENTRY/EXIT 
          LDD    CM+4        DETERMINE MST ADDRESS
          SHN    3
          ADN    ALGL        READ THE DEVICE ALLOCATION WORD
          CRD    T6 
          ADN    PUGL-ALGL   READ DEVICE MASK 
          CRD    T0 
          ADN    TRLL-PUGL
          RJM    CTA         CALCULATE FWA OF TRT 
          SBD    TH          BIAS FOR LINK INDICATOR BIT
          STM    VCAA+1 
          SHN    -14
          LMC    ADCI 
          STM    VCAA 
          LDD    T6+1        SET FIRST TRACK IN CATALOG CHAIN (LABEL) 
          STD    T6 
          LDM    PFSU+1      CHECK USER INDEX AGAINST DEVICE MASK 
          LPN    7
          RAM    VCAB 
          LDN    1
 VCAB     SHN    **          (LAST DIGIT OF USER INDEX) 
          STM    VCAC 
          LDD    T0+4 
          LPC    377
          LPC    *           (MASK FOR SPECIFIED USER INDEX)
 VCAC     EQU    *-1
          ZJN    VCA2        IF USER INDEX NOT LEGAL FOR DEVICE 
  
*         LOOP THROUGH THE CHAIN OF CATALOG TRACKS AND VERIFY THAT
*         THE SPECIFIED TRACK IS IN THE CHAIN.
  
 VCA1     LDD    T6          CHECK TRACK LINKAGE
          SHN    21-13
          PJN    VCA2        IF NOT A VALID LINKAGE 
          ZJN    VCA2        IF END OF CHAIN
          SHN    13-21-2     CALCULATE NEXT TRT WORD OFFSET 
 VCAA     ADC    TRTS 
          CRD    CM          READ THE LINKED TO WORD
          LDD    T6          BIAS INTO THIS TRT WORD
          LPN    3
          STD    CM+4 
          LDM    CM,CM+4
          STD    T6          SET THE NEXT TRACK 
          LMM    PFID+1 
          ZJN    VCA3        IF THE SPECIFIED TRACK IS IN THE CHAIN 
          UJN    VCA1        CONTINUE EXAMINING CATALOG TRACKS
  
 VCA2     ERROR  IPA,CH,IW   * INCORRECT PFC ADDRESS.*
  
*         THE TRACK IS A MEMBER OF THE CATALOG CHAIN. 
  
 VCA3     SETMS  STATUS      VERIFY THE SECTOR SPECIFIED
          LDM    PFID+2 
          SBM    SLM
          PJN    VCA2        IF SECTOR OUT OF RANGE 
          LJM    VCAX        RETURN 
 VFA      SPACE  4,15 
**        VFA - VERIFY FET ADDRESS. 
* 
*         EXIT   (A) .LT. 0, IF FET NOT WITHIN CALLER-S FIELD LENGTH. 
*                (SFAB) = *LDD RA*, IF FET IN RANGE.
*                (SFAA - SFAA+1) = FET ADDRESS, IF IN RANGE.
* 
*         USES   T1, CN - CN+4. 
* 
*         CALLS  SFA. 
* 
*         MACROS ISTORE.
  
  
 VFA      SUBR               ENTRY/EXIT 
          LDD    IR+3 
          LPN    77 
          SHN    14 
          MJN    VFA1        IF ADDRESS OUT OF RANGE
          LMD    IR+4 
          ADN    1
          SHN    -6 
          SBD    FL 
          MJN    VFA2        IF ADDRESS IN RANGE
 VFA1     LCN    0           SET ERROR RETURN 
          UJN    VFAX        RETURN 
  
 VFA2     LDD    IR+3        SAVE FET ADDRESS 
          LPN    37 
          LMC    ADCI 
          STM    SFAA 
          LDD    IR+4 
          STM    SFAA+1 
          ISTORE SFAB,(LDD RA)  FLAG FET ADDRESS VALID
          RJM    SFA         READ FET LENGTH/RANDOM BIT 
          ADN    1
          CRD    CN 
          LDD    CN+3        SAVE FET LENGTH
          SHN    -6 
          ADN    4
          STD    T1 
          LDD    CN+1 
          SHN    21-13
          PJN    VFA4        IF NOT RANDOM FET
          LDD    T1 
          SBN    CFCN 
          PJN    VFA4        IF FET NOT TOO SHORT 
 VFA3     UJN    VFA1        SET ERROR RETURN 
  
 VFA4     LDD    IR+3        CHECK FET WITHIN FIELD LENGTH
          LPN    77 
          SHN    14 
          LMD    IR+4 
          ADD    T1 
          SHN    -6 
          SBD    FL 
          PJN    VFA3        IF FET OUT OF RANGE
          LDN    0           SET NO ERROR 
          UJP    VFAX        RETURN 
 VRP      SPACE  4,15 
**        VRP - VERIFY PARAMETERS.
* 
*         ENTRY  (CC) = COMMAND CODE. 
*                (FN - FN+4) = ACCESS WORD. 
*                (PFBR) = BACKUP REQUIREMENT VALUE. 
*                (PFRS) = PREFERRED RESIDENCE VALUE.
*                (PFSS) = SUBSYSTEM VALUE.
*                (PFAP) = ALTERNATE CATLIST PERMISSION VALUE. 
* 
*         EXIT   PARAMETERS VERIFIED TO BE IN RANGE.
*                DEFAULT VALUES SET IF NEEDED (FILE CREATION).
* 
*         MACROS ERROR. 
  
  
 VRP      SUBR               ENTRY/EXIT 
          LDD    CC          CHECK FOR *CHANGE* REQUEST 
          LMN    CCCG 
          ZJN    VRP3        IF *CHANGE* REQUEST
  
  
*         SET DEFAULT VALUES ON FILE CREATION.
  
  
          LDM    PFSS        CLEAR *CHANGE* FLAG ON FILE CREATION 
          SCN    40 
          STM    PFSS 
          LDM    PFBR        INSURE VALID *BR* VALUE
          LPC    0700 
          NJN    VRP1        IF *BR* PARAMETER SPECIFIED
          LDC    BRDE*100    SET DEFAULT *BR* VALUE 
          RAM    PFBR 
 VRP1     LDM    PFRS        INSURE VALID *PR* VALUE
          SHN    0-11 
          NJN    VRP2        IF *PR* PARAMETER SPECIFIED
          LDC    RSDE*1000   SET DEFAULT *PR* VALUE 
          RAM    PFRS 
 VRP2     LDM    PFAP        CHECK FOR NULL *AC* VALUE
          SHN    -12
          NJN    VRP3        IF *AC* PARAMETER SPECIFIED
          LDC    ACDF*2000   SET DEFAULT *AC* VALUE 
          RAM    PFAP 
  
*         ENSURE VALID PARAMETER VALUES.
  
 VRP3     LDM    PFBR        VERIFY RANGE OF *BR* VALUE 
          SHN    0-6
          LPN    7
          SBN    BRMX+1 
          PJN    VRP4        IF *BR* NOT IN RANGE 
          LDM    PFRS        VERIFY RANGE OF *PR* VALUE 
          SHN    0-11 
          SBN    RSMX+1 
          PJN    VRP4        IF *PR* OUT OF RANGE 
          ADN    RSMX+1-RSLK
          NJN    VRP5        IF *DISK LOCKED* NOT REQUESTED 
          LDD    FN+2        CHECK FOR *CLTD* VALIDATION
          SHN    21-0 
          MJN    VRP5        IF USER VALIDATED TO SPECIFY DISK LOCKED 
 VRP4     ERROR  ILR,CH,IW   * PFM INCORRECT REQUEST.*
  
 VRP5     LDM    PFSS        VERIFY SUBSYSTEM VALUE 
          LPN    37 
          SBN    MSYS+1 
          PJN    VRP4        IF *SS* NOT VALID
          LDM    PFAP        VERIFY *AC* PARAMETER
          SHN    -12
          SBN    ACMX+1 
          PJN    VRP4        IF *AC* NOT VALID
          LJM    VRPX        RETURN 
 VUA      SPACE  4,15 
**        VUA - VALIDATE USER ACCESS. 
* 
*         EXIT   (SSJS) = 1 IF *SSJ=* JOB.
* 
*         USES   CM - CM+4. 
  
  
 VUA      SUBR               ENTRY/EXIT 
          LDD    CP          CHECK FOR SSJ= JOB 
          ADC    SEPW 
          CRD    CM 
          LDD    CM 
          SHN    0-2
          LPN    1
          STM    SSJS        SAVE *SSJ=* STATUS 
          UJN    VUAX        RETURN 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPCRS 
*CALL     COMPVFN 
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          OVERFLOW  PPFW,EPFW  OVERFLOW INTO DISK ERROR PROCESSING AREA 
          OVERLAY  (LOCAL FILE PROCESSING.),OVLD
          SPACE  4,15 
**        THIS OVERLAY PERFORMS INITIAL LOCAL FILE PROCESSING FOR 
*         REQUESTS WHICH ARE SENSITIVE TO THE EXISTENCE OF LOCAL FILES. 
  
  
 OVL      BSS    0           ENTRY
*         LJM    PLF         PROCESS LOCAL FILE 
 PLF      SPACE  4,15 
**        PLF - PROCESS LOCAL FILE. 
* 
*         ENTRY  (CC) = COMMAND CODE. 
* 
*         EXIT   (FN - FN+4) = PERMANENT FILE NAME. 
  
  
 PLF      BSS    0           ENTRY
          LDM    PLFT,CC
          STM    PLFA 
 PLFT     LJM    PLF7        *SAVE* 
 PLFA     EQU    *-1         (LOCAL FILE PROCESSOR ADDRESS) 
          CON    PLF4        *GET*
          CON    0           *PURGE* (NO LOCAL FILE PROCESSING) 
          CON    0           *CATLIST* (NO LOCAL FILE PROCESSING) 
          CON    0           *PERMIT* (NO LOCAL FILE PROCESSING)
          CON    PLF7        *REPLACE*
          CON    PLF8        *APPEND* 
          CON    PLF1        *DEFINE* 
          CON    PLF5        *ATTACH* 
          CON    0           *CHANGE* (NO LOCAL FILE PROCESSING)
          CON    PLF11       *UATTACH*
          CON    PLF12       *SETASA* 
          CON    0           *SETAF* (NO LOCAL FILE PROCESSING) 
          CON    PLF3        *SETDA*
          CON    0           *DROPDS* (NO LOCAL FILE PROCESSING)
          CON    PLF1        *ASSIGNPF* 
          CON    PLF4        *OLD*
          CON    0           *SETPFAC* (NO LOCAL FILE PROCESSING) 
          CON    0           *SETPFAL* (NO LOCAL FILE PROCESSING) 
          CON    PLF4        *UGET* 
          CON    PLF7        *UREPLACE* 
          CON    0           *DROPIDS* (NO LOCAL FILE PROCESSING) 
          CON    PLF13       *DELPFC* 
          CON    0           *RPFSTAT* (NO LOCAL FILE PROCESSING) 
          CON    0           *STAGEPF* (NO LOCAL FILE PROCESSING) 
  
*         *ASSIGNPF*/*DEFINE* PROCESSING. 
  
 PLF1     RJM    PEF         PROCESS EXISTING FILE
          LDM    MXNF 
          ZJN    PLF2        IF NO FILE LIMIT SPECIFIED 
          LDK    STAC        TURN ON STATISTICAL ACCUMULATION 
          RAM    STAT 
 PLF2     EXECUTE  3PB       FILE RESIDENCE PROCESSOR 
  
*         *SETDA* PROCESSING. 
  
 PLF3     RJM    SSF         SEARCH FOR SYSTEM FILE 
          UJN    PLF2        PROCESS FILE RESIDENCE 
  
*         *GET*/*OLD*/*UGET* PROCESSING.
  
 PLF4     RJM    PEF         PROCESS EXISTING FILE
  
*         EXIT TO COMMAND PREPROCESSING OVERLAY.
  
 PLFX     RJM    SPN         SET PERMANENT FILE NAME
          EXECUTE  3PC       EXIT TO COMMAND PROCESSING OVERLAY 
  
*         *ATTACH* PROCESSING.
  
 PLF5     RJM    PEF         PROCESS EXISTING FILE
          LDM    MODE        SET UP FNT STATUS MODE EQUIVALENCE 
          LPN    37 
          STD    T1 
          LDM    TFNS,T1
          STM    FNMD 
          RJM    CFA         CHECK FAST ATTACH FILE 
          PJN    PLF6        IF NOT FAST ATTACH FILE
          RJM    EFN         ESTABLISH *FNT/FST* FOR *FA* FILE
          EXECUTE  3PU       TERMINATE PROGRAM
  
 PLF6     RJM    CAA         CHECK FOR APPLICATION ACCOUNTING 
          UJN    PLF10       EXIT 
  
*         *SAVE*/*REPLACE*/*APPEND*/*UREPLAC* PROCESSING. 
  
 PLF7     LDM    MXNF 
          NJN    PLF8        IF FILE LIMIT SPECIFIED
          LDM    MXCS 
          NJN    PLF8        IF SIZE LIMIT SPECIFIED
          LDM    MXCS+1 
          ZJN    PLF9        IF NO SIZE LIMIT SPECIFIED 
 PLF8     LDK    STAC        TURN ON STATISTICAL ACCUMULATION 
          RAM    STAT 
 PLF9     RJM    SSF         SEARCH FOR SYSTEM FILE 
          RJM    CFS         CHECK FILE SIZE
 PLF10    LJM    PLFX        COMPLETE 
  
*         *UATTACH* PROCESSING. 
  
 PLF11    RJM    PEF
          LDM    MODE        SET UP FNT STATUS MODE EQUIVALENCE 
          LPN    37 
          STD    T1 
          LDM    TFNS,T1
          STM    FNMD 
          UJN    PLF10       EXIT 
  
*         *SETASA* PROCESSING.
  
 PLF12    LDM    STAT 
          LPK    STTA 
          NJN    PLF10       IF SETTING TAPE ASA
          LDM    PFAT 
          LPN    77 
          LMN    ATOD 
          ZJN    PLF10       IF SETTING OPTICAL DISK ASA
          RJM    SSF         SEARCH FOR SYSTEM FILE 
          UJN    PLF10       EXIT 
  
*         *DELPFC* PROCESSING.
  
 PLF13    RJM    PIF         PROCESS INTERLOCK FILES
          UJN    PLF10       EXIT 
 TFNS     SPACE  4,15 
**        FNT STATUS VALUES FOR SPECIFIED ACCESS MODE.
  
  
 TFNS     BSS    0
          LOC    0
          CON    2           WRITE
          CON    1           READ 
          CON    22          APPEND/EXTEND
          CON    5           EXECUTE
          CON    0           NULL 
          CON    32          MODIFY 
          CON    31          READ AND ALLOW MODIFY
          CON    21          READ AND ALLOW APPEND
          CON    12          UPDATE 
          CON    11          READ AND ALLOW UPDATE
          LOC    *O 
 TFNSL    EQU    *-TFNS 
          TITLE  SUBROUTINES. 
 CAA      SPACE  4,15 
**        CAA - CHECK FOR APPLICATION ACCOUNTING. 
* 
*         ENTRY  (FNTA) = *FST* ADDRESS OF FILE.
* 
*         EXIT   IF THE FILE IS FROM THE APPLICATION LIBRARY
*                AND THE MODE OF ACCESS IS EXECUTE, THE 
*                APPLICATION ACCOUNTING FILE STATUS IS SET. 
  
  
 CAA      SUBR               ENTRY/EXIT 
          LDD    UI          CHECK FOR APPLICATION LIBRARY
          SHN    14 
          ADD    UI+1 
          LMC    AAUI 
          NJN    CAAX        IF NOT FROM APPLICATION LIBRARY
          LDM    FNMD        CHECK FOR MODE OF ATTACH FUNCTION
          LMN    5
          NJN    CAAX        IF NOT EXECUTE-ONLY FILE 
          LDM    SFNB        SET APPLICATION ACCOUNTING FILE STATUS 
          SCN    77 
          LMN    AAST 
          STM    SFNB 
          UJN    CAAX        EXIT 
 CFA      SPACE  4,25 
**        CFA - CHECK FOR FAST ATTACH FILE. 
* 
*         IF THE *FA* OR *MA* SPECIAL REQUEST WAS SPECIFIED AND THE 
*         CALLER IS *SSJ=*, CHECK THE SYSTEM FNT FOR THE SPECIFIED
*         FAST ATTACH FILE, AND ATTACH THE FILE IF IT EXISTS AND IS 
*         NOT BUSY.  IF THE FILE DOES NOT EXIST AND THE *FA* (FORCED
*         FAST ATTACH) SPECIAL REQUEST WAS SPECIFIED, RETURN AN 
*         ERROR.  IF THE FILE DOES NOT EXIST AND THE *MA* (MIXED
*         FAST ATTACH) SPECIAL REQUEST WAS SPECIFIED, EXIT AND ALLOW
*         NORMAL ATTACH PROCESSING TO PROCEED.
* 
*         ENTRY  (PFSR) = SPECIAL REQUEST SUBFUNCTION.
*                (SSJS) = SPECIAL SYSTEM JOB STATUS.
* 
*         EXIT   (A) .LT. 0 IF FAST ATTACH FILE FOUND.
* 
*         USES   T5, T6, CM - CM+4, CN - CN+4, FN - FN+4, FS - FS+4.
* 
*         CALLS  FAT, SFN, SPN. 
* 
*         MACROS ERROR, MONITOR, SFA. 
  
  
 CFA6     LDM    PFSR        CHECK FOR SPECIAL REQUEST
          LPN    77 
          LMN    SRMA 
          ZJN    CFAX        IF MIXED FAST ATTACH SPECIAL REQUEST 
          ERROR  FNF,CH,IW   * (FILE NAME) NOT FOUND.*
  
 CFA7     ERROR  IUA,CH,IW   * USER ACCESS NOT VALID.*
  
  
 CFA      SUBR               ENTRY/EXIT 
          LDM    PFSR        CHECK FOR SPECIAL REQUEST
          LPN    77 
          LMN    SRFA 
          ZJN    CFA0        IF FORCED FAST ATTACH SPECIAL REQUEST
          LMN    SRMA&SRFA
          NJN    CFAX        IF NOT MIXED FAST ATTACH SPECIAL REQUEST 
 CFA0     LDM    SSJS 
          ZJN    CFA7        IF CALLER IS NOT *SSJ=*
          RJM    SPN         SET FILE NAME
          SFA    EST,PFPN+4  SET FAMILY EST ORDINAL 
          ADK    EQDE 
          CRD    CN          READ EST ENTRY 
          LDD    CN+4 
          SHN    3
          ADN    PFGL        READ FAMILY NAME 
          CRD    CN 
          LDD    MA 
          CWD    FN 
          CRD    CM          SET FILE NAME
          RJM    FAT         CHECK IF FAST ATTACH 
          ZJN    CFA1        IF FAST ATTACH FILE FOUND
          LJM    CFA6        PROCESS FILE NOT FOUND 
  
*         FAST ATTACH FILE FOUND. 
  
 CFA1     SFA    FNT,T1      READ FNT/FST ENTRY 
          CRD    FN 
          ADN    FSTL 
          CRD    FS 
          LDD    FS          SET FILE TRACK AND EST ORDINAL 
          STD    T5 
          STM    PFEQ 
          STM    ERRE        SET EST ORDINAL FOR EVENT
          LDD    FS+1 
          STD    T6 
          STM    ERRC        SET TRACK FOR EVENT
          STM    PFFT 
          LDM    MODE        CHECK FOR LEGAL MODE 
          LPN    37 
          STD    CM+2        SET MODE IN MONITOR REQUEST
          LDM    TFNS,CM+2
          STM    CFAA 
          NJN    CFA2        IF LEGAL MODE
          ERROR  ILR,CH,IW,FS *PFM INCORRECT REQUEST.*
  
 CFA2     LDN    AFAS        SET REQUEST FOR FAFT FILE
          STD    CM+3 
          LDD    T1 
          STD    CM+4 
          LDD    FN+3 
          LPN    77 
          ZJN    CFA3        IF LOCAL FAST ATTACH FILE
          LDD    T5          SET EST ORDINAL IF GLOBAL FILE 
 CFA3     STD    CM+1 
          MONITOR  AFAM 
          LDD    CM+1        CHECK RETURN STATUS
          ZJN    CFA4        IF NO ERROR
          LDN    FRT         SET TIME FOR EVENT 
          STM    ERRD 
          ERROR  FBS,CH,IW,FS *(FILE NAME) BUSY.* 
  
 CFA4     LDC    *
 CFAA     EQU    *-1         (*TFNS* TABLE ENTRY FOR SPECIFIED MODE)
          SHN    21-4 
          MJN    CFA5        IF M, RM, A OR RA MODE 
          LDD    T5          REQUEST TRT UPDATE 
          STD    CM+1 
          LDN    UTRS 
          STD    CM+3 
          MONITOR  STBM 
 CFA5     LDC    PFSN        SET FILE NAME
          RJM    SFN
          LCN    1           SET FAST ATTACH FILE FOUND 
          LJM    CFAX        EXIT 
 CSA      SPACE  4,10 
**        CSA - CHECK SPECIFIED ACCESS LEVEL. 
* 
*         ENTRY  (FA) = FNT ADDRESS IN NFL. 
*                (LFAL) = REQESTED ACCESS LEVEL, IF *PFSP* NONZERO. 
* 
*         EXIT   ACCESS LEVEL SET IN FNT ENTRY BY *CPUMTR*, IF VALID. 
*                *MFFI* ACCOUNT MESSAGE ISSUED. 
* 
*         CALLS  IAM. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS ERROR, MONITOR.
  
  
 CSA      SUBR               ENTRY/EXIT 
          LDM    PFSP 
          ZJN    CSAX        IF SECURITY PROCESSING BIT NOT SET IN FET
          LDN    VSFS        VALIDATE AND SET ACCESS LEVEL FOR FILE 
          STD    CM+1 
          LDD    FA 
          STD    CM+3 
          LDM    LFAL 
          STD    CM+4 
          MONITOR  VSAM 
          LDD    CM+1 
          ZJN    CSAX        IF ACCESS LEVEL VALID
          RJM    IAM         ISSUE ACCOUNT FILE MESSAGE 
          ERROR  LNF,CH,IW,,SVE  * ACCESS LEVEL NOT VALID FOR FILE.*
 CFS      SPACE  4,10 
**        CFS - CHECK FILE SIZE FOR THE CATALOG SEARCH. 
* 
*         ENTRY  (MXFS) = MAXIMUM FILE SIZE ALLOWED FOR INDIRECT
*                         ACCESS FILES/ 10B.
*                (LF - LF+1) = LENGTH OF LOCAL FILE.
* 
*         EXIT   (LF - LF+1) CHECKED FOR SIZE LIMITS. 
* 
*         MACROS ERROR. 
  
  
 CFS3     ERROR  EFL,CH,IW   *(FILE NAME) EMPTY.* 
  
 CFS      SUBR               ENTRY/EXIT 
          LDD    LF 
          SHN    -5 
          ZJN    CFS2        IF FILE LENGTH .LT. 131072D SECTORS
 CFS1     ERROR  FTL,CH,IW   *FILE TOO LONG.* 
  
 CFS2     LDD    LF          CHECK FOR EMPTY FILE 
          SHN    14 
          ADD    LF+1 
          ZJN    CFS3        IF FILE EMPTY
          ADN    2           ADD SYSTEM AND EOI SECTORS 
          MJN    CFS1        IF FILE .GT. 131069D SECTORS 
          LDM    MXFS 
          ZJN    CFSX        IF NO FILE SIZE LIMITS 
          LDD    LF 
          SHN    -3 
          NJN    CFS1        IF FILE SIZE .GT. MAXIMUM FILE SIZE LIMIT
          LDD    LF 
          SHN    14 
          ADD    LF+1 
          ADN    7
          SHN    -3 
          SBM    MXFS 
          MJN    CFSX        IF LIMIT NOT EXCEEDED
          NJN    CFS1        IF FILE LIMIT EXCEEDED 
          UJN    CFSX        RETURN 
 EFN      SPACE  4,20 
**        EFN - ESTABLISH FNT ENTRY FOR FAST ATTACH FILE. 
* 
*         ENTRY  (FN - FN+4) = LOCAL FILE NAME. 
*                (FNTA) = FNT ADDRESS OF LOCAL FILE.
*                (PFEQ) = EST ORDINAL FOR FILE. 
*                (PFFT) = FIRST TRACK FOR FILE. 
*                (PFSN) = LOCAL FILE NAME.
*                (FNMD) = FNT STATUS MODE EQUIVALENCE.
* 
*         EXIT   FNT ENTRY ESTABLISHED IN CENTRAL MEMORY. 
*                (FA) = FNT ADDRESS.
*                (FN - FN+4) = FNT. 
*                (FS - FS+4) = FST. 
*                PERMANENT FILE USER COUNT INCREMENTED. 
* 
*         USES   T1, CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 EFN      SUBR               ENTRY/EXIT 
          LDM    FNTA        SET FNT/FST
          STD    FA 
          LDM    PFEQ        SET EST ORDINAL
          STD    FS 
          LDM    PFFT        SET FIRST TRACK
          STD    FS+1 
          STD    FS+2 
          LDN    FSMS        SET SECTOR 
          STD    FS+3 
          LDC    2004        SET FST STATUS 
          STD    FS+4 
          LDC    PMFT*100    SET FILE TYPE
          RAD    FN+4 
          STM    PFSN+4 
          LDM    FNMD        SET FNT STATUS MODE
          SCN    2           CLEAR WRITEABLE MODE BIT 
          RAM    PFSN+3 
          STD    FN+3 
          LDN    ZERL        SET FILE SIZE LIMIT TO INFINITE
          CRD    CM 
          LDC    700
          STD    CM+2 
          NFA    FA,R        RESTORE FNT ENTRY
          ADK    FNTL 
          CWD    FN 
          ADN    FSTL-FNTL
          CWD    FS 
          ADN    FUTL-FSTL
          CWD    CM 
          LDM    PFEQ        INCREMENT PF USER COUNT
          STD    CM+1 
          LDN    IUCS 
          STD    CM+3 
          MONITOR  SMDM 
          LJM    EFNX        RETURN 
 IAM      SPACE  4,10 
**        IAM - ISSUE ACCOUNT FILE MESSAGE. 
* 
*         ISSUES AN *MFFI* ACCOUNT FILE MESSAGE TO INDICATE THAT THE
*         LOCAL FILE ACCESS LEVEL CHANGE ATTEMPT WAS INVALID. 
* 
*         ENTRY  (LFAL) = LOCAL FILES NEW ACCESS LEVEL. 
* 
*         EXIT   ACCOUNT FILE MESSAGE ISSUED. 
* 
*         USES   T1.
* 
*         CALLS  ACS, DFM.
  
  
 IAM      SUBR               ENTRY/EXIT 
          LDC    IAMB+3      INITIALIZE POINTER FOR *ACS* CALLS 
          STD    T1 
          LDN    FN          INSERT FILE NAME IN BUFFER 
          RJM    ACS
          LDC    IAMC        APPEND COMMA 
          RJM    ACS
          LDM    LFAL        DETERMINE MNEMONIC OF ACCESS LEVEL 
          SHN    2
          ADC    TALV        APPEND NEW ACCESS LEVEL
          RJM    ACS
          LDC    IAMD        APPEND TERMINATOR
          RJM    ACS
          LDC    IAMB+ACFN   ISSUE DAYFILE MESSAGE
          RJM    DFM
          UJN    IAMX        RETURN 
  
*         ACCOUNT FILE MESSAGE BUFFER.
  
 IAMB     DATA   C*MFFI, *
          BSSZ   12 
 IAMC     DATA   2H,         MESSAGE SEPARATOR
          CON    0           END OF STRING
 IAMD     DATA   2H.         MESSAGE TERMINATOR 
          CON    0
 PDS      SPACE  4,15 
**        PDS - PROCESS DEVICE STATUS.
* 
*         ENTRY  (A) = 0 IF DEVICE AVAILABLE. 
*                (A) .NE. 0 IF DEVICE INACCESSIBLE. 
*                (T5) = EST ORDINAL OF DEVICE.
*                (FERT) = REAL-TIME PROCESSING FLAG.
*                (SSYS) = SUBSYSTEM FLAG. 
* 
*         EXIT   RETURN IF PROCESSING IS TO CONTINUE. 
* 
*                TO *ERR* IF DEVICE IS INACCESSIBLE AND CALLER HAS
*                REAL-TIME PROCESSING SET IN FET OR IS NOT A SUBSYSTEM. 
* 
*         MACROS ERROR. 
  
  
 PDS      SUBR               ENTRY/EXIT 
          ZJN    PDSX        IF DEVICE AVAILABLE, RETURN
          LDM    SSYS 
          ZJN    PDS1        IF NOT A SUBSYSTEM 
          LDM    FERT 
          ZJN    PDSX        IF NO REAL-TIME PROCESSING, RETURN 
 PDS1     ERROR  WID,CH,IW,T5,EC6  * WAITING - INACCESSIBLE DEVICE.*
 PEF      SPACE  4,25 
**        PEF - PROCESS EXISTING FILE.
* 
*         DETERMINE IF A LOCAL FILE WITH THE SPECIFIED NAME IS ALREADY
*         ASSIGNED TO THE JOB.  FOR ALL REQUESTS EXCEPT *DEFINE*, 
*         RETURN THE EXISTING LOCAL FILE.  FOR *DEFINE*, RETURN THE 
*         RESERVED FNT ENTRY AND KEEP THE EXISTING LOCAL FILE.
* 
*         ENTRY  (CC) = COMMAND CODE. 
*                (PFSN) = LOCAL FILE NAME.
* 
*         EXIT   (FA) = (FNTA) = FNT ADDRESS OF THE LOCAL FILE. 
*                (FA) = 0 IF THE FILE WAS RETURNED OR DID NOT EXIST.
*                (FN - FN+4) = FNT ENTRY FOR FILE (*DEFINE*). 
*                (FS - FS+4) = FST ENTRY FOR FILE (ZERO IF NOT FOUND).
*                (ERRB) = NONZERO IF LOCAL FILE EXISTS. 
*                (LFAL) = LOCAL FILE ACCESS LEVEL.
* 
*         USES   FA, T1, CM - CM+4, FN - FN+4.
* 
*         CALLS  CSA, PDS, SAF, SFB, SFN, *0DF*.
* 
*         MACROS ERROR, EXECUTE, NFA, SETMS, SFA. 
  
  
 PEF10    LDC    **          RESTORE DIRECT CELL
 PEFA     EQU    *-1
          STD    UI+1 
 PEF11    LDN    ZERL        CLEAR FS - FS+4
          CRD    FS 
  
 PEF      SUBR               ENTRY/EXIT 
          LDC    PFSN        SET SYSTEM FILE NAME 
          RJM    SFN
          RJM    SAF         SEARCH FOR ASSIGNED FILE 
          ZJN    PEF11       IF FILE NOT FOUND
          RJM    SFB         SET FILE BUSY
          ZJN    PEF1        IF NO REJECT ON FILE INTERLOCK 
          ERROR  IOE,CH,IW   *I/O SEQUENCE ERROR.*
  
 PEF1     LDD    CC 
          LMN    CCDF 
          ZJN    PEF6        IF A *DEFINE* REQUEST
  
*         *UNLOAD* OR *RETURN* THE EXISTING FILE. 
  
 PEF2     LDN    1           *UNLOAD* PREVIOUS FILE 
 PEF3     STM    LOCF-1 
          LDD    UI+1        SAVE DIRECT CELL USED BY *0DQ* 
          STM    PEFA 
          EXECUTE 0DF,LOCF
          PJP    PEF10       IF FILE PROCESSED
          LDD    FS          SET EST ORDINAL OF INACCESSIBLE DEVICE 
          STD    T5 
          LDD    FA          SET FNT ADDRESS
          STM    FNTA 
          AOM    ERRB        SET FILE NOT CREATED BY *PFM*
          RJM    PDS         PROCESS DEVICE STATUS
          ERROR  PFN,CH,IW   * DEVICE UNAVAILABLE.* 
  
*         PROCESS *DEFINE* REQUEST (USE EXISTING FILE IF POSSIBLE). 
  
 PEF6     LDD    FS 
          ZJN    PEF3        IF EQUIPMENT NOT ASSIGNED
          LDD    FS+1 
          ZJN    PEF2        IF FILE EMPTY
  
*         *DEFINE* - RETURN RESERVED FNT ENTRY (NOT NEEDED).
  
          LDM    FNTA        SWITCH FNT ADDRESSES 
          STD    T1 
          LDD    FA 
          STM    FNTA 
          LDD    T1 
          STD    FA 
          LDN    1           *UNLOAD FILE*
          STM    LOCF-1 
          EXECUTE  0DF,LOCF 
          LDM    FNTA        RESET FNT ADDRESS
          STD    FA 
          AOM    ERRB        SET FILE NOT CREATED BY *PFM*
  
*         CHECK IF EXISTING LOCAL FILE CAN BE USED. 
  
          RJM    CSA         CHECK SPECIFIED ACCESS LEVEL 
          NFA    FA,R 
          ADK    FNTL 
          CRD    FN 
          ADK    FSTL-FNTL
          CRD    FS 
          ADK    FUTL-FSTL   GET LOCAL FILE ACCESS LEVEL
          CRD    CM 
          LDD    CM+2        SAVE LOCAL FILE ACCESS LEVEL 
          LPN    7
          STM    LFAL 
          SBM    PFAL 
          PJN    PEF7        IF LOCAL FILE HAS VALID ACCESS LEVEL 
          LDM    SVAL        CHECK FOR WRITE DOWN VALIDATION
          SHN    21-5 
          MJN    PEF7        IF WRITE DOWN ALLOWED
          LDM    SSID        CHECK SUBSYSTEM ID 
          SBK    LSSI+1 
          PJN    PEF7        IF SUBSYSTEM 
          ERROR  WDP,CH,IW,,SVE  * WRITE-DOWN OF DATA PROHIBITED.*
  
 PEF7     LDD    FN+3 
          LPN    4
          ZJN    PEF8        IF NOT EXECUTE ONLY FILE 
          ERROR  FEO,CH,IW   * FILE IS EXECUTE ONLY.* 
  
 PEF8     SFA    EST,FS      READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDD    CM 
          SHN    21-13
          MJN    PEF9        IF MASS STORAGE EQUIPMENT
          ERROR  NMS,CH,IW   *(FILE NAME) NOT MASS STORAGE.*
  
 PEF9     LDD    FS 
          STD    T5 
          SETMS  STATUS 
          LDM    MSD
          LPC    100
          RJM    PDS         PROCESS DEVICE STATUS
          LJM    PEFX        RETURN 
 PIF      SPACE  4,15 
**        PIF - PROCESS INTERLOCK FILES.
* 
*         EXIT   (FNTA) = 0.
*                (CCIB) UPDATED IF /PFM*ILK/ INTERLOCK BIT WAS SET. 
*                (IAIF) = NONZERO IF /PFM*PFN/ INTERLOCK BIT WAS SET. 
*                INTERLOCK BITS CLEARED IN /PFM*ILK/ AND /PFM*PFN/. 
*                TO *ERR* IF FILES DO NOT MATCH FAMILY/USER INDEX.
* 
*         USES   FS+4.
* 
*         CALLS  SSF. 
* 
*         MACROS ERROR. 
  
  
 PIF      SUBR               ENTRY/EXIT 
  
*         PROCESS CATALOG TRACK INTERLOCK (FILE /PFM*ILK/). 
  
          LDC    =C/"ILK"/
          STM    SSFA+1 
          RJM    SSF         SEARCH FOR LOCAL FILE /PFM*ILK/
          LDD    FS 
          LMD    EQ 
          NJN    PIF1        IF INCORRECT EST ORDINAL 
          LDD    FS+1 
          LMM    CCIA 
          ZJN    PIF2        IF CORRECT CATALOG TRACK 
 PIF1     ERROR  FNF,CH,IW   * FILE NOT FOUND.* 
  
 PIF2     LDD    FS+4        CHECK CATALOG TRACK INTERLOCK BIT
          SHN    21-11
          PJN    PIF2.1      IF INTERLOCK BIT NOT SET 
          AOM    CCIB        SET CATALOG TRACK INTERLOCK FLAG 
 PIF2.1   LDD    FS+4        CLEAR CATALOG TRACK INTERLOCK BIT
          LPC    6776 
          LMN    1           SET COMPLETE BIT 
          STD    FS+4 
          NFA    FA,R        REWRITE FST
          ADK    FSTL 
          CWD    FS 
  
*         CHECK FOR ALLOCATION INTERLOCK (FILE /PFM*PFN/).
  
          LDC    =C/"PFN"/
          STM    SSFA+1 
          RJM    SSF         SEARCH FOR LOCAL FILE /PFM*PFN/
          LDD    FS 
          LMD    EQ 
          ZJN    PIF3        IF CORRECT EST ORDINAL 
          ERROR  FNF,CH      * FILE NOT FOUND.* 
  
 PIF3     LDD    FS+4 
          SHN    21-11
          PJN    PIF4        IF ALLOCATION INTERLOCK NOT SET
          AOM    IAIF        SET *INDIRECT ALLOCATION INTERLOCK* FLAG 
 PIF4     LDD    FS+4        CLEAR ALLOCATION INTERLOCK BIT 
          LPC    6776 
          LMN    1           SET COMPLETE BIT 
          STD    FS+4 
          NFA    FA,R        REWRITE FST
          ADK    FSTL 
          CWD    FS 
          LDN    0           CLEAR LOCAL FILE FNT ADDRESS 
          STM    FNTA 
          UJP    PIFX        RETURN 
 SSF      SPACE  4,20 
**        SSF - SEARCH FOR SYSTEM FILE. 
* 
*         ENTRY  (PFSN) = LOCAL FILE NAME.
* 
*         EXIT   (LF - LF+1) = LENGTH OF LOCAL FILE.
*                (FS - FS+4) = FST ENTRY FOR FILE (REWOUND).
*                (ERRB) = NON ZERO IF FILE PRESENT AND SET BUSY.
*                (FNTA) = FNT ADDRESS OF LOCAL FILE.
*                (FNTB) = FNT ADDRESS OF /PFM*PFN/ FILE (*DELPFC*). 
*                (FNTC) = FNT ADDRESS OF /PFM*ILK/ FILE (*DELPFC*). 
*                (LFAL) = LOCAL FILE ACCESS LEVEL.
*                FST REWRITTEN. 
* 
*         USES   FA, T5, T6, CM - CM+4, FN - FN+4, FS - FS+4, 
*                LF - LF+1. 
* 
*         CALLS  CSA, CTA, PDS, SAF, SEI, SFB, SFN. 
* 
*         MACROS ERROR, NFA, SETMS, SFA.
  
  
 SSF      SUBR               ENTRY/EXIT 
 SSFA     LDC    PFSN        SET FILE NAME
*         LDC    =C/"ILK"/   (*DELPFC* REQUEST) 
*         LDC    =C/"PFN"/   (*DELPFC* REQUEST) 
          RJM    SFN
          RJM    SAF         SEARCH FOR ASSIGNED FILE 
          ZJN    SSF1        IF NOT FOUND 
          RJM    SFB         SET FILE BUSY
          ZJN    SSF3        IF NO REJECT ON FILE INTERLOCK 
          ERROR  IOE,CH,IW   *I/O SEQUENCE ERROR.*
  
 SSF1     ERROR  FNF,CH,IW   * FILE NOT FOUND.* 
  
 SSF2     ERROR  FEO,CH,IW   * FILE IS EXECUTE ONLY.* 
  
 SSF2.1   ERROR  IFT,CH,IW   * INCORRECT FILE TYPE.*
  
 SSF3     AOM    ERRB        INDICATE FILE NOT CREATED BY *PFM* 
          LDD    FA          SAVE FNT ADDRESS 
          STM    FNTA 
          LDD    CC 
          LMN    CCSV 
          NJN    SSF4        IF NOT *SAVE* REQUEST
          RJM    CSA         CHECK SPECIFIED ACCESS LEVEL 
 SSF4     NFA    FA,R 
          ADK    FNTL 
          CRD    FN 
          ADN    FSTL-FNTL
          CRD    FS 
          ADN    FUTL-FSTL   READ LOCAL FILE ACCESS LEVEL 
          CRD    CN 
          LDD    CN+2        SAVE LOCAL FILE ACCESS LEVEL 
          LPN    7
          STM    LFAL 
          LDD    FN+3        CHECK FILE MODE
          LPN    4
          NJP    SSF2        IF EXECUTE ONLY FILE 
          LDD    FN+3        CHECK FILE MODE
          LPN    21          EXTEND-ONLY AND WRITE LOCKOUT
          LMN    21 
          ZJP    SSF2.1      IF READ/ALLOW MODIFY OR READ/ALLOW APPEND
          LDD    FS          CHECK IF EQUIPMENT IS MASS STORAGE 
          ZJN    SSF5        IF NO EQUIPMENT ASSIGNED TO FILE 
          STD    T5 
          SFA    EST
          ADK    EQDE 
          CRD    CM          READ EST ENTRY 
          LDD    CM 
          SHN    21-13       MASS STORAGE BIT 
          MJN    SSF6        IF MASS STORAGE
          ERROR  NMS,CH,IW   *(FILENAME) NOT ON MASS STORAGE.*
  
 SSF5     ERROR  EFL,CH,IW   *(FILE NAME) EMPTY.* 
  
 SSF6     LDD    CC 
          LMN    CCDP 
          ZJP    SSFX        IF *DELPFC* REQUEST
          SETMS  STATUS 
          LDM    MSD
          LPC    100
          RJM    PDS         PROCESS DEVICE STATUS
          LDD    CM+4        SET FWA OF TRT - TRACK BIT 
          SHN    3
          ADN    TRLL 
          RJM    CTA         CALCULATE FWA OF TRT 
          SBD    TH 
          STM    SEIA+1 
          SHN    -14
          LMC    ADCI 
          STM    SEIA 
          LDD    FS+2 
          ZJN    SSF7        IF FILE NEVER WRITTEN
          LDD    FS+1        DETERMINE FILE LENGTH
          STD    T6 
          RJM    SEI
          LDD    T2 
          STD    LF 
          LDD    T3 
          SBN    1           DISCOUNT EOI 
          STD    LF+1 
          PJN    SSF8        IF NO 12 BIT OVERFLOW
          AOD    LF+1 
          SOD    LF 
          UJN    SSF8        UPDATE FST 
  
 SSF7     LDN    0           SET FILE LENGTH FOR EMPTY FILE 
          STD    LF 
          STD    LF+1 
          LDD    CC 
          LMN    CCSD 
          ZJN    SSF9        IF *SETDA* 
          LJM    SSF5        * (FILE NAME) EMPTY.*
  
*         UPDATE FST. 
  
 SSF8     LDD    FS+1        SET CURRENT TRACK = FIRST TRACK
          STD    FS+2 
          LDN    FSMS        SET CURRENT SECTOR = FIRST SECTOR
          STD    FS+3 
 SSF9     LDD    FS+4        SET STATUS 
          SCN    77 
          LMN    4
          STD    FS+4 
          NFA    FA,R        UPDATE FST 
          ADK    FSTL 
          CWD    FS 
          LJM    SSFX        RETURN 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPACS 
 VAL$     SET    0
*CALL     COMPVLC 
*CALL     COMPFAT 
          QUAL   GFP
 FNT$     EQU    0           DEFINE *COMPGFP* ACCESS TO FNT 
*CALL     COMPGFP 
          QUAL   *
 .FNT     EQU    /GFP/.FNT
*CALL     COMPSAF 
*CALL     COMPSFB 
          SPACE  4,15 
 LOCF     EQU    *+5         ZERO LEVEL OVERLAY LOAD ADDRESS
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          ERRNG  BFMS-LOCF-ZDFL  *0DF* OVERFLOW 
  
  
          OVERFLOW  OVLD,EPFW  OVERFLOW INTO ERROR PROCESSING AREA
          OVERLAY  (ASSIGNPF/FILE RESIDENCE PROCESSING.),OVLD 
 FRP      SPACE  4,30 
**        THIS OVERLAY DETERMINES THE PROPER RESIDENCE FOR
*         DIRECT ACCESS FILES, ACCORDING TO THE FOLLOWING RULES - 
* 
*         LOCAL FILE IN EXISTENCE 
*                FILE MADE PERMANENT IF LOCAL FILE ON LEGAL PF DEVICE.
*                ABORTED IF FILE NOT ON PF DEVICE.
*                *DT* IS IGNORED. 
*                IF REMOVABLE DEVICE REQUEST FILE MUST RESIDE ON THAT 
*                REMOVABLE DEVICE.
* 
*         NO LOCAL FILE.
*             *DT* = 0. 
*                PLACE FILE ON DEVICE WITH MOST AVAILABLE SPACE, AND
*                SUFFICIENT ACCESS LEVEL. 
*             *DT* .NE. 0.
*                FILE IS PLACED ON MATCHING DEVICE TYPE WITH SUFFICIENT 
*                ACCESS LEVEL AND MOST AVAILABLE SPACE IN FAMILY, 
*                OTHERWISE REQUEST IS ABORTED.
*             *PRU* .NE. 0. 
*                PLACE FILE ON DEVICE (TYPE *DT* IF SPECIFIED) WITH 
*                MOST AVAILABLE SPACE PROVIDED *PRU* SECTORS
*                ARE AVAILABLE. IF THEY ARE NOT REQUEST IS ABORTED. 
* 
*         IF THE SPECIAL REQUEST *SRMR* IS SPECIFIED, THE FILE MUST 
*         RESIDE ON THE MASTER DEVICE (AS DETERMINED BY THE PRIMARY 
*         DEVICE MASK), RATHER THAN ON THE DEVICE(S) SPECIFIED IN THE 
*         SECONDARY DEVICE MASK(S). 
  
  
 FRP      BSS    0           ENTRY
          LDD    CC 
          LMN    CCAN 
          ZJN    APF         IF *ASSIGNPF* REQUEST
          LDM    LFAL 
          STD    CM+4 
          LDD    EQ          CHECK *LFAL* WITH MASTER DEVICE *AL* 
          STD    CM+2 
          LDN    VAES 
          STD    CM+1 
          MONITOR  VSAM 
          LDD    CM+1 
          NJN    FRP2        IF FILE ACCESS NOT VALID FOR DEVICE
  
*         PROCESS *DEFINE*, *SETDA*.
  
          RJM    DFR         DETERMINE FILE RESIDENCE 
          RJM    SPN         SET PERMANENT FILE NAME
          EXECUTE  3PC       PROCESS REQUEST
  
 FRP2     ERROR  LNP,CH,IW,,SVE  * ACCESS LEVEL NOT VALID ON PF DEVICE* 
 APF      SPACE  4,10 
***       PROCESS *ASSIGNPF* REQUEST. 
* 
*         ASSIGN LOCAL FILE TO PROPER PERMANENT FILE DEVICE.
* 
*         IF THE SPECIAL REQUEST *SRSY* IS SPECIFIED, WRITE 
*         A SYSTEM SECTOR ON THE FILE.
  
  
 APF      BSS    0           ENTRY
          LDM    PFSR        CHECK SPECIAL REQUEST
          LPN    77 
          LMN    SRSY 
          ZJN    APF2        IF SYSTEM SECTOR IS TO BE PREWRITTEN 
          RJM    DFR         DETERMINE FILE RESIDENCE 
          LDN    0           SET UP FST FOR SYSTEM SECTOR ACCESS
          STD    FS+2 
          STD    FS+3 
          LDC    4004        SET FILE STATUS
          STD    FS+4 
          NFA    FA,R 
          ADN    FSTL 
          CWD    FS 
          LJM    APF5        TERMINATE PROGRAM
  
*         CLEAR SYSTEM SECTOR.
  
 APF2     LDC    PMFT*100-LOFT*100  FORCE *PMFT* FILE TYPE
          RAM    SFTA 
          RJM    DFR         DETERMINE FILE RESIDENCE 
          LDC    77*5-1      SET WORD COUNT TO CLEAR
          STD    T1 
 APF3     LDN    0
          STM    BFMS+2,T1   CLEAR NEXT WORD
          SOD    T1 
          PJN    APF3        IF MORE TO CLEAR 
          LDN    72          CURRENT ACCESS MODE (WRITE MODE/PURGED)
          STM    CASS 
  
*         WRITE SYSTEM AND EOI SECTORS. 
  
          LDD    FS+1        SET TRACK AND SECTOR 
          STD    T6 
          STD    FS+2 
          LDN    FSMS 
          STD    FS+3 
          LDN    4           SET FILE STATUS
          STD    FS+4 
          NFA    FA,R        PREWRITE FST FOR *COMPWEI* 
          ADN    FSTL 
          CWD    FS 
          SETMS  IO,,BFMS 
          RJM    PDV         PROCESS DEVICE STATUS
          RJM    WSS         WRITE SYSTEM SECTOR
          MJN    APF3.1      IF WRITE ERROR 
          RJM    WEI         WRITE EOI SECTOR 
          PJN    APF4        IF NO MASS STORAGE ERROR 
 APF3.1   ERROR  MSE,CH,IW,FS  *EQXXX,DNYY, MASS STORAGE ERROR.*
  
 APF4     ENDMS 
          LDD    FS          INCREMENT USER COUNT FOR DEVICE
          STD    CM+1 
          LDN    IUCS        INCREMENT USER COUNT 
          STD    CM+3 
          MONITOR  SMDM 
          LDN    FSMS        SET EOI IN TRT 
          STD    CM+3 
          LDD    T6 
          LPC    3777 
          STD    CM+2 
          LDD    FS 
          STD    CM+1 
          MONITOR  DTKM 
 APF5     EXECUTE  3PU       TERMINATE PROGRAM
          TITLE  SUBROUTINES. 
 CDA      SPACE  4,15 
**        CDA - CHECK DEVICE ACCESSIBILITY. 
* 
*         ENTRY  (T2) = EST ORDINAL FOR DEVICE. 
*                (T3 - T3+4) = EST ENTRY FOR DEVICE.
* 
*         EXIT   (A) = 0 IF DEVICE CAN BE ACCESSED. 
*                (A) = 1 IF NEW ACTIVITY RESTRICTED ON DEVICE.
*                (A) = 2 IF PF UTILITY ACTIVE.
*                (A) = 3 IF ACCESS DENIED BY *SETMS*. 
*                (A) = 4 IF *ERROR IDLE* SET FOR DEVICE.
* 
*         USES   T5, CM - CM+4. 
* 
*         MACROS SETMS. 
  
  
 CDA      SUBR               ENTRY/EXIT 
  
*         CHECK IF *ERROR IDLE* SET FOR DEVICE. 
  
          LDD    T3+4        MST ADDRESS/10B
          SHN    3
          ADN    ACGL 
          CRD    CM 
          LDD    CM+4 
          LPN    20 
          ZJN    CDA2        IF NOT *ERROR IDLE*
          LDM    SSJS 
          ZJN    CDA1        IF NOT *SSJ=* JOB
          LDM    PFSR 
          LPN    77 
          LMN    SRIE 
          ZJN    CDA2        IF *IGNORE ERROR IDLE* SPECIAL REQUEST 
 CDA1     LDN    4           RETURN WITH (A) = 4
          UJN    CDAX        RETURN 
  
*         CHECK *SUSPECT*, *OFF*, AND *DOWN* STATUS.
  
 CDA2     LDD    T2          EST ORDINAL
          STD    T5 
          SETMS  STATUS 
          LDM    MSD
          SHN    21-6 
          PJN    CDA4        IF DEVICE CAN BE ACCESSED
          LDN    3           RETURN WITH (A) = 3
 CDA3     UJN    CDAX        RETURN 
  
*         CHECK IF PF UTILITY ACTIVE. 
  
 CDA4     LDD    T3+4        MST ADDRESS/10B
          SHN    3
          ADK    TDGL 
          CRD    CM 
          LDD    CM+1 
          SHN    21-6 
          PJN    CDA5        IF DEVICE NOT INTERLOCKED
          LDN    2           RETURN WITH (A) = 2
          UJN    CDA3        RETURN 
  
*         CHECK NEW ACTIVITY RESTRICTIONS.
  
 CDA5     LDD    T3+4        MST ADDRESS/10B
          SHN    3
          ADN    DALL 
          CRD    CM 
          LDD    CM 
          SHN    21-6 
          MJN    CDA6        IF *RESTRICT NEW ACTIVITY* FLAG SET
          SHN    0-10-21+6+22 
          LPN    3
          SBN    1
          NJN    CDA7        IF *IDLE* FLAG NOT SET 
 CDA6     LDN    1           RETURN WITH (A) = 1
          UJN    CDA3        RETURN 
  
 CDA7     LDN    0           RETURN WITH (A) = 0
          UJN    CDA3        RETURN 
 CML      SPACE  4,15 
**        CML - CHECK MASS STORAGE LIMIT. 
* 
*         ENTRY  (CMLA - CMLA+1) = VALUE OF DECREMENT.
* 
*         EXIT   TO ERR IF ERROR IN PRU LIMITS. 
* 
*         USES   CM - CM+4. 
  
  
 CML      SUBR
          LDD    CP          READ PRU VALUE FOR CONTROL POINT 
          ADK    ACLW 
          CRD    CM 
          LDD    CM+3        CHECK FOR LIMIT EXCEEDED 
          LPN    77 
          SBM    CMLA 
          MJN    CML1        IF LIMIT EXCEEDED
          NJN    CMLX        IF LIMIT NOT EXCEEDED
          LDD    CM+4 
          SBM    CMLA+1 
          PJN    CMLX        IF LIMIT NOT EXCEEDED
 CML1     ERROR  PRL,CH,IW   *PRU LIMIT.* 
  
 CMLA     CON    0,0         VALUE OF PRU DECREMENT 
 CPF      SPACE  4,10 
**        CPF - CHECK FOR PRESERVED FILE. 
* 
*         ENTRY  (P3) = MST ADDRESS.
* 
*         EXIT   (A) .LT. 0 IF PRESERVED FILE BIT SET.
* 
*         USES   T1, CM - CM+4. 
* 
*         CALLS  CTA. 
  
  
 CPF      SUBR               ENTRY/EXIT 
          LDD    P3          SET *TRT* ADDRESS
          SHN    3
          ADN    TRLL 
          RJM    CTA         CALCULATE FWA OF TRT 
          SBD    TH 
          SHN    2
          ADD    FS+1 
          STD    T1          SAVE REMAINDER FOR POSITION IN WORD
          SHN    -2          4 TRACK ASSIGNMENTS FOR EACH WORD
          CRD    CM          READ *TRT* WORD FOR TRACK
          LDD    T1          SET PRESERVED BIT POSITION 
          LPN    3
          ADC    SHNI+6 
          STM    CPFA        SET SHIFT INSTRUCTION
          LDD    CM+4        CHECK FOR PRESERVED STATUS 
 CPFA     SHN    **          (21-13+TRACK INDEX)
          UJN    CPFX        RETURN 
 CPR      SPACE  4,20 
**        CPR - CHECK PROPER PERMANENT FILE RESIDENCE.
* 
*         ENTRY  (T2) = EST ORDINAL FOR DEVICE. 
*                (T3 - T7) = EST ENTRY FOR DEVICE.
*                (FN - FN+4) = USERS FAMILY OR PACK NAME. 
*                (FRSM) = MASK BITS FOR DIRECT ACCESS FILE. 
*                RESIDENCE ALLOWED. 
* 
*         EXIT   (A) = 0 IF PROPER DEVICE.
*                (A) .GT. 0 IF INCORRECT DEVICE.
*                (A) = -1 IF DEVICE UNAVAILABLE.
*                (A) = -2 IF DEVICE ACCESS ERROR. 
* 
*         USES   T4, CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 CPR9     LDN    1
  
 CPR      SUBR               ENTRY/EXIT 
          LDD    T3 
          SHN    -6 
          LPN    41 
          LMN    40 
          NJN    CPRX        IF NOT AVAILABLE MASS STORAGE
          LDD    T3+4        READ  *MDGL* 
          SHN    3
          ADN    MDGL 
          CRD    CM 
          LDM    PFPN 
          ZJN    CPR1        IF NOT AUXILIARY DEVICE REQUEST
          LDD    CM 
          SHN    21-12
          PJN    CPR9        IF NOT AUXILIARY DEVICE
 CPR1     LDD    T3+4        SET MST ADDRESS
          SHN    3
          ADN    STLL 
          CRD    CM 
          LDD    CM 
          LPC    MLFPR+MLIAL+MLIHD+MLIFD+MLIPF
          ZJN    CPR2        IF NO INITIALIZATION PENDING 
          LCN    1           FLAG *DEVICE UNAVAILABLE*
          UJP    CPRX        RETURN 
  
 CPR2     LDD    T3+4        READ PF DESCRIPTION
          SHN    3
          ADN    PFGL 
          CRD    CM 
          LDM    RQDT        CHECK FOR USER REQUESTED DEVICE TYPE 
          SHN    -6 
          ZJN    CPR5        IF NOT USER REQUESTED DEVICE TYPE
          LDM    RQDT+1      CHECK UNIT COUNT 
          LPN    77 
          SBN    1R0+1       CONVERT FROM DISPLAY CODE
          LMD    CM+4 
          LPN    77 
          ZJN    CPR5        IF RIGHT UNIT COUNT AND FIRST UNIT 
 CPR4     LJM    CPRX        RETURN 
  
 CPR5     LDD    CM          COMPARE DEVICE NAMES 
          LMD    FN 
          NJN    CPR4        IF NO MATCH
          LDD    CM+1 
          LMD    FN+1 
          NJN    CPR4        IF NO MATCH
          LDD    CM+2 
          LMD    FN+2 
          NJN    CPR4        IF NO MATCH
          LDD    CM+3 
          LMD    FN+3 
          SCN    77 
          NJN    CPR4        IF NO MATCH
          LDD    T3+4        READ DEVICE MASKS
          SHN    3
          ADN    PUGL 
          CRD    CM 
          LDM    SSJS 
          ZJN    CPR6        IF NOT *SSJ=* JOB
          LDM    PFSR        CHECK SPECIAL REQUEST
          LPN    77 
          LMN    SRMR 
          NJN    CPR6        IF MASTER DEVICE RESIDENCE NOT REQUIRED
          LDD    CM+4        CHECK PRIMARY MASK 
          UJN    CPR7        CHECK MASK 
  
 CPR6     LDD    CM+3        CHECK SECONDARY MASK 
          SHN    14 
          LMD    CM+4 
          SHN    -10
 CPR7     STM    CPRB 
          LDM    FRSM 
          LPC    *           (DEVICE MASK)
 CPRB     EQU    *-1
          LMM    FRSM 
          LPC    377
          NJN    CPR8        IF NOT CORRECT DEVICE
          LDM    LFAL        CHECK DEVICE ACCESS LEVEL
          STD    CM+4 
          LDD    T2 
          STD    CM+2 
          LDN    VAES 
          STD    CM+1 
          MONITOR  VSAM 
          LDD    CM+1 
          ZJN    CPR8        IF FILE ACCESS VALID FOR DEVICE
          LCN    2
 CPR8     LJM    CPRX        RETURN 
 DDN      SPACE  4,10 
**        DDN - DETERMINE DEVICE NAME.
* 
*         ENTRY  (PFPN - PFPN+3) = PACK NAME. 
*                (PFPN+4) = FAMILY EST ORDINAL. 
* 
*         EXIT   (FN - FN+3) = PACK OR FAMILY NAME FOR REQUEST. 
* 
*         USES   CM - CM+4, FN - FN+4.
* 
*         MACROS SFA. 
  
  
 DDN1     LDD    MA          SET PACK NAME
          CWM    PFPN,ON
          SBN    1
          CRD    FN 
  
 DDN      SUBR               ENTRY/EXIT 
          LDM    PFPN 
          NJN    DDN1        IF REMOVABLE DEVICE REQUEST
  
*         SET FAMILY NAME.
  
          SFA    EST,PFPN+4  READ FAMILY EST ENTRY
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4        READ FAMILY NAME 
          SHN    3
          ADN    PFGL 
          CRD    FN 
          UJN    DDNX        RETURN 
 DFR      SPACE  4,20 
**        DFR - DETERMINE FILE RESIDENCY. 
* 
*         ENTRY  (FN - FN+4) = FILE NAME SET AS LOCAL FILE. 
*                (FS - FS+4) = FST ENTRY FOR EXISTING FILE. 
* 
*         EXIT   (FS - FS+4) = FST ENTRY (STATUS SET BUSY). 
*                (ERRB) .NE. 0 IF FILE PREVIOUSLY EXISTED.
*                (LFEF) = 0 IF FILE IS NOT EMPTY. 
*                (PFDN) = DEVICE NUMBER OF DEVICE LOCAL FILE IS ON. 
*                (SDAB) = FIRST TRACK OF FILE.
*                (SDAC) = 4XXX WHERE XXX IS *DT* IF REQUESTED 
*                         OTHERWISE XXX = 000.
* 
*         USES   LF - LF+1, P0 - P3, SA - SA+1, T1 - T7.
* 
*         CALLS  CDA, CML, CPF, CPR, DDN, DSA, PDS, SFA, SFN, SFT.
* 
*         MACROS ERROR, SETMS, SFA. 
  
  
*         FILE EXISTS OR HAS BEEN CREATED - PROCEED WITH REQUEST. 
  
 DFR20    LDC    4000        SET DA FILE INDICATION + *DT* IF REQUESTED 
 DFRA     EQU    *-1
          STM    SDAC 
          LDD    FS+1        SET FIRST TRACK
          STM    SDAB 
          LDD    P3          SAVE FILE MST ADDRESS
          SHN    3           SET DEVICE NUMBER
          ADN    PFGL 
          CRD    CM 
          LDD    CM+3 
          LPN    77 
          STM    PFDN 
          LDD    FS 
          LMM    SDAA 
          NJN    DFRX        IF FILE NOT ON MASTER DEVICE 
          STM    PFDN        SET DEVICE NUMBER TO ZERO
  
 DFR      SUBR               ENTRY/EXIT 
          LDD    FS+1        CHECK TRACK ASSIGNMENT 
          NJN    DFR1        IF NOT NULL FILE 
          LJM    DFR10       DETERMINE CORRECT DEVICE 
  
*         PROCESS EXISTING FILE.
  
 DFR1     LDM    FRSM        CHECK FOR SPECIAL USER INDEX 
          SHN    21-13
          PJN    DFR2        IF NOT SPECIAL USER INDEX
          SHN    13+21-20    RESTORE ORIGINAL VALUE 
          LPC    -377        CLEAR DEVICE ACCESS MASK 
          STM    FRSM 
 DFR2     LDD    FS+2 
          NJN    DFR3        IF NOT EMPTY FILE
          AOM    LFEF 
 DFR3     LDD    FN+4        CHECK FILE TYPE
          SHN    -6 
          LMN    PMFT 
          STM    DFRB        SAVE *PMFT* TEST 
          ZJN    DFR6        IF *PMFT* FILE TYPE
          LMN    LIFT&PMFT
          ZJN    DFR5        IF *LIFT* FILE TYPE
          LMN    LOFT&LIFT
          ZJN    DFR6        IF *LOFT* FILE TYPE
 DFR4     ERROR  IFT,CH,IW   *(FILE NAME) INCORRECT FILE TYPE*
  
 DFR5     LDM    FRSM        CHECK IF *LIFT* FILES LEGAL
          SHN    21-12
          PJN    DFR4        IF *LIFT* FILES INVALID
 DFR6     LDD    FN+3 
          LPN    4
          NJN    DFR4        IF EXECUTE ONLY FILE 
  
*         DETERMINE IF FILE IS ON PROPER DEVICE.
  
          LDD    FS          READ EST ENTRY 
          STD    T2 
          SFA    EST
          ADK    EQDE 
          CRD    T3 
          RJM    DDN         DETERMINE DEVICE NAME
          RJM    CPR         CHECK FOR PROPER RESIDENCE 
          NJN    DFR8        IF RESIDENCE CHECK FAILED
          RJM    CDA         CHECK DEVICE ACCESSIBILITY 
          RJM    PDS         PROCESS DEVICE STATUS
          LDD    T3+4        SAVE MST ADDRESS 
          STD    P3 
          LDC    *           CHECK IF *PMFT* FILE 
 DFRB     EQU    *-1
          NJN    DFR7        IF NOT *PMFT* FILE 
          RJM    CPF         CHECK FOR PRESERVED FILE 
          PJN    DFR7        IF FILE NOT PRESERVED
          NFA    FA,R        READ FILE NAME FOR MESSAGE 
          ADK    FNTL 
          CRD    FN 
          LJM    DFR4        RETURN FILE TYPE ERROR 
  
 DFR7     LJM    DFR20       COMPLETE PROCESSING
  
  
 DFR8     MJN    DFR8.1      IF NOT DIRECT ACCESS DEVICE ERROR
          ERROR  DAD,CH,IW   * DIRECT ACCESS DEVICE ERROR.* 
  
 DFR8.1   ADN    1
          ZJN    DFR9        IF DEVICE UNAVAILABLE
          ERROR  LNP,CH,IW,,SVE  * ACCESS LEVEL NOT VALID ON PF DEVICE* 
  
 DFR9     ERROR  PFN,CH,IW   * DEVICE UNAVAILABLE.* 
  
*         IF NO ACCESSIBLE DEVICE WITH SUFFICIENT SPACE IS FOUND, 
*         *DFRC* WILL BE THE STATUS FOR THE MOST ACCESSIBLE DEVICE
*         WHICH WAS ALMOST (BUT NOT QUITE) SELECTED.
  
 DFR9.1   LDC    77          DEVICE STATUS FOR NO DEVICE FOUND
*         LDC    (STATUS)    (STATUS FOR DEVICE WITH NO SPACE)
 DFRC     EQU    *-1
          SBN    3
          PJN    DFR9        IF DEVICE INACCESSIBLE OR NO DEVICE FOUND
          ERROR  SPN,CH,IW   *REQUESTED SPACE UNAVAILABLE.* 
  
*         FILE DOES NOT EXIST - DETERMINE PROPER DEVICE FOR FILE. 
  
 DFR10    AOM    LFEF        SET EMPTY FILE 
          RJM    SFA
          ADN    1
          CRD    CM 
          LDD    CM          SET DEVICE TYPE REQUESTED
          STD    P0 
          LPC    3777        SET TYPE REQUESTED IN CATALOG
          RAM    DFRA 
          LDM    FETL        CHECK FET LENGTH 
          SBN    CFOU+1 
          MJN    DFR10.1     IF NOT LONG ENOUGH TO REQUEST SPACE
          RJM    SFA
          ADN    CFOU 
          CRD    CM 
          LDD    CM+3 
          STD    LF 
          ADD    CM+4 
          ZJN    DFR10.1     IF SPACE NOT SPECIFIED 
          AOM    DFRD        SET SPACE REQUIRED CHECK 
          LDD    CM+4 
          STD    LF+1 
 DFR10.1  LDN    0
          STD    SA 
          STD    SA+1 
          STD    FS 
          LDN    77          INITIALIZE DEVICE STATUS 
          STD    P2 
          RJM    DDN         DETERMINE DEVICE NAME
          LDN    ESTP        READ EST POINTER 
          CRD    T1 
          LDD    T1+3        SET LAST MASS STORAGE ORDINAL + 1
          STD    T1 
          LDN    NOPE-1      INITIALIZE EST ORDINAL FOR SEARCH
          STD    T2 
  
*         CHECK NEXT DEVICE.
  
 DFR11    AOD    T2          ADVANCE EST ORDINAL
          LMD    T1 
          NJN    DFR12       IF MORE DEVICES TO CHECK 
          LDD    FS 
          ZJP    DFR9.1      IF NO DEVICE FOUND 
          LDD    P2 
          RJM    PDS         PROCESS DEVICE STATUS
          LJM    DFR14       SET UP FNT AND EXIT
  
 DFR12    SFA    EST,T2      READ EST ENTRY 
          ADK    EQDE 
          CRD    T3 
          LDD    P0 
          ZJN    DFR13       IF DEVICE TYPE NOT REQUESTED 
          LMD    T3+3 
          NJN    DFR11       IF NOT PROPER DEVICE TYPE
 DFR13    RJM    CPR         CHECK FOR PROPER RESIDENCE 
          NJN    DFR11       IF NOT PROPER DEVICE 
          RJM    CDA         CHECK DEVICE ACCESSIBILITY 
          STD    P1          SAVE STATUS OF CURRENT DEVICE
  
*         SELECT MOST ACCESSIBLE DEVICE WITH MOST AVAILABLE SPACE.
  
          RJM    DSA         DETERMINE SPACE AVAILABLE
          LDD    P2          COMPARE STATUS OF DEVICES
          SBD    P1 
          ZJN    DFR13.2     IF STATUS THE SAME 
          PJN    DFR13.3     IF CURRENT DEVICE MORE ACCESSIBLE
 DFR13.1  UJP    DFR11       CHECK NEXT DEVICE
  
 DFR13.2  LDD    CM          COMPARE SECTORS AVAILABLE
          SBD    SA 
          MJN    DFR13.1     IF LESS AVAILABLE
          NJN    DFR13.5     IF MORE AVAILABLE
          LDD    SA+1 
          SBD    CM+1 
          MJN    DFR13.5     IF MORE AVAILABLE
          UJN    DFR13.1     CHECK NEXT DEVICE
  
 DFR13.3  LDN    0           SPACE REQUIRED NOT SPECIFIED 
*         LDN    1           (SPACE REQUIRED SPECIFIED) 
 DFRD     EQU    *-1
          ZJN    DFR13.5     IF SPACE REQUIRED NOT SPECIFIED
          LDD    P1          COMPARE CURRENT DEVICE STATUS
          SBM    DFRC 
          PJN    DFR13.4     IF SAVED STATUS BETTER 
          RAM    DFRC 
 DFR13.4  LDD    CM 
          SBD    LF 
          MJN    DFR13.1     IF NOT ENOUGH SPACE
          NJN    DFR13.5     IF ENOUGH SPACE
          LDD    CM+1 
          SBD    LF+1 
          MJN    DFR13.1     IF NOT ENOUGH SPACE
 DFR13.5  LDD    CM          SELECT THIS DEVICE 
          STD    SA 
          LDD    CM+1 
          STD    SA+1 
          LDD    T2          SET EST ORDINAL
          STD    FS 
          LDD    P1          SAVE DEVICE STATUS 
          STD    P2 
          LDD    T3+4        SAVE MST ADDRESS 
          STD    P3 
          LDM    PFPN 
          NJN    DFR14       IF AUXILIARY DEVICE REQUEST
          LJM    DFR11       CHECK FOR MORE DEVICES 
  
 DFR14    LDD    FS          SET DRIVER FOR PF EQUIPMENT
          STD    T5 
          SETMS  STATUS 
 DFR18    LDM    SLM         PRE-CHECK PRU LIMIT
          STM    CMLA+1 
          LDN    0           SHOW REQUEST PRESET
          RJM    CML
          LDC    PFSN 
          RJM    SFN
          RJM    SFT         SET FNT/FST INFORMATION
          LDD    FS+1 
          ZJN    DFR19       IF NO TRACK ASSIGNED 
          LDM    SLM         DECREMENT PRU COUNT FOR TRACK ASSIGNED 
          STM    AIPR+1 
          LJM    DFR20       COMPLETE 
  
 DFR19    ERROR  TKL,CH,IW,FS  *EQXXX,DNYY, TRACK LIMIT.* 
 DSA      SPACE  4,10 
**        DSA - DETERMINE SPACE AVAILABLE ON A DEVICE.
* 
*         ENTRY  (T3+4) = MST ADDRESS/10. 
* 
*         EXIT   (CM - CM+1) = SPACE AVAILABLE. 
* 
*         USES   CM - CM+4. 
  
  
 DSA      SUBR               ENTRY/EXIT 
          LDD    T3+4        ADDRESS OF MST 
          SHN    3
          ADK    MDGL        GET SECTORS PER TRACK
          CRD    CM 
          LDD    CM+4 
          STD    T0 
          LDD    T3+4        ADDRESS OF MST 
          SHN    3
          ADK    TDGL        GET TRACKS AVAILABLE 
          CRD    CM 
          LDN    0
          STD    CM          CLEAR RESULT 
          STD    CM+1 
          STD    CM+3        CLEAR UPPER HALF OF MULTIPLIER 
  
*         MULTIPLY NUMBER OF TRACKS AVAILABLE BY NUMBER OF SECTORS
*         PER TRACK USING SHIFTS AND ADDS.
  
 DSA1     LDD    T0          CHECK MULTIPLIER (SECTORS PER TRACK) 
          ZJN    DSAX        IF DONE
          SHN    21-0        RIGHT SHIFT MULTIPLIER 1 BIT 
          STD    T0 
          PJN    DSA2        IF NO ADDITION 
          LDD    CM+4        ADD SHIFTED NUMBER OF TRACKS TO RESULT 
          RAD    CM+1 
          SHN    -14
          ADD    CM+3 
          RAD    CM 
 DSA2     LDD    CM+3        SHIFT NUMBER OF TRACKS TO THE LEFT 
          RAD    CM+3 
          LDD    CM+4 
          RAD    CM+4 
          SHN    -14
          RAD    CM+3 
          UJN    DSA1        DO NEXT ITERATION OF MULTIPLY
 PDS      SPACE  4,25 
**        PDS - PROCESS DEVICE STATUS.
* 
*         ENTRY  (A) = 0 IF DEVICE CAN BE ACCESSED. 
*                (A) = 1 IF NEW ACTIVITY RESTRICTED ON DEVICE.
*                (A) = 2 IF PF UTILITY ACTIVE.
*                (A) = 3 IF ACCESS DENIED BY *SETMS*. 
*                (A) = 4 IF *ERROR IDLE* SET FOR DEVICE.
*                (FS) = EST ORDINAL OF DEVICE.
*                (FERT) = REAL-TIME PROCESSING FLAG.
*                (SSYS) = SUBSYSTEM FLAG. 
* 
*         EXIT   RETURN IF DEVICE CAN BE ACCESSED.
* 
*                TO *ERR* IF PF UTILITY ACTIVE. 
*                TO *ERR* IF DEVICE IS INACCESSIBLE.
*                TO *ERR* IF *ERROR IDLE* IS SET. 
* 
*                THE FOLLOWING LOCATIONS ARE SET FOR ERROR EXITS WHICH
*                MAY CAUSE THE JOB TO BE ROLLED OUT.
*                (ERRC) = ROLLOUT EVENT.
*                (ERRD) = ROLLOUT TIME. 
* 
*         USES   T0.
* 
*         MACROS ERROR. 
  
  
 PDS4     LDN    0           RETURN WITH (A) = 0
  
 PDS      SUBR               ENTRY/EXIT 
          STD    T0          SAVE DEVICE STATUS 
          SBN    2
          MJN    PDS4        IF DEVICE CAN BE ACCESSED, RETURN
          NJN    PDS1        IF PF UTILITY NOT ACTIVE 
          LDN    PFUE        SET ROLLOUT EVENT
          STM    ERRC 
          LDK    UIRT        SET ROLLOUT TIME 
          STM    ERRD 
          ERROR  PFA,CH,IW,,EC2  * PF UTILITY ACTIVE.*
  
 PDS1     LDM    FERT 
          NJN    PDS2        IF REAL-TIME PROCESSING SET
          LDM    SSYS 
          NJN    PDS3        IF A SUBSYSTEM 
  
*         SUSPEND THE JOB OR RETURN STATUS INDICATING DELAY TO CALLER.
  
 PDS2     LDD    T0 
          SBN    4
          ZJN    PDS3        IF *ERROR IDLE* IS SET 
          ERROR  WID,CH,IW,FS,EC6  * WAITING - INACCESSIBLE DEVICE.*
  
*         TERMINATE THE REQUEST.
  
 PDS3     ERROR  PFN,CH,IW   * DEVICE UNAVAILABLE.* 
 SFT      SPACE  4,20 
**        SFT - SET FNT/FST INFORMATION.
* 
*         ENTRY  (FNTA) = FNT ADDRESS IN NFL. 
*                (LFAL) = LOCAL FILE ACCESS LEVEL.
*                (FN - FN+4) = LOCAL FILE NAME. 
*                (FS) = FILE EST ORDINAL. 
* 
*         EXIT   (FA) = FNT ADDRESS.
*                (FS - FS+4) = FST ENTRY. 
*                (FN - FN+4) = FNT ENTRY. 
*                (RTKE) = RESERVED TRACK EST ORDINAL. 
*                (RTKT) = RESERVED TRACK. 
*                FNT/FST REWRITTEN TO CENTRAL MEMORY. 
* 
*         USES   FA, CM - CM+4, FN - FN+4, FS - FS+4. 
* 
*         MACROS MONITOR, NFA.
  
  
 SFT      SUBR               ENTRY/EXIT 
          LDC    LOFT*100    SET FILE TYPE
*         LDC    PMFT*100    (*ASSIGNPF* WITH *SRSY* SPECIAL REQUEST) 
 SFTA     EQU    *-1
          RAD    FN+4 
          LDM    FNTA        SET FST ADDRESS
          STD    FA 
          NFA    FA,R        SET FILE ACCESS LEVEL
          ADN    FUTL 
          CRD    CM 
          LDM    LFAL 
          STD    CM+2 
          NFA    FA,R        UPDATE FNT INFORMATION 
          ADK    FNTL 
          CWD    FN 
          ADN    FUTL-FNTL
          CWD    CM 
          LDN    ZERL        REQUEST TRACK FOR FILE 
          CRD    CM 
          LDD    FS          SET EST ORDINAL
          STD    CM+1 
          STM    RTKE        SET RESERVED TRACK EST ORDINAL 
          MONITOR RTCM
          LDD    CM+4        SET FST
          STM    RTKT        SET RESERVED TRACK 
          STD    FS+1 
          STD    FS+2 
          LDN    FSMS 
          STD    FS+3 
          LDN    4
          STD    FS+4 
          NFA    FA,R        REWRITE FNT/FST
          ADK    FNTL 
          CWD    FN 
          ADN    FSTL-FNTL
          CWD    FS 
          LJM    SFTX        RETURN 
          SPACE  4,10 
 WCS$     EQU    0           SELECT CONSECUTIVE SECTOR WRITE
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPWEI 
*CALL     COMPWSS 
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          OVERFLOW  OVLD,EPFW  OVERFLOW INTO ERROR PROCESSING AREA
          OVERLAY  (CATALOG/PERMIT SEARCH AND RESIDENT.),OVLA 
          SPACE  4,25 
**        THIS OVERLAY CONTAINS PRELIMINARY PROCESSING FOR
*         MOST REQUESTS, INCLUDING CATALOG AND PERMIT SEARCH. 
*         IT ALSO CONTAINS RESIDENT SUBROUTINES.
* 
*         ENTRY  (CC) = COMMAND CODE. 
  
  
 OVL      BSS    0           ENTRY
          LJM    IRP         INITIAL REQUEST PROCESSING 
 MSR      SPACE  4,10 
**        MSR - *COMPRNS* MASS STORAGE READ ERROR PROCESSOR.
* 
*         ENTRY  FROM *RNS*.
*                (MSRA) = ADDRESS OF ERROR PROCESSOR IN CALLER
*                         OF *RNS*. 
* 
*         CALLS  PCC, PCE, PTE. 
  
  
 MSR      SUBR               ENTRY/EXIT 
          RJM    PCE         PROCESS CATALOG READ ERROR 
*         RJM    PCC         (CATALOG READ ERROR FOR *CHANGE* REQUEST)
*         RJM    PTE         (READ ERROR FOR DEVICE TO DEVICE TRANSFER) 
 MSRA     EQU    *-1         ERROR PROCESSOR ADDRESS
          UJN    MSRX        RETURN 
          SPACE  4,10 
*         RESIDENT COMMON DECKS.
  
  
*CALL     COMPSNT 
*CALL     COMPRNS 
          SPACE  4,10 
 LOCG     EQU    *+5         LOAD ADDRESS FOR DEVICE/DEVICE TRANSFER
          TITLE  RESIDENT SUBROUTINES.
 CAI      SPACE  4,15 
**        CAI - CLEAR ALLOCATION INTERLOCK. 
* 
*         ENTRY  (T5)= PERMANENT FILE EST ORDINAL.
*                (AILK) = TRACK FOR ALLOCATION INTERLOCK. 
* 
*         EXIT   ALLOCATION INTERLOCK CLEARED.
* 
*         USES   T5.
* 
*         CALLS  CTI. 
  
  
 CAI      SUBR               ENTRY/EXIT 
          LDC    4000        SET CHECKPOINT VIA *STBM*
          RAD    T5 
          LDM    AILK 
          RJM    CTI         CLEAR TRACK INTERLOCK
          LDD    T5          RESTORE EST ORDINAL
          LPC    777
          STD    T5 
          LDN    0           CLEAR INTERLOCK FLAG 
          STM    AILK 
          UJN    CAIX        RETURN 
 CSA      SPACE  4,15 
**        CSA - COMPUTE SECTOR ADDRESS. 
* 
*         ENTRY  (RI - RI+1) = RANDOM INDEX OF PERMIT SECTOR. 
*                (DVLW - DVLW+4) = DEVICE LAYOUT WORD OF MST. 
*                PROPER DRIVER LOADED.
* 
*         EXIT   (T6) = TRACK OF RANDOM SECTOR. 
*                (T7) = SECTOR OF RANDOM SECTOR.
* 
*         USES   T6 - T7, RI - RI+1.
* 
*         CALLS  CRA. 
* 
*         MACROS ERROR. 
  
  
 CSA      SUBR               ENTRY/EXIT 
          LDM    DVLW+2      SET FIRST TRACK
          STD    T6 
          RJM    CRA         CONVERT RANDOM ADDRESS 
          PJN    CSAX        IF RANDOM ADDRESS OK 
          ERROR  RIN,,,EQ    *EQXXX,DNYY, RANDOM INDEX ERROR.*
 DPR      SPACE  4,15 
**        DPR - DELAY PRIOR TO RETRY. 
* 
*         DELAY 100 MILLISECONDS. 
* 
*         EXIT   TO *ERR* IF *ORET* SET.
* 
*         USES   T0.
* 
*         MACROS DELAY, ERROR, PAUSE. 
  
  
 DPR      SUBR               ENTRY/EXIT 
          LDC    1400 
          STD    T0 
 DPR1     DELAY 
          PAUSE 
          LDD    CM+1 
          LMN    ORET 
          ZJN    DPR2        IF *ORET* SET
          SOD    T0 
          PJN    DPR1        IF MORE DELAY REQUIRED 
          UJN    DPRX        RETURN 
  
 DPR2     ERROR  ABT,,,T5    *EQXXX,DNYY, PFM ABORTED.* 
 DTK      SPACE  4,15 
**        DTK - DROP TRACKS.
* 
*         ENTRY  (A) = LAST SECTOR WRITTEN. 
*                (T6) = ADDRESS OF LAST TRACK (NOT RELEASED). 
*                (T5) = EST ORDINAL.
* 
*         EXIT   LAST SECTOR WRITTEN UPDATED IN TRT.
* 
*         USES   CM - CM+4. 
  
  
 DTK      SUBR               ENTRY/EXIT 
          STD    CM+3 
          LDD    T6 
          LPC    3777 
          STD    CM+2 
          LDD    T5 
          STD    CM+1 
          MONITOR DTKM
          UJN    DTKX        RETURN 
 ITC      SPACE  4,15 
**        ITC - INTERLOCK TRACK CHAIN.
* 
*         ENTRY  (A) = TRACK CHAIN TO BE INTERLOCKED. 
*                (T5) = EST ORDINAL.
* 
*         EXIT   (A) = 0 IF TRACK INTERLOCKED.
*                (A) = 2 IF TRACK NOT RESERVED. 
*                (T6) = TRACK.
* 
*         CALLS  DPR, STI.
  
  
 ITC2     LMN    1           RETURN STATUS VALUE
  
 ITC      SUBR               ENTRY/EXIT 
          STD    T6 
 ITC1     RJM    STI         TRY TO INTERLOCK TRACK 
          LMN    1
          NJN    ITC2        IF INTERLOCK WORKED OR TRACK NOT RESERVED
          RJM    DPR         DELAY PRIOR TO RETRY 
          UJN    ITC1        TRY AGAIN
 RMD      SPACE  4,15 
**        RMD - RESET TO MASTER DEVICE. 
* 
*         ENTRY  (EQ) = MASTER DEVICE EST ORDINAL.
* 
*         EXIT   (T5) = MASTER DEVICE EST ORDINAL.
* 
*         USES   T5.
* 
*         CALLS  PDV. 
* 
*         MACROS SETMS. 
  
  
 RMD      SUBR               ENTRY/EXIT 
          LDD    EQ 
          STD    T5 
          SETMS  IO,NS
          RJM    PDV         PROCESS DEVICE STATUS
          UJN    RMDX        RETURN 
 UCE      SPACE  4,20 
**        UCE - UPDATE CATALOG ENTRY. 
* 
*         ENTRY  (CB) = POINTER TO BUFFER LOCATION. 
*                (CI) = POINTER TO CATALOG ENTRY IN BUFFER. 
*                MASTER DEVICE CHANNEL RESERVED.
*                (PWRF) = *PFM* RESTART FLAGS FOR RECALL. 
*                (UCEA) SET WITH *STMI+CI* IF FCMD, FCUD
*                       ARE TO BE UPDATED.
* 
*         EXIT   (PWRF) = FLAGS SET FOR ACCESS AND PERMIT COUNTS
*                         UPDATED.
*                FCAC, FCAD, FCMD, FCUD UPDATED.
*                CATALOG ENTRY REWRITTEN. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  WBI. 
  
  
 UCE      SUBR               ENTRY/EXIT 
  
*         UPDATE DATES. 
  
          LDN    PDTL        READ PACKED DATE AND TIME
          CRD    CM 
          LDN    3
          STD    CM 
          RAD    CI 
 UCE1     LDM    CM+2-1,CM
 UCEA     UJN    UCE2        READ ACCESS - BYPASS FCMD, FCUD UPDATES
*         UJN    UCE3        (*UATTACH*/M=R - BYPASS DATE/TIME UPDATE)
*         STM    FCUD-1,CI   (UPDATE UTILITY CONTROL DATE/TIME) 
          CON    FCUD-1 
 UCEB     STM    FCMD-1,CI   UPDATE MODIFICATION DATE 
*         UJN    UCE3        (*UATTACH* - BYPASS FCMD, FCAD UPDATE) 
 UCE2     STM    FCAD-1,CI   UPDATE ACCESS DATE 
 UCE3     SOD    CI 
          SOD    CM 
          NJN    UCE1        IF UPDATE NOT COMPLETE 
  
*         UPDATE ACCESS COUNT.
  
          LDM    PWRF        RESTART FLAGS
          LPK    RFAC 
          NJN    UCE4        IF ACCESS COUNT UPDATED
 UCEC     AOM    FCAC+1,CI   ADVANCE ACCESS COUNT 
*         UJN    UCE4        (*UATTACH* - BYPASS ACCESS COUNT UPDATE) 
          SHN    -14
          RAM    FCAC,CI
  
*         REWRITE CATALOG ENTRY.
  
 UCE4     LDD    CB          REWRITE CATALOG
          RJM    WBI
          LDM    PWRF        RESTART FLAGS
          SCN    RFAC+RFPC
          ADK    RFAC+RFPC   SET ACCESS AND PERMIT COUNTS UPDATED 
          STM    PWRF 
          UJP    UCEX        RETURN 
  
*         CHECK RANGE ON GENERATED JUMPS. 
  
          ERRNG  37-UCE3+UCEB 
          ERRNG  37-UCE4+UCEC 
 WBI      SPACE  4,20 
**        WBI - WRITE BUFFER IN PLACE.
* 
*         ENTRY  (A) = BUFFER LOCATION. 
*                (T5) = MASTER DEVICE EST ORDINAL.
*                (STAT) = *STNS* BIT SET IF NO JOB SUSPENSION ALLOWED.
*                ADDRESS SET IN 2 LOCATIONS PRECEEDING BUFFER.
*                LINKAGE SET IN BUFFER. 
* 
*         EXIT   SECTOR WRITTEN.
*                TO *ERR* TO PROCESS MASS STORAGE ERROR.
* 
*         USES   T3, T6, T7.
* 
*         CALLS  PDV, PES, WDS. 
* 
*         MACROS ERROR, SETMS.
  
  
 WBI      SUBR               ENTRY/EXIT 
          STD    T3          SAVE BUFFER ADRRESS
          LDM    -2,T3
          STD    T6 
          LDM    -1,T3
          STD    T7 
          SETMS  IO,(RW,NS) 
          RJM    PDV         PROCESS DEVICE STATUS
          LDD    T3 
          LMK    WLSF        WRITE LAST SECTOR
          RJM    WDS
          PJN    WBIX        IF NO ERRORS 
          RJM    PES         PROCESS ERROR STATUS 
          LDM    STAT 
          LPK    STNS 
          NJN    WBI1        IF JOB SUSPENSION INHIBITED
          LDM    RDCT        DRIVER STATUS
          SHN    21-13
          PJN    WBI1        IF DATA TRANSFERRED
          ERROR  MSE,CH,,T5  *EQXXX,DNYY, MASS STORAGE ERROR.*
  
*         REQUEST ERROR IDLE BE SET WHEN CATALOG OR PERMIT FILE 
*         IS NOT INTACT.
  
 WBI1     ERROR  MSE,CH,,T5,,EI  *EQXXX,DNYY, MASS STORAGE ERROR.*
          SPACE  4,10 
*         RESIDENT COMMON DECKS.
  
  
*CALL     COMPCRA 
*CALL     COMPCTI 
*CALL     COMPIRA 
 STI$     SET    0           RETURN CONTROL ON TRACK INTERLOCK REJECT 
 TNR$     SET    0           DO NOT HANG ON *TRACK NOT RESERVED*
*CALL     COMPSTI 
          SPACE  4,10 
 OVLU     EQU    *+5         CATALOG/PERMIT UPDATE OVERLAY LOAD ADDRESS 
          SPACE  4,10 
*         DEFINE THE MAXIMUM LENGTH OF OVERLAYS *3PD* 
*         (CATALOG UPDATE ROUTINES) AND *3PE* (PERMIT 
*         UPDATE ROUTINES) IN SECTORS.
  
  
 OVLL     EQU    3*500B      OVERLAY LENGTH IN SECTORS
          SPACE  4,10 
*         DEFINE THE LOAD ADDRESS FOR THE COMMAND OVERLAYS. 
  
  
 OVLC     EQU    OVLU+OVLL-5 COMMAND CODE LOAD ADDRESS
          TITLE  PERMIT SEARCH ROUTINES.
 CPI      SPACE  4,25 
**        CPI - CHECK PERMISSION INFORMATION. 
* 
*         *BFMS* IS USED TO READ PERMITS. 
* 
*         ENTRY  (A) = PERMISSION MODE REQUIRED FOR COMMAND.
*                (CI) = INDEX TO CATALOG ENTRY. 
*                MASTER DEVICE CHANNEL RESERVED.
*                (PP) = 0.
*                (PB) = 0.
* 
*         EXIT   (A) = ACCESS MODE ALLOWED. 
*                TO ERR IF NOT PERMITTED ACCESS.
*                BUFFER LOADED WITH PERMITS.
*                (PP) = POINTER TO PERMIT ENTRY.
*                (PP) = 0 IF PERMIT ENTRY NOT AVAILABLE.
*                (PB) = ADDRESS OF PERMIT BUFFER. 
*                (PB) = 0 IF NO PERMIT SEARCH POSSIBLE. 
* 
*         USES   P1, PB, PP, T0, T1, RI - RI+1. 
* 
*         CALLS  SPI. 
* 
*         MACROS MONITOR. 
  
  
 CPI      SUBR               ENTRY/EXIT 
          LPN    37          SET MODE REQUIRED
          STD    T1 
          STM    CPIC 
          LDC    SHNI+21     SET SHIFT COUNT FOR MODE REQUIRED
          SBD    T1 
          STM    CPID 
          LDD    PI 
          ADD    PI+1 
          ZJN    CPIX        IF NOT ALTERNATE CATALOG ACCESS
  
*         READ PERMISSION INFORMATION.
  
          LDC    BFMS        SET PERMIT BUFFER
          STD    PB 
          LDM    FCRI,CI     SET PERMIT ADDRESS 
          STD    RI 
          LDM    FCRI+1,CI
          STD    RI+1 
          ADD    RI 
          ZJN    CPI1        IF NO PERMISSION INFORMATION AVAILABLE 
          LDN    IPPA        PF INCREMENT OF PERMIT FILE ACCESS 
          RAM    AIPF+1 
          RJM    SPI         SEARCH PERMISSION INFORMATION
  
*         CHECK FILE CATEGORY.
  
 CPI1     LDM    FCAM,CI     SET ACCESS MODE FOR FILE 
          LPN    77 
          STD    P1 
          LDM    FCCT,CI
          SHN    -6 
          LMK    FCPR 
          NJN    CPI3        IF NOT PRIVATE FILE
  
*         PRIVATE FILE. 
  
          LDD    PP 
          NJN    CPI5        IF PERMIT FOUND
 CPI2     LDN    PTNU        PROHIBIT ACCESS TO FILE
          STD    P1 
          UJN    CPI8        PROCESS PERMIT NOT FOUND 
  
*         SEMI-PRIVATE OR PUBLIC FILE.
  
 CPI3     LDM    PFAC 
          NJN    CPI4        IF CALLER HAS USER NAME IN CPA 
          STD    PB          PREVENT UPDATE OF PERMIT ENTRY 
          UJN    CPI6        TREAT AS NONPERMITTED PUBLIC FILE
  
 CPI4     LDC    MJNI+CPI6-CPIB  SET SEMI-PRIVATE OR PUBLIC FILE
          STM    CPIB 
          LDD    PP          CHECK PERMIT INDEX 
          ZJN    CPI6        IF NO PERMIT FOUND 
  
*         CHECK PERMIT TYPE.
  
 CPI5     LDM    FPMD,PP     CHECK PERMIT TYPE
          SHN    21-4 
 CPIB     MJN    CPI2        IF ACCOUNTING PERMIT 
*         MJN    CPI6        IF ACCOUNTING PERMIT (SEMI-PRIVATE/PUBLIC) 
          SHN    -21+4       SET PERMIT MODE
          STD    P1 
  
*         CHECK ACCESS MODE.
  
 CPI6     LDD    P1          PERMITTED MODE 
          SBN    PTLM 
          MJN    CPI8        IF LEGAL MODE
 CPI7     ERROR  FNF         *(FILENAME) NOT FOUND.*
  
*         CHECK FOR MULTI-LEVEL USER NAME ACCESS. 
  
 CPI8     LDM    PFPT 
          NJN    CPI10       IF NOT MULTI-LEVEL USER
          LDC    *           (REQUESTED MODE) 
 CPIC     EQU    *-1
          LMN    PTRD 
          ZJN    CPI9        IF READ MODE REQUESTED 
          LMN    PTEX&PTRD
          NJN    CPI10       IF MODE OTHER THAN EXECUTE REQUESTED 
 CPI9     LDN    PTRD        ALLOW READ MODE ACCESS 
          LJM    CPIX        RETURN 
  
*         CHECK EXPIRATION DATE.
  
 CPI10    LDD    PP 
          ZJN    CPI12       IF NO PERMIT ENTRY 
          LDM    FPMD,PP
          SHN    21-5 
          PJN    CPI12       IF EXPIRATION DATE NOT PRESENT 
          LDM    FPXD,PP
          LPN    77 
          STD    CM+3 
          SHN    14 
          LMM    FPXD+1,PP
          ZJN    CPI12       IF NONEXPIRING PERMIT
          STD    CM+4 
          LDN    VEDS        VALIDATE EXPIRATION DATE 
          STD    CM+1 
          MONITOR  VSAM 
          LDD    CM+1 
          ZJN    CPI12       IF PERMIT NOT EXPIRED
 CPI11    LJM    CPI7        *(FILENAME) NOT FOUND.*
  
*         CHECK IF ACCESS MODE PERMITTED. 
  
 CPI12    LDM    TMPE,P1
 CPID     SHN    **          (21 - REQUESTED MODE)
          PJN    CPI11       IF REQUESTED MODE NOT ALLOWED
          LDD    P1          ALLOW PERMITTED MODE 
          LJM    CPIX        RETURN 
  
*         TEST RANGE OF GENERATED RELATIVE JUMPS. 
  
          ERRNG  37+CPIB-CPI6 
  
  
 TMPE     BSS    0           TABLE OF MODE PERMISSION EQUIVALENCES. 
          LOC    0
  
          CON    MDWR        WRITE
          CON    MDRD        READ 
          CON    MDAP        APPEND 
          CON    MDEX        EXECUTE
          CON    MDNU        NEGATE 
          CON    MDMD        MODIFY 
          CON    MDRM        READ/ALLOW MODIFY
          CON    MDRA        READ/ALLOW EXTEND
          CON    MDUP        UPDATE 
          CON    MDRU        READ/ALLOW UPDATE
  
          LOC    *O 
 SPI      SPACE  4,25 
**        SPI - SEARCH PERMISSION INFORMATION.
* 
*         ENTRY  (PB) = BUFFER TO BE SEARCHED.
*                (PP) = 0.
*                (EBTK) = END BUFFER TRACK, IF BUFFER IS IN *BFMS*. 
* 
*         EXIT   (PP) = INDEX TO PERMIT ENTRY IF FOUND. 
*                (PP) = 0 IF PERMIT ENTRY NOT FOUND.
*                (T1) = NEXT AVAILABLE ENTRY IF NOT FOUND AND SHORT PRU.
*                (EXPC) = NUMBER OF EXPLICIT PERMIT ENTRIES (IF PERMIT
*                         NOT FOUND). 
*                (RI - RI+1) = RANDOM INDEX OF PERMIT SECTOR. 
*                            (ADVANCED IF SECTOR OVERFLOW)
*                (STAT) FLAG SET IF *BFMS* REUSED.
*                BUFFER LOADED WITH PERMITS.
* 
*         USES   T1, T2, PI - PI+1, RI - RI+1.
* 
*         CALLS  CSA, PDV, PES, RDS.
* 
*         MACROS ERROR, SETMS.
  
  
 SPI      SUBR               ENTRY/EXIT 
          LDN    STPR        INDICATE THAT PERMITS WERE READ
          RAM    STAT 
          LDM    EBTK        CHECK IF END BUFFER IS IN *BFMS* 
          ZJN    SPI1        IF *BFMS* IS NOT IN USE
          LDN    STBR        INDICATE THAT *BFMS* HAS BEEN REUSED 
          RAM    STAT 
  
*         READ NEXT SECTOR OF PERMITS.
  
 SPI1     RJM    CSA         COMPUTE RANDOM ADDRESS 
          LDD    T6          SET CURRENT SECTOR POINTERS
          STM    -2,PB
          STM    ERRC 
          LDD    T7 
          STM    -1,PB
          STM    ERRD 
          SETMS  IO 
          RJM    PDV         PROCESS DEVICE STATUS
          LDD    PB 
          RJM    RDS         READ SECTOR
          PJN    SPI2        IF NO READ ERROR 
          RJM    PES         PROCESS ERROR STATUS 
          ERROR  MSE,CH,,EQ  *EQXXX,DNYY, MASS STORAGE ERROR.*
  
 SPI2     LDM    1,PB        WORD COUNT IN PERMIT SECTOR
          SBN    NWPE+NWPH
          MJN    SPI3        IF INCORRECT SECTOR LENGTH 
          LPN    NWPE-1 
          ZJN    SPI4        IF INTEGRAL NUMBER OF PERMIT ENTRIES 
          ERRNZ  NWPH-NWPE   HEADER SIZE MUST EQUAL ENTRY SIZE
 SPI3     ERROR  BCS,,,T5,,EI  *EQXXX,DNYY, BAD CATALOG/PERMIT SECTOR.* 
  
 SPI4     LDN    NWPH        ADVANCE WORD COUNT PAST HEADER 
          STD    T2 
          LDD    PB          RESET SEARCH INDEX 
          ADN    NWPH*5+2    SKIP HEADER AND CONTROL BYTES
          STD    T1 
          UJN    SPI7        CHECK FIRST ENTRY IN SECTOR
  
*         ADVANCE TO NEXT PERMIT ENTRY. 
  
 SPI5     LDM    FPMD,T1
          SHN    21-4 
          MJN    SPI6        IF ACCOUNTING PERMIT 
          AOM    EXPC        ADVANCE EXPLICIT PERMIT COUNT
 SPI6     LDN    NWPE*5      ADVANCE BUFFER INDEX 
          RAD    T1 
          LDN    NWPE        INCREMENT WORD COUNT 
          RAD    T2 
          LMM    1,PB 
          NJN    SPI7        IF NOT END OF BUFFER 
          UJN    SPI10       END OF BUFFER
  
 SPI7     LDM    PFAC 
          LMM    FPAN,T1     COMPARE USER NAME
          NJN    SPI5        IF NO MATCH
          LDM    FPAN+1,T1
          LMM    PFAC+1 
          NJN    SPI5        IF NO MATCH
          LDM    FPAN+2,T1
          LMM    PFAC+2 
 SPI8     NJN    SPI5        IF NO MATCH
          LDM    FPAN+3,T1
          LMM    PFAC+3 
          SCN    77 
          NJN    SPI8        IF NO MATCH
          LDD    T1          SET POINTER TO ENTRY 
          STD    PP 
 SPI9     LDD    T1          SET HOLE ADDRESS 
          STM    NPHA 
          LJM    SPIX        RETURN 
  
 SPI10    LDD    T2          CHECK WORD COUNT OF SECTOR 
          LMD    HN 
          NJN    SPI9        IF END OF PERMITS
          LDM    FPRI,PB     CHECK FOR LINKED PERMIT BUFFERS
          STD    RI 
          LDM    FPRI+1,PB
          STD    RI+1 
          ADD    RI 
          ZJN    SPI9        IF INDEX NOT SET 
          LJM    SPI1        READ NEXT SECTOR 
          SPACE  4,10 
 OVL0     EQU    *+5         ZERO-LEVEL OVERLAY LOAD ADDRESS
          TITLE  CATALOG SEARCH ROUTINES. 
 CCD      SPACE  4,25 
**        CCD - CHECK CATALOG DATA. 
* 
*         CHECK IF CATALOG ENTRY IS THAT OF DESIRED FILE. 
*         IF PASSWORD PRESENT IN CATALOG ENTRY, VERIFY THAT 
*         CORRECT PASSWORD WAS SPECIFIED AND THAT PASSWORD
*         HAD NOT EXPIRED (ALTERNATE USER ONLY).
*         THE ACCESS LEVEL AND ACCESS CATEGORY SET ARE ALSO 
*         VALIDATED.  STATISTICS ARE ACCUMULATED FOR USER 
*         CONTROL CHECKS. 
* 
*         ENTRY  (T3) = INDEX TO CATALOG ENTRY. 
*                (FN - FN+3) = FILE NAME. 
*                (PFPW - PFPW+3) = FILE PASSWORD FROM CALL BLOCK
*                (CCDA) = EXIT JUMP IF NO OPTIONAL USER.
* 
*         EXIT   (A) = 0 IF FILE FOUND AND ACCESS ALLOWED.
*                (NF - NF+1) INCREMENTED. 
*                (CS - CS+1) ADVANCED IF FILE IS INDIRECT.
*                TO *ERR* IF ACCESS TO FILE NOT ALLOWED.
* 
*         USES   T3, FN - FN+3. 
* 
*         MACROS ERROR, MONITOR.
* 
*         NOTES  THE USE OF THE DATA TAGS *CCDD*, *CCDF*, *CCDI*
*                AND *CCDP* SHOULD BE AVOIDED, SINCE THEY CONFLICT
*                WITH GLOBAL SYMBOL DEFINITIONS.
  
  
 CCD      SUBR               ENTRY/EXIT 
 CCDB     UJN    CCD1        SET TO *PSN* IF ALLOCATION COMMAND 
*                            I.E. SAVE, REPLACE, APPEND, DEFINE.
  
*         ACCUMULATE STATISTICS.
  
          AOD    NF+1        ADVANCE FILE COUNT 
          SHN    -14
          RAD    NF 
          LDM    FCBS,T3
          SHN    6
          MJN    CCD1        IF DIRECT ACCESS FILE
          LDM    FCLF+1,T3   ADD TO CUMULATIVE SIZE OF INDIRECT FILES 
          RAD    CS+1 
          SHN    -14
          ADM    FCLF,T3
          RAD    CS 
  
*         CHECK FILE FOR SEARCH.
  
 CCD1     LDI    T3          COMPARE FILE NAMES 
          LMD    FN 
          NJN    CCDX        IF NOT EQUAL 
          LDM    FCFN+1,T3   COMPARE BYTE 2 
          LMD    FN+1 
 CCD2     NJN    CCDX        IF NOT EQUAL 
          LDM    FCFN+2,T3   COMPARE BYTE 3 
          LMD    FN+2 
          NJN    CCDX        IF NOT EQUAL 
          LDM    FCFN+3,T3   COMPARE 7TH CHARACTER
          LMD    FN+3 
          SHN    -6 
          NJN    CCD2        IF LAST CHARACTER NOT EQUAL
  
*         COMPARE FILE PASSWORD.
  
 CCDA     LDM    FCPW,T3     COMPARE FILE PASSWORD
*         UJN    CCD4        (NOT ALTERNATE USER) 
*         UJN    CCD4        (*PERMIT* REQUEST) 
          LMM    PFPW 
          NJN    CCD3        IF NOT EQUAL 
          LDM    FCPW+1,T3   COMPARE BYTE 2 
          LMM    PFPW+1 
          NJN    CCD3        IF NOT EQUAL 
          LDM    FCPW+2,T3   COMPARE BYTE 3 
          LMM    PFPW+2 
          NJN    CCD3        IF NOT EQUAL 
          LDM    FCPW+3,T3   COMPARE 7TH CHARACTER
          LMM    PFPW+3 
          SHN    -6 
 CCD3     NJN    CCD6        IF NOT EQUAL 
          UJN    CCD5        CHECK FOR PASSWORD EXPIRATION
  
 CCD4     LDN    0
          UJN    CCD7        VALIDATE ACCESS TO FILE
  
*         CHECK FOR PASSWORD EXPIRATION.
  
 CCD5     LDM    FCPW,T3
          ZJN    CCD7        IF NO PASSWORD 
          LDM    FCXD,T3     CHECK EXPIRATION DATE
          LPN    77 
          STD    CM+3 
          SHN    14 
          LMM    FCXD+1,T3
          ZJN    CCD7        IF NON-EXPIRING PASSWORD 
          STD    CM+4 
          LDN    VEDS        VALIDATE EXPIRATION DATE 
          STD    CM+1 
          MONITOR  VSAM 
          LDD    CM+1 
          ZJN    CCD7        IF NOT EXPIRED 
 CCD6     ERROR  FNF         *(FILENAME) NOT FOUND.*
  
*         VALIDATE ACCESS TO FILE.
  
 CCD7     STD    CM          VALIDATE ACCESS LEVEL AND CATEGORY SET 
          LDM    FCAL,T3     SET ACCESS LEVEL 
          LPN    7
          STD    CM+1 
          LDM    FCFC,T3     SET ACCESS CATEGORY
          LPC    377
          STD    CM+2 
          LDM    FCFC+1,T3
          STD    CM+3 
          LDM    FCFC+2,T3
          STD    CM+4 
          LDD    MA 
          CWD    CM 
          LDN    ZERL 
          CRD    CM 
          LDN    VAJS        CHECK AGAINST CURRENT JOB VALIDATIONS
          STD    CM+1 
          ERRNZ  VAJS-3      VALIDATE ACCESS LEVEL AND CATEGORY SET 
          STD    CM+4 
          MONITOR  VSAM 
          LDD    CM+1 
 CCDC     NJN    CCD6        IF NOT VALID ACCESS
*         NJN    CCD9        IF NOT VALID ACCESS (NOT ALTERNATE USER) 
 CCD8     LJM    CCDX        RETURN 
  
*         ALLOW AN *SSJ=* JOB TO PURGE ANY FILE.
  
 CCD9     LDM    SSJS 
          ZJN    CCD10       IF NOT *SSJ=*
          LDD    CC 
          LMN    CCPG 
          ZJN    CCD8        IF *PURGE* 
 CCD10    ERROR  JCA,,,,SVE  * JOB CANNOT ACCESS FILE.* 
 ICT      SPACE  4,15 
**        ICT - INTERLOCK CATALOG TRACK.
* 
*         ENTRY  (T6) = CATALOG TRACK TO BE INTERLOCKED.
*                (T5) = EST ORDINAL.
* 
*         EXIT   TRACK INTERLOCKED. 
*                RECALL *PFM* IF INTERLOCK NOT AVAILABLE
*                  AFTER FOUR TRIES.
*                TO *HNG* IF CATALOG TRACK NOT RESERVED.
* 
*         CALLS  DPR, STI.
  
  
 ICT      SUBR               ENTRY/EXIT 
          LDN    3           SET RETRY COUNT
          STD    T1 
 ICT1     RJM    STI         TRY TO INTERLOCK TRACK 
          ZJN    ICTX        IF INTERLOCK SUCCESSFUL
          LMN    2
          ZJN    ICT2        IF TRACK NOT RESERVED
          SOD    T1 
          MJN    ICT3        IF RETRY COUNT EXHAUSTED 
          RJM    DPR         DELAY PRIOR TO RETRY 
          UJN    ICT1        RETRY
  
 ICT2     RJM    HNG         HANG IF CATALOG TRACK NOT RESERVED 
  
 ICT3     EXIT   INA,CH,,,EC4  * INTERLOCK NOT AVAILABLE.*
 ISP      SPACE  4,20 
**        ISP - INITIALIZE SEARCH OF PERMANENT FILES. 
* 
*         ENTRY  (EQ) = MASTER DEVICE EST ORDINAL.
*                (CCIA) = CATALOG TRACK.
* 
*         EXIT   (T4) = MASTER DEVICE CHANNEL.
*                (T5) = MASTER DEVICE EST ORDINAL.
*                (T6) = CATALOG TRACK.
*                (T7) = CATALOG SECTOR. 
*                (DPPF) = INCREMENTED FOR CATALOG SEARCH. 
*                (P0 - P4) = CATALOG SEARCH POINTERS INITIALIZED. 
*                CATALOG TRACK INTERLOCK SET. 
*                *SETMS READ* PERFORMED.
* 
*         CALLS  ICT, IRA, PDV. 
* 
*         MACROS ERROR, SETMS.
  
  
 ISP      SUBR               ENTRY/EXIT 
          LDD    EQ          SET MASTER DEVICE EST ORDINAL
          STD    T5 
          LDM    CCIA        SET CATALOG TRACK
          STD    T6 
 ISPB     RJM    ICT         INTERLOCK CATALOG TRACK
*         UJN    ISP1        (*UREPLAC*/*DROPIDS*- ALREADY INTERLOCKED) 
          AOM    CCIB        SET CATALOG TRACK INTERLOCK FLAG 
 ISP1     LDN    IPCS        PF INCREMENT FOR CATALOG SEARCH
          RAM    AIPF+1 
          RJM    IRA         INITIALIZE RANDOM PROCESSORS 
  
*         SET SEARCH POINTERS.
  
          LDN    0           SET STARTING CATALOG TRACK SECTOR
          STD    T7 
          LDN    ZERL        CONTIGUOUS STORAGE INITIALIZATION
          CRD    P0          TEMPORARY CATALOG SEARCH BUFFER POINTERS 
          LDC    BUF1        SET PRIMARY BUFFER POINTER 
*         LDC    BFMS        (*UREPLAC*/*DROPIDS*)
 ISPC     EQU    *-1
          STD    P2 
          LDC    BUF2        SET SECONDARY BUFFER POINTER 
 ISPA     EQU    *-1
*         LDC    BFMS        (*DEFINE* REQUEST) 
          STD    P3 
          SETMS  READSTR
          RJM    PDV         PROCESS DEVICE STATUS
          UJP    ISPX        RETURN 
 PCE      SPACE  4,10 
**        PCE - PROCESS CATALOG READ ERROR. 
* 
*         ENTRY  READ ERROR DETECTED BY *COMPRNS*.
  
  
 PCE      SUBR               ENTRY
          RJM    PES         PROCESS ERROR STATUS 
          ERROR  MSE,,,T5    *EQXXX,DNYY, MASS STORAGE ERROR.*
 SCH      SPACE  4,50 
**        SCH - SEARCH CATALOGS.
* 
*         THIS ROUTINE WILL SEARCH FOR A FILE AND FOR A HOLE
*         (IF REQUESTED) BY READING INTO *BUF1* UNTIL A HOLE IS FOUND 
*         AND THEN CONTINUING IN *BUF2*.  IF A LARGER HOLE IS 
*         FOUND (*BUF2*) THEN READ WILL REVERT BACK TO *BUF1* UNTIL 
*         LARGEST HOLE AND FILE ARE IN *BUF1* AND *BUF2*.  *SCH*
*         ALWAYS EXITS WHEN THE FILE IS FOUND.
* 
*         ON A *UREPLAC* OR *DROPIDS* REQUEST, *SCH* IS CALLED JUST TO
*         SEARCH FOR A HOLE.  READING WILL START WITH *BFMS* AND WILL 
*         SWITCH BACK AND FORTH BETWEEN *BFMS* AND *BUF2* UNTIL THE END 
*         OF CATALOGS, OR UNTIL AN EXACT FIT IS FOUND.
* 
*         UPON REENTRY (ON A *REPLACE* OR *APPEND* REQUEST IN WHICH 
*         NO EXACT FIT HOLE WAS FOUND IN THE FIRST SEARCH) IT IS
*         NECESSARY TO KEEP ONE OF THE TWO BUFFERS (THE ONE WITH THE
*         FILE CATALOG ENTRY IN IT) AND TO CONTINUE TO SEARCH FOR A 
*         LARGER HOLE BY READING INTO THE REMAINING BUFFER AND *BFMS*.
*         READING WILL START IN THE REMAINING *BUF1*/*BUF2* BUFFER -
*         RATHER THAN IN *BFMS* - UNLESS THERE IS ALREADY A HOLE IN 
*         THE *BUF1*/*BUF2* BUFFER. 
* 
*         IF NO HOLE SEARCH IS REQUIRED ALL SECTORS ARE READ
*         INTO BUF1 (*GET*, *OLD* AND *ATTACH* REQUESTS). 
* 
*         SEE *CPI* FOR BUFFERS USED TO READ PERMITS. 
* 
*         ENTRY  (FN - FN+3) = FILE NAME. 
*                (UI - UI+1) = USER INDEX.
*                (LF - LF+1) = LENGTH OF FILE IF HOLE SEARCH DESIRED. 
*                (SCHA) INCREMENTED IF REENTRANT CALL.
*                (SCHB) PRESET FOR REENTRY IF CURRENT ENTRY (FILE 
*                       FOUND) IS TO BE INCLUDED IN HOLE SEARCH.
*                (SCHF) PRESET IF HOLE SEARCH ENABLED (SEARCH FOR 
*                       LARGEST HOLE OR ONE THAT FILE EXACTLY FITS IN). 
*                (SCHH) PRESET IF SEARCH FOR DAPF HOLE. 
*                (SCHI) PRESET IF SEARCH FOR LARGEST HOLE ENABLED.
* 
*         EXIT   (A) = 0 IF FILE FOUND. 
*                (CI) = CATALOG POINTER.
*                (CB) = CATALOG BUFFER. 
*                (HP) = HOLE POINTER. 
*                (HB) = HOLE BUFFER.
*                (EP) = END POINTER.
*                (EB) = END BUFFER. 
*                (HL) = SIZE OF HOLE FOUND. 
*                (NF - NF+1) = NUMBER OF FILES IN CATALOG.
*                (CS - CS+1) = CUMULATIVE SIZE OF INDIRECT FILES. 
*                (DAHP - DAHP+2) = DIRECT ACCESS HOLE POINTERS IF 
*                            DA HOLE FOUND AND NOT DAPF SEARCH. 
*                (SDAB - SDAC) = ADDRESS OF FILE IF FOUND.
* 
*         USES   P0 - P3, T3 - T7.
* 
*         CALLS  CCD, ISP, RNS. 
* 
*         MACROS ERROR. 
  
  
*         FILE FOUND. 
  
 SCH18    LDD    T3          SET CATALOG ENTRY POINTERS 
          STD    CI 
          LDM    P2,P1
          STD    CB 
          LDM    FCBT,CI     SET ADDRESS OF FILE FOUND
          STM    SDAB 
          LDM    FCBS,CI
          STM    SDAC 
          LDN    0
  
 SCH      SUBR               ENTRY/EXIT 
 SCHA     LDN    0
*         LDN    1           PRESET BY CATALOG SEARCH INITIALIZATION
          NJN    SCH1        IF NOT INITIAL CALL
          AOM    SCHA        CLEAR INITIAL CALL STATUS
          RJM    ISP         INITIALIZE FOR SEARCH
          LJM    SCH7        READ FIRST SECTOR
  
*         SECONDARY CALL TO CONTINUE SEARCH FOR BEST HOLE.
  
 SCH1     LDK    PSNI        USE NEW BUFFER FOR REMAINDER OF SEARCH 
          STM    SCHD 
          LDD    HP 
          ZJN    SCH1.1      IF NO HOLE FOUND YET 
          LDD    HB 
          LMM    P2,P1
          NJN    SCH1.2      IF HOLE NOT IN CURRENT BUFFER
 SCH1.1   AOM    SCHC        SET BUFFER TOGGLE (DO NOT USE *BFMS* NEXT) 
 SCH1.2   LJM    SCH10       CONTINUE SEARCH, BYPASSING CURRENT FILE
*         LJM    SCH11       (INCLUDE CURRENT FILE IN SEARCH) 
 SCHB     EQU    *-1
  
*         END OF SECTOR PROCESSING. 
  
 SCH2     LDC    *           PARTIAL SECTOR WORD COUNT
 SCHE     EQU    *-1
          LPN    77 
          ZJN    SCH4        IF NOT EOR 
  
*         END OF RECORD ENCOUNTERED.
  
          LDD    T3          SET END SECTOR POINTERS
          STD    EP 
  
*         END OF INFORMATION ENCOUNTERED (NO SHORT SECTOR). 
  
 SCH3     LDM    P2,P1       SET END BUFFER 
          STD    EB 
          LJM    SCHX        RETURN 
  
*         SELECT BUFFER FOR NEXT SECTOR.
  
 SCH4     UJN    SCH5        TOGGLE BUFFER IF NECESSARY 
*         PSN                (NEW BUFFER REQUIRED)
 SCHD     EQU    *-1
          LDC    BFMS        SET *BFMS* IN PLACE OF CURRENT BUFFER
          STM    P2,P1
          ISTORE SCHD,(UJN SCH5)  RESET TO BYPASS THIS SECTION
 SCH5     LDN    0
*         LDN    1           (BUFFER TOGGLE REQUIRED) 
 SCHC     EQU    *-1
          ZJN    SCH7        IF SAME BUFFER TO BE USED
          ISTORE SCHC,(LDN 0)  CLEAR BUFFER TOGGLE
          LDD    P1          TOGGLE BUFFER
          LMN    1
          STD    P1 
  
*         READ NEXT SECTOR. 
  
 SCH7     LDM    P2,P1       SET BUFFER ADDRESS 
          STD    T3 
          LDD    T6          SAVE POSITION OF SECTOR
          STM    -2,T3
          STM    ERRC 
          LDD    T7 
          STM    -1,T3
          STM    ERRD 
          LDD    T3          READ SECTOR
          RJM    RNS
          NJN    SCH8        IF NOT EOF/EOI OR ZERO LENGTH RECORD 
          LJM    SCH3        PROCESS EOI
  
 SCH8     STD    P0          SAVE WORD COUNT
          STM    SCHE 
          LPN    NWCE-1 
          ZJN    SCH9        IF INTEGRAL NUMBER OF CATALOG ENTRIES
          ERROR  BCS,,,T5,,EI  *EQXXX,DNYY, BAD CATALOG/PERMIT SECTOR.* 
  
 SCH9     LDN    2           SKIP CONTROL BYTES 
          RAD    T3 
          UJN    SCH11       CHECK FIRST CATALOG ENTRY
  
*         ADVANCE TO NEXT CATALOG ENTRY.
  
 SCH10    LDC    NWCE*5      ADVANCE TO NEXT CATALOG ENTRY
          RAD    T3 
          LCN    NWCE        ADVANCE SECTOR WORD COUNT
          RAD    P0 
          ZJP    SCH2        IF END OF BUFFER 
  
*         CHECK NEXT CATALOG ENTRY. 
  
 SCH11    LDM    FCUI,T3
          LPN    37 
          SHN    14 
          LMM    FCUI+1,T3
 SCHF     PSN    0
*         ZJN    SCH12       (HOLE SEARCH ENABLED - IF HOLE)
          ZJN    SCH10       IF EMPTY CATALOG ENTRY 
          LMD    UI+1 
          SHN    6
          LMD    UI 
 SCHG     NJN    SCH10       IF NOT SAME USER INDEX 
*         PSN                (PRIVATE DEVICE ACCESS)
*         UJN    SCH10       (*UREPLAC*/*DROPIDS*, HOLE SEARCH ONLY)
          RJM    CCD         CHECK CATALOG DATA 
          NJN    SCH10       IF NOT SAME FILE 
          LJM    SCH18       TERMINATE SEARCH 
  
*         SAVE ADDRESS OF DIRECT ACCESS HOLE FOR POSSIBLE FUTURE USE. 
  
 SCH11.1  LDM    DAHP 
 SCH11.2  NJN    SCH10       IF DIRECT ACCESS HOLE ALREADY FOUND
          LDM    P2,P1       GET START OF BUFFER
          STD    T0 
          LDD    T3          SAVE OFFSET WITHIN BUFFER
          SBD    T0 
          STM    DAHP+2 
          SOD    T0 
          LDI    T0          SAVE DIRECT ACCESS HOLE SECTOR 
          STM    DAHP+1 
          SOD    T0 
          LDI    T0          SAVE DIRECT ACCESS HOLE TRACK
          STM    DAHP 
          UJN    SCH11.2     ADVANCE TO NEXT CATALOG ENTRY
  
*         CHECK HOLE FOR POSSIBILITY OF PLUG. 
  
 SCH12    LDM    FCBS,T3
          SHN    6
  
 SCHH     MJN    SCH11.1     IF NOT IAPF HOLE 
*         UJN    SCH16       (DAPF FILE SEARCH) 
          LDM    FCLF+1,T3
          STD    T0 
          SBD    LF+1 
 SCHI     ZJN    SCH17       IF EXACT FIT 
*         UJN    SCH13       (*APPEND* - SEARCH FOR LARGEST HOLE) 
          SBK    MNHS 
          MJN    SCH15       IF NOT LARGE ENOUGH FOR FILE AND NEW HOLE
 SCH13    LDD    HL 
          SBD    T0 
          PJN    SCH15       IF NOT LARGER THAN PREVIOUS HOLE 
          LDD    T0          SET THIS AS MAXIMUM HOLE 
          STD    HL 
  
*         SET POINTER TO HOLE.
  
 SCH14    AOM    SCHC        SET TO TOGGLE BUFFER 
          LDD    T3          SAVE HOLE ADDRESS
          STD    HP 
          LDM    P2,P1       SET HOLE BUFFER ADDRESS
          STD    HB 
 SCH15    LJM    SCH10       ADVANCE TO NEXT CATALOG ENTRY
*         LJM    SCHX        (*UREPLAC*/*DROPIDS*, EXACT FIT FOUND) 
 SCHJ     EQU    *-1
  
*         CHECK FOR DIRECT ACCESS PURGED ENTRY. 
  
 SCH16    PJN    SCH15       IF NOT DIRECT ACCESS FILE
  
*         EXACT FIT.   BYPASS REMAINDER OF HOLES. 
  
 SCH17    ISTORE SCHF,(PSN)  BYPASS HOLE SEARCH 
          LDD    T0          SET LENGTH OF HOLE 
          STD    HL 
 SCHK     UJN    SCH14       SET POINTER TO HOLE
*         PSN                (*UREPLAC*/*DROPIDS*)
          LDC    SCHX 
          STM    SCHJ        SET HOLE SEARCH ONLY EXIT
          UJN    SCH14       SET POINTER TO HOLE
 SHL      SPACE  4,30 
**        SHL - SEARCH CATALOG FOR HOLE.
* 
*         THIS SUBROUTINE PRESETS *SCH* TO SEARCH FOR A HOLE ENTRY
*         FOR A *UREPLAC* OR *DROPIDS* REQUEST. 
* 
*         IT IS POSSIBLE THAT AT THE COMPLETION OF THE SEARCH, THE
*         HOLE ENTRY AND/OR THE END OF CATALOGS WILL BE IN SAME SECTOR
*         AS THE FILE CATALOG ENTRY.  IF THIS SITUATION OCCURS, THE 
*         HOLE AND/OR END POINTERS WILL BE ADJUSTED TO POINT TO THE 
*         FILE ENTRY-S BUFFER (*BUF1*). 
* 
*         ENTRY  (CCIA) = CATALOG TRACK ADDRESS.
*                (CB) = CATALOG BUFFER. 
*                (CI) = CATALOG POINTER.
*                (LF - LF+1) = LENGTH OF FILE.
*                (SDAA) = MASTER DEVICE EST ORDINAL.
* 
*         EXIT   (A)  = 0, IF HOLE NOT FOUND. 
*                (EB) = END BUFFER, IF END ENCOUNTERED. 
*                (EP) = END POINTER, IF END ENCOUNTERED.
*                (HB) = HOLE BUFFER.
*                (HL) = SIZE OF HOLE FOUND. 
*                (HP) = HOLE POINTER. 
* 
*         CALLS  SCH. 
* 
*         USES   EB, EP, HB, HP.
* 
*         MACROS ISTORE.
  
  
 SHL      SUBR               ENTRY/EXIT 
          ISTORE ISPB,(UJN ISP1)   BYPASS CATALOG TRACK INTERLOCK 
          ISTORE SCHA,(LDN 0)  FORCE *ISP* CALL 
          LDC    BFMS        SET PRIMARY BUFFER POINTER 
          STM    ISPC 
          ISTORE SCHF,(ZJN SCH12)  ENABLE HOLE SEARCH 
          ISTORE SCHG,(UJN SCH10)  SEARCH FOR HOLES ONLY
          ISTORE SCHK,(PSN)        ENABLE EXIT FOR HOLE ONLY SEARCH 
          RJM    SCH         SEARCH FOR HOLE
  
*         CHECK IF HOLE IS IN THE SAME TRACK/SECTOR AS FILE ENTRY.
  
          LDD    HP 
          ZJN    SHL1        IF HOLE NOT FOUND
          LDM   -1,CB 
          LMM   -1,HB 
          NJN    SHL1        IF SECTOR NOT THE SAME FOR HOLE AND FILE 
          LDM   -2,CB 
          LMM   -2,HB 
          NJN    SHL1        IF TRACK NOT THE SAME FOR HOLE AND FILE
          LDD    CB          ADJUST HOLE POINTERS TO FILE ENTRY BUFFER
          SBD    HB 
          RAD    HP 
          LDD    CB 
          STD    HB 
  
*         CHECK IF END IS IN SAME TRACK/SECTOR AS FILE ENTRY. 
  
 SHL1     LDD    EB 
          ZJN    SHL3        IF END NOT REACHED (EXACT FIT HOLE FOUND)
          LDM   -1,CB 
          LMM   -1,EB 
          NJN    SHL3        IF SECTOR NOT THE SAME FOR END AND FILE
          LDM   -2,CB 
          LMM   -2,EB 
          NJN    SHL3        IF TRACK NOT THE SAME FOR END AND FILE 
          LDD    EP          ADJUST END POINTERS
          ZJN    SHL2        IF NO END POINTER (EOI)
          SBD    EB          ADJUST END POINTER TO FILE ENTRY BUFFER
          ADD    CB 
          STD    EP 
 SHL2     LDD    CB          ADJUST END BUFFER TO FILE ENTRY BUFFER 
          STD    EB 
  
*         RETURN HOLE POINTER.
  
 SHL3     LDD    HP          HOLE POINTER (IF FOUND)
          LJM    SHLX        RETURN 
          TITLE  SPECIAL REQUEST BLOCK CATALOG ACCESS ROUTINES. 
 ACE      SPACE  4,30 
**        ACE - ACCESS CATALOG ENTRY. 
* 
*         READ A CATALOG ENTRY AND CHECK THE FOLLOWING INFORMATION -
*            COMPARE THE USER INDEX WITH (PFFM+3 - PFFM+4). 
*            COMPARE THE CREATION DATE AND TIME WITH (PFCD - PFCD+2). 
* 
*         ENTRY  (EQ) = MASTER DEVICE EST ORDINAL.
*                (CCIA) = CATALOG TRACK TO INTERLOCK. 
*                (CCIB) UPDATED IF CATALOG TRACK INTERLOCK ALREADY SET. 
*                (PFAS) = 36/ ALTERNATE STORAGE ADDRESS.
*                (PFCD) = 36/ CREATION DATE AND TIME. 
*                (PFFM) = 42/FAMILY,18/USER INDEX.
*                (PFID) = 4/,2/PEO,6/DN,12/TRACK,12/SECTOR. 
* 
*         EXIT   CATALOG SECTOR READ. 
*                CATALOG TRACK INTERLOCKED. 
*                (CB) = BUFFER ADDRESS OF CATALOG SECTOR. 
*                (CI) = POINTER TO CATALOG ENTRY. 
*                (T5) = MASTER DEVICE EST ORDINAL.
*                (T6) = CATALOG TRACK.
*                (T7) = CATALOG SECTOR. 
* 
*         CALLS  ICT, IRA, PDV, PES, RDS. 
* 
*         USES   CB, CI, T1, T5, T6, T7.
* 
*         MACROS COMPARE, ERROR, EXIT, SETMS. 
  
  
 ACE      SUBR               ENTRY/EXIT 
          LDC    BUF1        SET CATALOG BUFFER ADDRESS 
          STD    CB 
          ADN    2           INITIALIZE *PFC* ENTRY POINTER 
          STD    CI 
          LDD    EQ          SET MASTER DEVICE EST ORDINAL
          STD    T5 
          LDM    CCIA        BASE TRACK ADDRESS 
          STD    T6 
          SETMS  IO 
          RJM    PDV         PROCESS DEVICE STATUS
          LDM    CCIB        CHECK CATALOG INTERLOCK FLAG 
          LPN    77 
          NJN    ACE1        IF CATALOG ALREADY INTERLOCKED 
          LDD    CC 
          LMN    CCSP 
          ZJN    ACE1        IF *STAGEPF* REQUEST 
          RJM    ICT         INTERLOCK CATALOG TRACK
          AOM    CCIB        SET CATALOG TRACK INTERLOCK FLAG 
 ACE1     RJM    IRA         INITIALIZE RANDOM PROCESSORS 
          LDM    PFID+1      SET TRACK ADDRESS FOR READ 
          STM    -2,CB
          STD    T6 
          STM    ERRC 
          LDM    PFID+2      SET SECTOR ADDRESS FOR READ
          STM    -1,CB
          STD    T7 
          STM    ERRD 
          LDD    CB          READ THE CATALOG SECTOR
          RJM    RDS
          PJN    ACE3        IF NO READ ERROR 
          RJM    PES         PROCESS ERROR STATUS 
 ACE2     ERROR  MSE,,,T5    *EQXXX,DNYY, MASS STORAGE ERROR.*
  
*         SETUP *PFC* ENTRY POINTER BASED ON THE *PEO* VALUE. 
  
 ACE3     LDM    1,CB        CHECK SECTOR LENGTH
          LPN    NWCE-1 
          ZJN    ACE4        IF LEGAL SECTOR LENGTH 
          ERROR  BCS,,,T5,,EI  *EQXXX,DNYY, BAD CATALOG/PERMIT SECTOR.* 
  
 ACE4     LDM    PFID        ISOLATE *PEO* VALUE
          SHN    -6 
          LPN    1S"NWCEM"-1
          SHN    NWCES       FORM *PFC* BIAS
          STD    T1 
          SHN    2
          ADD    T1 
          RAD    CI 
          LDD    T1          CHECK *PEO* OFFSET 
          SBM    1,CB 
          PJN    ACE5        IF INVALID *PEO* VALUE 
  
*         VERIFY *PFC* ENTRY INFORMATION. 
  
          LDM    FCUI+1,CI   COMPARE LSB OF USER INDEX
          LMM    PFFM+4 
          ZJN    ACE6        IF MATCH 
 ACE5     ERROR  PVE         *PFC VERIFICATION ERROR.*
  
 ACE6     LDM    FCUI,CI     COMPARE MSB OF USER INDEX
          LMM    PFFM+3 
          LPN    77 
          NJN    ACE5        IF USER INDEX DOES NOT MATCH 
          COMPARE  PFCD,FCCD CREATION DATE/TIME 
          NJN    ACE5        IF CREATION DATE/TIME DOES NOT MATCH 
          LJM    ACEX        EXIT 
 COF      SPACE  4,15 
**        COF - COMPARE FIELD OF 36 BITS. 
* 
*         ENTRY  (A) = PFC ENTRY OFFSET TO OBJECT FIELD.
*                (CI) = PFC ENTRY ADDRESS.
*                (T1) = SECONDARY FIELD FOR COMPARE.
* 
*         EXIT   (A) = 0 IF FIELDS ARE THE SAME.
* 
*         USES   T1, T2, T3.
  
  
 COF      SUBR               ENTRY/EXIT 
          ADD    CI          SET PRIMARY COMPARE FIELD ADDRESS
          STD    T2 
          LDN    3           SET NUMBER OF WORDS TO COMPARE 
          STD    T3 
  
*         LOOP COMPARING THE TWO FIELDS.
  
 COF1     LDI    T1          SECONDARY FIELD
          LMI    T2          PRIMARY FIELD
          NJN    COFX        IF FIELDS DO NOT MATCH 
          AOD    T1          ADVANCE SECONDARY FIELD POINTER
          AOD    T2          ADVANCE PRIMARY FIELD POINTER
          SOD    T3 
          ZJN    COFX        IF ALL FIELDS COMPARE
          UJN    COF1        CONTINUE FIELD COMPARE 
RSC       SPACE  4,10 
**        RSC - READ CATALOG ENTRY, SEARCH CATALOG IF NECESSARY.
* 
*         CALLS  ACE, SCH.
* 
*         MACROS ERROR. 
  
  
 RSC      SUBR               ENTRY/EXIT 
          LDM    PFRB 
          LPN    37 
          ADM    PFRB+1 
          NJN    RSC1        IF SPECIAL REQUEST BLOCK SPECIFIED 
          RJM    SCH         SEARCH CATALOG 
          ZJN    RSCX        IF FILE FOUND
          ERROR  FNF         * (FILENAME) NOT FOUND. *
  
 RSC1     RJM    ACE         ACCESS CATALOG ENTRY 
          UJN    RSCX        RETURN 
 RVC      SPACE  4,10 
**        RVC -  READ AND VERIFY CATALOG ENTRY. 
* 
*         EXIT   (CB) = CATALOG BUFFER. 
*                (CI) = CATALOG POINTER.
* 
*         CALLS  ACE. 
* 
*         MACROS COMPARE, ERROR.
  
  
 RVC      SUBR               ENTRY/EXIT 
          RJM    ACE         ACCESS CATALOG ENTRY 
          LDM    STAT 
          LPK    STTA 
          NJN    RVC2        IF TAPE ALTERNATE STORAGE REQUEST
  
*         VERIFY CARTRIDGE ALTERNATE STORAGE ADDRESS. 
  
          COMPARE  PFAA,FCAA VERIFY ALTERNATE STORAGE ADDRESS 
          NJN    RVC1        IF NO MATCH ON ALTERNATE STORAGE ADDRESS 
          LDM    PFAT        VERIFY ALTERNATE STORAGE TYPE
          LMM    FCAT,CI
          LPN    77 
          ZJN    RVCX        IF ALTERNATE STORAGE TYPES MATCH 
 RVC1     ERROR  PVE         * PFC VERIFICATION ERROR.* 
  
*         VERIFY TAPE ALTERNATE STORAGE ADDRESS.
  
 RVC2     COMPARE  PFTS+1,FCTS+1  VERIFY TAPE SEQUENCE NUMBER AND VSN 
          NJN    RVC1        IF NO MATCH
          LDM    PFTS        VERIFY TAPE SEQUENCE NUMBER
          LMM    FCTS,CI
          LPN    77 
          NJN    RVC1        IF TAPE SEQUENCE NUMBER DOES NOT MATCH 
          UJP    RVCX        RETURN 
          SPACE  4,10 
*         CHECK FOR ZERO-LEVEL OVERLAY OVERFLOW.
  
  
          ERRNG  *-OVL0-ZBFL *0BF* OVERFLOW 
          ERRNG  *-OVL0-ZDFL *0DF* OVERFLOW 
          TITLE  REQUEST PREPROCESSORS. 
 APP      SPACE  4,10 
***       APP - *APPEND* REQUEST. 
  
  
 APP      BSS    0           ENTRY
  
*         INITIALIZE FOR CATALOG SEARCH.
  
          LDD    LF          CHECK FILE SIZE
          NJN    APP1        IF FILE TOO LARGE FOR HOLE 
          ISTORE SCHI,(UJN SCH13)  SET FOR LARGEST HOLE SEARCH
          ISTORE SCHF,(ZJN SCH12)  SET FOR HOLE SEARCH
 APP1     RJM    SCH         SEARCH CATALOG 
          ZJN    APP2        IF FILE FOUND
          ERROR  FNF         *(FILE NAME) NOT FOUND.* 
  
*         COMPUTE LENGTH OF NEW FILE. 
  
 APP2     LDD    LF          SAVE LENGTH OF APPENDAGE 
          STM    APLF 
          LDD    LF+1 
          STM    APLF+1 
          LDM    FCLF+1,CI   CALCULATE TOTAL LENGTH OF NEW FILE 
          RAD    LF+1 
          SHN    -14
          ADM    FCLF,CI
          RAD    LF 
          SHN    -5 
          NJN    APP3        IF FILE LENGTH .GE. 131072D SECTORS
          LDD    LF          CHECK FOR .GT. 131069D SECTORS 
          SHN    14 
          ADD    LF+1 
          ADN    2           ADD SYSTEM AND EOI SECTORS 
          MJN    APP3        IF FILE .GT. 131069D SECTORS 
          LDM    MXFS 
          ZJN    APP4        IF NO LIMIT ON FILE SIZE 
          LDD    LF 
          SHN    -3 
          NJN    APP3        IF FILE SIZE .GT. MAXIMUM FILE SIZE LIMIT
          LDD    LF 
          SHN    14 
          ADD    LF+1 
          ADN    7
          SHN    -3 
          SBM    MXFS 
          MJN    APP4        IF FILE NOT TOO LARGE
          ZJN    APP4        IF FILE NOT TOO LARGE
 APP3     LDN    STAB        SET TO ABORT AFTER PERMISSION CHECK
          RAM    STAT 
 APP4     LDM    FCBT,CI     SAVE ADDRESS OF OLD FILE 
          STM    APTK 
          LDM    FCBS,CI
          STM    APSC 
          LDD    LF 
          ZJN    APP6        IF NEW FILE SHORT ENOUGH TO PLUG HOLE
          ISTORE SCHF,(PSN)  TURN OFF HOLE SEARCH 
          UJN    APP7        CLEAR HOLE POINTERS
  
 APP6     LDD    HL          CHECK SIZE OF HOLE FOUND 
          ZJN    APP8        IF NO HOLE FOUND 
          SBD    LF+1 
          ZJN    APP9        IF EXACT FIT, BYPASS HOLE SEARCH 
          SBK    MNHS 
          PJN    APP8        IF HOLE LONG ENOUGH FOR FILE AND NEW HOLE
 APP7     LDN    0           CLEAR HOLE POINTERS
          STD    HP 
          STD    HB 
          STD    HL 
 APP8     ISTORE SCHI,(ZJN SCH17)  TURN ON SEARCH FOR EXACT FIT 
          RJM    SCH         CONTINUE SEARCH FOR BEST HOLE
          NJN    APP9        IF DUPLICATE FILE NOT FOUND
          ERROR  RPE,,,EQ    *EQXXX,DNYY, REPLACE ERROR.* 
  
*         SEARCH PERMITS. 
  
 APP9     RJM    CCT         CHECK FOR CPU TRANSFER 
          RJM    SDB         SWAP DISK BUFFERS (IF NECESSARY) 
          RJM    SSP         SET STATISTICAL PARAMETERS 
          LDN    0           CLEAR PERMIT POINTERS
          STD    PB 
          STD    PP 
  
*         READ PERMITS. 
  
          LDN    PTAP        CHECK FOR APPEND PERMISSION
          RJM    CPI
          RJM    VFI         VERIFY THAT FILE IS INDIRECT ACCESS
          RJM    DSR         DETERMINE IF FILE STAGING REQUIRED 
          LJM    LCO         CALL OVERLAY 
 ATT      SPACE  4,10 
***       ATT - *ATTACH* REQUEST. 
  
  
 ATT      BSS    0           ENTRY
          RJM    SCH         SEARCH CATALOG 
          ZJN    ATT2        IF FILE FOUND
          ERROR  FNF         *(FILE NAME) NOT FOUND.* 
  
*         VERIFY PERMISSIONS FOR ACCESS.
  
 ATT2     LDM    MODE 
          RJM    CPI
          LDM    FCBS,CI     CHECK FILE TYPE
          SHN    21-13
          MJN    ATT3        IF DIRECT ACCESS FILE
          ERROR  FIA         *(FILE NAME) IS INDIRECT ACCESS.*
  
 ATT3     RJM    DSR         DETERMINE IF FILE STAGING IS REQUIRED
          LJM    LCO         CALL OVERLAY 
 CHG      SPACE  4,10 
***       CHG - *CHANGE* REQUEST. 
  
  
 CHG      BSS    0           ENTRY
          LJM    LCO         CALL OVERLAY 
 DDS      SPACE  4,10 
***       DDS - *DROPDS* REQUEST. 
  
  
 DDS      BSS    0           ENTRY
          RJM    RSC         READ CATALOG ENTRY, SEARCH IF NECESSARY
          LDM    FCBT,CI
          NJN    DDS1        IF FILE DISK RESIDENT
          ENDMS 
          EXECUTE  3PU       TERMINATE *PFM*
  
 DDS1     LDM    FCBS,CI
          SHN    21-13
          MJN    DDS2        IF DIRECT ACCESS FILE
          LDN    CCDI        PROCESS AS *DROPIDS* REQUEST 
          STD    CC 
          LDC    PRDI        SET REQUEST PROCESSOR ADDRESS
          STM    LCOA 
          LDC    OVDI        SET OVERLAY INTO *EXECUTE* MACRO 
          STM    LCOB 
          LJM    DIS2        PROCESS AS *DROPIDS* REQUEST 
  
 DDS2     LJM    LCO         LOAD OVERLAY 
 DIS      SPACE  4,10 
***       DIS - *DROPIDS* REQUEST.
  
  
 DIS      BSS    0           ENTRY
          RJM    RSC         READ CATALOG ENTRY, SEARCH IF NECESSARY
          LDM    FCBT,CI
          NJN    DIS1        IF FILE DISK RESIDENT
          ENDMS 
          EXECUTE  3PU       TERMINATE *PFM*
  
 DIS1     LDM    FCBS,CI
          SHN    21-13
          PJN    DIS2        IF INDIRECT ACCESS FILE
          LDN    CCDD        PROCESS AS *DROPDS* REQUEST
          STD    CC 
          LDC    PRDD        SET REQUEST PROCESSOR ADDRESS
          STM    LCOA 
          LDC    OVDD        SET OVERLAY INTO *EXECUTE* MACRO 
          STM    LCOB 
          UJN    DDS2        PROCESS AS *DROPDS* REQUEST
  
 DIS2     ISTORE SCHH,(UJN SCH16)  SEARCH ONLY DAPF HOLES 
          RJM    SHL         SEARCH CATALOG FOR DAPF HOLE 
          ZJN    DIS3        IF DELETED DAPF HOLE NOT FOUND 
          LDN    0           CLEAR DAPF HOLE INDICATOR
          STM    FCBS,HP
          STM    FCBT,HP     CLEAR TRACK
 DIS3     LJM    LCO         CALL OVERLAY 
 DEF      SPACE  4,10 
***       DEF - *DEFINE* REQUEST. 
  
  
 DEF      BSS    0           ENTRY
          ISTORE SCHF,(ZJN SCH12)  SET TO SEARCH FOR HOLES
          ISTORE SCHH,(UJN SCH16)  SEARCH FOR DIRECT ACCESS HOLES ONLY
          LDC    BFMS        SET ADDRESS OF CATALOG SEARCH BUFFER 
          STM    ISPA 
 DEF1     LDD    FS          SET EST ORDINAL
          STD    T5 
          RJM    IRA         INITIALIZE RANDOM ACCESS PROCESSORS
          LDM    SDAB        SET FIRST SECTOR 
          STD    T6 
          RJM    SEI         DETERMINE FILE SECTOR SIZE 
          LDD    T2          PRESERVE SECTOR SIZE 
          STD    LF 
          LDD    T3 
          STD    LF+1 
          LDD    CC 
          LMN    CCSD 
          ZJN    DEF2        IF *SETDA* REQUEST 
          RJM    SCH         SEARCH CATALOG 
          NJN    DEF3        IF NO FILE FOUND 
          ERROR  FAP         *(FILE NAME) ALREADY PERMANENT.* 
  
*         PROCESS *SETDA* REQUEST.
  
 DEF2     RJM    RVC         READ AND VERIFY CATALOG ENTRY
 DEF3     LJM    LCO         CALL OVERLAY 
 DPF      SPACE  4,10 
***       DPF - *DELPFC* REQUEST. 
  
  
 DPF      BSS    0           ENTRY
          LDC    IFUI        SET *IFUI* USER INDEX INTO SRB 
          STM    PFFM+4 
          LDM    PFFM+3 
          SCN    77 
          LMN    IFUI/10000B
          STM    PFFM+3 
          RJM    ACE         ACCESS CATALOG ENTRY 
          LJM    LCO         LOAD COMMAND OVERLAY 
 GET      SPACE  4,10 
***       GET - *GET* REQUEST.
  
  
 GET      BSS    0           ENTRY
          RJM    SCH         SEARCH CATALOG 
          ZJN    GET1        IF FILE FOUND
          ERROR  FNF         *(FILENAME) NOT FOUND.*
  
 GET1     LDM    FCLF,CI     SET FILE LENGTH
          STD    LF 
          LDM    FCLF+1,CI
          STD    LF+1 
          RJM    CCT         CHECK FOR CPU TRANSFER 
          LDN    PTEX        EXECUTE MODE REQUIRED FOR *GET*
          RJM    CPI         CHECK PERMISSION INFORMATION 
          STM    ACCM        SAVE ACTUAL ACCESS MODE
          RJM    VFI         VERIFY THAT FILE IS INDIRECT ACCESS
          RJM    DSR         DETERMINE IF FILE STAGING REQUIRED 
          LJM    LCO         CALL OVERLAY 
 OLD      SPACE  4,10 
***       OLD - *OLD* REQUEST.
  
  
 OLD      EQU    GET         USE *GET* PRESET FOR *OLD* REQUEST 
 PER      SPACE  4,10 
***       PER - *PERMIT* REQUEST. 
  
  
 PER      BSS    0           ENTRY
          ISTORE CCDA,(UJN CCD4)  SET BYPASS OF PASSWORD CHECK
          RJM    SCH         SEARCH CATALOG 
          ZJN    PER2        IF FILE FOUND
          ERROR  FNF         * (FILENAME) NOT FOUND.* 
  
 PER2     LDD    MA          SET USER NAME
          CWM    PFOU,ON
          SBN    1
          CRM    PFAC,ON
          LDN    0           CLEAR PERMIT POINTER 
          STD    PP 
          LDC    BFMS        SET PERMIT BUFFER ADDRESS
          STD    PB 
          LDM    FCRI,CI     SET PERMIT RANDOM INDEX
          STD    RI 
          LDM    FCRI+1,CI
          STD    RI+1 
          ADD    RI 
          ZJN    PER4        IF NO PERMIT DATA AVAILABLE
          RJM    SPI         SEARCH PERMIT INFORMATION
 PER4     LJM    LCO         CALL OVERLAY 
 PUR      SPACE  4,10 
***       PUR - *PURGE* REQUEST.
  
  
 PUR      BSS    0           ENTRY
          RJM    RSC         READ CATALOG ENTRY, SEARCH IF NECESSARY
          LDM    PFRB 
          LPN    37 
          ADM    PFRB+1 
          NJN    PUR1        IF SPECIAL REQUEST BLOCK SPECIFIED 
          LDN    PTWR        WRITE PERMISSON NEEDED FOR PURGE 
          RJM    CPI         CHECK PERMISSION INFORMATION 
 PUR1     LJM    LCO         CALL OVERLAY 
 REP      SPACE  4,10 
***       REP - *REPLACE* REQUEST.
  
  
 REP      BSS    0           ENTRY
          LDD    LF 
          NJN    REP1        IF FILE LARGER THAN HOLES
          ISTORE SCHF,(ZJN SCH12)  SET TO SEARCH FOR HOLES
 REP1     RJM    SCH         SEARCH FOR CATALOG ENTRY 
          ZJP    REP5        IF FILE IS FOUND 
          LDD    CP          CHECK USER VALIDATION
          ADK    AACW 
          CRD    CM 
          LDD    CM+4 
          SHN    21-3 
          PJN    REP2        IF USER MAY NOT CREATE INDIRECT FILES
          SHN    21-10-21+3+22
          MJN    REP3        IF USER MAY ACCESS AUXILIARY DEVICE
          LDM    PFPN 
          ZJN    REP3        IF AUXILIARY DEVICE NOT SPECIFIED
 REP2     ERROR  IUA         *USER ACCESS NOT VALID.* 
  
 REP3     LDD    PI          CHECK FOR ALTERNATE CATALOG ACCESS 
          ADD    PI+1 
          ZJN    REP4        IF NOT ALTERNATE CATALOG ACCESS
          ERROR  FNF         *(FILE NAME) NOT FOUND.* 
  
 REP4     LDC    PRSV        PROCESS AS *SAVE* REQUEST
          STM    LCOA        SET PROCESSOR ADDRESS
          LDC    OVSV 
          STM    LCOB        SET OVERLAY NAME FOR *SAVE* REQUEST
          LJM    SAV2        PROCESS REQUEST AS *SAVE*
  
 REP5     LDN    0           SET ENTRY AS HOLE
          STM    FCUI,CI
          STM    FCUI+1,CI
          LDM    FCBT,CI     FIRST TRACK OF FILE
          ZJN    REP7        IF FILE NOT DISK RESIDENT
  
*         CHECK SIZE OF HOLE CREATED BY REPLACE.
  
          LDM    FCLF,CI
          SBD    LF 
          SHN    14 
          ADM    FCLF+1,CI
          SBD    LF+1 
          NJN    REP6        IF NOT EXACT FIT 
          LDD    CI          SET THIS ENTRY AS HOLE FOUND 
          STD    HP 
          LDD    CB 
          STD    HB 
          LDD    LF+1 
          STD    HL 
          UJN    REP8        BYPASS HOLE SEARCH 
  
 REP6     LDM    FCLF,CI     CHECK LENGTH OF FILE BEING REPLACED
          NJN    REP7        IF FILE TOO LONG TO BE USED AS HOLE
          LDC    SCH11       INCLUDE THIS FILE IN HOLE SEARCH 
          STM    SCHB 
 REP7     RJM    SCH         CONTINUE SEARCH FOR BEST HOLE
          NJN    REP8        IF DUPLICATE FILE NOT FOUND
          ERROR  RPE,,,EQ    *EQXXX,DNYY, REPLACE ERROR.* 
  
*         SEARCH PERMITS. 
  
 REP8     RJM    CCT         CHECK FOR CPU TRANSFER 
          RJM    SDB         SWAP DISK BUFFERS (IF NECESSARY) 
          RJM    SSP         SET STATISTICAL PARAMETERS 
          LDN    0           CLEAR PERMIT POINTERS
          STD    PB 
          STD    PP 
          LDN    PTWR        CHECK FOR WRITE PERMISSION 
          RJM    CPI         CHECK PERMISSION INFORMATION 
          LJM    LCO         CALL OVERLAY 
 SAA      SPACE  4,10 
***       SAA - *SETASA* REQUEST. 
  
  
 SAA      BSS    0           ENTRY
          RJM    ACE         ACCESS CATALOG ENTRY 
          LJM    LCO         CALL OVERLAY 
 SAC      SPACE  4,10 
***       SAC - *SETPFAC* REQUEST.
  
  
 SAC      EQU    CHG         USE *CHANGE* PRESET FOR *SETPFAC* REQUEST
 SAF      SPACE  4,10 
***       SAF - *SETAF* REQUEST.
  
  
 SAF      BSS    0           ENTRY
          RJM    RVC         READ AND VERIFY CATALOG ENTRY
          LJM    LCO         CALL OVERLAY 
 SAL      SPACE  4,10 
***       SAL - *SETPFAL* REQUEST.
  
  
 SAL      EQU    CHG         USE *CHANGE* PRESET FOR *SETPFAL* REQUEST
 SAV      SPACE  4,10 
***       SAV - *SAVE* REQUEST. 
  
  
 SAV      BSS    0           ENTRY
          LDD    LF 
          NJN    SAV1        IF FILE LARGER THAN HOLES
          ISTORE SCHF,(ZJN SCH12)  SET TO SEARCH FOR HOLES
 SAV1     RJM    SCH         SEARCH FOR CATALOG ENTRY 
          NJN    SAV2        IF FILE NOT FOUND
          ERROR  FAP         *FILE ALREADY PERMANENT.*
  
 SAV2     AOD    NF+1        ADVANCE FILE COUNT FOR NEW FILE
          SHN    -14
          RAD    NF 
          RJM    SSP         SET STATISTICAL PARAMETERS 
 SAV3     RJM    CCT         CHECK FOR CPU TRANSFER 
          LJM    LCO         CALL OVERLAY 
 SDA      SPACE  4,10 
***       SDA - *SETDA* REQUEST.
  
  
 SDA      EQU    DEF1        USE *DEFINE* PRESET FOR *SETDA* REQUEST
 SPF      SPACE  4,10 
***       SPF - *STAGEPF* REQUEST.
  
  
 SPF      BSS    0           ENTRY
          RJM    ACE         ACCESS CATALOG ENTRY 
          LDM    FCBT,CI
          NJN    SPF1        IF FILE ALREADY DISK RESIDENT
          LJM    LCO         LOAD COMMAND OVERLAY 
  
 SPF1     ENDMS 
          EXECUTE  3PU       TERMINATE *PFM*
 UAT      SPACE  4,10 
***       UAT - *UATTACH* REQUEST.
  
  
 UAT      BSS    0           ENTRY
          RJM    RSC         READ CATALOG ENTRY, SEARCH IF NECESSARY
          LDM    FCBS,CI
          SHN    21-13
          MJN    UAT2        IF DIRECT ACCESS FILE
          ERROR  FIA         *FILE IS INDIRECT ACCESS.* 
  
 UAT2     LDM    FCBT,CI
          NJP    LCO         IF FILE DISK RESIDENT
          ERROR  FND         *FILE NOT DISK RESIDENT.*
 UGT      SPACE  4,10 
***       UGT - *UGET* REQUEST. 
  
  
 UGT      BSS    0           ENTRY
          RJM    RSC         READ CATALOG ENTRY, SEARCH IF NECESSARY
          UJN    LCO         CALL OVERLAY 
 URE      SPACE  4,10 
***       URE - *UREPLAC* REQUEST.
  
  
 URE      BSS    0           ENTRY
          RJM    RVC         READ AND VERIFY CATALOG ENTRY
          LDD    CI          SAVE PFC ADDRESS 
          STM    PFCA 
          ADN    FCFN        SET FILE NAME TO CURRENT PFN 
          RJM    SFN
          RJM    VFI         VERIFY THAT FILE IS INDIRECT ACCESS
          LDM    FCBT,CI
          ZJN    URE2        IF NOT DISK RESIDENT 
          ERROR  ICU         * INVALID CATALOG UPDATE.* 
  
 URE2     LDD    LF 
          NJN    URE3        IF FILE LONGER THAN LARGEST HOLE 
          RJM    SHL         SEARCH CATALOG FOR HOLE
          RJM    SDB         SWAP DISK BUFFERS
 URE3     UJN    LCO         CALL OVERLAY 
          TITLE  LOAD OVERLAY PROCESSOR.
 LCO      SPACE  4,10 
**        LCO - LOAD COMMAND OVERLAY. 
* 
*         EXIT   TO COMMAND OVERLAY.
* 
*         MACROS ENDMS, EXECUTE.
  
  
 LCO      BSS    0           ENTRY
          ENDMS              RELEASE MASTER DEVICE CHANNEL
          LDC    *           SET COMMAND PROCESSING ADDRESS 
 LCOA     EQU    *-1         (PROCESSING ADDRESS WITHIN OVERLAY)
          STD    P0 
 LCOB     EQU    *+1         (LAST TWO CHARACTERS OF OVERLAY NAME)
          EXECUTE  3PF       *GET*/*OLD*/*UGET* 
          EXECUTE  3PG,=     *SAVE*/*REPLACE*/*UREPLAC* 
          EXECUTE  3PH,=     *APPEND* 
          EXECUTE  3PI,=     *ATTACH*/*UATTACH* 
          EXECUTE  3PK,=     *DEFINE*/*SETDA* 
          EXECUTE  3PL,=     *DROPDS*/*PURGE* 
          EXECUTE  3PM,=     *DELPFC*/*DROPIDS*/*PERMIT*
          EXECUTE  3PN,=     *CHANGE*/*SETPFAC*/*SETPFAL* 
          EXECUTE  3PO,=     *SETASA*/*SETAF* 
          EXECUTE  3PR,=     STAGE FILE FROM ALTERNATE STORAGE
          TITLE  INITIALIZATION SUBROUTINES.
 CCT      SPACE  4,15 
**        CCT - CHECK FOR CPU TRANSFER. 
* 
*         ENTRY  (LF - LF+1) = FILE LENGTH + 1. 
* 
*         EXIT   (CPTF) = NONZERO IF CPU SHOULD BE USED FOR TRANSFER. 
*                (FA) = FNT ADDRESS FOR LOCAL FILE. 
*                (FN - FN+4) = PERMANENT FILE NAME. 
*                (FS - FS+4) = FST ENTRY FOR LOCAL FILE.
* 
*         USES   FA, CM - CM+4, FS - FS+4.
* 
*         CALLS  CLF, RMD, SFN. 
* 
*         MACROS ENDMS. 
  
  
 CCT      SUBR               ENTRY/EXIT 
  
*         CHECK IF CALLER IS *DMP=*, SUBSYSTEM OR UCP.
  
          LDD    CP 
          ADK    SPCW 
          CRD    CM 
          LDD    CM+1 
          SCN    77 
          ADD    CM 
          NJN    CCTX        IF *DMP=* PROGRAM IN PROGRESS
          LDD    CP 
          ADK    JCIW 
          CRD    CM 
          LDD    CM+2 
          SBK    LSSI 
          PJN    CCTX        IF CALLER IS A SUBSYSTEM 
          LDD    CP 
          ADK    SSCW 
          CRD    CM 
          LDD    CM 
          ADD    CM+1 
          ADD    CM+2 
          ADD    CM+3 
          ADD    CM+4 
          NJN    CCTX        IF CALLER IS A UCP 
  
*         CHECK IF FILE SIZE .GE. THRESHOLD.
  
          LDK    PFNL        CHECK CPU TRANSFER THRESHOLD 
          CRD    CM 
          LDD    CM+4 
          ZJN    CCTX        IF CPU TRANSFER DISABLED 
          SBD    LF+1 
          SBN    1
          MJN    CCT1        IF FILE LONG ENOUGH
          LDD    LF 
          ZJP    CCTX        IF FILE NOT LONG ENOUGH
  
*         SET UP FOR CPU TRANSFER.
  
 CCT1     ENDMS              RELEASE CHANNEL
          AOM    CPTF        SET *CPU TRANSFER* FLAG
          LDC    CCTA        CREATE LOCAL FILE /PFM*PFN/
          RJM    CLF
          STM    FNTB        SAVE FNT ADDRESS 
          LDC    CCTB        CREATE LOCAL FILE /PFM*ILK/
          RJM    CLF
          STM    FNTC        SAVE FNT ADDRESS 
          LDD    CC 
          LMN    CCAP 
          NJN    CCT2        IF NOT *APPEND* REQUEST
          LDC    CCTC        CREATE LOCAL FILE /PFM*APF/
          RJM    CLF
          STM    FNTD        SAVE FNT ADDRESS 
  
*         RESET LOCAL FILE PARAMETERS AND MASTER DEVICE DRIVER. 
  
 CCT2     LDM    FNTA        RESET FNT ADDRESS
          STD    FA 
          NFA    FA,R        REREAD FST 
          ADN    FSTL 
          CRD    FS 
          LDM    PFFN        RESET PERMANENT FILE NAME
          ZJN    CCT3        IF PFN NOT SPECIFIED, USE LFN
          LDN    PFFN-PFSN
 CCT3     ADC    PFSN 
          RJM    SFN         SET FILE NAME
          RJM    RMD         RESET TO MASTER DEVICE 
          UJP    CCTX        RETURN 
  
  
 CCTA     VFD    60/7L"PFN" 
 CCTB     VFD    60/7L"ILK" 
 CCTC     VFD    60/7L"APF" 
 CLF      SPACE  4,20 
**        CLF - CREATE LOCAL FILE.
* 
*         CREATE AN FNT ENTRY FOR THE SPECIFIED LOCAL FILE, 
*         USING ONE OF THE SPECIAL RESERVED FNT ENTRIES.
*         IF THE SPECIFIED LOCAL FILE IS ALREADY ASSIGNED TO
*         THE JOB, RETURN THE FILE AND THEN CREATE A NEW FILE.
*         IF A RESERVED FNT ENTRY WAS NOT FOUND, HANG.
* 
*         ENTRY  (A) = ADDRESS OF FILE NAME.
* 
*         EXIT   (A) = (FA) = FNT ADDRESS OF FILE.
*                TO *HNG* IF RESERVED FNT ENTRY NOT FOUND.
* 
*         USES   FS, FN - FN+4. 
* 
*         CALLS  *0BF*, *0DF*.
* 
*         MACROS EXECUTE, MONITOR.
  
  
 CLF      SUBR               ENTRY/EXIT 
          STM    CLFA        SET FILE NAME ADDRESS
 CLF1     LDD    MA 
          CWM    *,ON 
 CLFA     EQU    *-1
          SBN    1
          CRD    FN          SET FILE NAME
          LDN    45          USE RESERVED FNT, RETURN ON FILE NOT MADE
          STM    OVL0-1 
          LDK    NEEQ 
          STD    FS 
          EXECUTE  0BF,OVL0  CREATE FILE
          UJN    CLF2        IF FILE NOT ALREADY ASSIGNED 
  
*         IF FILE ALREADY ASSIGNED, RETURN FILE.
  
          LDN    1           *UNLOAD* EXISTING FILE 
          STM    OVL0-1 
          EXECUTE  0DF,OVL0 
          UJN    CLF1        CREATE NEW FILE
  
*         CHECK FOR SUCCESSFUL FILE CREATION. 
  
 CLF2     NJN    CLF3        IF FILE NOT CREATED
          LDD    FA 
          LJM    CLFX        RETURN 
  
*         HANG IF RESERVED FNT ENTRY NOT FOUND. 
  
 CLF3     RJM    HNG         HANG 
 DSR      SPACE  4,15 
**        DSR -  DETERMINE IF FILE STAGING REQUIRED.
* 
*         ENTRY  (CB) = CATALOG BUFFER ADDRESS. 
*                (CI) = CATALOG ENTRY POINTER.
* 
*         EXIT   (LCOB) = *3PR*, IF STAGING REQUIRED. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  MCB. 
* 
*         MACROS EXECUTE. 
  
  
 DSR      SUBR               ENTRY/EXIT 
          LDK    SSTL        GET FILE STAGING DISABLED STATUS 
          CRD    CM 
          LDD    CM 
          SHN    21-3 
          MJN    DSR1        IF CARTRIDGE PF STAGING DISABLED 
          LDM    FCAF,CI     CHECK PSEUDO RELEASE FLAG
          SHN    21-3 
          PJN    DSR1        IF PSEUDO RELEASE NOT SET
          SHN    21-0-21+3
          PJN    DSR2        IF CARTRIDGE COPY NOT OBSOLETE 
 DSR1     LDM    FCBT,CI     FIRST TRACK OF FILE
          NJN    DSRX        IF FILE DISK RESIDENT
 DSR2     EXECUTE  3PR,*     STAGE FILE FROM TAPE OR CARTRIDGE
          STM    LCOB 
          RJM    MCB         MOVE CATALOG BUFFER (IF NECESSARY) 
          UJN    DSRX        RETURN 
 MCB      SPACE  4,15 
**        MCB - MOVE CATALOG BUFFER.
* 
*         MOVE THE CATALOG BUFFER INTO *BUF1*, IF THE CATALOG BUFFER
*         IS CURRENTLY IN *BUF2*.  THIS IS DONE TO ALLOW MORE SPACE 
*         FOR OVERLAY *3PR*.  SINCE THE FILE MUST BE STAGED, NO OTHER 
*         BUFFERS ARE REQUIRED FOR THE CURRENT INVOCATION OF *PFM*. 
* 
*         ENTRY  (CB) = CATALOG BUFFER ADDRESS. 
*                (CI) = CATALOG ENTRY POINTER.
* 
*         EXIT   CATALOG BUFFER COPIED INTO *BUF1*, IF NECESSARY. 
*                (CB), (CI) UPDATED.
* 
*         USES   CB, CI, T1.
  
  
 MCB      SUBR               ENTRY/EXIT 
          LDD    CB          CHECK CATALOG BUFFER ADDRESS 
          LMC    BUF2 
          NJN    MCBX        IF CATALOG BUFFER IS NOT IN *BUF2* 
          LDC    501         SET BYTE COUNT 
          STD    T1 
 MCB1     LDM    BUF2-2,T1   MOVE NEXT BYTE 
          STM    BUF1-2,T1
          SOD    T1 
          PJN    MCB1        IF MORE BYTES TO MOVE
          LDC    BUF1-BUF2   ADJUST CATALOG ENTRY POINTER 
          RAD    CI 
          LDC    BUF1        RESET CATALOG BUFFER POINTER 
          STD    CB 
          UJN    MCBX        RETURN 
 SDB      SPACE  4,20 
**        SDB - SWAP DISK BUFFERS.
* 
*         SWAP THE *END* BUFFER WITH THE *BFMS* BUFFER, IF THE HOLE 
*         BUFFER IS IN *BFMS*.  THIS IS DONE SO THAT *BFMS* CAN BE
*         REUSED FOR PERMITS (IF NECESSARY), AND LATER REREAD IF THE
*         END BUFFER IS NEEDED.  THIS ALSO ALLOWS *REB* TO LATER READ 
*         THE DAPF HOLE ENTRY (IF PRESENT) INTO *BFMS*, AND TO THEN 
*         DESIGNATE *BFMS* AS THE END BUFFER.  THE VARIOUS POINTERS 
*         AND DISK ADDRESSES ASSOCIATED WITH THE BUFFERS ARE ALSO 
*         SWAPPED.
* 
*         ENTRY  (CB) = ADDRESS OF CATALOG BUFFER.
*                (EB) = ADDRESS OF BUFFER CONTAINING END OF CATALOGS. 
*                (EP) = POINTER TO NEXT PFC SLOT AVAILABLE FOR USE. 
*                (HB) = ADDRESS OF HOLE BUFFER, IF ANY. 
*                (HP) = POINTER TO HOLE ENTRY, IF ANY.
* 
*         EXIT   (EBSC) = END BUFFER SECTOR, IF BUFFER IS IN *BFMS*.
*                (EBTK) = END BUFFER TRACK, IF BUFFER IS IN *BFMS*. 
*                BUFFERS SWAPPED. 
*                BUFFER ADDRESSES AND POINTERS RESET. 
* 
*         USES   EB, EP, HB, HP, T1, T2, T3.
  
  
 SDB5     LDD    EB 
          LMC    BFMS 
          NJN    SDBX        IF END BUFFER IS NOT IN *BFMS* 
          LDM    BFMS-2      INDICATE THAT END BUFFER IS IN *BFMS*
          STM    EBTK 
          LDM    BFMS-1 
          STM    EBSC 
  
 SDB      SUBR               ENTRY/EXIT 
          LDD    HP 
          ZJN    SDBX        IF NO HOLE FOUND 
          LDD    HB 
          LMC    BFMS 
          NJN    SDB5        IF HOLE NOT IN *BFMS*
  
*         DETERMINE WHICH BUFFER TO SWAP. 
  
          LDD    CB 
          LMC    BUF1 
          ZJN    SDB1        IF CATALOG IS IN *BUF1*
          LDC    BUF1-BUF2   SWAP *BFMS* WITH *BUF1*
 SDB1     ADC    BUF2        SWAP *BFMS* WITH *BUF2*
          STD    T1          SET BUFFER ADDRESSES 
          SBN    2
          STM    SDBA 
          STM    SDBB 
          LDC    503B        MOVE BUFFER PLUS DISK ADDRESS
          STD    T2 
  
*         SWAP BUFFERS. 
  
 SDB2     LDM    BFMS-2,T2   SWAP ONE PAIR OF BYTES 
          STD    T3 
          LDM    *-2,T2 
 SDBA     EQU    *-1         (ADDRESS OF BUFFER - 2)
          STM    BFMS-2,T2
          LDD    T3 
          STM    *-2,T2 
 SDBB     EQU    *-1         (ADDRESS OF BUFFER - 2)
          SOD    T2 
          PJN    SDB2        IF MORE BYTES TO SWAP
  
*         RESET POINTERS TO BUFFERS WHICH HAVE BEEN MOVED.
  
          LDD    T1          RESET HOLE POINTERS
          SBD    HB 
          RAD    HP 
          LDD    T1 
          STD    HB 
          LDD    EB 
          LMD    T1 
          NJN    SDB3        IF END OF CATALOGS IS IN HOLE BUFFER 
          LDC    BFMS        RESET END POINTERS TO POINT TO *BFMS*
          STD    T1 
 SDB3     LDD    EP          RESET END POINTERS 
          ZJN    SDB4        IF END SECTOR IS EOI 
          SBD    EB 
          ADD    T1 
          STD    EP 
 SDB4     LDD    T1 
          STD    EB 
          UJP    SDB5        RETURN 
 SSP      SPACE  4,10 
**        SSP - SET STATISTICAL PARAMETERS. 
* 
*         ENTRY  (NF - NF+1) = NUMBER OF FILES. 
*                (CS - CS+1) = CUMULATIVE SIZE OF INDIRECT FILES. 
* 
*         EXIT   (ACNF - ACNF+1) SET WITH NUMBER OF FILE. 
*                (CIFS - CIFS+1) SET WITH CUMULATIVE SIZE OF FILES. 
  
  
 SSP      SUBR               ENTRY/EXIT 
          LDD    CS 
          STM    CIFS 
          LDD    CS+1 
          STM    CIFS+1 
          LDD    NF 
          STM    ACNF 
          LDD    NF+1 
          STM    ACNF+1 
          UJN    SSPX        EXIT 
 VFI      SPACE  4,10 
**        VFI - VERIFY THAT FILE IS INDIRECT ACCESS.
* 
*         EXIT   TO *ERR* IF FILE IS DIRECT ACCESS. 
* 
*         MACROS ERROR. 
  
  
 VFI      SUBR               ENTRY/EXIT 
          LDM    FCBS,CI     CHECK FILE TYPE
          SHN    21-13
          PJN    VFIX        IF INDIRECT ACCESS FILE
          ERROR  FDA         *(FILE NAME) IS DIRECT ACCESS.*
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          USE    OVERFLOW 
          ERRNG  BUF2-2-*    OVERFLOW INTO CATALOG/PERMIT BUFFER
          TITLE  OVERLAYABLE INITIALIZATION ROUTINES. 
 IRP      SPACE  4,25 
***       INITIAL REQUEST PROCESSING. 
* 
*         CALL REQUEST PREPROCESSOR TO PERFORM CATALOG AND
*         PERMIT SEARCH, BEFORE CALLING COMMAND OVERLAY.
* 
*         ENTRY  (CC) = COMMAND CODE. 
*                (DVLW - DVLW+4) = DEVICE LAYOUT WORD OF MST. 
*                (MSTA) = MST ADDRESS/10B.
*                (PFOU) = OPTIONAL USER NAME
*                (PFPN) = OPTIONAL PACK NAME. 
* 
*         EXIT   TO COMMAND PROCESSOR AS SPECIFIED BY (CC). 
*                (CCDA) = CHANGED IF PASSWORD CHECKING IS NOT NEEDED. 
*                (CCDB) = *PSN* SET IF ACCUMULATION REQUIRED. 
*                (CCDC) = CHANGED IF SECURITY ACCESS VIOLATION. 
*                (DVLW) = DEVICE LAYOUT WORD OF MASTER DEVICE FROM MST. 
*                (LCOA) = COMMAND OVERLAY PROCESSOR ADDRESS.
*                (LCOB) = COMMAND OVERLAY NAME. 
*                (SCHG) = BYPASS SET IF USER INDEX CHECK IS NOT NEEDED. 
*                THE FOLLOWING SEARCH POINTERS ARE INITIALIZED. 
*                (HL, PB, PP, CS, CS+1, HB, HP, CB, CI, EP) 
* 
*         USES   T1, CM - CM+4. 
* 
*         CALLS  RMD. 
  
  
 IRP      BSS    0           ENTRY
  
*         INITIALIZE CATALOG SEARCH ROUTINES. 
  
          LDM    PFOU 
          NJN    IRP1        IF ALTERNATE USER NAME SPECIFIED 
          ISTORE CCDA,(UJN CCD4)  SET BYPASS OF PASSWORD CHECK
          ISTORE CCDC,(NJN CCD9)  SET SECURITY VIOLATION PROCESSING 
 IRP1     LDM    STAT        CHECK FOR SEARCH STATISTICS REQUIRED 
          LPK    STAC 
          ZJN    IRP2        IF ACCUMULATION NOT REQUIRED 
          ISTORE CCDB,(PSN)  SET ACCUMULATION REQUIRED
  
*         INITIALIZE FOR DEVICE ACCESS. 
  
 IRP2     RJM    RMD         SET DRIVER FOR MASTER DEVICE 
          LDM    MSTA        READ MST DEVICE LAYOUT WORD
          SHN    3
          ADN    ALGL 
          CRM    DVLW,ON
          LDM    STAT        CHECK FOR PRIVATE DEVICE 
          LPK    STPD 
          ZJN    IRP3        IF NOT PRIVATE DEVICE
          ISTORE SCHG,(PSN)  SET BYPASS OF USER INDEX CHECK 
  
*         INITIALIZE SEARCH POINTERS. 
  
 IRP3     LDN    0           CLEAR DIRECT CELLS 
          STD    HL          LENGTH OF HOLE 
          STD    PB          POINTER TO PERMIT BUFFER 
          STD    PP          INDEX TO PERMIT BUFFER 
          STD    CS          CUMULATIVE SIZE OF FILES IN CATALOG
          STD    CS+1 
          LDN    ZERL        CLEAR CONTIGUOUS STORAGE 
          CRD    HB 
          ERRNZ  HP-HB-1     DIRECT CELLS NOT CONTIGUOUS
          ERRNZ  CB-HP-1     DIRECT CELLS NOT CONTIGUOUS
          ERRNZ  CI-CB-1     DIRECT CELLS NOT CONTIGUOUS
          ERRNZ  EP-CI-1     DIRECT CELLS NOT CONTIGUOUS
  
*         EXIT TO REQUEST PREPROCESSOR. 
  
          LDD    CC          INDEX INTO *TCMD* TABLE
          SHN    1
          ADD    CC 
          STD    T1 
          LDM    TCMD+2,T1   SET OVERLAY NAME INTO *EXECUTE* MACRO
          STM    LCOB 
          LDM    TCMD+1,T1   SET REQUEST PROCESSOR ENTRY ADDRESS
          STM    LCOA 
          LDM    TCMD,T1     SET REQUEST PREPROCESSOR ADDRESS 
          STD    T1 
          LJM    0,T1        EXIT TO REQUEST PREPROCESSOR 
 CMD      SPACE  4,15 
**        CMD - CREATE *TCMD* TABLE ENTRIES.
* 
*         *CMD* CREATES THE THREE-WORD *TCMD* ENTRIES AND DEFINES 
*         THE SYMBOLS *OVXX* AND *PRXX*, THE OVERLAY SUFFIX AND REQUEST 
*         PROCESSOR ENTRY ADDRESS, RESPECTIVELY, FOR FUNCTION XX. 
*         *XX* IS THE APPROPRIATE LAST TWO CHARACTERS OF THE COMMAND
*         CODE SYMBOL *CCXX*. 
* 
* CC      CMD    PPR,PRO
* 
*         CC     COMMAND CODE SUFFIX
*         PPR    PREPROCESSOR ADDRESS.  IF OMITTED, A ZERO ENTRY IS 
*                CREATED. 
*         PRO    REQUEST PROCESSOR ENTRY ADDRESS IN THE FORM /3PX/ADDR. 
  
  
          MACRO  CMD,C,PPR,PRO
          ERRNZ  *-3*//CC_C  TABLE ENTRY OUT OF ORDER 
 .A       IFC    EQ,$PPR$$
          CON    0,0,0
 .A       ELSE
 .1       MICRO  2,2,PRO//
          CON    PPR,PRO,2R".1" 
 OV_C     EQU    2R".1" 
 CMD      RMT 
 PR_C     EQU    PRO
          RMT 
 .A       ENDIF 
          ENDM
 TCMD     SPACE  4,10 
**        TCMD - TABLE OF COMMAND PROCESSOR ADDRESSES.
* 
*         *TCMD* IS CREATED BY THE *CMD* MACRO. 
* 
*         FIRST BYTE IS PREPROCESSOR ADDRESS IN *3PC*.
*         SECOND BYTE IS PROCESSOR ADDRESS IN COMMAND OVERLAY.
*         THIRD BYTE IS SUFFIX FOR COMMAND OVERLAY NAME.
  
 TCMD     EQU    *-3         COMMAND CODE ADDRESS TABLE 
          LOC    3
  
 SV       CMD    SAV,/3PG/SAV  *SAVE* 
 GT       CMD    GET,/3PF/GET  *GET*
 PG       CMD    PUR,/3PL/PUR  *PURGE*
 CT       CMD                  *CATLIST*
 PM       CMD    PER,/3PM/PER  *PERMIT* 
 RP       CMD    REP,/3PG/REP  *REPLACE*
 AP       CMD    APP,/3PH/APP  *APPEND* 
 DF       CMD    DEF,/3PK/DEF  *DEFINE* 
 AT       CMD    ATT,/3PI/ATT  *ATTACH* 
 CG       CMD    CHG,/3PN/CHG  *CHANGE* 
 UA       CMD    UAT,/3PI/UAT  *UATTACH*
 SA       CMD    SAA,/3PO/SAA  *SETASA* 
 AF       CMD    SAF,/3PO/SAF  *SETAF*
 SD       CMD    SDA,/3PK/SDA  *SETDA*
 DD       CMD    DDS,/3PL/DDS  *DROPDS* 
 AN       CMD                  *ASSIGNPF* 
 OD       CMD    OLD,/3PF/OLD  *OLD*
 AC       CMD    SAC,/3PN/CHG  *SETPFAC*
 AL       CMD    SAL,/3PN/CHG  *SETPFAL*
 UG       CMD    UGT,/3PF/UGT  *UGET* 
 UR       CMD    URE,/3PG/URE  *UREPLAC*
 DI       CMD    DIS,/3PM/DIS  *DROPIDS*
 DP       CMD    DPF,/3PM/DPF  *DELPFC* 
 RS       CMD                  *RPFSTAT*
 SP       CMD    SPF,/3PR/SPF  *STAGEPF*
  
          LOC    *O 
  
          OVERFLOW  OVLA,EPFW 
          EJECT 
*         EQUIVALENCE EXTERNALLY REFERENCED TAGS. 
  
  
          QUAL   *
  
 CAI      EQU    /".O"/CAI
 CSA      EQU    /".O"/CSA
 CTI      EQU    /".O"/CTI
 DPR      EQU    /".O"/DPR
 DTK      EQU    /".O"/DTK
 IRA      EQU    /".O"/IRA
 ITC      EQU    /".O"/ITC
 MSRA     EQU    /".O"/MSRA 
 RMD      EQU    /".O"/RMD
 RNS      EQU    /".O"/RNS
 SNT      EQU    /".O"/SNT
 SNTA     EQU    /".O"/SNTA 
 STI      EQU    /".O"/STI
 UCE      EQU    /".O"/UCE
 UCE3     EQU    /".O"/UCE3 
 UCE4     EQU    /".O"/UCE4 
 UCEA     EQU    /".O"/UCEA 
 UCEB     EQU    /".O"/UCEB 
 UCEC     EQU    /".O"/UCEC 
 WBI      EQU    /".O"/WBI
  
 LOCG     EQU    /".O"/LOCG 
 OVLC     EQU    /".O"/OVLC 
 OVLU     EQU    /".O"/OVLU 
          OVERLAY  (CATALOG UPDATE ROUTINES.),OVLU
 OVL      SPACE  4,10 
***       THIS OVERLAY CONTAINS SUBROUTINES USED BY THE COMMAND 
*         OVERLAYS TO UPDATE THE PERMANENT FILE CATALOG.
  
  
 OVL      BSS    0           ENTRY
          RJM    RMD         RESET TO MASTER DEVICE 
          LDM    DVLW+1      PRESET FIRST TRACK FIELD IN EOI BUFFER 
          STM    EOIFS+1
          LDN    PDTL        PRESET DATE/TIME FIELD IN EOI BUFFER 
          CRM    EOIDT,ON 
          LDM    PUCW 
          SHN    21-13
          PJN    OVL1        IF NO USER CONTROL WORD SPECIFIED
          LDN    PSNI        FORCE UPDATE OF USER CONTROL WORD
          STM    FCEG 
 OVL1     LDM    PFPW 
          ZJN    OVL2        IF PASSWORD NOT SPECIFIED
          LDN    PSNI        FORCE UPDATE OF PASSWORD 
          STM    FCEH 
 OVL2     UJN    ".Q"X       RETURN AFTER LOAD
          TITLE  ALLOCATION ROUTINES. 
 ACS      SPACE  4,25 
**        ACS - ALLOCATE CATALOG SPACE. 
* 
*         ENTRY  (T5) = (EQ) = MASTER DEVICE EST ORDINAL. 
*                (EB) = POINTER TO END BUFFER.
*                (DVLW - DVLW+4) = DEVICE LAYOUT WORD OF MST. 
*                (FS) = EST ORDINAL FOR FILE. 
*                (FS+1) = FIRST TRACK OF FILE.
*                (SDAC) = FIRST SECTOR OF FILE ,(4XXX) FOR DA FILE. 
* 
*         EXIT   NEXT SECTOR ALLOCATED FOR CATALOGS.
*                NEW CATALOG BUFFER CLEARED.
*                ADDRESS SET IN 2 LOCATIONS PRECEEDING BUFFER.
*                (EP) = ADDRESS OF NEXT AVAILABLE ENTRY IN BUFFER.
*                LINKAGE SET IN BUFFER. 
*                OVERFLOW BIT SET IN MST IF NEW TRACK ALLOCATED.
*                TO *HNG* IF LABEL TRACK NOT RESERVED.
* 
*         USES   EP, T1, T5, T6.
* 
*         CALLS  CAI, ITC, RTK, SEI.
* 
*         MACROS ENDMS, MONITOR.
  
  
 ACS3     LDD    EB          SAVE BUFFER ADDRESS
          ADN    1
          STM    ACSA 
          ADN    1           SET POINTER TO NEXT AVAILABLE ENTRY
          STD    EP 
          LDC    500
          STD    T1 
 ACS4     LDN    0           CLEAR NEW CATALOG SECTOR BUFFER
          STM    *,T1 
 ACSA     EQU    *-1         (ADDRESS OF BUFFER + 1)
          SOD    T1 
          PJN    ACS4        IF MORE BYTES TO CLEAR 
  
 ACS      SUBR               ENTRY/EXIT 
          LDM    -2,EB       END BUFFER TRACK 
          STD    T6 
          LDM    -1,EB
          ADN    1
          STI    EB 
          LMM    SLM
          NJN    ACS3        IF NOT AT SECTOR LIMIT 
          ENDMS 
          LDM    DVLW+1      INTERLOCK CATALOG ALLOCATION 
          RJM    ITC
          ZJN    ACS1        IF INTERLOCK SUCCESSFUL
          RJM    HNG         HANG IF LABEL TRACK NOT RESERVED 
  
 ACS1     LDD    T6          SET ALLOCATION INTERLOCK FLAG
          STM    AILK 
          RJM    SEI         SEARCH FOR END OF CATALOG TRACK
          LDD    T5          SET CATALOG TRACK OVERFLOW 
          STD    CM+1 
          LDN    SGBS 
          STD    CM+3 
          LDN    GCTO 
          STD    CM+2 
          MONITOR  STBM 
          LDD    T6 
          STI    EB 
          RJM    RTK         REQUEST TRACK
          ZJN    ACS2        IF NO TRACK AVAILABLE
          RJM    CAI         CLEAR ALLOCATION INTERLOCK 
          LJM    ACS3        EXIT 
  
*         TRACK LIMIT ENCOUNTERED.
  
 ACS2     ERROR  TKL,,,T5    *EQXXX,DNYY, TRACK LIMIT.* 
 AFS      SPACE  4,20 
**        AFS - ALLOCATE FILE SPACE.
* 
*         ENTRY  (T5) = MASTER DEVICE EST ORDINAL.
*                (LF - LF+1) = LENGTH OF FILE TO BE ALLOCATED.
*                INDIRECT ALLOCATION INTERLOCK SET. 
* 
*         EXIT   SPACE ALLOCATED FOR INDIRECT FILE. 
*                (SDAB) = TRACK OF NEW FILE.
*                (SDAC) = SECTOR OF NEW FILE. 
* 
*         USES   T2, T7, CM - CM+4. 
* 
*         CALLS  DTK, SEI.
* 
*         MACROS ENDMS, MONITOR.
  
  
 AFS      SUBR               ENTRY/EXIT 
          ENDMS              RELEASE CHANNEL
          LDM    IAIF 
          NJN    AFS2        IF ALLOCATION INTERLOCK SET
          RJM    HNG         HANG 
  
 AFS2     LDM    DVLW        SKIP TO END OF INDIRECT CHAIN
          STD    T6 
          RJM    SEI
          LDD    T5          SET EST ORDINAL AND TRACK
          STD    CM+1 
          LDD    T6 
          STM    SDAB 
          STD    CM+2 
          LDD    T7          CALCULATE SECTORS REQUIRED 
          ADD    LF+1 
 AFSB     ADN    2           ALLOCATE FOR SYSTEM SECTOR AND EOI 
*         PSN                (*APPEND* - DO NOT ALLOCATE FOR SS/EOI)
          STD    CM+4 
          STD    T2 
          SHN    -14
          ADD    LF 
          STD    CM+3 
          AOD    T7 
          LMM    SLM
          NJN    AFS3        IF CURRENT EOI NOT AT END OF TRACK 
          STD    T7          RESET FIRST TRACK AND SECTOR OF NEW FILE 
          STM    AFSA+PSNI*0
 AFS3     LDD    CM+4        SUBTRACT SECTORS IN CURRENT TRACK
          SBM    SLM
          STD    CM+4 
          PJN    AFS6        IF ADDITIONAL TRACKS REQUIRED
          LDD    CM+3 
          NJN    AFS5        IF ADDITIONAL TRACKS REQUIRED
          LDD    T2          SET EOI IN TRT 
          RJM    DTK
          UJN    AFS8        COMPLETE ALLOCATION
  
 AFS5     AOD    CM+4        ADJUST FOR UNDERFLOW 
          SOD    CM+3 
 AFS6     AOD    CM+4        ADJUST SECTOR COUNT FOR *RTCM* 
          SHN    -14
          RAD    CM+3 
          MONITOR  RTCM 
*         LDN    0           CLEAR REWRITE ON FILE COPY 
          STM    DTMD 
          LDD    CM+4 
 AFSA     UJN    AFS7        SKIP UPDATE OF FIRST TRACK 
*         PSN                (CURRENT EOI AT END OF TRACK)
          STM    SDAB        SET FIRST TRACK OF NEW FILE
 AFS7     ZJN    AFS9        IF NO TRACKS ASSIGNED
 AFS8     LDD    T7          SET FIRST SECTOR OF NEW FILE 
          STM    SDAC 
          LDC    STXC        SET *EXTENDING INDIRECT CHAIN* FLAG
          RAM    STAT 
          LDN    0           CLEAR REWRITE ON FILE COPY 
          STM    DTMD 
          LJM    AFSX        RETURN 
  
 AFS9     ERROR  TKL,,,T5    *EQXXX,DNYY, TRACK LIMIT.* 
          TITLE  CATALOG UPDATE ROUTINES. 
 CCS      SPACE  4,30 
**        CCS - CREATE CATALOG SECTOR.
* 
*         ENTRY  (HB) = ADDRESS OF BUFFER CONTAINING HOLE.
*                (HP) = INDEX TO HOLE ENTRY.
*                (EB) = POINTER TO BUFFER CONTAINING END OF CATALOGS. 
*                (EP) = INDEX TO FIRST AVAILABLE ENTRY IN END BUFFER. 
*                (CC) = COMMAND CODE. 
*                (DAHP) .NE. 0 IF DIRECT ACCESS HOLE BEING USED.
*                (CI) = INDEX TO CATALOG ENTRY (APPEND/REPLACE/UREPLACE)
*                (CCSB) = PRESET TO *PSN* FOR *DEFINE*/*DROPIDS*. 
*                (CCSC) = PRESET TO *PSN* FOR *DEFINE*/*DROPIDS*. 
*                (CCSF) = PRESET TO *PSN* FOR *DEFINE*/*DROPIDS*. 
*                (CCSG) = PRESET TO *PSN* FOR *DEFINE*/*DROPIDS*. 
*                (SDAB) = FIRST TRACK OF FILE.
*                (SDAC) = FIRST SECTOR OF FILE, (4XXX) FOR DA FILE. 
* 
*         EXIT   CATALOG ENTRY CREATED. 
*                CATALOG ENTRY NOT WRITTEN TO DISK IF *DEFINE* REQUEST. 
*                SPACE FOR FILE ALLOCATED IF NECESSARY. 
*                (EP) = ADDRESS OF NEW CATALOG ENTRY OF FILE (IF DAPF). 
*                (EB) = ADDRESS OF BUFFER FOR FILE (IF DAPF). 
*                IF (HB) .NE. (EB), END BUFFER REWRITTEN. 
* 
*         USES   T1 - T7. 
* 
*         CALLS  ACS, AFS, FCE, FHE, REB, WBI.
* 
*         NOTES  THE SYMBOLS *CCSA*, *CCSD* AND *CCSV* SHOULD NOT BE
*                USED AS DATA TAGS IN THIS SUBROUTINE, SINCE THEY 
*                CONFLICT WITH GLOBAL SYMBOLS.
  
  
 CCS      SUBR               ENTRY/EXIT 
 CCSE     LDD    HP 
*         LJM    CCS5.1      (*UREPLACE*) 
          NJN    CCS3        IF HOLE AVAILABLE
  
*         CREATE NEW CATALOG ENTRY. 
  
          RJM    REB         REREAD END BUFFER (IF NECESSARY) 
 CCSB     RJM    AFS         ALLOCATE FILE SPACE
*         PSN                (*DEFINE* OR *DROPIDS*)
          LDD    EP 
          NJN    CCS2        IF SPACE AVAILABLE IN LAST SECTOR
          RJM    ACS         ALLOCATE CATALOG SPACE 
  
*         FORM CATALOG ENTRY FOR FILE.
  
 CCS2     LDD    EP          SET ADDRESS OF FIRST ENTRY 
          RJM    FCE
          LDM    DAHP 
          NJN    CCS2.1      IF USING DIRECT ACCESS HOLE
          LDN    NWCE        ADVANCE SECTOR WORD COUNT
          RAM    1,EB 
 CCS2.1   LJM    CCS7        WRITE END BUFFER 
  
*         USE EXISTING CATALOG ENTRY FOR FILE.
  
 CCS3     UJN    CCS5        PROCESS INDIRECT ACCESS FILE 
*         PSN                (*DEFINE*/*DROPIDS* REQUEST) 
 CCSC     EQU    *-1
  
*         REUSE DELETED DIRECT ACCESS FILE ENTRY. 
  
          LDD    HP          FORM CATALOG ENTRY FOR DIRECT ACCESS FILE
          STD    EP 
          RJM    FCE
  
 CCS4     LDD    HB          REWRITE CATALOG SECTOR 
          STD    EB 
 CCSF     RJM    WBI
*         PSN                (*DEFINE*/*DROPIDS* REQUEST) 
          UJP    CCSX        EXIT 
  
*         UTILIZE HOLE FOR INDIRECT ACCESS FILE.
  
 CCS5     LDM    FCBT,HP     SET ADDRESS OF HOLE
          STM    SDAB 
          LDM    FCBS,HP
          STM    SDAC 
          LDD    HP          REFORM CATALOG ENTRY FOR NEW FILE
          RJM    FCE         FORM CATALOG ENTRY 
 CCS5.1   LDD    HL          LENGTH OF HOLE 
          SBD    LF+1 
          ZJN    CCS4        IF EXACT FIT 
  
*         CREATE CATALOG ENTRY FOR UNUSED PORTION OF HOLE.
* 
*         NOTE - CODE IN *SCH* AND *APP* GUARANTEES THAT A HOLE 
*         WILL NOT BE SELECTED UNLESS IT IS LARGE ENOUGH TO 
*         ALLOW A NEW MINIMUM-SIZED HOLE TO BE CREATED (EXCEPT
*         FOR EXACT FITS).
  
          SBN    2           SET NEW HOLE LENGTH
          STD    HL 
          RJM    REB         REREAD END BUFFER (IF NECESSARY) 
          LDD    EP 
          NJN    CCS6        IF SPACE AVAILABLE IN LAST SECTOR
          RJM    ACS         ALLOCATE CATALOG SPACE 
 CCS6     RJM    FHE         FORM HOLE ENTRY
          LDM    DAHP 
          NJN    CCS6.1      IF USING DIRECT ACCESS HOLE
          LDN    NWCE 
          RAM    1,EB 
 CCS6.1   LDD    HB          REWRITE FILE CATALOG ENTRY 
          RJM    WBI
          LDD    HB          CHECK BUFFERS
          LMD    EB 
          ZJN    CCS8        IF NEW ENTRY IN SAME BUFFER AS HOLE
 CCS7     LDD    EB          WRITE NEW CATALOG ENTRY
 CCSG     RJM    WBI
*         PSN                (*DEFINE*/*DROPIDS* REQUEST) 
  
*         WRITE EOI SECTOR IF NEW SECTOR OF CATALOGS. 
  
 CCS8     LDD    EP          CHECK END BUFFER 
          SBD    EB 
          SBN    2
          ADM    DAHP        NON-ZERO IF USING DIRECT ACCESS HOLE 
          NJN    CCS10       IF NOT NEW END BUFFER
          LDI    EB 
          SHN    6
          PJN    CCS9        IF NOT NEW TRACK 
          SHN    -6 
          STD    T6 
          LDN    0
 CCS9     SHN    -6 
          STD    T7          SET SECTOR NUMBER
          STM    EOIA+1 
          STM    EOIFS+3
          LDD    T6          SET TRACK NUMBER 
          STM    EOIA 
          STM    EOIFS+2
          LDC    EOIB        WRITE EOI
          RJM    WBI
 CCS10    LJM    CCSX 
 CDA      SPACE  4,15 
**        CDA - COMPARE DISK ADDRESSES. 
* 
*         IF THE DISK ADDRESS FOR THE BUFFER MATCHES THE DISK ADDRESS 
*         FOR THE DIRECT ACCESS HOLE, SET THE END BUFFER POINTERS TO
*         MATCH THE BUFFER POINTERS.
* 
*         ENTRY  (A) = BUFFER ADDRESS.
* 
*         EXIT   (A) = 0 IF DISK ADDRESS MATCH. 
*                (EB) = BUFFER ADDRESS IF DISK ADDRESSES MATCH. 
*                (EP) = OFFSET IF DISK ADDRESSES MATCH. 
* 
*         USES   T3.
  
  
 CDA      SUBR               ENTRY/EXIT 
          STD    T3          SAVE BUFFER ADDRESS
          LDM    DAHP 
          LMM    -2,T3
          NJN    CDAX        IF NOT THE SAME TRACK
          LDM    DAHP+1 
          LMM    -1,T3
          NJN    CDAX        IF NOT THE SAME SECTOR 
          LDD    T3          SET END BUFFER ADDRESS 
          STD    EB 
          ADM    DAHP+2 
          STD    EP 
          LDN    0           DISK ADDRESS MATCH 
          UJN    CDAX        RETURN 
 CIA      SPACE  4,30 
**        CIA - CLEAR INDIRECT ALLOCATION INTERLOCK.
* 
*         THE INTERLOCK IS NOT CLEARED AT THIS TIME WHEN EXTENDING
*         THE INDIRECT CHAIN ON A BUFFERED DEVICE; THE INTERLOCK IS 
*         HELD THROUGHOUT THE TRANSFER.  THIS IS DONE FOR THE FOLLOWING 
*         REASON:  SINCE ANY REQUEST TO WRITE TO NEWLY ALLOCATED SPACE
*         ON A BUFFERED DEVICE MUST BE DONE BY SEQUENTIAL (NON-REWRITE) 
*         REQUESTS, ALL EXTENSIONS OF THE INDIRECT CHAIN ARE PERFORMED
*         WITH SEQUENTIAL WRITES.  HOWEVER, THIS MEANS THAT TWO OR MORE 
*         COPIES OF *PFM* CANNOT BE ALLOWED TO PERFORM SUCH EXTENSIONS
*         AT THE SAME TIME, SINCE ONE *PFM* MIGHT THEN DO A 
*         SEQUENTIAL WRITE INTO A PHYSICAL SECTOR PREVIOUSLY WRITTEN
*         BY ANOTHER *PFM*, WHICH MAY DESTROY THE DATA WRITTEN BY 
*         THAT OTHER *PFM*.  NOTE THAT THE INTERLOCK MUST ALSO BE 
*         HELD THROUGHOUT THE TRANSFER FOR *CPUPFM* TRANSFERS, SINCE
*         FOR SEQUENTIAL WRITES *1MS*/*CPUMTR* WILL CHANGE THE VALUE
*         OF THE EOI IN THE TRT DURING THE TRANSFER, AND WILL NOT SET 
*         THE FINAL VALUE OF THE EOI UNTIL THE TRANSFER IS COMPLETE.
* 
*         ENTRY  (EQ) = MASTER DEVICE EST ORDINAL.
*                (DVLW) = FIRST TRACK OF INDIRECT CHAIN.
* 
*         EXIT   INDIRECT ALLOCATION INTERLOCK CLEARED. 
*                (IAIF) CLEARED.
* 
*         USES   T5, T6.
* 
*         CALLS  CTI. 
* 
*         MACROS ENDMS. 
  
  
 CIA      SUBR               ENTRY/EXIT 
          ENDMS 
          LDM    STAT 
          LPC    STBD+STXC
          LMC    STBD+STXC
          ZJN    CIAX        IF EXTENDING CHAIN ON BUFFERED DEVICE
          LDD    EQ 
          STD    T5 
          LDM    STAT 
          LPC    STXC 
          ZJN    CIA1        IF NOT EXTENDING CHAIN 
          RAD    T5          SET CHECKPOINT BIT 
          ERRNZ  STXC-4000   CODE DEPENDS ON VALUE
 CIA1     LDM    DVLW        CLEAR INTERLOCK
          STD    T6 
          RJM    CTI
          LDD    EQ 
          STD    T5 
          LDN    0           CLEAR FLAG 
          STM    IAIF 
          UJN    CIAX        RETURN 
 DCE      SPACE  4,30 
**        DCE - DELETE CATALOG ENTRY. 
* 
*         DELETE CATALOG ENTRY FOR INDIRECT ACCESS FILE.
*         DETERMINE IF SPACE CAN BE RELEASED AND RELEASE IF REQUESTED.
* 
*         ENTRY  (CB) = BUFFER ADDRESS. 
*                (CI) = POINTER TO CATALOG ENTRY. 
*                (DCEC) = PRESET TO *PSN* FOR *APPEND* REQUEST. 
*                (DCED) = PRESET TO *PSN* FOR *APPEND* REQUEST. 
*                INDIRECT ALLOCATION INTERLOCK SET. 
* 
*         EXIT   ENTRY DELETED IN CATALOG SECTOR. 
*                (A) = 0     IF NO DELINK POSSIBLE. 
*                (A) = 1     IF DELINK POSSIBLE.
*                            CATALOG BUFFER REWRITTEN IF NOT *APPEND* 
*                            REQUEST. 
*                (A) = 2     IF FILE AT END OF CHAIN. 
*                            CATALOG BUFFER REWRITTEN IF NOT *APPEND* 
*                            REQUEST. 
*                DELINK REQUEST SAVED AT *APDK* IF DELINK POSSIBLE FOR
*                  AN APPEND OPERATION. 
* 
*         USES   P0, P1, P2, P3, T1, T2, T3, T4, T6, T7, CM - CM+4. 
* 
*         CALLS  DTK, SNT, WBI. 
* 
*         MACROS ENDMS, MONITOR.
  
  
 DCE      SUBR               ENTRY/EXIT 
          LDM    IAIF 
          NJN    DCE0        IF ALLOCATION INTERLOCK SET
          RJM    HNG         HANG 
  
*         SET CATALOG ENTRY AS HOLE.
  
 DCE0     LDM    FCLF+1,CI   SET LENGTH OF HOLE 
          ADN    2           ACCOUNT FOR SYSTEM SECTOR AND EOI
          STD    P1 
          SHN    -14
          ADM    FCLF,CI
          STD    P0 
          LDM    FCBS,CI     SET START OF HOLE
          STD    T7 
          LDN    0           CLEAR TRACK COUNT
          STD    T3 
          STM    FCUI+1,CI   SET ENTRY AS HOLE
          LDM    FCUI,CI
          SCN    77 
          STM    FCUI,CI
          LDD    CI          SET CONTROL MODIFICATION DATE IN HOLE
          RAM    DCEB 
          LDN    PDTL 
          CRM    FCKD-2,ON
 DCEB     EQU    *-1         (ADDRESS OF DATE WITHIN BUFFER)
          LDM    FCBT,CI
          NJN    DCE1        IF FILE IS DISK RESIDENT 
          LDC    4000        SET AS DAPF HOLE 
          STM    FCBS,CI
          LJM    DCE15       EXIT 
  
*         CHECK FOR POSSIBILITY OF TRACK DELINK.
  
 DCE1     STD    T6          SET CURRENT TRACK
          RJM    SNT         SET NEXT TRACK 
          STD    T1 
          SHN    6
          PJN    DCE5        IF END OF TRACK CHAIN
          LDM    SLM
          SBD    T7 
          STD    T2          SAVE SECTOR COUNT FOR THIS TRACK 
          LDD    P1          DECREMENT REMAINING HOLE BY SECTOR COUNT 
          SBD    T2 
          STD    T0          SAVE RESULT
          PJN    DCE4        IF NOT END OF HOLE 
          SOD    P0 
          PJN    DCE3        IF NOT END OF HOLE 
 DCE2     LJM    DCE10       PROCESS END OF HOLE
  
 DCE3     AOD    T0          RESTORE RESULT 
 DCE4     STD    P1 
          AOD    T3          ADVANCE TRACK COUNT
          LDN    0           SET FIRST SECTOR 
          STD    T7 
          LDD    P2          SAVE PREVIOUS TRACK
          STD    P3 
          LDD    T6          SAVE LAST TRACK
          STD    P2 
          LDD    T1 
          UJN    DCE1        LOOP FOR NEXT TRACK
  
*         END OF CHAIN ENCOUNTERED. 
  
 DCE5     LDD    P0 
          SHN    14 
          ADD    P1 
          ADD    T7 
          SBD    T1 
          SBN    1
          NJN    DCE2        IF NOT LAST FILE ON CHAIN
          LDN    2           FLAG END OF CHAIN
          RAM    DCEA 
 DCEC     UJN    DCE6        NOT APPEND COMMAND 
*         PSN                (*APPEND* REQUEST) 
          LJM    DCE15       EXIT BACK TO APPEND PROCESSING 
  
 DCE6     LDM    FCBS,CI
          ZJN    DCE7        IF FILE STARTS AT SECTOR 0 
          SBN    1
          STD    P1 
          LCN    0           SET AS NULL HOLE 
          STM    FCBS,CI     SET AS NULL HOLE (DELETED DA FILE) 
          UJN    DCE8        REWRITE CATALOG ENTRY
  
 DCE7     STM    FCLF,CI     SET HOLE LENGTH
          LDK    MNHS-2      LEAVE MINIMUM-SIZE HOLE
          STM    FCLF+1,CI
          ADN    1
          STD    P1 
 DCE8     LDD    CB          REWRITE CATALOG ENTRY
          RJM    WBI
          ENDMS 
          LDM    FCBT,CI     SET FIRST TRACK
          STD    T6 
          LDD    P1          LAST SECTOR WRITTEN
          RJM    DTK         DROP TRACK CHAIN 
          LJM    DCE15       EXIT 
  
 DCE9     SOD    T3          DELINK ONE LESS TRACK
          LDD    P2          SET TRACK TO LINK TO 
          STD    T6 
          LDD    P3          SET LAST TRACK TO DELINK 
          STD    P2 
          LDM    SLM         ADJUST REMAINING LENGTH OF HOLE
          RAD    P1 
  
*         END OF HOLE ENCOUNTERED.
  
 DCE10    UJN    DCE11       NOT *APPEND* 
*         PSN                (*APPEND* REQUEST) 
 DCEE     EQU    *-1
          LDM    CPTF 
          ZJN    DCE11       IF NOT CPU TRANSFER
          LDC    IFUI        SET INDIRECT FLAW USER INDEX IN OLD PFC
          STM    FCUI+1,CI
          SHN    -14
          RAM    FCUI,CI
 DCE10.1  LJM    DCE15       EXIT 
  
 DCE11    LDD    T3          CHECK TRACK COUNT
          SBN    2
          MJN    DCE10.1     IF NO TRACKS TO DELINK 
          LDM    FCBT,CI     SET NEW HOLE 
          LPC    3777 
          STD    CM+2 
          LDM    SLM
          SBM    FCBS,CI
          ADD    P1 
          SBK    MNHS 
          MJP    DCE9        IF NEW HOLE SHORTER THAN MINIMUM LENGTH
          ADK    MNHS-2      SET LENGTH OF NEW HOLE 
          STM    FCLF+1,CI
          LDN    0
          STM    FCLF,CI
          AOM    DCEA        SET DELINK POSSIBLE
          LDD    T5          SET CALL TO DELINK 
          ADC    4000        SET CHECKPOINT BIT 
          STD    CM+1 
          LDD    T6          SET NEXT TRACK IN CHAIN
          STD    CM+3 
          LDD    P2          SET LAST TRACK TO RELEASE
          STD    CM+4 
          LDD    MA 
          CWD    CM 
          CRM    APDK,ON     SAVE DELINK REQUEST
 DCED     UJN    DCE12       REWRITE CATALOG ENTRY
*         PSN                (*APPEND* REQUEST) 
          UJN    DCE15       EXIT 
  
 DCE12    LDD    CB          REWRITE CATALOG ENTRY
          RJM    WBI
          ENDMS 
          LDD    MA 
          CWM    APDK,ON
          SBN    1
          CRD    CM 
          MONITOR  DLKM      DELINK TRACKS
 DCE15    LDN    0           SET EXIT CONDITION 
*         LDN    1           (DELINK POSSIBLE)
*         LDN    2           (FILE AT END OF CHAIN) 
 DCEA     EQU    *-1
          LJM    DCEX        RETURN 
 FCE      SPACE  4,15 
**        FCE - FORM CATALOG ENTRY. 
* 
*         ENTRY  (A) = LOCATION OF ENTRY WITHIN BUFFER. 
*                (FN - FN+3) = PERMANENT FILE NAME. 
*                (LF - LF+1) = LENGTH OF FILE IN SECTORS. 
*                (FCEG) = PRESET TO *PSN* FOR USER CONTROL WORD UPDATE. 
*                (FCEH) = PRESET TO *PSN* IF PASSWORD SPECIFIED.
*                (SDAB) = STARTING TRACK ADDRESS. 
*                (SDAC) = STARTING SECTOR ADDRESS.
*                (CI) = INDEX TO OLD CATALOG ENTRY. 
* 
*         EXIT   CATALOG ENTRY REFORMED IN BUFFER.
*                WORD COUNT OF SECTOR ADVANCED IF NOT A HOLE PLUG.
*                (PFCA) = ADDRESS OF NEW CATALOG ENTRY. 
* 
*         USES   EP, P0, CM - CM+4, FN - FN+3, T0 - T3, UI - UI+1,
*                LF - LF+1. 
* 
*         NOTE   THE SYMBOLS *FCEC*, *FCEF* AND *FCEO* SHOULD NOT BE
*                USED FOR DATA TAGS IN THIS ROUTINE, SINCE THEY 
*                CONFLICT WITH THE GLOBAL CATALOG SYMBOL DEFINITIONS. 
  
  
 FCE      SUBR               ENTRY/EXIT 
          STD    T1          ADDRESS OF CATALOG ENTRY 
          STM    PFCA 
          STM    FCEA        SET ADDRESS OF FILE NAME 
          STD    T2          SET ADDRESS FOR CLEARING OF CATALOG ENTRY
          ADC    FCCW        SET ADDRESS OF USER CONTROL WORD 
          STM    FCEB 
          STM    FCED 
          LDD    T1 
          LMD    CI 
          ZJN    FCE2        IF REPLACING SAME CATALOG ENTRY
  
*         CLEAR CATALOG ENTRY BUFFER. 
  
          LDC    NWCE*5      CLEAR EXISTING CATALOG ENTRY 
          STD    T3 
 FCE1     LDN    0
          STI    T2 
          AOD    T2 
          SOD    T3 
          NJN    FCE1        IF MORE CATALOG TO CLEAR 
  
*         TRANSFER DATA INTO NEW CATALOG ENTRY. 
  
 FCE2     LDD    MA          SET NEW FILE NAME
          CWD    FN 
          CRM    *,ON 
 FCEA     EQU    *-1
          LDM    FCUI,T1     SET USER INDEX IN CATALOG ENTRY
          SCN    77 
          ADD    UI          USER INDEX FIRST BYTE
          STM    FCUI,T1
          LDD    UI+1 
          STM    FCUI+1,T1
          LDM    SDAB        SET BEGINNING TRACK AND SECTOR 
          STM    FCBT,T1
          LDM    SDAC 
          STM    FCBS,T1
          LDD    LF          SET LENGTH OF FILE 
          STM    FCLF,T1
          LDD    LF+1 
          STM    FCLF+1,T1
          LDN    PDTL        READ PACKED DATE AND TIME
          CRD    CM 
          LDD    T1          SET TRANSFER OF OLD CATALOG
          ADN    FCRI 
          STD    T2 
          LDD    CI 
          ZJN    FCE5        IF NO PRIOR FILE 
          ADN    FCRI 
          STD    T3 
          LMD    T2 
          ZJN    FCE4        IF SAME CATALOG ENTRY
 FCE3     LDI    T3          TRANSFER OLD CATALOG DATA
          STI    T2 
          AOD    T3 
          AOD    T2 
          ADC    -NWCE*5
          LMD    T1 
          NJN    FCE3        IF MORE CATALOG TO TRANSFER
 FCE4     LDM    FCEC,T1     CLEAR ERROR CODES FROM OLD FILE
          LPN    77 
          STM    FCEC,T1
          LDC    UJNI+FCE7-FCEI  DO NOT UPDATE FCCD OR FCKD 
          STM    FCEI 
 FCEG     UJN    FCE5        BYPASS USER CONTROL WORD UPDATE
*         PSN                (SET USER CONTROL WORD)
          LDD    MA          TRANSFER CONTROL WORD VIA MESSAGE BUFFER 
          CWM    PUCW,ON
          SBN    1
          CRM    *,ON 
 FCEB     EQU    *-1
 FCE5     LDN    CM+2        SET TRANSFER ADDRESSES 
*         UJN    FCE7.1      (*DROPIDS* - BYPASS DATE CHANGE) 
 FCEL     EQU    *-1
          STD    T2 
          LDD    T1 
          STD    T3 
 FCE6     LDI    T2          TRANSFER DATES 
 FCEI     STM    FCCD,T3
*         UJN    FCE7        (IF EXISTING CATALOG ENTRY)
          STM    FCKD,T3
 FCE7     STM    FCUD,T3
          STM    FCAD,T3
          STM    FCMD,T3
          AOD    T3 
          AOD    T2 
          LMN    CM+5 
          NJN    FCE6        LOOP TO END OF DATES 
          LDD    CI 
          ZJN    FCE8        IF NOT PREVIOUS FILE 
 FCE7.1   LJM    FCEX        RETURN 
  
*         NEW FILE CREATION.
  
 FCE8     LDN    FCPW        SET PASSWORD ADDRESS 
          ADD    T1 
          STM    FCEJ 
          ADN    FCXD-FCPW   SAVE EXPIRATION DATE POINTER 
          STD    T3 
          ADN    FCCN-FCXD   SET CHARGE/PROJECT ADDRESS 
          STM    FCEK 
          LDD    MA          TRANSFER USER CONTROL WORD AND PASSWORD
          CWM    PUCW,ON
          CWM    PFPW,ON
          SBN    2
          CRM    *,ON        SET USER CONTROL WORD
 FCED     EQU    *-1
 FCEH     UJN    FCE9        BYPASS PASSWORD UPDATE 
*         PSN                (SET PASSWORD) 
          CRM    *,ON        SET PASSWORD 
 FCEJ     EQU    *-1
          LDI    T3          SET PASSWORD EXPIRATION DATE 
          SCN    77 
          LMM    PXDT 
          STI    T3 
          LDM    PXDT+1 
          STM    1,T3 
 FCE9     LDM    LFAL        SET ACCESS LEVEL AND CATEGORY SET
          STM    FCAL,T1
          ERRNZ  FCAL-FCFC+1 CODE DEPENDS ON VALUE
          LDM    PFFC 
          STM    FCFC,T1
          LDM    PFFC+1 
          STM    FCFC+1,T1
          LDM    PFFC+2 
          STM    FCFC+2,T1
          LDM    MODE        SET CATALOG TYPE AND FILE MODE 
          LPC    3737 
          STM    FCCT,T1
          LDM    PFSS        SET SS, BR AND PR
          ERRNZ  PFSS-PFBR   *BR* AND *SS* MUST BE TOGETHER 
          ERRNZ  PFRS-PFBR   *BR* AND *PR* MUST BE TOGETHER 
          STM    FCFS,T1
          LDM    PFAP        SET ALTERNATE CATLIST PERMISSION 
          LPC    6000 
          STM    FCAP,T1
          LDC    0           SET DEVICE NUMBER
 FCEE     EQU    *-1
          STM    FCDN,T1
          NFA    CHGN        SET EXECUTING CHARGE/PROJECT FROM NFL
          CRM    *,TR 
 FCEK     EQU    *-1
          ERRNZ  FCP1-FCCN-5 *FCP1* MUST FOLLOW *FCCN*
          ERRNZ  FCP2-FCCN-12  *FCP2* MUST FOLLOW *FCCN*/*FCP1* 
          ERRNZ  PJ1N-CHGN+1 *PJ1N* MUST BE IMMEDIATELY AFTER *CHGN*
          ERRNZ  PJ2N-PJ1N+1 *PJ2N* MUST BE IMMEDIATELY AFTER *PJ1N*
          LJM    FCEX        RETURN 
  
*         TEST RANGE OF GENERATED RELATIVE JUMPS. 
  
          ERRNG  37+FCEI-FCE7 
 FHE      SPACE  4,15 
**        FHE - FORM HOLE ENTRY.
* 
*         ENTRY  (EP) = POINTER IN END BUFFER FOR NEW HOLE ENTRY. 
*                (HL) = SIZE OF NEW HOLE. 
*                (LF - LF+1) = SIZE OF NEW FILE.
*                (HP) = POINTER TO NEW FILE - PLACED IN PREVIOUS HOLE.
*                CATALOG ENTRY CONTAINS POINTER TO NEW FILE.
* 
*         EXIT   NEW HOLE FORMED IN END BUFFER. 
* 
*         CALLS  *NONE* 
* 
*         USES   T1, T2, T3.
  
  
 FHE      SUBR               ENTRY/EXIT 
  
*         DETERMINE START OF NEW HOLE.
  
          LDM    FCBS,HP     FIRST SECTOR OF NEW FILE 
          ADN    2           ALLOW FOR SYSTEM SECTOR AND EOI
          STD    T7 
          LDD    LF+1        LENGTH OF NEW FILE 
          STD    T3 
          LDM    FCBT,HP
 FHE1     STD    T6 
          LDD    T7 
          ADD    T3 
          SBM    SLM
          MJN    FHE2        IF PAST END OF NEW FILE
          STD    T3          REMAINDER OF NEW FILE
          LDN    0
          STD    T7 
          RJM    SNT         SET NEXT TRACK 
          UJN    FHE1 
  
 FHE2     ADM    SLM         SET ADDRESS OF NEW FILE
          STD    T7 
          LDC    NWCE*5      CLEAR NEXT CATALOG ENTRY 
          STD    T1 
          LDD    EP 
          STD    T2 
 FHE3     LDN    0
          STI    T2 
          AOD    T2 
          SOD    T1 
          NJN    FHE3        IF MORE CATALOG TO CLEAR 
  
*         FORM HOLE ENTRY 
  
          LDD    T7 
          STM    FCBS,EP
          LDD    T6 
          STM    FCBT,EP
          LDD    HL 
          STM    FCLF+1,EP
          LDD    EP          SET CONTROL MODIFICATION DATE IN HOLE
          RAM    FHEA 
          LDN    PDTL 
          CRM    FCKD-2,ON
 FHEA     EQU    *-1         (ADDRESS OF DATE WITHIN BUFFER)
          LJM    FHEX        RETURN 
 IIA      SPACE  4,20 
**        IIA - INTERLOCK INDIRECT ALLOCATION.
* 
*         ENTRY  (EQ) = MASTER DEVICE EST ORDINAL.
*                (DVLW) = FIRST TRACK OF INDIRECT CHAIN.
* 
*         EXIT   INDIRECT ALLOCATION INTERLOCK SET. 
*                (IAIF) NONZERO.
* 
*         ERROR  TO *ERR* IF INTERLOCK NOT OBTAINED BY FOURTH TRY.
*                TO *HNG* IF TRACK NOT RESERVED.
* 
*         USES   T1, T5, T6.
* 
*         CALLS  DPR, STI.
* 
*         MACROS ENDMS. 
  
  
 IIA4     AOM    IAIF        SET INDIRECT ALLOCATION INTERLOCK FLAG 
  
  
 IIA      SUBR               ENTRY/EXIT 
          ENDMS 
          LDD    EQ 
          STD    T5 
          LDM    DVLW 
          STD    T6 
          LDN    4
          STD    T1 
 IIA1     RJM    STI
          ZJN    IIA4        IF INTERLOCK OBTAINED
          LMN    2
          ZJN    IIA2        IF TRACK NOT RESERVED
          SOD    T1 
          ZJN    IIA3        IF RETRY COUNT EXHAUSTED 
          RJM    DPR         DELAY PRIOR TO RETRY 
          UJN    IIA1        TRY AGAIN
  
 IIA2     RJM    HNG         HANG IF TRACK NOT RESERVED 
  
 IIA3     EXIT   INA,CH,,,EC4   * INTERLOCK NOT AVAILABLE.* 
 REB      SPACE  4,15 
**        REB - REREAD END BUFFER.
* 
*         REREAD THE BUFFER CONTAINING THE END OF THE CATALOGS, 
*         IF THAT BUFFER WAS IN *BFMS*, AND IF *BFMS* WAS REUSED. 
*         IF (DAHP) IS NONZERO, READ THE SECTOR CONTAINING THE DAPF 
*         HOLE INTO *BFMS*, AND RESET (EB) AND (EP) TO POINT TO IT. 
* 
*         ENTRY  (EBSC) = SECTOR FOR END BUFFER.
*                (EBTK) = TRACK FOR END BUFFER. 
*                (DAHP) = DIRECT ACCESS HOLE POINTER. 
* 
*         EXIT   END BUFFER REREAD. 
* 
*         USES   T6, T7.
* 
*         CALLS  CDA, PDV, PES, RDS.
* 
*         MACROS ERROR, SETMS.
  
  
 REB3     LDM    STAT 
          LPN    STBR 
          ZJN    REBX        IF *BFMS* (END BUFFER) HAS NOT BEEN REUSED 
 REB4     LDM    EBTK        RESET TRACK
          STD    T6 
          STM    -2,EB
          LDM    EBSC        RESET SECTOR 
          STD    T7 
          STM    -1,EB
          SETMS  IO,NS
          RJM    PDV         PROCESS DEVICE STATUS
          LDD    EB          REREAD END SECTOR
          RJM    RDS
          PJN    REBX        IF NO ERROR
          RJM    PES         PROCESS ERROR STATUS 
  
 REB      SUBR               ENTRY/EXIT 
          LDM    DAHP 
 REB1     ZJP    REB3        IF NO DIRECT ACCESS HOLES FOUND
          LDD    CB 
          RJM    CDA         COMPARE DISK ADDRESSES (CATALOG BUFFER)
          ZJN    REBX        IF DIRECT ACCESS HOLE IN CATALOG BUFFER
          LDD    HP 
          ZJN    REB2        IF NO HOLE BUFFER
          LDD    HB 
          RJM    CDA         COMPARE DISK ADDRESSES (HOLE BUFFER) 
          ZJN    REBX        IF DIRECT ACCESS HOLE IN HOLE BUFFER 
 REB2     LDD    EB 
          RJM    CDA         COMPARE DISK ADDRESSES (END BUFFER)
          ZJN    REB1        IF DIRECT ACCESS HOLE IN END BUFFER
          LDC    BFMS        FORCE END BUFFER TO BFMS 
          STD    EB 
          LDM    DAHP        FORCE END BUFFER TO DIRECT ACCESS HOLE 
          STM    EBTK 
          LDM    DAHP+1 
          STM    EBSC 
          LDM    DAHP+2 
          ADD    EB 
          STD    EP 
          UJP    REB4        READ DIRECT ACCESS HOLE
          ERROR  MSE,CH,,T5  *EQXXX,DNYY,MASS STORAGE ERROR.* 
 RTK      SPACE  4,20 
**        RTK - REQUEST LINKED TRACK. 
* 
*         ENTRY  (T6) = ADDRESS OF LAST TRACK IN CHAIN. 
*                (T5) = MASTER DEVICE EST ORDINAL.
* 
*         EXIT   (A) = 0 IF NO TRACK AVAILABLE. 
*                (A) = TRACK IF AVAILABLE.
*                NEW TRACK PREWRITTEN WITH EOI-S. 
* 
*         USES   T6, T7, CM - CM+4. 
* 
*         CALLS  PDV, WDS.
* 
*         MACROS ENDMS, MONITOR, SETMS. 
* 
*         NOTES  THE DRIVER AUTOMATICALLY WRITES THE LAST SECTOR
*                OF A TRACK WITH *WLSF*, EVEN IF *WCSF* IS SPECIFIED. 
  
  
 RTK      SUBR               ENTRY/EXIT 
          LDN    ZERL 
          CRD    CM 
          LDD    T5          SET EST ORDINAL
          STD    CM+1 
          LDD    T6          SET PRESENT LAST TRACK ADDRESS 
          STD    CM+2 
          MONITOR  RTCM 
          LDD    CM+4 
          ZJN    RTKX        IF NO TRACK ASSIGNED 
          STD    T6          PREWRITE NEW TRACK 
          STM    EOIFS+2     SET TRACK NUMBER IN EOI BUFFER 
          LDN    0
          STD    T7 
          SETMS  IO,NS
          RJM    PDV         PROCESS DEVICE STATUS
 RTK1     LDD    T7          SET SECTOR NUMBER IN EOI BUFFER
          STM    EOIFS+3
          LDC    EOIB+WCSF   WRITE SECTOR 
          RJM    WDS
          AOD    T7 
          LMM    SLM
          NJN    RTK1        IF NOT LAST SECTOR 
          ENDMS 
          LDD    T6 
          UJP    RTKX        RETURN 
 EOI      SPACE  4,10 
**        EOI - EOI SECTOR BUFFER.
  
  
 EOIA     CON    0,0         END OF INFORMATION DISK ADDRESS
 EOIB     CON    0,0         END OF INFORMATION CONTROL BYTES 
          VFD    60/3LPFM    FNT WORD 
 EOIFS    BSSZ   5           FST WORD 
 EOIDT    BSSZ   5           DATE/TIME WORD 
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          OVERFLOW  OVLU,OVLC    OVERFLOW INTO COMMAND OVERLAY AREA 
          SPACE  4,10 
          OVERFLOW  OVLU,BUF2-2  OVERFLOW INTO CATALOG BUFFER 
          EJECT 
*         EQUIVALENCE EXTERNALLY REFERENCED TAGS. 
  
  
          QUAL   *
  
 AFS      EQU    /".O"/AFS
 AFSB     EQU    /".O"/AFSB 
 CCS      EQU    /".O"/CCS
 CCS5.1   EQU    /".O"/CCS5.1 
 CCSB     EQU    /".O"/CCSB 
 CCSC     EQU    /".O"/CCSC 
 CCSE     EQU    /".O"/CCSE 
 CCSF     EQU    /".O"/CCSF 
 CCSG     EQU    /".O"/CCSG 
 CIA      EQU    /".O"/CIA
 DCE      EQU    /".O"/DCE
 DCEC     EQU    /".O"/DCEC 
 DCED     EQU    /".O"/DCED 
 DCEE     EQU    /".O"/DCEE 
 FCE7.1   EQU    /".O"/FCE7.1 
 FCEE     EQU    /".O"/FCEE 
 FCEL     EQU    /".O"/FCEL 
 IIA      EQU    /".O"/IIA
          OVERLAY  (PERMIT UPDATE ROUTINES.),OVLU 
 OVL      SPACE  4,10 
***       THIS OVERLAY CONTAINS SUBROUTINES USED BY THE COMMAND 
*         OVERLAYS TO UPDATE THE PERMIT FILE. 
  
  
 OVL      BSS    0           ENTRY
          RJM    RMD         RESET TO MASTER DEVICE 
          LDM    DVLW+2      PRESET FIRST TRACK IN EOI BUFFER 
          STM    EOIFS+1
          LDN    PDTL        PRESET DATE/TIME IN EOI BUFFER 
          CRM    EOIDT,ON 
          UJN    ".Q"X       RETURN AFTER LOAD
          TITLE  ALLOCATION ROUTINES. 
 APS      SPACE  4,20 
**        APS - ALLOCATE PERMIT SPACE.
* 
*         ENTRY  (T5) = MASTER DEVICE EST ORDINAL.
*                (PB) = ADDRESS OF PERMIT BUFFER. 
*                (DVLW - DVLW+4) = DEVICE LAYOUT WORD OF MST. 
* 
*         EXIT   (RI - RI+1) = RANDOM ADDRESS OF NEW PERMIT SECTOR. 
*                (EOIA) SET WITH ADDRESS OF NEW EOI.
*                (WNPB) = LINKAGE TO NEW EOI. 
*                PERMIT ALLOCATION INTERLOCK SET. 
*                TO *HNG* IF PERMIT CHAIN NOT RESERVED. 
* 
*         USES   T6, T7, RI - RI+1. 
* 
*         CALLS  DTK, ITC, RTK, SEI.
* 
*         MACROS ENDMS, ERROR, MONITOR. 
  
  
 APS4     LDD    T6          SAVE ADDRESS OF NEW EOI
          STM    EOIA 
          STM    EOIFS+2
          LDD    T7 
          STM    EOIA+1 
          STM    EOIFS+3
  
 APS      SUBR               ENTRY/EXIT 
          ENDMS              RELEASE CHANNEL
          LDM    DVLW+2      INTERLOCK PERMIT ALLOCATION
          RJM    ITC
          ZJN    APS0        IF INTERLOCK SUCCESSFUL
          RJM    HNG         HANG IF PERMIT CHAIN NOT RESERVED
  
 APS0     LDD    T6          SET ALLOCATION INTERLOCKED FLAG
          STM    AILK 
          RJM    SEI         SEARCH FOR END OF PERMIT FILE
          LDD    T2          SAVE RANDOM ADDRESS OF NEW PERMIT SECTOR 
          STD    RI 
          LDD    T3 
          STD    RI+1 
          AOD    T7          CHECK FOR END OF TRACK 
          LMM    SLM
          ZJN    APS2        IF AT END OF TRACK 
          LDD    T7          SAVE LINKAGE TO NEW EOI
          STM    WNPB 
          RJM    DTK         SET EOI IN TRT 
 APS1     UJP    APS4        SAVE ADDRESS OF NEW EOI
  
 APS2     RJM    RTK         REQUEST NEW TRACK
          ZJN    APS3        IF TRACK LIMIT ON ALLOCATION FILE
          STD    T6          SET ADDRESS OF NEW EOI 
          STM    WNPB        SAVE LINKAGE TO NEW EOI
          LDN    0
          STD    T7 
          UJN    APS1        SAVE ADDRESS OF NEW EOI
  
 APS3     ERROR  TKL,,,T5    *EQXXX,DNYY, TRACK LIMIT.* 
          TITLE  PERMIT UPDATE ROUTINES.
 CPE      SPACE  4,15 
**        CPE - CREATE PERMIT ENTRY.
* 
*         EXIT   (PWRF) = *RFPC* FLAG SET IF NEW PERMIT ENTRY WRITTEN 
*                         TO EXISTING PERMIT SECTOR.
*                NEW PERMIT ENTRY WRITTEN.
*                RANDOM ADDRESS SET IN CATALOG ENTRY IF 
*                NEW PERMIT SECTOR CREATED. 
* 
*         USES   T5, RI - RI+1. 
* 
*         CALLS  APS, FPE, WBI, WNP.
* 
*         MACROS ERROR, SETMS.
  
  
 CPE      SUBR               ENTRY/EXIT 
          LDM    SDAA        SET EST ORDINAL
          STD    T5 
          SETMS  STATUS,NS
          LDM    FCRI,CI     GET PERMIT RANDOM INDEX
          STD    RI 
          LDM    FCRI+1,CI
          STD    RI+1 
          ADD    RI 
          NJN    CPE2        IF PERMIT DATA AVAILABLE 
  
*         ALLOCATE PERMITS FOR FILE WITH NO EXISTING PERMIT DATA. 
  
          RJM    APS         ALLOCATE PERMIT SPACE
          LDD    RI          SET RANDOM INDEX INTO CATALOG
          STM    FCRI,CI
          LDD    RI+1 
          STM    FCRI+1,CI
          RJM    WNP         WRITE NEW PERMIT BUFFER
 CPE1     UJN    CPEX        RETURN 
  
*         PROCESS FILE WITH EXISTING PERMIT DATA. 
  
 CPE2     LDM    1,PB        CHECK FOR FULL SECTOR OF PERMITS 
          LPN    77 
          ZJN    CPE4        IF FULL SECTOR OF PERMITS
          LDM    NPHA        SET HOLE ADDRESS 
          RJM    FPE         FORM PERMIT ENTRY
          LDD    PB          REWRITE PERMIT SECTOR
          RJM    WBI
 CPE3     LDK    RFPC        SET PERMIT COUNT UPDATED 
          RAM    PWRF 
          UJN    CPE1        RETURN 
  
*         REWRITE FULL SECTOR OF PERMITS WITH LINK TO NEW SECTOR. 
  
 CPE4     RJM    APS         ALLOCATE PERMIT SPACE
          LDD    RI          SET RANDOM ADDRESS OF NEW PERMIT SECTOR
          STM    FPRI,PB
          LDD    RI+1 
          STM    FPRI+1,PB
          LDD    PB          REWRITE EXISTING PERMIT SECTOR 
          RJM    WBI
          LDK    STNS        SET *NO JOB SUSPENSION* FLAG 
          RAM    STAT 
          RJM    WNP         WRITE NEW PERMIT SECTOR
          LDK    -STNS       CLEAR *NO JOB SUSPENSION* FLAG 
          RAM    STAT 
          UJN    CPE3        RETURN 
 FPE      SPACE  4,15 
**        FPE - FORM PERMIT ENTRY IN BUFFER.
* 
*         ENTRY  (A) = BUFFER LOCATION WHERE ENTRY IS TO BE FORMED. 
*                (PP) = IF NEW ENTRY TO BE FORMED.
*                (PB) = ADDRESS OF PERMIT BUFFER. 
*                (PI - PI+1) =  PERMITTED INDEX.
*                (MODE) = PERMITTED MODE. 
*                (PFOU - PFOU+3) = OPTIONAL USER NAME.
*                (PFXT - PFXT+1) = EXPIRATION DATE. 
* 
*         EXIT   ENTRY FORMED IN PERMIT BUFFER. 
*                ACCESS COUNT SET TO 1 IF IMPLICIT PERMIT ENTRY.
* 
*         USES   T1, CM - CM+4. 
  
  
 FPE      SUBR               ENTRY/EXIT 
          STD    T1          SAVE ADDRESS OF BUFFER 
          STM    FPEA 
          ADN    FPAC        SET ACCESS COUNT WORD ADDRESS
          STM    FPEC 
          LDD    MA          SET USER NAME IN PERMIT ENTRY
          CWM    PFOU,ON
          SBN    1
          CRM    *,ON 
 FPEA     EQU    *-1
          LDD    PB          SET ADDRESS OF PERMIT HEADER 
          ADN    FPUD 
          STM    FPEB 
          LDN    PDTL 
          CRM    *,ON        SET DATE/TIME IN PERMIT ENTRY
 FPEB     EQU    *-1
          SBN    1
          CRM    *,ON        SET DATE/TIME IN PERMIT HEADER 
 FPEC     EQU    *-1
          LDM    MODE        SET MODE/ACCESS COUNT
          LPN    17 
          LMM    SAPF        SET IMPLICIT PERMIT FLAG, IF APPROPRIATE 
          ADM    IACP        INCREMENT ACCESS COUNT, IF APPROPRIATE 
          STM    FPAC+1,T1
          LDM    FPXD,T1     SET EXPIRATION DATE
          SCN    77 
          LMM    PXDT 
          STM    FPXD,T1
          LDM    PXDT+1 
          STM    FPXD+1,T1
          LDM    SAPF 
          NJN    FPE1        IF ACCOUNTING PERMIT 
          LDN    40          INDICATE EXPIRATION DATE IS PRESENT
          RAM    FPAC+1,T1
 FPE1     LDN    NWPE        ADVANCE WORD COUNT 
          RAM    1,PB 
          LJM    FPEX        EXIT 
 RTK      SPACE  4,20 
**        RTK - REQUEST LINKED TRACK. 
* 
*         ENTRY  (T6) = ADDRESS OF LAST TRACK IN CHAIN. 
*                (T5) = MASTER DEVICE EST ORDINAL.
* 
*         EXIT   (A) = 0 IF NO TRACK AVAILABLE. 
*                (A) = TRACK IF AVAILABLE.
*                NEW TRACK PREWRITTEN WITH EOI-S. 
* 
*         USES   T6, T7, CM - CM+4. 
* 
*         CALLS  PDV, WDS.
* 
*         MACROS ENDMS, MONITOR, SETMS. 
* 
*         NOTES  THE DRIVER AUTOMATICALLY WRITES THE LAST SECTOR
*                OF A TRACK WITH *WLSF*, EVEN IF *WCSF* IS SPECIFIED. 
  
  
 RTK      SUBR               ENTRY/EXIT 
          LDN    ZERL 
          CRD    CM 
          LDD    T5          SET EST ORDINAL
          STD    CM+1 
          LDD    T6          SET PRESENT LAST TRACK ADDRESS 
          STD    CM+2 
          MONITOR  RTCM 
          LDD    CM+4 
          ZJN    RTKX        IF NO TRACK ASSIGNED 
          STD    T6          PREWRITE NEW TRACK 
          STM    EOIFS+2     SET TRACK NUMBER IN EOI BUFFER 
          LDN    0
          STD    T7 
          SETMS  IO,NS
          RJM    PDV         PROCESS DEVICE STATUS
 RTK1     LDD    T7          SET SECTOR NUMBER IN EOI BUFFER
          STM    EOIFS+3
          LDC    EOIB+WCSF   WRITE SECTOR 
          RJM    WDS
          AOD    T7 
          LMM    SLM
          NJN    RTK1        IF NOT LAST SECTOR 
          ENDMS 
          LDD    T6 
          UJP    RTKX        RETURN 
 UPI      SPACE  4,20 
**        UPI - UPDATE PERMIT INFORMATION.
* 
*         ENTRY  (PP) = POINTER TO PERMIT ENTRY.
*                (PP) = 0 IF NO PERMIT ENTRY PRESENT. 
*                (PB) = ADDRESS OF PERMIT BUFFER. 
*                (PB) = 0 IF NO PERMISSION UPDATE REQUIRED. 
*                (CI) = POINTER TO CATALOG ENTRY. 
*                (PWRF) = *PFM* RESTART FLAGS.
*                PERMIT BUFFER LOADED IF PERMIT EXISTS. 
* 
*         EXIT   (PWRF) = *RFPC* FLAG SET IF PERMIT COUNT UPDATED.
*                PERMIT ENTRY UPDATED.
*                PERMIT ENTRY CREATED IF SEMIPRIVATE ACCESS.
*                (FCKD) UPDATED IF PERMIT DATA CHANGED. 
* 
*         USES   T5, T6, T7, CM - CM+4. 
* 
*         CALLS  CPE, PDV, PES, RDS, WBI. 
* 
*         MACROS ERROR, SETMS.
  
  
 UPI      SUBR               ENTRY/EXIT 
          LDD    PB 
          ZJN    UPIX        IF NO PERMIT BUFFER
          LDM    STAT 
          LPN    STPR 
          ZJN    UPI1        IF PERMITS HAVE NOT BEEN READ
 UPIB     LDN    0
*         LDN    1           (*BFMS* REUSED FOR SYSTEM SECTOR ACCESS) 
          ZJN    UPI1        IF *BFMS* HAS NOT BEEN REUSED
          LDM    BFMS-2      RESET PERMIT BUFFER TRACK AND SECTOR 
          STD    T6 
          LDM    BFMS-1 
          STD    T7 
          SETMS  IO,NS
          RJM    PDV         PROCESS DEVICE STATUS
          LDC    BFMS        REREAD PERMIT BUFFER 
          RJM    RDS
          PJN    UPI1        IF NO ERROR
          RJM    PES         PROCESS ERROR STATUS 
          ERROR  MSE,CH,,EQ  *EQXXX,DNYY, MASS STORAGE ERROR.*
  
 UPI1     LDM    FCCT,CI     CHECK FILE TYPE
          SHN    -6 
          LMN    FCSP 
          ZJN    UPI3        IF SEMI-PRIVATE FILE 
          LDD    PP 
          NJN    UPI4        IF PERMIT FOUND (PRIVATE OR PUBLIC FILE) 
 UPI2     UJP    UPIX        RETURN 
  
 UPI3     LDD    PP 
          ZJP    UPI5        IF NO PERMIT DATA AND SEMIPRIVATE FILE 
  
*         UPDATE EXISTING PERMIT ENTRY. 
  
 UPI4     LDN    PDTL        READ PACKED DATE AND TIME
          CRD    CM 
          LDM    PWRF 
          LPK    RFPC 
          NJN    UPI4.1      IF PERMIT COUNT UPDATED
          LDD    HN          INCREMENT ACCESS COUNT 
          RAM    FPAC+1,PP
          SHN    -14
          RAM    FPAC,PP
 UPI4.1   LDD    CM+2        UPDATE LAST ACCESS DATE AND TIME 
          STM    FPAD,PP
          LDD    CM+3 
          STM    FPAD+1,PP
          LDD    CM+4 
          STM    FPAD+2,PP
          LDD    PB          REWRITE PERMIT SECTOR
          RJM    WBI
          LDM    PWRF        SET PERMIT COUNT UPDATED FLAG
          SCN    RFPC 
          ADK    RFPC 
          STM    PWRF 
          LJM    UPI7        UPDATE CATALOG ENTRY 
  
*         CREATE NEW PERMIT ENTRY FOR SEMI-PRIVATE FILE.
  
 UPI5     LDM    EBTK 
          ZJN    UPI6        IF *BFMS* WAS NOT USED FOR *END* BUFFER
          LDM    STAT        INDICATE THAT *BFMS* HAS BEEN REUSED 
          SCN    STBR 
          LMN    STBR 
          STM    STAT 
 UPI6     LDD    MA          SET USER NAME
          CWM    PFAC,ON
          SBN    1
          CRM    PFOU,ON
          LDM    MODE        SAVE REQUESTED MODE
          STM    UPIA 
          LDM    FCAM,CI     SET FILE MODE FOR PERMIT ENTRY 
          LPN    77 
          STM    MODE 
          LDN    0           CLEAR EXPIRATION DATE
          STM    PXDT 
          STM    PXDT+1 
          RJM    CPE         CREATE PERMIT ENTRY
          LDC    *           RESET ORIGINAL VALUE OF *MODE* 
 UPIA     EQU    *-1
          STM    MODE 
  
*         UPDATE CONTROL MODIFICATION DATE IN CATALOG ENTRY.
  
 UPI7     LDN    PDTL 
          CRD    CM 
          LDD    CM+2 
          STM    FCKD,CI
          LDD    CM+3 
          STM    FCKD+1,CI
          LDD    CM+4 
          STM    FCKD+2,CI
          UJP    UPIX        RETURN 
 WNP      SPACE  4,20 
**        WNP - WRITE NEW PERMIT BUFFER.
* 
*         ENTRY  (PB) = ADDRESS OF PERMIT BUFFER. 
*                (RI - RI+1) = RANDOM ADDRESS OF NEW PERMIT SECTOR. 
*                (UI - UI+1) = USER INDEX OF PERMITTED FILE.
*                (PI - PI+1) = USER INDEX OF PERMITTED USER.
*                (EIOA) SET WITH ADDRESS OF NEW EOI SECTOR. 
*                (WNPB) = LINKAGE TO NEW EOI SECTOR.
*                PERMIT ALLOCATION INTERLOCK SET. 
* 
*         EXIT   NEW PERMIT SECTOR FORMED AND WRITTEN.
*                NEW EOI WRITTEN. 
*                PERMIT ALLOCATION INTERLOCK CLEARED. 
* 
*         CALLS  CAI, CSA, FPE, WBI.
* 
*         MACROS ENDMS. 
  
  
 WNP      SUBR               ENTRY/EXIT 
          LDD    PB          SET BUFFER ADDRESS 
          ADN    1
          STM    WNPA 
          LDC    500
          STD    T1 
 WNP1     LDN    0           CLEAR PERMIT BUFFER
          STM    *,T1 
 WNPA     EQU    *-1         (ADDRESS OF BUFFER + 1)
          SOD    T1 
          PJN    WNP1        IF MORE BYTES TO CLEAR 
          LDC    *           SET LINKAGE TO EOI 
 WNPB     EQU    *-1
          STI    PB 
          LDN    NWPH        SET WORD COUNT FOR HEADER
          STM    1,PB 
          RJM    CSA         COMPUTE ADDRESS OF NEW PERMIT SECTOR 
          LDD    T6          SET CURRENT TRACK AND SECTOR 
          STM    -2,PB
          LDD    T7 
          STM    -1,PB
          LDD    UI          SET USER INDEX 
          STM    FPUI,PB
          LDD    UI+1 
          STM    FPUI+1,PB
          LDD    PB          SET INDEX FOR FIRST PERMIT ENTRY 
          ADN    NWPH*5+2    SKIP HEADER AND CONTROL BYTES
          RJM    FPE         FORM PERMIT ENTRY
          LDD    PB          WRITE NEW PERMIT SECTOR
          RJM    WBI
          LDC    EOIB        WRITE NEW EOI
          RJM    WBI
          ENDMS 
          RJM    CAI         CLEAR ALLOCATION INTERLOCK 
          LJM    WNPX        RETURN 
 EOI      SPACE  4,10 
**        EOI - EOI SECTOR BUFFER.
  
  
 EOIA     CON    0,0         END OF INFORMATION DISK ADDRESS
 EOIB     CON    0,0         END OF INFORMATION CONTROL BYTES 
          VFD    60/3LPFM    FNT WORD 
 EOIFS    BSSZ   5           FST WORD 
 EOIDT    BSSZ   5           DATE/TIME WORD 
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          OVERFLOW  OVLU,OVLC    OVERFLOW INTO COMMAND OVERLAY AREA 
          SPACE  4,10 
          OVERFLOW  OVLU,BUF2-2  OVERFLOW INTO CATALOG BUFFER 
          EJECT 
*         EQUIVALENCE EXTERNALLY REFERENCED TAGS. 
  
  
          QUAL   *
  
 CPE      EQU    /".O"/CPE
 UPI      EQU    /".O"/UPI
 UPIB     EQU    /".O"/UPIB 
          OVERLAY  (GET/OLD/UGET PROCESSING.) 
          SPACE  4,10 
**        THIS OVERLAY PROCESSES *GET*, *OLD*, AND *UGET* REQUESTS. 
* 
*         ENTRY  (P0) = PROCESSING ADDRESS. 
  
  
 OVL      BSS    0           ENTRY
          LDD    EQ          RESET MASTER DEVICE EST ORDINAL
          STD    T5 
          LJM    0,P0        PROCESS REQUEST
          TITLE  COMMAND PROCESSING.
 GET      SPACE  4,10 
***       PROCESS *GET* REQUEST.
* 
*         GENERATE WORKING COPY OF INDIRECT ACCESS FILE *PF NAME*.
*         THIS COPY WILL NOT BE PERMANENT UNTIL *SAVE* *REPLACE*
*         OR *DEFINE* REQUEST FOR LOCAL FILE IS ISSUED. 
  
  
 GET      BSS    0           ENTRY
          LDN    0           CLEAR REWRITE ON FILE COPY 
          STM    DTMD 
          LDM    ACCM        ACTUAL ACCESS MODE 
          LMN    PTEX 
          NJN    GET1        IF MORE THAN EXECUTE PERMISSION
          LDN    4           RESTRICT LOCAL FILE TO EXECUTE-ONLY
          RAM    GETG 
 GET1     LDM    FCEC,CI     CHECK CATALOG ERROR STATUS 
          SHN    -4 
          LPN    34 
          ZJN    GET3        IF NO ERRORS 
          SBN    4
          RAM    GETL        MODIFY ERROR CODE
 GETL     EQU    *+2
          ERROR  EDA         * ERROR IN FILE DATA.* 
*         ERROR  EPT         * ERROR IN PERMIT DATA.* 
*         ERROR  EDP         * DATA/PERMIT ERRORS.* 
  
          ERRNZ  /ERRMSG/EPT-/ERRMSG/EDA-1  ERRORS MUST BE CONTIGUOUS 
          ERRNZ  /ERRMSG/EDP-/ERRMSG/EPT-1  ERRORS MUST BE CONTIGUOUS 
  
 GET3     RJM    CML         CHECK MASS STORAGE LIMITS
          LDD    PB 
          ZJN    GET3.1      IF NO PERMIT BUFFER
          EXECUTE  3PE       LOAD PERMIT UPDATE ROUTINES
          RJM    UPI         UPDATE PERMISION INFORMATION 
 GET3.1   RJM    UCE         UPDATE CATALOG ENTRY 
          ENDMS 
          LDD    CI          SET CONTROL WORD POINTER FOR CATALOG 
          RAM    GETE 
          LDM    FCFS,CI     PROCESS SUBSYSTEM INDEX
          LPN    77 
          STM    PFSS 
          ZJN    GET4        IF NO SUBSYSTEM INDEX
          LDD    CC 
          LMN    CCOD 
          NJN    GET4        IF NOT *OLD* REQUEST 
          LDM    PFSS 
          RJM    SSF         SET SUBSYSTEM FLAG IN CP AREA
  
*         RETURN FIELDS TO FET. 
*         ENTER HERE FOR *UGET* REQUEST.
  
 GET4     LDK    STNS        INHIBIT JOB SUSPENSION AFTER THIS POINT
          RAM    STAT 
          LDM    PFSP        CHECK FOR SECURITY PROCESSING BIT
          ZJN    GET5        IF SECURITY PROCESSING BIT NOT SPECIFIED 
          RJM    SFA         RETURN ACCESS LEVEL TO FET 
          ADN    CFAL 
          CRD    CM 
          LDD    CM+1 
          SCN    7
          LMM    FCAL,CI
          STD    CM+1 
          RJM    SFA
          ADN    CFAL 
          CWD    CM 
 GET5     LDM    MODE        RETURN ACCESS MODE TO FET
          SCN    77 
          LMM    ACCM        ACTUAL MODE FILE ACCESSED IN 
          STM    MODE 
          LDN    CFMD 
          SBM    FETL 
          PJN    GET6        IF FET NOT LONG ENOUGH FOR MODE
          RJM    SFA         RETURN ACCESS MODE TO FET
          ADN    CFMD 
          CWM    MODE-4,ON
          LDN    CFUC 
          SBM    FETL 
          PJN    GET6        IF FET NOT LONG ENOUGH FOR UCW 
          RJM    SFA         RETURN USER CONTROL WORD TO FET
          ADN    CFUC 
          CWM    FCCW,ON
 GETE     EQU    *-1         (ADDRESS OF *UCW* FROM *PFC*)
          LDN    CFSS 
          SBM    FETL 
          PJN    GET6        IF FET NOT LONG ENOUGH FOR SUBSYSTEM 
          RJM    SFA         RETURN SUBSYSTEM TO FET
          ADN    CFSS 
          CWM    PFSS,ON
  
*         UPDATE FNT/FST. 
  
 GET6     LDC    PFSN        SET SYSTEM FILE NAME 
          RJM    SFN
 GETG     LDN    0           SET FILE ACCESS INFORMATION
*         LDN    4           (EXECUTE-ONLY FILE)
          RAD    FN+3 
 GETH     LDN    LOFT        SET FILE TYPE
*         LDN    PTFT        (*OLD* PROCESSING) 
          SHN    6
          RAD    FN+4 
          LDM    FNTA        SET FST INFORMATION
          STD    FA 
          NFA    FA,R 
          ADK    FNTL 
          CWD    FN 
          ADN    FSTL-FNTL
          CRD    FS 
  
*         ALLOCATE MASS STORAGE SPACE ON LOCAL FILE DEVICE. 
  
          LDN    0
          STD    CM+1 
          LDD    LF+1        ADJUST LENGTH FOR SYSTEM SECTOR AND EOI
          ADN    2
          STD    CM+4 
          SHN    -14
          ADD    LF 
          STD    CM+3 
          LDM    FCAL,CI     SET ACCESS LEVEL IN REQUEST
          ADN    40          SELECT ON ACCESS LEVEL 
          SHN    6
          RAD    CM+3 
 GETI     LDN    0           SET TYPE OF FILE SPACE NEEDED
*         LDN    PRIS        (*OLD* - REQUEST PRIMARY FILE SPACE) 
          STD    CM+2 
          MONITOR  RTCM      ASSIGN MASS STORAGE SPACE
          LDN    ZERL 
          CRD    FS 
          LDD    CM+1        SET EST ORDINAL
          STM    RTKE 
          STD    FS 
          LDD    CM+4 
          NJN    GET8        IF TRACKS ASSIGNED 
          LDD    CM+3 
          SBN    2
          ZJN    GET7        IF NO TEMP DEVICE VALID FOR ACCESS LEVEL 
          ERROR  TKL,CH,,FS  *EQXXX,DNYY, TRACK LIMIT.* 
  
 GET7     ERROR  NTD,CH      *(FILE NAME) - NO TEMP DEVICE FOUND.*
  
 GET8     STM    RTKT        SET FIRST TRACK
          STD    FS+1 
          LDM    CPTF 
          NJN    GET9        IF FILE TO BE TRANSFERRED VIA CPU
          LDD    FS+1 
          STD    FS+2 
          LDN    FSMS 
          STD    FS+3 
 GET9     LDN    4           SET STATUS 
          STD    FS+4 
          NFA    FA,R        WRITE FST
          ADN    FSTL 
          CWD    FS 
          ADN    FUTL-FSTL
          CRD    CM 
          LDM    FCAL,CI     SET ACCESS LEVEL IN FNT
          LMD    CM+2 
          LPN    7
          LMD    CM+2 
          STD    CM+2 
          NFA    FA,R 
          ADN    FUTL 
          CWD    CM 
          RJM    SFA         SET FNT POINTER IN FET 
          ADN    4
          CRD    CM 
          LDD    FA 
          STD    CM 
          RJM    SFA
          ADN    4
          CWD    CM 
  
*         UPDATE PRIMARY FILE FST POINTER IN CONTROL POINT AREA.
  
          LDD    CC 
          LMN    CCOD 
          NJN    GET10       IF NOT *OLD* REQUEST 
          RJM    POF         PROCESS OLD PRIMARY FILE 
          LDD    CP          SET NEW PRIMARY FILE FST POINTER 
          ADN    TFSW 
          CRD    CM 
          LDM    FNTA        RESTORE FST AND FST ADDRESS
          STD    FA 
          STD    CM+1 
          NFA    FA,R 
          ADN    FSTL 
          CRD    FS 
          LDD    CP 
          ADN    TFSW 
          CWD    CM 
  
*         UPDATE PRIMARY FILE POINTERS IN EJT ENTRY.
  
          EXECUTE 0PT,OVL0   CALL *0PT* TO UPDATE EJT POINTERS
  
 GET10    LDD    FS          RESTORE EST ORDINAL
          STD    T5 
          SETMS  STATUS,NS
          LDD    CM+4        SET TRT ADDRESS
          SHN    3
          ADN    TRLL 
          RJM    CTA         CALCULATE FWA OF TRT 
          SBD    TH 
          STM    SNTA+1 
          STM    SEIA+1 
          SHN    -14
          LMC    ADCI 
          STM    SNTA 
          STM    SEIA 
          LDM    SLM         INCREMENT PRU COUNT FOR FIRST TRACK
          RAM    AIPR+1 
          SHN    -14
          RAM    AIPR 
  
*         DETERMINE WHETHER TO USE CPU TO TRANSFER FILE.
  
          LDM    CPTF 
          ZJN    GET11       IF FILE NOT TO BE TRANSFERRED VIA CPU
          LDD    EQ          SET SYSTEM SECTOR EST/TRACK/SECTOR 
          STD    T5 
          LDM    SDAB 
          STD    T6 
          LDM    SDAC 
          STD    T7 
          RJM    VSS         VERIFY SYSTEM SECTOR 
          ENDMS 
 GETA     BSS    0           (OVERFLOW POINT FOR *3PS* LOAD)
          EXECUTE  3PS       TRANSFER FILE VIA CPU
  
*         SET UP SYSTEM SECTOR. 
  
          ERRNG  *-BUF-502   SYSTEM SECTOR BUFFER OVERFLOWS CODE
  
 GET11    EXECUTE  3PP       LOAD DEVICE TO DEVICE TRANSFER OVERLAY 
          AOD    LF+1        ADJUST LENGTH FOR SYSTEM SECTOR
          SHN    -14
          RAD    LF 
          AOM    /3PP/SNSA   TURN ON PRU ACCUMULATION 
          LDC    3777        SET SYSTEM SECTOR CONTROL BYTE 
          STM    BUF
          LDN    77          SET WORD COUNT BYTE
          STM    BUF+1
          LDD    FA 
          STM    FASS+BUF-BFMS
          NFA    FA,R        READ FILE NAME 
          ADK    FNTL 
          CRM    BUF+FNSS-BFMS,ON 
          LDC    LOFT*100    SET LOCAL FILE TYPE IN SYSTEM SECTOR 
          STM    FNSS+4+BUF-BFMS
          STM    PFSN+4 
          LDD    FS          SET EST ORDINAL
          STM    EQSS+BUF-BFMS
          STD    T5 
          LDD    FS+1        SET FIRST TRACK
          STM    FTSS+BUF-BFMS
          STD    T6 
          LDN    PDTL        ENTER PACKED DATE
          CRM    DTSS+BUF-BFMS,ON 
          AOM    DTSS+BUF-BFMS  SET ENHANCED EOI FLAG 
          LDN    0           SET SECTOR 
          STD    T7 
          RJM    SDP         SWAP DISK PARAMETERS 
          RJM    IBA         INCREMENT BUFFER ADDRESS 
          RJM    VSS         VERIFY SYSTEM SECTOR 
          LJM    DTD         ENTER DEVICE TO DEVICE TRANSFER LOOP 
          TITLE  SUBROUTINES. 
 VSS      SPACE  4,10 
**        VSS - VERIFY SYSTEM SECTOR. 
* 
*         ENTRY  (T5 - T7) = SYSTEM SECTOR DISK ADDRESS.
* 
*         EXIT   SYSTEM SECTOR READ.
*                TO *ERR* IF BAD SYSTEM SECTOR OR READ ERROR. 
*                ERROR IDLE SET IF BAD SYSTEM SECTOR. 
* 
*         CALLS  PDV, PES, RSS. 
* 
*         MACROS ERROR, SETMS.
  
  
 VSS      SUBR               ENTRY/EXIT 
          SETMS  READSTR,NS 
          RJM    PDV         PROCESS DEVICE STATUS
          LDN    0           DO NOT VALIDATE FILE NAME
          RJM    RSS         READ SYSTEM SECTOR 
          MJN    VSS1        IF READ ERROR
          ZJN    VSSX        IF VALID SYSTEM SECTOR 
          ERROR  SSE,CH,,T5,,EI  *EQXXX,DNYY, SYSTEM SECTOR ERROR.* 
  
 VSS1     RJM    PES         PROCESS ERROR STATUS 
          ERROR  MSE,CH,,T5  *EQXXX,DNYY, MASS STORAGE ERROR.*
          SPACE  4,10 
*         COMMON DECKS. 
  
 RIS$     SET    1           READ IAPF SYSTEM SECTOR
*CALL     COMPRSS 
          SPACE  4,10 
          USE    OVERLAY
 OVL0     EQU    *+1         LOAD ADDRESS FOR *0PT* 
          ERRNG  BUF1-OVL0-ZPTL  *0PT* OVERFLOW INTO *BUF1* 
          TITLE  COMMAND PROCESSING (OVERLAYABLE).
 OLD      SPACE  4,10 
***       PROCESS *OLD* REQUEST.
* 
*         GENERATE PRIMARY-TERMINAL FILE (*PTFT*) COPY OF INDIRECT
*         ACCESS FILE *PF NAME*.  THIS COPY WILL NOT BE PERMANENT 
*         UNTIL *SAVE* OR *REPLACE* REQUEST FOR LOCAL FILE
*         IS ISSUED.
  
  
 OLD      BSS    0           ENTRY
          LCN    -PTFT+LOFT  FORCE PRIMARY-FILE PROCESSING
          RAM    GETH 
          LDN    PRIS 
          RAM    GETI 
          LJM    GET         PROCESS REQUEST
 UGT      SPACE  4,15 
***       PROCESS *UGET* REQUEST. 
* 
*         THE *UGET* REQUEST OBTAINS A LOCAL FILE COPY OF AN INDIRECT 
*         ACCESS FILE WITHOUT CHANGING ANY DATES IN THE CATALOG ENTRY.
*         A COPY OF THE CATALOG ENTRY IS RETURNED TO *FIRST*.  THE
*         *AFLOK* FLAG IS SET IN THE CATALOG ENTRY TO INDICATE THAT 
*         THE FILE IS ABOUT TO BE DESTAGED (ANY SUBSEQUENT *REPLACE*
*         OR *APPEND* WILL CLEAR THIS FLAG, WHICH WILL THEN INDICATE
*         THAT ANOTHER *UGET* MUST BE PERFORMED IF THE FILE IS STILL
*         TO BE DESTAGED).
  
  
 UGT      BSS    0           ENTRY
          LDN    0           CLEAR REWRITE ON FILE COPY 
          STM    DTMD 
  
*         CHECK THE FILE RESIDENCE. 
  
          LDM    FCBS,CI
          STM    SDAC        SET SECTOR ADDRESS 
          SHN    21-13
          PJN    UGT1        IF INDIRECT ACCESS FILE
          ERROR  FDA         *FILE IS DIRECT ACCESS.* 
  
 UGT1     LDM    FCBT,CI
          STM    SDAB        SET TRACK ADDRESS OF FILE
          NJN    UGT2        IF FILE DISK RESIDENT
          ERROR  FND         *FILE NOT DISK RESIDENT.*
  
 UGT2     LDM    FCLF,CI     SET FILE LENGTH
          STD    LF 
          LDM    FCLF+1,CI
          STD    LF+1 
  
*         UPDATE CATALOG ENTRY. 
  
          LDM    FCAF,CI     SET *AFLOK* FLAG 
          LPC    -AFLOKM
          LMC    AFLOKM 
          STM    FCAF,CI
          LDD    CB          REWRITE CATALOG ENTRY
          RJM    WBI
          ENDMS 
  
*         RETURN COPY OF THE *PFC* ENTRY TO THE BUFFER. 
  
          RJM    SFA         READ *FIRST* POINTER 
          ADN    1
          CRD    CM 
          LDD    CM+3        VERIFY *FIRST* POINTER 
          LPN    77 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    CM+4 
          ADN    NWCE 
          SBN    1
          SHN    -6 
          SBD    RA 
          SBD    FL 
          MJN    UGT3        IF BUFFER WITHIN JOB FL
          ERROR  ILR,CH,,,EC3  * PFM INCORRECT REQUEST.*
  
 UGT3     LDD    CI          COPY CATALOG ENTRY TO BUFFER 
          STM    UGTA 
          RAM    GETE        SET CONTROL WORD POINTER FOR CATALOG 
          LDN    NWCE        NUMBER OF PFC WORDS
          STD    T1 
          LDD    CM+3        FORM *CM* ADDRESS
          LPN    77 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    CM+4 
          CWM    **,T1
 UGTA     EQU    *-1         (CATALOG ENTRY ADDRESS)
          LJM    GET4        PROCESS FILE TRANSFER
          TITLE  SUBROUTINES (OVERLAYABLE). 
 CML      SPACE  4,15 
**        CML - CHECK MASS STORAGE LIMIT. 
* 
*         ENTRY  (LF - LF+1) = VALUE OF DECREMENT.
*                (CMLA) = UPPER 6 (OF 18 BITS) MASS STORAGE LIMIT.
*                (CMLB) = LOWER 12 BITS OF MASS STORAGE LIMIT.
* 
*         EXIT   TO *ERR* IF ERROR IN PRU LIMITS. 
* 
*         USES   T0, CM - CM+4. 
  
  
 CML      SUBR
          LDD    CP          READ MASS STORAGE LIMIT
          ADK    ACLW 
          CRD    CM 
          LDD    LF 
          LPN    77 
          STD    T0 
          LDD    CM+3 
          LPN    77 
          SBD    T0 
          MJN    CML1        IF LIMIT EXCEEDED
          NJN    CMLX        IF LIMIT NOT EXCEEDED
          LDD    CM+4 
          SBD    LF+1 
          PJN    CMLX        IF LIMIT NOT EXCEEDED
 CML1     ERROR  PRL         *PRU LIMIT.* 
 POF      SPACE  4,15 
**        POF - PROCESS OLD PRIMARY FILE. 
* 
*         ENTRY  FNT ADDRESS OF CURRENT PRIMARY FILE IN *TFSW*. 
* 
*         EXIT   OLD PRIMARY FILE CHANGED TO *LOFT*.
* 
*         USES   FA, CM - CM+4, FS - FS+4.
* 
*         CALLS  SFB. 
* 
*         MACROS ERROR. 
  
  
 POF      SUBR               ENTRY/EXIT 
          LDD    CP          GET FNT ADDRESS OF OLD PRIMARY FILE
          ADK    TFSW 
          CRD    CM 
          LDD    CM+1 
          ZJN    POFX        IF NO OLD PRIMARY FILE 
  
*         CHANGE OLD PRIMARY FILE TO TYPE *LOFT*. 
  
          STD    FA          SET FILE BUSY
          NFA    FA,R 
          ADK    FNTL 
          CRD    FS 
          RJM    SFB
          NJN    POF1        IF FILE NOT INTERLOCKED
          LDC    LOFT*100-PTFT*100  CHANGE FILE TYPE
          RAD    CM+4 
          AOD    FS+4        SET FST COMPLETE 
          NFA    FA,R 
          ADK    FNTL 
          CWD    CM 
          ADN    FSTL-FNTL
          CWD    FS 
          UJN    POFX        RETURN 
  
*         PROCESS *I/O SEQUENCE ERROR* ON OLD PRIMARY FILE.  CHANGE THE 
*         NEW LOCAL FILE FROM *PTFT* TO *LOFT*, SO THAT *0DF* WILL NOT
*         CLEAR THE PRIMARY FILE POINTER IN THE CPA AND THE EJT WHEN
*         THE NEW LOCAL FILE IS RETURNED. 
  
 POF1     LDM    FNTA        RESET FST AND FST POINTER
          STD    FA 
          NFA    FA,R 
          ADK    FNTL 
          CRD    FN 
          LDD    FN+4 
          LPN    77 
          LMC    LOFT*100 
          STD    FN+4 
          NFA    FA,R 
          ADK    FNTL 
          CWD    FN 
          ERROR  IOE         * I/O SEQUENCE ERROR.* 
          SPACE  4,10 
*         OVERLAYABLE COMMON DECKS. 
  
*CALL     COMPSFB 
*CALL     COMPSSF 
          SPACE  4,10 
          OVERFLOW  OVLC,BUF1-2  OVERFLOW INTO CATALOG BUFFER 
          SPACE  4,10 
*         EQUIVALENCE EXTERNALLY REFERENCED TAGS. 
  
  
          QUAL   *
  
 GETA     EQU    /".O"/GETA 
          OVERLAY  (SAVE/REPLACE/UREPLAC PROCESSING.) 
          SPACE  4,10 
**        THIS OVERLAY PROCESSES *SAVE*/*REPLACE*/*UREPLAC* REQUESTS. 
* 
*         ENTRY  (P0) = PROCESSING ADDRESS. 
  
  
 OVL      BSS    0           ENTRY
          LJM    0,P0        PROCESS REQUEST
          TITLE  COMMAND PROCESSING.
 REP      SPACE  4,10 
***       PROCESS *REPLACE* REQUEST.
* 
*         PURGE EXISTING PERMANENT FILE *PF NAME* AND GENERATE COPY 
*         OF FILE *FILE NAME* AS INDIRECT ACCESS FILE *PF NAME*.
  
  
 REP      BSS    0           ENTRY
          LDM    FCBS,CI
          SHN    21-13
          PJN    REP1        IF NOT DIRECT ACCESS FILE
          ERROR  FDA         * FILE IS DIRECT ACCESS.*
  
*         CHECK LOCAL FILE ACCESS LEVEL AGAINST *PFC*.
  
 REP1     LDM    SSOM        CHECK SYSTEM SECURITY MODE 
          ZJN    REP2        IF SYSTEM OPERATING IN UNSECURED MODE
          LDM    FCAL,CI     ALLOW SAVING DATA AT HIGHER LEVEL
          SBM    LFAL 
          PJN    REP2        IF ACCESS LEVEL OKAY 
          LDM    SVAL 
          LPN    40 
          NJN    REP2        IF WRITE-DOWN PERMITTED
          LDM    SSID        CHECK SUBSYSTEM ID 
          SBK    LSSI+1 
          PJN    REP2        IF SUBSYSTEM 
          ERROR  WDP,,,,SVE  * WRITE-DOWN OF DATA PROHIBITED.*
  
*         UPDATE PERMITS. 
  
 REP2     RJM    CUC         CHECK USER CONTROLS
          LDD    PB 
          ZJN    REP2.1      IF NO PERMIT BUFFER
          EXECUTE  3PE       LOAD PERMIT UPDATE ROUTINES
          RJM    UPI         UPDATE PERMISSION INFORMATION
          ENDMS 
  
*         UPDATE CATALOG. 
  
 REP2.1   LDD    CI          CLEAR ALTERNATE STORAGE INFORMATION IN PFC 
          RAM    REPA+1 
          LDN    ZERL 
 REPA     CRM    FCAF,ON
          LDD    CI          CLEAR TAPE ALTERNATE STORAGE INFORMATION 
          RAM    REPC+1 
          LDN    ZERL 
 REPC     CRM    FCTF,ON
 REP3     AOM    FCAC+1,CI   INCREMENT ACCESS COUNT 
          SHN    -14
          RAM    FCAC,CI
          EXECUTE  3PD       LOAD CATALOG UPDATE ROUTINES 
          RJM    IIA         INTERLOCK INDIRECT ALLOCATION
          LDK    STNS        SET *NO JOB SUSPENSION* AFTER THIS POINT 
          RAM    STAT 
          RJM    CCS         CREATE NEW CATALOG SECTOR
          LDD    HP 
          LMD    CI 
          ZJN    REP4        IF HOLE IS FILE BEING REPLACED 
          RJM    DCE         DELETE CATALOG ENTRY 
          ZJN    REP4        IF FILE WITHIN CHAIN AND NO DELINK 
          RJM    CIA         CLEAR INDIRECT ALLOCATION INTERLOCK
          UJN    REP6        TRANSFER FILE
  
*         REWRITE OLD FILE-S CATALOG ENTRY. 
*         ENTER HERE ON *UREPLAC* REQUEST.
  
 REP4     RJM    CIA         CLEAR INDIRECT ALLOCATION INTERLOCK
          LDD    CB          REWRITE CATALOG ENTRY
          RJM    WBI
          ENDMS 
 REP6     LJM    SAV2        TRANSFER FILE
 SAV      SPACE  4,10 
***       PROCESS *SAVE* REQUEST. 
* 
*         GENERATE COPY OF FILE *FILE NAME* AS INDIRECT ACCESS FILE 
*         *PF NAME*.  IF *PF NAME* EXISTS REQUEST IS ABORTED. 
  
  
 SAV      BSS    0           ENTRY
          LDM    LFAL 
          STD    CM+4 
          LDD    EQ          CHECK MASTER DEVICE ACCESS LEVEL 
          STD    CM+2 
          LDN    VAES 
          STD    CM+1 
          MONITOR  VSAM 
          LDD    CM+1 
          ZJN    SAV1        IF FILE ACCESS VALID FOR DEVICE
          ERROR  LNP,,,,SVE  * ACCESS LEVEL NOT VALID ON PF DEVICE.*
  
 SAV1     RJM    CUC         CHECK USER CONTROLS
          EXECUTE  3PD       LOAD CATALOG UPDATE ROUTINES 
          RJM    IIA         INTERLOCK INDIRECT ALLOCATION
          LDK    STNS        SET *NO JOB SUSPENSION* AFTER THIS POINT 
          RAM    STAT 
          RJM    CCS         CREATE CATALOG SECTOR
          RJM    CIA         CLEAR INDIRECT ALLOCATION INTERLOCK
  
*         ENTER HERE ON *REPLACE* OR *UREPLAC* REQUEST. 
  
 SAV2     LDM    CPTF 
          ZJN    SAV3        IF FILE NOT TO BE TRANSFERRED VIA CPU
 SAVA     BSS    0           (OVERFLOW POINT FOR *3PS* LOAD)
          EXECUTE  3PS       TRANSFER FILE VIA CPU
  
 SAV3     EXECUTE  3PP       LOAD DEVICE TO DEVICE TRANSFER OVERLAY 
  
          LDD    FS          SET EST ORDINAL
          STD    T5 
          LDD    FS+1        SET FIRST TRACK
          STD    T6 
          LDN    FSMS        SET FIRST SECTOR 
          STD    T7 
          SETMS  READSTR,NS 
          RJM    PDV         PROCESS DEVICE STATUS
          LDC    BUF         SET STARTING BUFFER ADDRESS
          STD    BB 
          AOD    LF+1        ADJUST FILE LENGTH FOR SYSTEM SECTOR 
          SHN    -14
          RAD    LF 
  
          ERRNG  *-BUF-502   SYSTEM SECTOR BUFFER OVERFLOWS CODE
  
          RJM    CSS         CREATE SYSTEM SECTOR IN BUFFER 
          RJM    IBA         INCREMENT BUFFER ADDRESS 
          LJM    DTD         ENTER DEVICE TO DEVICE TRANSFER LOOP 
 URE      SPACE  4,20 
***       PROCESS *UREPLAC* REQUEST.
* 
*         MAKE ALTERNATE STORAGE RESIDENT FILE DISK RESIDENT
*         BY CREATING A PERMANENT COPY OF THE DATA TO BE
*         ASSOCIATED WITH THE EXISTING PFC ENTRY. 
* 
*         THE DATA WILL EITHER BE PLACED IN A PREVIOUSLY
*         EXISTING IAPF HOLE OR SPACE WILL BE ALLOCATED 
*         AT THE END OF THE INDIRECT CHAIN.  IF A HOLE IS 
*         FOUND THE TRACK AND SECTOR FROM THE HOLE WILL BE
*         PLACED IN THE EXISTING PFC AND THE HOLE WILL BE 
*         CONVERTED TO A DAPF HOLE.  THIS IS DONE SO THAT 
*         THE POSITION OF THE ORIGINAL PFC DOES NOT CHANGE, 
*         SINCE THE RESCAN CODE IN *PFDUMP* REQUIRES THAT 
*         THE POSITION OF THE PFC REMAIN CONSTANT.
  
  
 URE      BSS    0           ENTRY
          EXECUTE  3PD       LOAD CATALOG UPDATE ROUTINES 
          LDC    LJMI        BYPASS HOLE CHECK IN *CCS* 
          STM    CCSE 
          LDC    CCS5.1 
          STM    CCSE+1 
          RJM    IIA         INTERLOCK INDIRECT ALLOCATION
          LDK    STNS        SET *NO JOB SUSPENSION* AFTER THIS POINT 
          RAM    STAT 
          LDD    HP          HOLE POINTER 
          NJN    URE1        IF HOLE AVAILABLE
          RJM    AFS         ALLOCATE FILE SPACE
          LDD    LF+1 
          STD    HL          SIMULATE EXACT FIT HOLE (FOR *CCS*)
          LDD    CB 
          STD    HB 
          UJN    URE2        SET DISK ADDRESS IN ORIGINAL PFC 
  
*         PROCESS HOLE ENTRY. 
  
 URE1     LDM    FCBT,HP     SAVE FIRST TRACK FROM HOLE ENTRY 
          STM    SDAB 
          LDM    FCBS,HP     SAVE FIRST SECTOR FROM HOLE ENTRY
          STM    SDAC 
          LDC    4000        MARK HOLE AS DAPF HOLE 
          STM    FCBS,HP
          LDN    0
          STM    FCBT,HP     CLEAR TRACK IN HOLE ENTRY
          STM    FCLF,HP     CLEAR HOLE ENTRY LENGTH
          STM    FCLF+1,HP
          LDD    CI          SET HOLE POINTER TO POINT TO PFC FOR *FHE* 
          STD    HP 
  
*         SET NEW VALUES IN ORIGINAL PFC ENTRY. 
  
 URE2     LDM    SDAB 
          STM    FCBT,CI     FIRST TRACK
          LDM    SDAC 
          STM    FCBS,CI     FIRST SECTOR 
          LDD    LF          SET NEW FILE LENGTH
          STM    FCLF,CI
          LDD    LF+1 
          STM    FCLF+1,CI
          LDM    STAT 
          LPK    STTA 
          NJN    URE3        IF TAPE ALTERNATE STORAGE REQUEST
          LDM    FCAF,CI     CLEAR *AFVER*, *AFPDR* AND *AFTMP* FLAGS 
          SCN    AFPDRM+AFTMPM+AFVERM 
          STM    FCAF,CI
          UJN    URE4        UPDATE CATALOG ENTRY 
  
 URE3     LDM    FCTF,CI     CLEAR *TFVER* FLAG 
          SCN    TFVERM 
          STM    FCTF,CI
 URE4     RJM    CCS         CREATE CATALOG SECTOR
          LJM    REP4        PROCESS FILE TRANSFER
 RSS      SPACE  4,10 
          TITLE  SUBROUTINES. 
 CSS      SPACE  4,10 
**        CSS - CREATE SYSTEM SECTOR IN BUFFER. 
* 
*         ENTRY  (FA) = FNT OFFSET FOR LOCAL FILE.
*                (PFCA) = ADDRESS OF NEW CATALOG ENTRY. 
* 
*         EXIT   (BUF - BUF+502) = INITIALIZED SYSTEM SECTOR. 
* 
*         USES   T1, T2, T3.
  
  
 CSS      SUBR               ENTRY/EXIT 
          LDC    77*5-1      CLEAR SYSTEM SECTOR
          STD    T1 
 CSS1     LDN    0
          STM    BUF+2,T1 
          SOD    T1 
          PJN    CSS1        IF NOT END OF SECTOR 
          LDC    3777        SET CONTROL BYTES
          STM    BUF
          LDN    77 
          STM    BUF+1
          NFA    FA,R        COPY FNT TO BUFFER 
          ADK    FNTL 
          CRM    FNSS+BUF-BFMS,ON 
          LDM    FNSS+3+BUF-BFMS
          SCN    77 
          STM    FNSS+3+BUF-BFMS
          LDC    PMFT*100    SET FILE TYPE
          STM    FNSS+4+BUF-BFMS
          LDM    SDAA        SET EST ORDINAL
          STM    EQSS+BUF-BFMS
          LDM    SDAA+1      SET FIRST TRACK
          STM    FTSS+BUF-BFMS
          LDN    PDTL        ENTER PACKED DATE
          CRM    DTSS+BUF-BFMS,ON 
  
*         COPY CATALOG ENTRY INTO SYSTEM SECTOR.
  
          LDM    PFCA        ADDRESS OF CATALOG ENTRY 
          STD    T1 
          LDC    CTSS+BUF-BFMS  ADDRESS IN SYSTEM SECTOR
          STD    T2 
          ADC    NWCE*5      NUMBER OF BYTES TO COPY
          STD    T3 
 CSS2     LDI    T1          TRANSFER ENTRY 
          STI    T2 
          AOD    T1 
          AOD    T2 
          LMD    T3 
          NJN    CSS2        IF MORE BYTES TO TRANSFER
          LJM    CSSX        RETURN 
 CUC      SPACE  4,20 
**        CUC - CHECK USER CONTROLS.
* 
*         CHECK NUMBER OF FILES.
*         CHECK CUMULATIVE SIZE OF INDIRECT ACCESS FILES. 
* 
*         ENTRY  (ACNF - ACFN+1) = NUMBER OF FILES IN CATALOG.
*                (CIFS - CIFS+1) = CUMULATIVE SIZE OF INDIRECT FILES. 
*                (MXCS - MXCS+1) = CUMULATIVE SIZE OF INDIRECTS ALLOWED.
*                (MXNF) = MAXIMUM NUMBER OF FILES.
*                (LF - LF+1) = LENGTH OF NEW FILE.
*                (CI) = INDEX TO EXISTING CATALOG ENTRY OF FILE REPLACED
* 
*         USES   CM - CM+4. 
* 
*         MACROS ERROR. 
  
  
 CUC      SUBR               ENTRY/EXIT 
          LDD    MA          SET CUMULATED TOTALS 
          CWM    ACNF,ON
          SBN    1
          CRD    CM 
  
*         CHECK  NUMBER OF FILES ALLOWED. 
  
          LDM    MXNF 
          ZJN    CUC1        IF NO LIMIT ON  NUMBER OF FILES
          LDD    CM 
          SHN    14 
          ADD    CM+1 
          ADN    7           ROUND UP 
          SHN    -3 
          SBM    MXNF 
          MJN    CUC1        IF NUMBER OF FILES ALLOWED NOT EXCEEDED
          ZJN    CUC1        IF NUMBER OF FILES ALLOWED NOT EXCEEDED
          ERROR  COF         * TOO MANY PERMANENT FILES.* 
  
*         CHECK CUMULATIVE SIZE OF INDIRECT FILES.
  
 CUC1     LDM    MXCS 
          NJN    CUC2        IF SIZE CONTROL SET
          LDM    MXCS+1 
          ZJN    CUCX        IF NO SIZE CONTROL SET 
  
*         DECREMENT ACCUMULATED SIZE BY SIZE OF FILE REPLACED.
  
 CUC2     LDD    CI 
          ZJN    CUC4        IF NO PREVIOUS FILE
          LDD    CM+3 
          SBM    FCLF+1,CI
          STD    CM+3 
          PJN    CUC3        IF NO 12 BIT OVERFLOW
          AOD    CM+3 
          SOD    CM+2 
 CUC3     LDD    CM+2 
          SBM    FCLF,CI
          STD    CM+2 
  
*         INCREMENT CUMULATIVE SIZE FOR NEW FILE. 
  
 CUC4     LDD    LF+1 
          RAD    CM+3 
          SHN    -14
          ADD    LF 
          RAD    CM+2 
          SHN    -14
          ZJN    CUC6        IF NO OVERFLOW 
 CUC5     ERROR  COS         * TOO MUCH INDIRECT ACCESS FILE SPACE.*
  
 CUC6     LDD    CM+2        CHECK SIZE AGAINST THAT ALLOWED
          SBM    MXCS 
          MJN    CUC7        IF NO OVERFLOW 
          NJN    CUC5        IF OVERFLOW
          LDD    CM+3 
          SBM    MXCS+1 
          MJN    CUC7        IF NO OVERFLOW 
          NJN    CUC5        IF OVERFLOW
 CUC7     LJM    CUCX 
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          OVERFLOW  OVLC,BUF2-2  OVERFLOW INTO CATALOG BUFFER 
          SPACE  4,10 
*         EQUIVALENCE EXTERNALLY REFERENCED TAGS. 
  
  
          QUAL   *
  
 SAVA     EQU    /".O"/SAVA 
          OVERLAY  (APPEND PROCESSING.) 
 APP      SPACE  4,10 
**        THIS OVERLAY PROCESSES THE INDIRECT ACCESS FILE 
*         COMMAND *APPEND*. 
  
  
 OVL      BSS    0           ENTRY
*         LJM    0,P0        PROCESS REQUEST
          TITLE  COMMAND PROCESSING.
          SPACE  4,10 
***       PROCESS *APPEND* REQUEST. 
* 
*         APPEND LOCAL FILE *FILE NAME* AT EOI OF INDIRECT ACCESS 
*         PERMANENT FILE *PF NAME*. 
  
  
 APP      BSS    0           ENTRY
          LDD    CI          CLEAR ALTERNATE STORAGE INFORMATION IN PFC 
          RAM    APPA+1 
          LDN    ZERL 
 APPA     CRM    FCAF,ON
          LDD    CI          CLEAR TAPE ALTERNATE STORAGE INFORMATION 
          RAM    APPI+1 
          LDN    ZERL 
 APPI     CRM    FCTF,ON
  
*         CHECK LOCAL FILE ACCESS LEVEL AGAINST *PFC*.
  
          LDM    SSOM        CHECK SYSTEM SECURITY MODE 
          ZJN    APP1        IF SYSTEM OPERATING IN UNSECURED MODE
          LDM    FCAL,CI
          SBM    LFAL 
          PJN    APP1        IF ACCESS LEVEL ACCEPTABLE 
          LDM    SVAL 
          LPN    40 
          NJN    APP1        IF WRITE-DOWN ALLOWED
          LDM    SSID        CHECK SUBSYSTEM ID 
          SBK    LSSI+1 
          PJN    APP1        IF SUBSYSTEM 
          ERROR  WDP,,,,SVE  * WRITE-DOWN OF DATA PROHIBITED.*
  
 APP1     LDM    FCEC,CI     CHECK CATALOG ERROR STATUS 
          SHN    -4 
          LPN    34 
          ZJN    APP3        IF NO ERRORS 
          SBN    4
          RAM    APPH        MODIFY ERROR CODE
 APPH     EQU    *+2
          ERROR  EDA         * ERROR IN FILE DATA.* 
*         ERROR  EPT         * ERROR IN PERMIT DATA.* 
*         ERROR  EDP         * DATA/PERMIT ERRORS.* 
  
          ERRNZ  /ERRMSG/EPT-/ERRMSG/EDA-1  ERRORS MUST BE CONTIGUOUS 
          ERRNZ  /ERRMSG/EDP-/ERRMSG/EPT-1  ERRORS MUST BE CONTIGUOUS 
  
 APP3     LDM    STAT        CHECK FOR PREVIOUS ERROR 
          LPN    STAB 
          ZJN    APP4        IF NO PREVIOUS ERROR 
          ERROR  FTL         *FILE TOO LONG.* 
  
*         UPDATE PERMITS. 
  
 APP4     RJM    CUC         CHECK USER CONTROLS
          LDD    PB 
          ZJN    APP4.1      IF NO PERMIT BUFFER
          EXECUTE  3PE       LOAD PERMIT UPDATE ROUTINES
          RJM    UPI         UPDATE PERMISSION INFORMATION
          ENDMS 
  
*         UPDATE CATALOG. 
  
 APP4.1   EXECUTE  3PD       LOAD CATALOG UPDATE ROUTINES 
          LDD    CI          SAVE CURRENT VALUE OF (FCKD) 
          RAM    APPG 
          LDD    MA 
          CWM    FCKD,ON
 APPG     EQU    *-1
          SBN    1
          CRM    APPF,ON
          LDN    PSNI        FORCE SPECIAL *APPEND* PROCESSING IN *DCE* 
          STM    DCEC 
          STM    DCED 
          STM    DCEE 
          RJM    IIA         INTERLOCK INDIRECT ALLOCATION
          LDK    STNS        SET *NO JOB SUSPENSION* AFTER THIS POINT 
          RAM    STAT 
          RJM    DCE         DELETE CATALOG ENTRY 
          LMN    2
          ZJP    APP9        IF FILE AT END OF CHAIN
  
*         PROCESS FILE WITHIN CHAIN.
  
          AOM    FCAC+1,CI   INCREMENT ACCESS COUNT 
          SHN    -14
          RAM    FCAC,CI
          RJM    CCS         CREATE CATALOG SECTOR
          LDM    APDK+1 
          NJN    APP4.2      IF DELAYED DELINK PENDING
          RJM    CIA         CLEAR INDIRECT ALLOCATION INTERLOCK
  
*         REWRITE OLD FILE-S CATALOG ENTRY. 
  
 APP4.2   LDD    CB          REWRITE OLD FILE-S CATALOG SECTOR
          RJM    WBI
          ENDMS 
          LDM    CPTF 
          ZJN    APP7        IF FILE NOT TO BE TRANSFERRED VIA CPU
          RJM    VSS         VERIFY SYSTEM SECTOR 
          ENDMS 
 APPB     BSS    0           (OVERFLOW POINT FOR *3PS* LOAD)
          EXECUTE  3PS       TRANSFER FILE VIA CPU
  
          ERRNG  *-BUFA-502  SYSTEM SECTOR BUFFER OVERFLOWS CODE
  
 APP7     EXECUTE  3PP       LOAD DEVICE TO DEVICE TRANSFER OVERLAY 
          EXECUTE  3PQ       LOAD TRANSFER ORIGINAL FILE OVERLAY
          AOM    DPCA        DISABLE SRU ACCUMULATION 
          LDC    BUFA        SET BUFFER ADDRESS 
          STD    BB 
          STM    SDPA 
          RJM    CSS         CREATE SYSTEM SECTOR IN *BUFA* 
          RJM    IBA         INCREMENT BUFFER ADDRESS 
          AOD    LF+1        ADJUST LENGTH TO ACCOUNT FOR SYSTEM SECTOR 
          SHN    -14
          RAD    LF 
          RJM    VSS         VERIFY SYSTEM SECTOR 
          LJM    ADT         TRANSFER ORIGINAL FILE AND LOCAL FILE
  
*         PROCESS APPEND TO FILE AT END OF DATA CHAIN AS A *SAVE* 
*         OF THE APPENDAGE. 
  
 APP9     LDC    STEC        SET *APPEND TO END OF CHAIN* FLAG
          RAM    STAT 
          LDD    CI          SAVE CATALOG ADDRESS 
          STM    PFCA 
          LDD    T6          SAVE CURRENT EOI OF DATA CHAIN (TRACK) 
          STM    APPD 
          LDM    FCBT,CI
          STD    T6 
          LDD    T1          SAVE CURRENT EOI SECTOR
          STM    APPE 
          LDD    LF          SET LENGTH OF NEW FILE IN CATALOG
          STM    FCLF,CI
          LDD    LF+1 
          STM    FCLF+1,CI
          LDM    APLF        SET LENGTH OF APPENDAGE
          STD    LF 
          LDM    APLF+1 
          STD    LF+1 
          ISTORE AFSB,(PSN)  DO NOT ALLOCATE FOR SYSTEM SECTOR OR EOI 
          RJM    AFS         ALLOCATE SPACE FOR APPENDAGE 
          RJM    CIA         CLEAR INDIRECT ALLOCATION INTERLOCK
          LDD    UI          RESET USER INDEX IN DELETED PFC
          RAM    FCUI,CI
          LDD    UI+1 
          STM    FCUI+1,CI
          LDD    CI          RESTORE PREVIOUS VALUE OF *FCKD* 
          RAM    APPC 
          LDD    MA 
          CWM    APPF,ON
          SBN    1
          CRM    FCKD,ON
 APPC     EQU    *-1
          LDC    STMI+CI     FORCE UPDATE OF FCUD/FCMD IN *UCE* 
          STM    UCEA 
          RJM    UCE         UPDATE CATALOG ENTRY 
          LDC    **          SET FIRST TRACK TO PLACE APPENDAGE 
 APPD     EQU    *-1
          STM    SDAB 
          LDC    ** 
 APPE     EQU    *-1
          STM    SDAC 
          ENDMS 
          LDM    CPTF 
          ZJN    APP10       IF FILE NOT TO BE TRANSFERRED VIA CPU
          EXECUTE  3PS       TRANSFER FILE VIA CPU
  
 APP10    EXECUTE  3PP       LOAD DEVICE TO DEVICE TRANSFER OVERLAY 
  
          LDD    FS          SET LOCAL FILE EST ORDINAL 
          STD    T5 
          LDD    FS+1        SET FIRST TRACK
          STD    T6 
          LDN    FSMS        SET FIRST SECTOR 
          STD    T7 
          SETMS  READSTR,NS 
          RJM    PDV         PROCESS DEVICE STATUS
          LDC    BUF         SET STARTING BUFFER ADDRESS
          STD    BB 
          LJM    DTD         ENTER DEVICE TO DEVICE TRANSFER LOOP 
  
 APPF     BSS    5           BUFFER TO SAVE (FCKD)
          TITLE  SUBROUTINES. 
 CSS      SPACE  4,10 
**        CSS - CREATE SYSTEM SECTOR IN BUFFER. 
* 
*         ENTRY  (PFCA) = ADDRESS OF NEW CATALOG ENTRY. 
* 
*         EXIT   (BUFA - BUFA+502) = INITIALIZED SYSTEM SECTOR. 
* 
*         USES   T1, T2, T3.
  
  
 CSS      SUBR               ENTRY/EXIT 
          LDC    77*5-1      CLEAR SYSTEM SECTOR
          STD    T1 
 CSS1     LDN    0
          STM    BUFA+2,T1
          SOD    T1 
          PJN    CSS1        IF NOT END OF SECTOR 
          LDC    3777        SET CONTROL BYTES
          STM    BUFA 
          LDN    77 
          STM    BUFA+1 
          LDD    CI+FCFN*    SET PERMANENT FILE NAME
          STM    CSSA 
          LDD    MA          COPY FILE NAME TO BUFFER 
          CWM    *,ON 
 CSSA     EQU    *-1
          SBN    1
          CRM    FNSS+BUFA-BFMS,ON
          LDM    FNSS+3+BUFA-BFMS 
          SCN    77 
          STM    FNSS+3+BUFA-BFMS 
          LDC    PMFT*100    SET FILE TYPE
          STM    FNSS+4+BUFA-BFMS 
          LDM    SDAA        SET EST ORDINAL
          STM    EQSS+BUFA-BFMS 
          LDM    SDAA+1      SET FIRST TRACK
          STM    FTSS+BUFA-BFMS 
          LDN    PDTL        ENTER PACKED DATE
          CRM    DTSS+BUFA-BFMS,ON
  
*         COPY CATALOG ENTRY INTO SYSTEM SECTOR.
  
          LDM    PFCA        ADDRESS OF CATALOG ENTRY 
          STD    T1 
          LDC    CTSS+BUFA-BFMS  ADDRESS IN SYSTEM SECTOR 
          STD    T2 
          ADC    NWCE*5      NUMBER OF BYTES TO COPY
          STD    T3 
 CSS2     LDI    T1          TRANSFER ENTRY 
          STI    T2 
          AOD    T1 
          AOD    T2 
          LMD    T3 
          NJN    CSS2        IF MORE BYTES TO TRANSFER
          LJM    CSSX        RETURN 
 CUC      SPACE  4,21 
**        CUC - CHECK USER CONTROLS.
* 
*         CHECK NUMBER OF FILES.
*         CHECK CUMULATIVE SIZE OF INDIRECT ACCESS FILES. 
* 
*         ENTRY  (ACNF - ACFN+1) = NUMBER OF FILES IN CATALOG.
*                (MXNF) = MAXIMUM NUMBER OF FILES.
*                (CIFS - CIFS+1) = CUMULATIVE SIZE OF INDIRECT FILES. 
*                (MXCS - MXCS+1) = CUMULATIVE SIZE OF INDIRECTS ALLOWED.
*                (LF - LF+1) = LENGTH OF NEW FILE.
*                (CI) = INDEX TO EXISTING CATALOG ENTRY 
*                            OF FILE REPLACED.
* 
*         USES   CM - CM+4. 
* 
*         MACROS ERROR. 
  
  
 CUC      SUBR               ENTRY/EXIT 
          LDD    MA          SET CUMULATED TOTALS 
          CWM    ACNF,ON
          SBN    1
          CRD    CM 
  
*         CHECK  NUMBER OF FILES ALLOWED. 
  
          LDM    MXNF 
          ZJN    CUC1        IF NO LIMIT ON  NUMBER OF FILES
          LDD    CM 
          SHN    14 
          ADD    CM+1 
          ADN    7           ROUND UP 
          SHN    -3 
          SBM    MXNF 
          MJN    CUC1        IF NUMBER OF FILES ALLOWED NOT EXCEEDED
          ZJN    CUC1        IF NUMBER OF FILES ALLOWED NOT EXCEEDED
          ERROR  COF         * TOO MANY PERMANENT FILES.* 
  
*         CHECK CUMULATIVE SIZE OF INDIRECT FILES.
  
 CUC1     LDM    MXCS 
          NJN    CUC2        IF SIZE CONTROL SET
          LDM    MXCS+1 
          ZJN    CUCX        IF NO SIZE CONTROL SET 
  
*         DECREMENT ACCUMULATED SIZE BY SIZE OF FILE REPLACED.
  
 CUC2     LDD    CI 
          ZJN    CUC4        IF NO PREVIOUS FILE
          LDD    CM+3 
          SBM    FCLF+1,CI
          STD    CM+3 
          PJN    CUC3        IF NO 12 BIT OVERFLOW
          AOD    CM+3 
          SOD    CM+2 
 CUC3     LDD    CM+2 
          SBM    FCLF,CI
          STD    CM+2 
  
*         INCREMENT CUMULATIVE SIZE FOR NEW FILE. 
  
 CUC4     LDD    LF+1 
          RAD    CM+3 
          SHN    -14
          ADD    LF 
          RAD    CM+2 
          SHN    -14
          ZJN    CUC6        IF NO OVERFLOW 
 CUC5     ERROR  COS         * TOO MUCH INDIRECT ACCESS FILE SPACE.*
  
 CUC6     LDD    CM+2        CHECK SIZE AGAINST THAT ALLOWED
          SBM    MXCS 
          MJN    CUC7        IF NO OVERFLOW 
          NJN    CUC5        IF OVERFLOW
          LDD    CM+3 
          SBM    MXCS+1 
          MJN    CUC7        IF NO OVERFLOW 
          NJN    CUC5        IF OVERFLOW
 CUC7     LJM    CUCX        EXIT 
 VSS      SPACE  4,10 
**        VSS - VERIFY SYSTEM SECTOR. 
* 
*         ENTRY  (APTK - APSC) = SYSTEM SECTOR DISK ADDRESS.
* 
*         EXIT   SYSTEM SECTOR READ.
*                TO *ERR* IF BAD SYSTEM SECTOR OR READ ERROR. 
*                ERROR IDLE SET IF BAD SYSTEM SECTOR OR READ ERROR. 
* 
*         CALLS  PDV, PES, RSS. 
* 
*         MACROS ERROR. 
  
  
 VSS      SUBR               ENTRY/EXIT 
          LDD    EQ          SET EST ORDINAL
          STD    T5 
          LDM    APTK        SET BEGINNING TRACK
          STD    T6 
          LDM    APSC        SET BEGINNING SECTOR 
          STD    T7 
          SETMS  READSTR,NS 
          RJM    PDV         PROCESS DEVICE STATUS
          LDN    0           DO NOT VALIDATE FILE NAME
          RJM    RSS         READ SYSTEM SECTOR 
          MJN    VSS1        IF READ ERROR
          ZJN    VSSX        IF VALID SYSTEM SECTOR 
          ERROR  SSE,CH,,T5,,EI  *EQXXX,DNYY, SYSTEM SECTOR ERROR.* 
  
 VSS1     RJM    PES         PROCESS ERROR STATUS 
          ERROR  MSE,CH,,T5,,EI  *EQXXX,DNYY, MASS STORAGE ERROR.*
          SPACE  4,10 
*         COMMON DECKS. 
  
  
 RIS$     SET    1           READ INDIRECT-ACCESS FILE SYSTEM SECTOR
*CALL     COMPRSS 
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          OVERFLOW  OVLC,BUF2-2  OVERFLOW INTO CATALOG BUFFER 
          SPACE  4,10 
*         EQUIVALENCE EXTERNALLY REFERENCED TAGS. 
  
  
          QUAL   *
  
 APPB     EQU    /".O"/APPB 
          OVERLAY  (ATTACH/UATTACH PROCESSING.) 
          SPACE  4,10 
**        THIS OVERLAY PROCESSES THE DIRECT ACCESS FILE 
*         COMMANDS *ATTACH* AND *UATTACH*.
  
  
 OVL      BSS    0           ENTRY
          LDD    EQ          RESET MASTER DEVICE EST ORDINAL
          STD    T5 
          LJM    0,P0        CALL FUNCTION PROCESSOR
          TITLE  COMMAND PROCESSING.
 UAT      SPACE  4,10 
***       PROCESS *UATTACH* REQUEST.
* 
*         ATTACH DIRECT ACCESS FILE SPECIFIED BY *PFID* TO JOB, 
*         WITH LOCAL FILE NAME *FILE NAME*.  DO NOT UPDATE ANY
*         ACCESS COUNTS OR DATES, SINCE THIS IS NOT A USER ACCESS.
  
  
 UAT      BSS    0
          LDM    FNMD 
          SHN    21-1 
          MJN    ATT         IF WRITEABLE MODE ACCESS 
          ISTORE  UCEA,(UJN UCE3)  FORCE BYPASS OF DATE/TIME UPDATES
*         UJN    ATT         ATTACH FILE
 ATT      SPACE  4,10 
***       PROCESS *ATTACH* REQUEST. 
* 
*         ATTACH DIRECT ACCESS FILE *PF NAME* TO JOB, WITH LOCAL
*         FILE NAME *FILE NAME*.
  
  
 ATT      BSS    0           ENTRY
          LDM    FCDN,CI     CHECK DEVICE NUMBER
          LPN    77 
          ZJN    ATT3        IF FILE ON MASTER DEVICE 
  
*         PROCESS ALTERNATE DEVICE ACCESS.
  
          STD    CM 
          LDM    PFPN+4      SET FAMILY EST ORDINAL 
          RJM    SDN         SEARCH FOR DEVICE NUMBER 
          PJN    ATT2        IF DEVICE FOUND
          ADN    1
          RJM    PDA         PROCESS DEVICE AVAILABILITY
 ATT1     ERROR  DAD,CH      * DIRECT ACCESS DEVICE ERROR.* 
  
 ATT2     RJM    IRA         PRESET COMMON DECKS FOR FILE DEVICE
          LDD    CC 
          LMN    CCUA 
 ATT3     ZJN    ATT5        IF *UATTACH* REQUEST 
          SFA    EST,T5      CHECK ERROR IDLE 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4 
          SHN    3
          ADN    ACGL 
          CRD    CM 
          LDD    CM+4 
          LPN    20 
          ZJN    ATT5        IF NO ERROR IDLE ON EQUIPMENT
          LDM    SSJS 
          ZJN    ATT4        IF NOT *SSJ=* JOB
          LDM    PFSR 
          LPN    77 
          LMN    SRIE 
          ZJN    ATT5        IF *IGNORE ERROR IDLE* SPECIAL REQUEST 
 ATT4     ERROR  PFN,CH      * DEVICE UNAVAILABLE.* 
  
 ATT4.1   ERROR  TNR,CH,,T5  * EQXXX,DNYY,TRACK NOT RESERVED.*
  
*         INITIALIZE FOR SYSTEM SECTOR PROCESSING.
  
 ATT5     LDM    FCBT,CI     SET FILE FIRST TRACK 
          STD    P2 
          STD    T6 
          STM    PFFT 
          RJM    ITC         INTERLOCK TRACK CHAIN FOR FILE 
          NJN    ATT4.1      IF TRACK NOT RESERVED
          LDD    T5          SAVE THE FILES EST ORDINAL 
          STD    FS 
          STM    PFEQ 
          AOM    DAIF        SET INTERLOCK FLAG 
          RJM    CSL         CHECK SIZE LIMITS
          LDD    P2          RESET FIRST TRACK
          STD    T6 
          SETMS  IO 
          RJM    PDV         PROCESS DEVICE STATUS
          LDN    0           DONT VERIFY FILE NAME IN SYSTEM SECTOR 
          RJM    RSS         READ SYSTEM SECTOR 
          ZJN    ATT8        IF LEGAL SYSTEM SECTOR 
          MJN    ATT7        IF READ ERROR
          LDC    /ERRMSG/DAF*4  *EQXXX,DNYY, DIRECT ACCESS FILE ERROR.* 
          UJN    ATT9        PROCESS FILE ERROR 
  
 ATT7     RJM    PES         PROCESS ERROR STATUS 
          LDC    /ERRMSG/MSE*4  *EQXXX,DNYY, MASS STORAGE ERROR.* 
          UJN    ATT9        PROCESS FILE ERROR 
  
*         CHECK FOR AN EXISTING UTILITY ACTIVE FILE CONDITION.
  
 ATT8     LDM    CASS        CHECK CURRENT ACCESS MODE
          SHN    21-6 
          PJN    ATT11       IF UTILITY MODE NOT SET
          LDD    CC          CHECK FOR ANOTHER UTILITY ATTACH REQUEST 
          LMN    CCUA 
          NJN    ATT11       IF NOT UTILITY ATTACH
          LDN    /ERRMSG/FBS*4  * FILE BUSY.* 
 ATT9     LJM    PFE         PROCESS FILE ERROR 
  
 ATT10    LDC    /ERRMSG/FSE*4  * FILE BOI/EOI/UI MISMATCH.*
          UJN    ATT9        PROCESS FILE ERROR 
  
*         PROCESS USER INDEX/CREATION DATE VALIDATION.
  
 ATT11    LDM    FCUI,CI     COMPARE USER INDEX FIELDS
          LMM    CTSS+FCUI
          LPN    77 
          NJN    ATT10       IF MISMATCH ON USER INDEX
          LDM    FCUI+1,CI
          LMM    CTSS+FCUI+1
          NJN    ATT10       IF MISMATCH ON USER INDEX
          LDN    2           SET UP CHECK ON CREATION DATE
          STD    P0 
 ATT12    LDM    FCCD+2,CI
 ATTA     EQU    *-1
          LMM    CTSS+FCCD,P0 
          NJN    ATT10       IF NO MATCH ON CREATION DATE 
          SOM    ATTA 
          SOD    P0 
          PJN    ATT12       IF MORE DATA TO CHECK
  
*         PROCESS ERROR STATUS FIELDS.
  
          LDM    FCEC,CI     GET ERROR STATUS FROM PFC
          SHN    -6 
          STD    T1 
          RAM    ATTC 
          LDM    CTSS+FCEC   GET ERROR STATUS FROM SYSTEM SECTOR
          SHN    -6 
          STD    P0 
          NJN    ATT12.1     IF ERROR STATUS SET IN SYSTEM SECTOR 
          LDD    T1 
          NJN    ATT13       IF ERROR STATUS SET IN PFC 
          UJN    ATT14       CHECK FILE MODE
  
 ATT12.1  SCN    **          COMBINE BOTH ERROR STATUS FIELDS 
*         SCN    (T1) 
 ATTC     EQU    *-1
          LMD    T1 
          SHN    6
          STD    P0 
          LDM    FCEC,CI
          LPN    77 
          STM    CTSS+FCEC   CLEAR CODE IN SYSTEM SECTOR
          LMD    P0 
          STM    FCEC,CI     SET ERROR CODE IN CATALOG
          ENDMS 
          LDD    EQ          SET MASTER DEVICE EST ORDINAL
          STD    T5 
          LDD    CB          REWRITE CATALOG ENTRY
          RJM    WBI
          ENDMS 
          LDD    FS          RESET FILE EST ORDINAL 
          STD    T5 
          LDD    P2 
          STD    T6 
 ATT13    LJM    ATT15       REWRITE SYSTEM SECTOR
  
*         CHECK FILE MODE AND UPDATE FIELDS IN SYSTEM SECTOR. 
  
 ATT14    RJM    CFM         CHECK FILE MODE
  
*         SAVE JSN, MAINFRAME ID, AND DATE/TIME FOR WRITEABLE ACCESS. 
  
          LDM    FNMD        CHECK MODE REQUESTED 
          SHN    21-1 
          PJN    ATT14.1     IF NOT WRITEABLE MODE ACCESS 
          LDN    PDTL        SET CURRENT DATE AND TIME
          CRM    WDSS,ON
          LDK    MMFL        GET MAINFRAME ID 
          CRD    CM 
          LDD    CM          SET MAINFRAME ID 
          STM    WDSS 
          LDD    CP          GET EJT ORDINAL
          ADN    TFSW 
          CRD    CM 
          SFA    EJT,CM      SET *JSNE* WORD OF EJT 
          ADK    JSNE 
          CRM    WJSS,ON
  
*         CHECK FOR BOI/EOI MISMATCH.  THIS IS DONE AFTER THE CALL TO 
*         *CFM*, TO AVOID THE CHECK IF THE FILE IS CURRENTLY ATTACHED 
*         IN WRITE MODE.  THE EOI MAY NOT BE VALID IN THAT CASE.
  
*         ROUTINES RESIDENT IN *BUF2* MAY NOT BE USED AFTER THIS POINT. 
  
 ATT14.1  LDN    SSTL        CHECK BOI/EOI VALIDATION ENABLED 
          CRD    CM 
          LDD    CM 
          SHN    21-4 
          MJN    ATT15       IF VALIDATION NOT ENABLED
          LDD    P2          SET FIRST TRACK
          STD    T6 
          RJM    SEI         SKIP TO END OF INFORMATION 
          SETMS  IO 
          RJM    PDV         PROCESS DEVICE STATUS
          LDC    BUF2        PERFORM BOI/EOI VALIDATION 
          RJM    RDS         READ EOI SECTOR
          MJP    ATT7        IF READ ERROR
          LDM    BUF2+FTEI   CHECK FIRST TRACK POINTER
          LMD    P2 
          ADM    BUF2        CHECK LINKAGE BYTES
          ADM    BUF2+1 
          NJP    ATT10       IF BOI/EOI MISMATCH
  
*         REWRITE SYSTEM SECTOR.
  
 ATT15    LDD    MA          SET PROPER FILE TYPE IN SYSTEM SECTOR
          CWD    FN 
          CRM    FNSS,ON
          LDC    PMFT*100 
          STM    FNSS+4 
          LDD    P2          RESET FIRST TRACK
          STD    T6 
          SETMS  IO,RW
          RJM    PDV         PROCESS DEVICE STATUS
          RJM    WSS         UPDATE SYSTEM SECTOR 
          PJN    ATT15.1     IF NO ERROR
          RJM    PES         PROCESS ERROR STATUS 
          LDC    /ERRMSG/MSE*4  *EQXXX,DNYY, MASS STORAGE ERROR.* 
          LJM    PFE         PROCESS FILE ERROR 
  
 ATT15.1  ENDMS 
          LDD    T6          RELEASE FILE INTERLOCK 
          RJM    CTI
          LDN    0           CLEAR INTERLOCK FLAG 
          STM    DAIF 
  
*         PROCESS CATALOG ERROR STATUS. 
  
          LDM    FCEC,CI     CHECK CATALOG ERROR STATUS 
          SHN    0-4         FORM ERROR CODE
          LPN    34 
          ZJN    ATT16       IF NO ERROR
          SBN    4
          RAM    ATTD        SET ERROR CODE FOR MESSAGE 
 ATTD     EQU    *+2
          ERROR  EDA         * ERROR IN FILE DATA.* 
*         ERROR  EPT         * ERROR IN PERMIT DATA.* 
*         ERROR  EDP         * DATA/PERMIT ERRORS.* 
*         ERROR  FLC         * EOI CHANGED BY RECOVERY.*
  
          ERRNZ  /ERRMSG/EPT-/ERRMSG/EDA-1  ERRORS MUST BE CONTIGUOUS 
          ERRNZ  /ERRMSG/EDP-/ERRMSG/EPT-1  ERRORS MUST BE CONTIGUOUS 
          ERRNZ  /ERRMSG/FLC-/ERRMSG/EDP-1  ERRORS MUST BE CONTIGUOUS 
  
*         CREATE FNT/FST FOR FILE ATTACHED. 
  
 ATT16    RJM    CFE         CREATE FNT/FST ENTRY 
  
*         RESET TO MASTER DEVICE. 
  
          LDD    T5          CHECK FILE EST ORDINAL 
          LMD    EQ 
          ZJN    ATT17       IF FILE RESIDES ON MASTER DEVICE 
          LDD    EQ          RESET EST ORDINAL
          STD    T5 
          RJM    IRA         PRESET COMMON DECKS FOR MASTER DEVICE
  
*         UPDATE PERMITS AND CATALOG ENTRY. 
  
 ATT17    LDD    CC          CHECK COMMAND CODE 
          LMN    CCUA 
          ZJN    ATT18       IF *UATTACH* REQUEST 
          LDD    PB 
          ZJN    ATT19       IF NO PERMIT BUFFER
          EXECUTE  3PE       LOAD PERMIT UPDATE ROUTINES
          AOM    UPIB        INDICATE THAT *BFMS* WAS USED
          RJM    UPI         UPDATE PERMISSION INFORMATION
          UJN    ATT19       CHECK ACCESS MODE
  
 ATT18    ISTORE UCEB,(UJN UCE3)  FORCE BYPASS OF FCMD, FCAD UPDATE 
          ISTORE UCEC,(UJN UCE4)  FORCE BYPASS OF FCAC UPDATE 
 ATT19    LDM    FNMD        CHECK MODE REQUESTED 
          SHN    21-1 
          PJN    ATT20       IF NOT WRITEABLE MODE ACCESS 
          LDC    STMI+CI     FORCE FCUD UPDATE (ALSO FCMD ON *ATTACH*)
          STM    UCEA 
          LDN    0           CLEAR FILE LENGTH
          STM    FCLF,CI
          STM    FCLF+1,CI
          LDD    CI          CLEAR ALTERNATE STORAGE INFORMATION IN PFC 
          RAM    ATTH+1 
          LDN    ZERL 
 ATTH     CRM    FCAF,ON
          LDD    CI          CLEAR TAPE ALTERNATE STORAGE INFORMATION 
          RAM    ATTI+1 
          LDN    ZERL 
 ATTI     CRM    FCTF,ON
          UJN    ATT21       UPDATE CATALOG ENTRY 
  
 ATT20    LDM    MODE 
          LPN    37 
          LMN    PTRD 
          NJN    ATT21       IF NOT READ MODE ACCESS
          LDD    LF          UPDATE FILE LENGTH IN CATALOG
          STM    FCLF,CI
          LDD    LF+1 
          STM    FCLF+1,CI
 ATT21    RJM    UCE         UPDATE CATALOG ENTRY 
          ENDMS 
          RJM    CCI         CLEAR CATALOG INTERLOCK
  
*         UPDATE FET WITH PARAMETERS FROM CATALOG.
  
          LDC    PFSN        SET FILE NAME
          RJM    SFN
          LDM    PFSP 
          ZJN    ATT22       IF SECURITY PROCESSING BIT NOT SET 
          RJM    SFA         RETURN ACCESS LEVEL TO FET 
          ADN    CFAL 
          CRD    CM 
          LDM    FCAL,CI
          LMD    CM+1 
          LPN    7
          LMD    CM+1 
          STD    CM+1 
          RJM    SFA
          ADN    CFAL 
          CWD    CM 
 ATT22    LDD    CI          SET USER CONTROL WORD ADDRESS
          RAM    ATTE 
          LDN    CFUC 
          SBM    FETL 
          PJN    ATT23       IF FET TOO SHORT 
          RJM    SFA
          ADN    CFUC 
          CWM    FCCW,ON     RETURN USER CONTROL WORD TO FET
 ATTE     EQU    *-1
  
*         IF *UATTACH* REQUEST, WRITE COPY OF THE *PFC* ENTRY.
  
 ATT23    LDD    CC          CHECK COMMAND CODE 
          LMN    CCUA 
          ZJN    ATT24       IF *UATTACH* COMMAND 
          LJM    ATT26       TERMINATE PROGRAM
  
 ATT24    RJM    SFA         READ FET *FIRST* POINTER 
          ADN    1
          CRD    CM 
          LDD    CM+3        VERIFY *FIRST* POINTER 
          LPN    77 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    CM+4 
          ADN    NWCE 
          SBN    1
          SHN    -6 
          SBD    RA 
          SBD    FL 
          MJN    ATT25       IF BUFFER WITHIN JOB FL
          ERROR  ILR,CH,IW,,EC3  * PFM INCORRECT REQUEST.*
  
 ATT25    LDD    CI          COPY CATALOG ENTRY TO BUFFER 
          STM    ATTF 
          LDN    NWCE        NUMBER OF PFC WORDS
          STD    T1 
          LDD    CM+3        FORM *CM* ADDRESS
          LPN    77 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    CM+4 
          CWM    **,T1
 ATTF     EQU    *-1         (CATALOG ENTRY ADDRESS)
 ATT26    EXECUTE  3PU       TERMINATE PROGRAM
          TITLE  SUBROUTINES. 
 CFE      SPACE  4,20 
**        CFE - CREATE FNT/FST ENTRY FOR ATTACHED FILE. 
* 
*         ENTRY  (CC) = COMMAND CODE. 
*                (CI) = POINTER TO CATALOG ENTRY FOR FILE.
*                (FNMD) = FNT STATUS MODE.
*                (FNTA) = FNT ADDRESS IN NFL. 
*                (PFEQ) = EST ORDINAL FOR FILE. 
*                (PFSN) = SYSTEM FILE NAME. 
*                (PFUC) = USER CONTROLS.
* 
*         EXIT   FNT/FST WRITTEN TO CENTRAL MEMORY. 
*                PERMANENT FILE USER COUNT INCREMENTED. 
* 
*         USES   FA, CM - CM+4, FN - FN+4, FS - FS+4. 
* 
*         CALLS  SFN. 
* 
*         MACROS MONITOR, NFA.
  
  
 CFE      SUBR               ENTRY/EXIT 
          LDC    PFSN        SET FILE NAME
          RJM    SFN
          LDC    PMFT*100    SET FILE TYPE
          RAD    FN+4 
          LDM    FNTA        SET FNT ADDRESS
          STD    FA 
          LDM    PFEQ        SET EST ORDINAL FOR FILE 
          STD    FS 
          LDM    FCBT,CI     SET FIRST TRACK FOR FILE 
          STD    FS+1 
          STD    FS+2 
          LDD    CC          CHECK COMMAND CODE 
          LMN    CCUA 
          ZJN    CFE1        IF *UATTACH* COMMAND 
          LDN    FSMS        SET SECTOR 
          STD    FS+3 
          LDN    4           SET OPERATION COMPLETE 
          STD    FS+4 
          LDM    FNMD 
          LPN    35 
          UJN    CFE2        SET STATUS MODE
  
 CFE1     LDN    0           SET SECTOR 
          STD    FS+3 
          LDC    4004        SET OPERATION COMPLETE 
          STD    FS+4 
          LDM    FNMD 
          LPN    35 
          LMN    2
 CFE2     ADM    PFSN+3      SET STATUS MODE
          STD    FN+3 
          LDN    ZERL        SET FILE SIZE CONTROL
          CRD    CM 
          LDM    PFUC        SET *FS* INDEX IN *FUTL* WORD
          SHN    -11
          SHN    6
          STD    CM+2 
          LDM    FCAL,CI     SET ACCESS LEVEL IN FNT
          RAD    CM+2 
          NFA    FA,R        RESTORE FNT ENTRY
          ADK    FNTL 
          CWD    FN 
          ADN    FSTL-FNTL
          CWD    FS 
          ADN    FUTL-FSTL
          CWD    CM 
          RJM    SFA         SET FNT POINTER IN FET 
          ADN    4
          CRD    CM 
          LDD    FA 
          STD    CM 
          RJM    SFA
          ADN    4
          CWD    CM 
          LDM    PFEQ        INCREMENT PERMANENT FILE USER COUNT
          STD    CM+1 
          LDN    IUCS 
          STD    CM+3 
          MONITOR  SMDM 
          UJP    CFEX        RETURN 
 PFE      SPACE  4,15 
**        PFE - PROCESS FILE ERROR CONDITION. 
* 
*         ENTRY  (A) = ERROR CODE AND EXIT CASE.
*                (PFEQ) = EST ORDINAL FOR FILE. 
*                (PFFT) = FIRST TRACK FOR FILE. 
* 
*         EXIT   *TERW* UPDATED WITH TIMED/EVENT DATA.
* 
*         USES   CM - CM+4. 
* 
* 
*         MACROS ENDMS, ERROR.
  
  
 PFE      BSS    0           ENTRY
          STM    PFEA        SET ERROR CODE AND EXIT CASE 
          ENDMS 
          LDM    PFEQ        SET EVENT EST ORDINAL
          STM    ERRE 
          LDM    PFFT        SET EVENT TRACK
          STM    ERRC 
          LDC    ART         SET EVENT TIME 
          STM    ERRD 
 PFEA     EQU    *+3
          ERROR  FBS,,,FS    *(FILE NAME) BUSY.*
*         ERROR  FSE,,,FS    * FILE BOI/EOI/UI MISMATCH.* 
*         ERROR  ILR,,,FS    * PFM INCORRECT REQUEST.*
*         ERROR  FIN,,,FS,EC2  *(FILE NAME) INTERLOCKED.* 
*         ERROR  DAF,,,FS    *EQXXX,DNYY, DIRECT ACCESS FILE ERROR.*
*         ERROR  MSE,,,FS    *EQXXX,DNYY, MASS STORAGE ERROR.*
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPWSS 
          TITLE  OVERLAYABLE SUBROUTINES. 
*         THE FOLLOWING ROUTINES MAY BE OVERLAID BY *BUF2*. 
  
          ERRNG  BUF2-*      OVERFLOW INTO EOI SECTOR BUFFER
 CFM      SPACE  4,30 
**        CFM - CHECK FILE MODE.
* 
*         ENTRY  (CASS) = CURRENT ACCESS MODE.
*                (FISS) = FAST ATTACH FILE INDEX. 
*                (CC) = COMMAND CODE. 
*                (MODE) = DESIRED ACCESS MODE.
*                (UCSS+1) - (UCSS+4) = USER COUNTS. 
*                (FS) = EST ORDINAL OF FILE.
*                (T6) = FIRST TRACK OF FILE.
* 
*         EXIT   SYSTEM SECTOR UPDATED FOR NEW ACCESS MODE. 
*                (T1) = REQUESTED MODE. 
*                TO *PFE* FOR ERROR PROCESSING IF ACCESS NOT ALLOWED. 
* 
*         CALLS  DLT. 
* 
*         USES   P0, P1, T1, T3.
* 
*         DEFINE (P1) = CURRENT ACCESS MODE FLAGS.
*                (T3) = ADDRESS OF GLOBAL USER COUNTS.
*                (T7) = ADDRESS OF LOCAL USER COUNTS. 
* 
*         NOTES  IF A WRITEABLE MODE *ATTACH* IS ATTEMPTED ON A 
*                FILE THAT IS ALREADY UTILITY ATTACHED, A *FILE 
*                INTERLOCKED* STATUS WILL BE RETURNED.
  
  
 CFM      SUBR               ENTRY/EXIT 
          LDC    UCSS+1      ADDRESS OF GLOBAL USER COUNTS
          STD    T3 
          LDM    CASS        SET CURRENT ACCESS MODE
          LPC    132
          STD    P1 
          LDM    MODE 
          LPN    37 
          STD    T1          DESIRED ACCESS MODE
          LDM    FISS 
          NJN    CFM4        IF FAST ATTACH FILE
          RJM    DLT         DETERMINE LOCAL USER TABLE ADDRESS 
          LDD    CC          CHECK FOR *UATTACH* REQUEST
          LMN    CCUA 
          NJN    CFM1        IF NOT *UATTACH* REQUEST 
          LDD    HN          SET UTILITY MODE 
          RAM    CASS 
          LDN    2           SET LOCAL *UATTACH* FLAG 
          RAM    -1,T7
 CFM1     LDM    CFMT,T1     SET PROCESSOR ADDRESS
          STD    P0 
          ZJN    CFM2        IF INCORRECT MODE
          LDD    P1 
          LJM    0,P0 
  
 CFM2     LDN    /ERRMSG/ILR*4  * PFM INCORRECT REQUEST.* 
          LJM    PFE         PROCESS FILE ACCESS ERROR
  
*         WRITE ACCESS REQUESTED. 
  
 CFM3     ADI    T3          CHECK IF ANY ACTIVE USERS ON FILE
          ADM    1,T3 
          ADM    2,T3 
          ADM    3,T3 
 CFM4     NJN    CFM9        IF ACCESS NOT ALLOWED
          LDN    32          SET WRITE USER 
  
*         SET NEW FILE MODE.
  
 CFM5     RAM    CASS        SET NEW FILE MODE
          AOM    -1,T7       SET LOCAL WRITE FLAG 
          LJM    CFMX        RETURN 
  
*         MODIFY ACCESS REQUESTED.
  
 CFM6     ADI    T3          CHECK FOR W, M, A, U, R/A, R/U OR R USERS
          ADM    1,T3 
          ADM    2,T3 
          NJN    CFM9        IF ACCESS NOT ALLOWED
          LDN    12          SET MODIFY USER
          UJN    CFM5        SET NEW FILE MODE
  
*         APPEND ACCESS REQUESTED.
  
 CFM7     ADI    T3          CHECK FOR W, M, A, U, R/U OR R USERS 
          ADM    1,T3 
          NJN    CFM9        IF ACCESS NOT ALLOWED
          LDN    2           SET APPEND USER
          UJN    CFM5        SET NEW FILE MODE
  
*         UPDATE ACCESS REQUESTED.
  
 CFM8     ADI    T3          CHECK FOR W, M, A, U, R/A OR R USERS 
          ADM    2,T3 
          NJN    CFM9        IF ACCESS NOT ALLOWED
          LDN    10          SET UPDATE USER
          UJN    CFM5        SET NEW FILE MODE
  
*         ACCESS NOT ALLOWED. 
  
 CFM9     LDD    P1          CHECK FOR UTILITY ATTACH MODE
          SHN    21-6 
          PJN    CFM10       IF FILE NOT CURRENTLY UTILITY ATTACHED 
          LDC    EC2*1000+/ERRMSG/FIN*4  *(FILE NAME) INTERLOCKED.* 
          UJN    CFM11       PROCESS FILE INTERLOCKED CONDITION 
  
 CFM10    LDN    /ERRMSG/FBS*4  *(FILE NAME) BUSY.* 
 CFM11    LJM    PFE         PROCESS FILE BUSY EXIT 
  
*         READ OR EXECUTE ACCESS REQUESTED. 
  
 CFM12    LPN    32          DO NOT ALLOW W, M, A OR U USERS
 CFM13    NJN    CFM9        IF ACCESS NOT ALLOWED
*         LDN    0
  
*         INCREMENT USER COUNTS.
  
 CFM14    STM    CFMA+1 
          STM    CFMB+1 
          STM    CFMC+1 
 CFMA     LDM    *,T3        CHECK GLOBAL USER COUNT
*         LDM    0,T3        (READ MODE)
*         LDM    1,T3        (READ/ALLOW UPDATE MODE) 
*         LDM    2,T3        (READ/ALLOW APPEND MODE) 
*         LDM    3,T3        (READ/ALLOW MODIFY MODE) 
          LMC    7777 
          ZJN    CFM10       IF USER COUNT OVERFLOW 
 CFMB     AOM    *,T3        INCREMENT GLOBAL USER COUNT
*         AOM    0,T3        (READ MODE)
*         AOM    1,T3        (READ/ALLOW UPDATE MODE) 
*         AOM    2,T3        (READ/ALLOW APPEND MODE) 
*         AOM    3,T3        (READ/ALLOW MODIFY MODE) 
 CFMC     AOM    *,T7        INCREMENT LOCAL USER COUNT 
*         AOM    0,T7        (READ MODE)
*         AOM    1,T7        (READ/ALLOW UPDATE MODE) 
*         AOM    2,T7        (READ/ALLOW APPEND MODE) 
*         AOM    3,T7        (READ/ALLOW MODIFY MODE) 
          LJM    CFMX        RETURN 
  
*         READ / ALLOW MODIFY ACCESS REQUESTED. 
  
 CFM15    LPN    20          DO NOT ALLOW W USERS 
          NJN    CFM13       IF ACCESS NOT ALLOWED
          LDN    3
          UJN    CFM14       INCREMENT USER COUNTS
  
*         READ / ALLOW APPEND ACCESS REQUESTED. 
  
 CFM16    LPN    30          DO NOT ALLOW W, M OR U USERS 
          NJN    CFM13       IF ACCESS NOT ALLOWED
          LDN    2
          UJN    CFM14       INCREMENT USER COUNTS
  
*         READ / ALLOW UPDATE ACCESS REQUESTED. 
  
 CFM17    LPN    22          DO NOT ALLOW W, M OR A USERS 
          NJN    CFM13       IF ACCESS NOT ALLOWED
          LDN    1
          UJN    CFM14       INCREMENT USER COUNTS
 CFMT     SPACE  4,15 
 CFMT     BSS    0           FILE MODE PROCESSORS 
          LOC    0
          CON    CFM3        WRITE
          CON    CFM12       READ 
          CON    CFM7        APPEND 
          CON    CFM12       EXECUTE
          CON    0           NULL 
          CON    CFM6        MODIFY 
          CON    CFM15       READ / ALLOW MODIFY
          CON    CFM16       READ / ALLOW APPEND
          CON    CFM8        UPDATE 
          CON    CFM17       READ / ALLOW UPDATE
          LOC    *O 
          ERRNZ  *-CFMT-PTLM
 CSL      SPACE  4,20 
**        CSL - CHECK SIZE LIMITS.
* 
*         ENTRY  (T5) = EST ORDINAL OF FILE.
*                (T6) = FIRST TRACK OF FILE.
*                (P2) = FIRST TRACK OF FILE.
*                (MXDS - MXDS+1) = MAXIMUM SIZE FOR DIRECT ACCESS FILE. 
*                (FNMD) = FNT STATUS EQUIVALENCED MODE. 
* 
*         EXIT   TO ERR IF SIZE LIMIT EXCEDED.
*                (LF - LF+1) = FILE LENGTH FOR *PFC* ENTRY. 
*                (T6) = TRACK FOR EOI.
*                (T7) = SECTOR FOR EOI. 
* 
*         USES   T2, T3.
* 
*         CALLS  SEI. 
* 
*         MACROS ERROR. 
  
  
 CSL      SUBR               ENTRY/EXIT 
          LDM    FNMD 
          LPN    2
          ZJN    CSL1        IF NOT WRITE FUNCTION
          AOM    CSLA        SET WRITEABLE MODE 
          LDN    0           CLEAR FILE LENGTH FOR WRITE MODE 
          STD    LF 
          STD    LF+1 
 CSL1     LDM    FCLF,CI     CHECK FILE LENGTH IN *PFC* 
          STD    T2 
          LDM    FCLF+1,CI
          STD    T3 
          ADD    T2 
          NJN    CSL2        IF FILE LENGTH DEFINED IN *PFC*
          RJM    SEI         SKIP TO END OF INFORMATION 
 CSL2     LDN    0           TEST ACCESS MODE 
*         LDN    1           (SET IF WRITEABLE MODE)
 CSLA     EQU    *-1
          NJN    CSL4        IF WRITEABLE MODE
          LDD    T2          SET FILE LENGTH
          STD    LF 
          LDD    T3 
          STD    LF+1 
 CSL3     UJN    CSLX        RETURN 
  
 CSL4     LDM    MXDS        CHECK FILE LENGTH
          ADM    MXDS+1 
          ZJN    CSL3        IF UNLIMITED ACCESS
          LDM    MXDS 
          SBD    T2 
          MJN    CSL5        IF LENGTH LIMIT EXCEEDED 
          NJN    CSL3        IF LIMIT NOT EXCEEDED
          LDM    MXDS+1 
          SBD    T3 
          PJN    CSL3        IF LIMIT NOT EXCEEDED
 CSL5     ERROR  FTL,CH      * FILE TOO LONG.*
 DLT      SPACE  4,10 
**        DLT - DETERMINE LOCAL USER TABLE TO UPDATE. 
* 
*         ENTRY  (BFMS - BFMS+500) - SYSTEM SECTOR. 
*                (T5) = EST ORDINAL.
* 
*         EXIT   (T7) - ADDRESS OF LOCAL USER COUNTS. 
* 
*         USES   T7.
* 
*         CALLS  SMI. 
  
  
 DLT      SUBR               ENTRY/EXIT 
          RJM    SMI         COMPUTE LOCAL USER COUNT BASE ADDRESS
          STD    T0 
          SHN    2
          ADD    T0 
          ADC    UCSS+1 
          STD    T7 
          UJN    DLTX 
          SPACE  4,10 
*         OVERLAYABLE COMMON DECKS. 
  
  
 EJT$     SET    0           DEFINE EJT ACCESS
*CALL     COMPGFP 
*CALL     COMPRSS 
*CALL     COMPSDN 
*CALL     COMPSMI 
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          OVERFLOW  OVLC,BUF1-2  OVERFLOW INTO CATALOG BUFFER 
          OVERLAY  (CATLIST PROCESSING.),OVLA 
          SPACE  4,10 
**        THIS OVERLAY READS PERMANENT FILE CATALOG ENTRIES 
*         OR PERMIT ENTRIES FOR A CENTRAL PROCESSOR PROGRAM.
  
  
 OVL      BSS    0           ENTRY
*         LJM    CAT         PROCESS REQUEST
          SPACE  4,10 
***       PROCESS *CATLIST* REQUEST.
* 
*         CALL. 
* 
*T        18/PFM,6/P,12/CCCT,24/FET 
* 
*T  FET   42/ *FILENAME*,18/ STATUS 
*T,       60/ FIRST 
*T,       60/ IN
*T,       60/ OUT 
*T,       60/ LIMIT 
*T,       60/ 
*T,       60/ RESERVED
*T,       60/ 
*T,       42/ *PF NAME*, 6/ SR, 12/ MODE
*T,       42/ OUAN, 6/ DN, 12/
* 
*         STATUS RETURNED,
*                33          BUFFER FULL. 
*              1033          REQUEST COMPLETED. 
*              BUFFER IS FILLED FROM IN TO LIMIT - 1. 
* 
*         FET+6 RESERVED FOR RECALL INFORMATION TO *PFM*. 
* 
*         PF NAME = PERMANENT FILE NAME.
* 
*         SR = SPECIAL REQUEST. 
*              IF SR = SRDN, LIST ONLY FILES ON SPECIFIED DEVICE. 
* 
*         MODE = 0           SEARCH FOR CATALOG ENTRIES.
*         MODE = 1           SEARCH FOR PERMIT ENTRIES. 
*         MODE = 2           SEARCH FOR CATALOG ENTRIES/*PFID* ACCESS.
* 
*         OUAN = ALTERNATE CATALOG SEARCHED.
* 
          SPACE  4,10 
***       EXIT. 
* 
*         PF CATALOG ENTRIES WRITTEN TO CM. 
* 
*                FOR NORMAL CATALOG SEARCH FULL CATALOG ENTRY 
*                WRITTEN TO CM (SEE COMSPFM)
* 
*                FOR ALTERNATE CATALOG SEARCH ENTIRE CATALOG IS 
*                RETURNED WITH THE FOLLOWING FIELDS CLEARED-
*                     USER INDEX. 
*                     PASSWORD AND PASSWORD EXPIRATION DATE.
*                     ACCESS LEVEL AND ACCESS CATEGORY SET. 
* 
*                FOR *PFID* ACCESS CATALOG SEARCH, THE FULL CATALOG 
*                ENTRY IS WRITTEN TO CM, WITH A WORD PRECEDING
*                EACH ENTRY CONTAINING THE *PFID* (DISK ADDRESS)
*                FOR THAT ENTRY.
* 
*                IN ALL OF THE ABOVE CASES, IF THE FILE ACCESS
*                LEVEL IS ABOVE THE JOB ACCESS LEVEL, THE FOLLOWING 
*                FIELDS ARE ALSO CLEARED -
*                     PASSWORD (REPLACED BY ASTERISKS). 
*                     PASSWORD EXPIRATION DATE. 
*                     ACCESS CATEGORY SET.
*                     USER CONTROL WORD.
* 
*                FOR A PERMIT DATA REQUEST, THE FULL PERMIT ENTRY IS
*                WRITTEN TO CM.  THIS TYPE OF REQUEST IS NOT ALLOWED
*                ON A FILE WITH AN ACCESS LEVEL HIGHER THAN THAT OF THE 
*                CALLING JOB, UNLESS THE JOB IS A SUBSYSTEM.
          SPACE  4,10 
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 CF       EQU    P0          CONTINUATION FLAG
 DN       EQU    35          DEVICE NUMBER FOR CATALOG LIST 
 ST       EQU    45          CATALOG SEARCH TRACK 
 SS       EQU    46          CATALOG SEARCH SECTOR
 SI       EQU    47          CATALOG SEARCH INDEX 
 EQ       EQU    60          MASTER DEVICE EST ORDINAL
 RI       EQU    61 - 62     RANDOM INDEX 
 WC       EQU    63          WORD COUNT 
 IN       EQU    64 - 65     FET POINTER
 LM       EQU    66 - 67     FET LIMIT POINTER
****
          TITLE  COMMAND PROCESSING.
 CAT      SPACE  4,10 
**        CAT - CATALOG MAIN PROGRAM. 
* 
*         ENTRY  (PFUI - PFUI+1) = USER INDEX.
*                (UI - UI+1) = USER INDEX OF CALLING USER 
*                (PI - PI+1) = USER INDEX OF ALTERNATE CATALOG. 
*                (PFFN - PFFN+3) = FILE NAME FOR SELECTED FILE CATALOG. 
*                (PFOU - PFOU+3) = CALL BLOCK USER NAME.
*                (PFFN+4) = MODE OF CALL. 
* 
*         USES   T1.
* 
*         CALLS  SBS. 
* 
*         MACROS ENDMS, ERROR.
  
  
 CAT      LDM    PFFN+4      SET FUNCTION TYPE
          SBN    CTMX 
          MJN    CAT1        IF VALID MODE
          ERROR  ILR,CH,IW   * PFM INCORRECT REQUEST.*
  
 CAT1     ADN    CTMX 
          NJN    CAT2        IF NOT ALTERNATE USER
          LDD    PI          CHECK FOR ALTERNATE USER 
          ADD    PI+1 
          ZJN    CAT2        IF NORMAL CATALOG SEARCH 
          LDN    CTCA        ALTERNATE CATALOG SEARCH 
 CAT2     STD    T1 
          STM    CATA        SET ACCESS MODE
  
*         PROCESS REQUEST.
  
          LDM    CATC,T1
          STM    CATC 
          LJM    NCS         NORMAL CATALOG SEARCH
 CATC     EQU    *-1
          CON    PDS         PERMIT DATA SEARCH 
          CON    PAS         *PFID* ACCESS SEARCH 
          CON    ACS         ALTERNATE CATALOG SEARCH 
  
**        CATX - TERMINATE PROGRAM. 
  
 CATX     ENDMS 
          LDC    1031        SET BUFFER STATUS TO EOI 
          RJM    SBS
          UJN    DPP         DROP PP
  
 CATA     CON    0           FUNCTION 
 CATB     CON    0           MASTER DEVICE NUMBER 
 DPP      SPACE  4,10 
**        DPP - DROP PP.
  
  
 DPP      BSS    0           ENTRY
          LDK    STDP        SET *DROP PP* STATUS BIT 
          RAM    STAU 
          EXECUTE  3PU       DROP PP
 PAS      SPACE  4,15 
**        PAS - *PFID* ACCESS SEARCH. 
  
  
 PAS      BSS    0           ENTRY
          LDC    LDNI+NWCE+1 SET FOR SIZE OF OUTPUT 
          STM    SHBC 
*         UJN    NCS         (PERFORM NORMAL CATALOG SEARCH)
 NCS      SPACE  4,10 
**        NCS - NORMAL CATALOG SEARCH.
  
  
 NCS      RJM    ISP         INITIALIZE FOR CATALOG SEARCH
 NCS1     RJM    RBS         READ BUFFER FOR CATALOG SEARCH 
          RJM    SHB         SEARCH CATALOG BUFFER
          ZJN    NCS1        LOOP FOR NEXT SECTOR OF CATALOGS 
          UJN    CATX        EXIT 
 ACS      SPACE  4,10 
**        ACS - ALTERNATE CATALOG SEARCH. 
  
  
 ACS      RJM    CSU         CHECK FOR SPECIAL USER ACCESS
          LDD    UI          SWAP USER INDEXES
          STD    T1 
          LDD    PI 
          STD    UI 
          LDD    T1 
          STD    PI 
          LDD    UI+1 
          STD    T1 
          LDD    PI+1 
          STD    UI+1 
          LDD    T1 
          STD    PI+1 
          RJM    ISP         INITIALIZE FOR CATALOG SEARCH
 ACS1     RJM    RBS         READ BUFFER FOR SEARCH 
          RJM    SHB         SEARCH CATALOG BUFFER
          ZJN    ACS1        LOOP FOR NEXT SECTOR 
          LJM    CATX        EXIT 
 PDS      SPACE  4,10 
**        PDS - PERMIT DATA SEARCH. 
  
  
 PDS      LDM    PFFN        ENTRY
          NJN    PDS1        IF PERMANENT FILE NAME SPECIFIED 
          ERROR  ILR,CH,IW   * PFM INCORRECT REQUEST.*
  
 PDS1     RJM    ISP         INITIALIZE FOR CATALOG SEARCH
          LDD    CF          CHECK CONTINUATION FLAG
          ZJN    PDS2        IF INITIAL CALL
          LJM    PDS5        CONTINUE READ
  
 PDS2     RJM    RBS         READ BUFFER FOR SEARCH 
          RJM    SHB         SEARCH CATALOG BUFFER
          ZJN    PDS2        IF FILE NOT FOUND
  
*         A PERMIT DATA CATLIST IS NOT ALLOWED ON A FILE WITH AN
*         ACCESS LEVEL ABOVE THAT OF THE JOB UNLESS THE CALLER IS 
*         A SUBSYSTEM.
  
          LDM    SSOM 
          ZJN    PDS2.1      IF UNSECURED SYSTEM
          LDM    FCAL,P2     GET FILE ACCESS LEVEL
          LPN    7
          STD    T1 
          LDM    PFAL        GET JOB ACCESS LEVEL 
          SBD    T1 
          PJN    PDS2.1      IF FILE ACCESS LEVEL NOT ABOVE JOB LEVEL 
          LDM    SSID 
          SBK    LSSI+1 
          PJN    PDS2.1      IF SUBSYSTEM 
          ERROR  IUA,,IW     * USER ACCESS NOT VALID.*
  
 PDS2.1   LDM    FCRI,P2     SET PERMIT RANDOM INDEX
          STD    RI 
          LDM    FCRI+1,P2
          STD    RI+1 
          ADD    RI 
          NJN    PDS4        IF PERMITS AVAILABLE 
  
*         NO PERMITS AVALABLE - SET MESSAGE.
  
 PDS3     LDM    PFOU 
          ZJP    CATX        IF NOT SPECIFIC USER REQUEST 
          LDD    MA          SET OPTIONAL USER IN FILE NAME 
          CWM    PFOU,ON
          SBN    1
          CRD    FN 
          ERROR  FNF,,IW     *(USER NAME) NOT FOUND.* 
  
 PDS4     LDN    NWPH        SET SECTOR WORD INDEX
          STD    SI 
          LDN    0
          RJM    CSA         COMPUTE SECTOR ADDRESS 
          MJN    PDS3        IF ERROR ON POSITION TO PERMIT SECTOR
  
 PDS5     LDC    BUFB        READ SECTOR
          RJM    RDS
          MJN    PDS3        IF ERROR TREAT AS EOI
          LDM    BUFB 
          ZJN    PDS3        IF EOF/EOI 
          LDM    BUFB+1 
          SBN    NWPH+NWPE
          MJN    PDS6.1      IF INCORRECT SECTOR LENGTH 
          LPN    NWPE-1 
          ERRNZ  NWPH-NWPE   HEADER SIZE MUST EQUAL ENTRY SIZE
          NJN    PDS6.1      IF NOT INTEGRAL NUMBER OF PERMIT ENTRIES 
          LDC    BUFB        CHECK USER INDEX 
          STD    T1 
          LDD    UI 
          LMM    FPUI,T1
          NJN    PDS6        IF INCORRECT UI
          LDD    UI+1 
          LMM    FPUI+1,T1
          ZJN    PDS7        IF CORRECT UI
 PDS6     LDD    CF 
          ZJN    PDS6.0      IF NOT CONTINUATION CALL 
 PDSA     LDC    0
*         LDC    (NONZERO)   (NOT FIRST SECTOR) 
          ZJN    PDS6.2      IF FIRST SECTOR
 PDS6.0   ERROR  RIN,,IW,T5  *EQXXX,DNYY,RANDOM INDEX ERROR.* 
  
 PDS6.1   ERROR  BCS,,IW,T5,,EI  *EQXXX,DNYY,BAD CATALOG/PERMIT SECTOR* 
  
 PDS6.2   ERROR  ECD,,IW     * ERROR IN CATLIST CONTINUATION DATA.* 
  
 PDS7     LDM    PFOU 
          NJN    PDS8        IF SPECIFIC USER REQUEST 
          LJM    PDS12       CONTINUE SEARCH OF PERMITS 
  
*         PROCESS SPECIFIC USER PERMIT REQUEST. 
  
 PDS8     LDD    MA          SET USER NAME FOR SEARCH 
          CWM    PFOU,ON
          SBN    1
          CRD    CM 
          RJM    SPB         SEARCH PERMIT BUFFER 
          ZJN    PDS10       IF ENTRY NOT FOUND 
          LDN    NWPE        WRITE ENTRY TO CM
          STD    T1 
          LDM    FPMD,T2
          SHN    21-5 
          MJN    PDS9        IF EXPIRATION DATE PRESENT 
          LDM    FPXD,T2     CLEAR EXPIRATION DATE FIELD
          SCN    77 
          STM    FPXD,T2
          LDN    0
          STM    FPXD+1,T2
 PDS9     LDD    T2          WRITE ENTRY TO CM
          RJM    WDB
          LJM    CATX        EXIT 
  
 PDS10    LDM    BUFB+FPRI   SET ADDRESS OF NEXT BUFFER 
          STD    RI 
          LDM    BUFB+FPRI+1
          STD    RI+1 
          ADD    RI 
          ZJN    PDS11       IF NO MORE PERMITS 
          AOM    PDSA+1      INDICATE NOT FIRST SECTOR
          LJM    PDS4        LOOP TO READ NEXT SECTOR 
  
 PDS11    LJM    PDS3        EXIT 
  
 PDS12    LDN    NWPE        SET WORD COUNT 
          STD    T1 
 PDS13    LDD    SI 
          SHN    2
          ADD    SI 
          ADC    BUFB+2 
          STD    T2          SAVE BASE ADDRESS
          LDM    FPMD,T2
          SHN    21-5 
          MJN    PDS14       IF EXPIRATION DATE PRESENT 
          LDM    FPXD,T2     CLEAR EXPIRATION DATE FIELD
          SCN    77 
          STM    FPXD,T2
          LDN    0
          STM    FPXD+1,T2
 PDS14    LDD    T2          WRITE ENTRY TO CM
          RJM    WDB
          LDN    NWPE        ADVANCE WORD INDEX 
          RAD    SI 
          LMM    BUFB+1 
          NJN    PDS13       IF MORE ENTRIES
          LJM    PDS10       LOOP FOR NEXT SECTOR 
          TITLE  SUBROUTINES. 
 SBS      SPACE  4,15 
**        SBS - SET STATUS OF BUFFER. 
* 
*         ENTRY  (A) = STATUS TO BE SET.
*                (IN - IN+1) = CURRENT ADDRESS IN FET.
* 
*         EXIT   FET STATUS SET.
*                (IN) UPDATED IN FET. 
* 
*         USES   T1, CM - CM+4. 
* 
*         CALLS  SFA. 
  
  
 SBS      SUBR               ENTRY/EXIT 
          STD    T1          SAVE STATUS TO BE SET
          RJM    SFA         SET FET ADDRESS
          CRD    CM 
          LDD    CM+4        SET STATUS 
          LPN    2
          LMD    T1 
          STD    CM+4 
          LDD    CM+3        CLEAR UPPER BITS OF STATUS FIELD 
          SCN    77 
          STD    CM+3 
          RJM    SFA
          CWD    CM          WRITE FET STATUS 
          LDN    ZERL        UPDATE FET IN POINTER
          CRD    CM 
          LDD    IN 
          STD    CM+3 
          LDD    IN+1 
          STD    CM+4 
          RJM    SFA
          ADN    2
          CWD    CM 
          UJN    SBSX        RETURN 
 RBS      SPACE  4,15 
**        RBS - READ BUFFER FOR SEARCH. 
* 
*         ENTRY  (T6) = TRACK.
*                (T7) = SECTOR. 
*                DEVICE POSITIONED AND CHANNEL RESERVED.
*                AT RBS1 IF SEARCH TERMINATION DESIRED. 
* 
*         EXIT   (A) = WORD COUNT OF SECTOR READ. 
*                (T6) = NEXT TRACK. 
*                (T7) = NEXT SECTOR.
*                (WBDB - WDBC) SET TO CURRENT POSITION
* 
*         CALLS  DPP, RNS, SBS. 
* 
*         MACROS ENDMS, ERROR.
  
  
 RBS      SUBR               ENTRY/EXIT 
          LDC    **          COUNT OF DA FILES FOUND IN BUFFER
 RBSA     EQU    *-1
          ZJN    RBS1        IF NO DA FILES FOUND IN LAST PRU 
          LDN    0           CLEAR PRU COUNT
          STM    RBSA 
  
 RBS1     LDD    T6          SET CURRENT POSITION FOR RECALL
          STM    WDBB 
          STM    ERRC 
          LDD    T7 
          STM    WDBC 
          STM    ERRD 
          LDC    BUFA        SET BUFFER FOR READ
          RJM    RNS         READ SECTOR
          ZJN    RBS2        EOF/EOI SECTOR 
          LPN    NWCE-1 
          NJN    RBS4        IF NOT INTEGRAL NUMBER OF CATALOG ENTRIES
          LDD    T1 
          UJN    RBSX        RETURN 
  
 RBS2     LDD    FN 
          ZJN    RBS3        IF NOT FILE NAME SEARCH
          ERROR  FNF,,IW     *(FILE NAME) NOT FOUND.* 
  
 RBS3     LDC    1031        SET EOI BUFFER STATUS
          RJM    SBS
          ENDMS 
          LJM    DPP         TERMINATE PROGRAM
  
 RBS4     ERROR  BCS,,IW,T5,,EI  *EQXXX,DNYY,BAD CATALOG/PERMIT SECTOR* 
 MSR      SPACE  4,10 
**        MSR - MASS STORAGE READ ERROR PROCESSOR.
  
  
 MSR      SUBR               ENTRY/EXIT 
          RJM    PES         PROCESS ERROR STATUS 
          ERROR  MSE,CH,IW,T5  *EQXXX,DNYY, MASS STORAGE ERROR.*
 SHB      SPACE  4,15 
**        SHB - SEARCH CATALOG BUFFER.
* 
*         ENTRY  (A) = NUMBER OF WORDS IN BUFFER. 
*                (SI) = SEARCH INDEX. 
*                (FN - FN+3) = SELECTED FILE NAME FOR SEARCH
*                (UI - UI+1) = USER INDEX OF CATALOG TO SEARCH. 
* 
*         EXIT   (A) " 0 IF SPECIFIC ENTRY FOUND
*                (P2) = FWA OF CATALOG ENTRY
* 
*         USES   T1, P1, P2, RI - RI+1. 
* 
*         CALLS  WDB, CIP.
  
  
 SHB      SUBR               ENTRY/EXIT 
          STD    P1          SAVE WORD COUNT
          LDM    CATA        SET CONTROL FOR SEARCH MODE
          STD    T1 
          LDM    SHBF,T1
          STM    SHBB 
          LDC    BUFA+2      SET BUFFER DATA BASE 
          STD    P2 
          LDD    SI          SET SEARCH INDEX 
          SHN    2           MULTIPLY BY FIVE 
          ADD    SI 
          RAD    P2          SET DATA ADDRESS TO NEXT CATALOG ENTRY 
 SHB1     LDM    FCUI,P2     CHECK USER INDEX 
          LPN    37 
          SHN    14 
          LMM    FCUI+1,P2
          ZJN    SHB2        IF EMPTY CATALOG ENTRY 
 SHBA     PSN 
*         UJN    SHB4        (SET IF PRIVATE DEVICE)
          LMD    UI+1 
          SHN    6
          LMD    UI 
          ZJN    SHB4        USER INDEX MATCH 
  
*         INCREMENT FOR NEXT ENTRY. 
  
 SHB2     LDC    NWCE*5      ADVANCE ENTRY INDEX
          RAD    P2 
          LDN    NWCE        INCREMENT WORD COUNT 
          RAD    SI          ADVANCE SEARCH INDEX 
          ADN    NWCE-1      CHECK FOR ANOTHER CATALOG ENTRY
          SBD    P1 
          MJN    SHB1        IF NOT END OF BUFFER 
          LDN    0
          STD    SI          CLEAR SEARCH INDEX 
 SHB3     LJM    SHBX        RETURN 
  
 SHB4     LDD    FN          CHECK AGAINST SELECTED FILE NAME 
          ZJN    SHB6        IF NO SELECTED FILE REQUESTED
          LMI    P2 
          NJN    SHB2        NO MATCH 
          LDM    1,P2 
          LMD    FN+1 
          NJN    SHB2        NO MATCH 
          LDM    2,P2 
          LMD    FN+2 
          NJN    SHB2        NO MATCH 
          LDM    3,P2 
          LMD    FN+3 
          SCN    77 
 SHB5     NJN    SHB2        IF NOT MATCH 
 SHB6     BSS    0
 SHBE     UJN    SHB7 
*         PSN                IF CATLIST OF DEVICE NUMBER SPECIFIED. 
  
          LDM    FCDN,P2     CHECK DEVICE NUMBER
          LPN    77 
          SBD    DN 
          NJN    SHB5        IF NO MATCH
 SHB7     LDN    1           SET FOR *CTPM* EXIT CASE 
          UJN    *           PERFORM SEARCH DEPENDING ON MODE 
 SHBB     EQU    *-1
*         UJN    SHB9        (IF NORMAL CATALOG SEARCH, *CTNC*) 
*         UJN    SHB3        (IF PERMIT DATA SEARCH, *CTPM*)
*         UJN    SHB9        (IF *PFID* ACCESS SEARCH, *CTID*)
*         UJN    SHB8        (IF ALTERNATE CATALOG SEARCH, *CTCA*)
  
*         VALIDATE ACCESS AND PREPARE THE *PFC* ENTRY FOR OUTPUT. 
  
 SHB8     RJM    CCP         CHECK CATALOG PERMISSION 
          ZJP    SHB11       IF NOT PERMITTED 
 SHB9     LDM    SSOM 
          ZJN    SHB9.1      IF UNSECURED SYSTEM
          LDM    SSJS 
          NJN    SHB9.1      IF *SSJ=* CALLER 
          LDM    FCAL,P2     GET FILE ACCESS LEVEL
          LPN    7
          STD    T1 
          LDM    PFAL        GET JOB ACCESS LEVEL 
          SBD    T1 
          MJN    SHB9.2      IF FILE ACCESS LEVEL ABOVE JOB 
 SHB9.1   LJM    SHB9.4      WRITE CATALOG TO CM
  
*         IF THE FILE ACCESS LEVEL IS HIGHER THAN THE JOB ACCESS LEVEL, 
*         CLEAR THE FOLLOWING PFC FIELDS (UNLESS CALLER IS *SSJ=*). 
*                1. PASSWORD (REPLACE WITH ASTERISKS).
*                2. PASSWORD EXPIRATION DATE. 
*                3. ACCESS CATEGORY SET.
*                4. USER CONTROL WORD.
  
 SHB9.2   LDK    FCCW        SET ADDRESS OF USER CONTROL WORD 
          ADD    P2 
          STM    SHBG 
          LDM    FCPW,P2
          ZJN    SHB9.3      IF NO PASSWORD DEFINED 
          LDC    2R**        REPLACE PASSWORD WITH ASTERISKS
          STM    FCPW,P2
          STM    FCPW+1,P2
          STM    FCPW+2,P2
          SCN    77          CLEAR PASSWORD EXPIRATION DATE 
          STM    FCPW+3,P2
*         STM    FCXD,P2
          LDN    0
          STM    FCXD+1,P2
 SHB9.3   STM    FCFC+1,P2   CLEAR ACCESS CATEGORY SET
          STM    FCFC+2,P2
          LDM    FCFC,P2
          LPC    7400 
          STM    FCFC,P2
          LDN    ZERL        CLEAR USER CONTROL WORD
          CRM    *,ON 
 SHBG     EQU    *-1         (ADDRESS OF USER CONTROL WORD) 
  
*         WRITE CATALOG TO CM.
  
 SHB9.4   LDM    FCBS,P2
          SHN    6
          PJN    SHB10       IF NOT DIRECT ACCESS FILE
          RJM    DFS         DETERMINE FILE SIZE
 SHB10    LDN    NWCE        WRITE CATALOG TO CM
 SHBC     EQU    *-1
*         LDN    NWCE+1      (IF *PFID* ACCESS SEARCH, *CTID*)
          STD    T1 
          LDD    P2 
          RJM    WDB
          LDD    FN 
          ZJN    SHB11       IF NOT SELECTED FILE SEARCH
          LJM    SHBX        RETURN FILE FOUND
  
 SHB11    STM    RBSA        CLEAR DA FILE COUNT
 SHB13    LJM    SHB2        LOOP FOR NEXT CATALOG ENTRY
  
  
 SHBF     BSS    0           BRANCH TABLE 
          LOC    SHBB 
          UJN    SHB9        *CTNC* MODE OF SEARCH
          LOC    SHBB 
          UJN    SHB3        *CTPM* MODE OF SEARCH
          LOC    SHBB 
          UJN    SHB9        *CTID* MODE OF SEARCH
          LOC    SHBB 
          UJN    SHB8        *CTCA* MODE OF SEARCH
          LOC    *O 
 WDB      SPACE  4,20 
**        WDB - WRITE BUFFER TO CENTRAL.
* 
*         ENTRY  (A) = CATALOG ENTRY ADDRESS. 
*                (T1) = WORD COUNT OF ENTRY TO WRITE
*                (IN - IN+1) = CURRENT POSITION IN FET. 
*                (LM - LM+1) = FET LIMIT. 
*                (SI) = CURRENT SECTOR WORD INDEX.
*                (T6 - T7) CURRENT PERMIT BUFFER ADDRESS IF PERMIT LIST.
*                (WDBB - WDBC) SET TO CURRENT CATALOG SEARCH POS. 
* 
*         EXIT   CATALOG ENTRY WRITTEN TO BUFFER. 
*                (IN - IN+1) ADVANCED 
*                TO DPP IF BUFFER FULL (EOF STATUS SET IN FET)
* 
*         USES   T2, CM - CM+4. 
* 
*         CALLS  PCA, SBS, SFA, SRA.
* 
*         MACROS ENDMS, ERROR.
  
  
 WDB      SUBR               ENTRY/EXIT 
          STD    T2          SET ADDRESS FOR WRITE
          STM    WDBA 
          LDD    IN          CHECK FOR ROOM IN BUFFER FOR NEXT ENTRY
          SHN    14 
          ADD    IN+1 
          ADD    T1 
          STD    CM+4 
          SHN    -14
          STD    CM+3 
          SBD    LM 
          SHN    14 
          ADD    CM+4 
          SBD    LM+1 
          PJN    WDB1        IF BUFFER FULL 
          RJM    PCA         PROCESS CATALOG ADDRESS ACCESS MODE
          LDD    IN          WRITE ENTRY TO BUFFER
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IN+1 
          CWM    *,T1 
 WDBA     EQU    *-1
          LDD    CM+3        ADVANCE IN POINTER 
          STD    IN 
          LDD    CM+4 
          STD    IN+1 
          LDN    IPCE        PF INCREMENT FOR CATALOG ENTRY RETURNED
          RAM    AIPF+1 
          LJM    WDBX        EXIT 
  
*         BUFFER FULL.
  
 WDB1     ENDMS 
          LDM    CATA 
          LMN    CTPM 
          ZJN    WDB2        IF PERMIT FILE POSITION TO BE SAVED
          LDC    *           SET CURRENT POSITION 
 WDBB     EQU    *-1
          STD    T6 
          LDC    *
 WDBC     EQU    *-1
          STD    T7 
          LDM    DVLW+1      SET ALLOCATOR TRACK
          UJN    WDB3 
 WDB2     LDM    DVLW+2      SET PERMIT FILE
 WDB3     RJM    SRA         SET RANDOM ADDRESS 
          ZJN    WDB4        IF NO ERROR
          ERROR  RIN,CH,IW,EQ  *EQXXX,DNYY, RANDOM INDEX ERROR.*
  
 WDB4     LDN    ZERL        CLEAR ASSEMBLY AREA
          CRD    CM 
          LDD    RI+1        REPOSITION RANDOM ADDRESS
          SHN    6
          STD    CM+2 
          LPC    770000 
          ADD    RI 
          SHN    6
          STD    CM+1 
          LPC    770000 
          ADD    SI 
          SHN    6
          STD    CM 
          RJM    SFA         SET FET ADDRESS
          ADN    CFCN 
          CWD    CM          WRITE ADDRESS TO FET 
          LDN    31          SET END OF FILE STATUS 
          RJM    SBS         SET STATUS OF BUFFER 
          LJM    DPP         TERMINATE PROGRAM
  
 CCP      SPACE  4,20 
**        CCP - CHECK CATALOG PERMISSION. 
* 
*         CATALOG ENTRY RETURNED IF ALTERNATE CATLIST PERMISSION HAS
*         BEEN GRANTED AND USER IS VALID TO ACCESS FILE.
* 
*         ENTRY  (P2) = ADDRESS OF CATALOG ENTRY. 
* 
*         EXIT   (A) = 0 IF USER NOT PERMITTED TO FILE. 
*                CATALOG ENTRY ADJUSTED IF USER PERMITTED.
* 
*         USES   T1, T2, T6, T7, P3, ST, SS.
* 
*         CALLS  CSA, MSR, PDV, RDS, SPB. 
* 
*         MACROS MONITOR, SETMS.
  
  
 CCP10    LDN    0           DENY ACCESS TO USER
 CCP11    ZJP    CCPX        IF USER NOT PERMITTED
 CCP12    LDM    FCAM,P2     CHECK PERMISSION MODE
          LPN    77 
          LMN    PTNU 
          ZJN    CCP11       IF *NULL* PERMISSION 
  
*         CHECK FOR EXPIRED PERMIT. 
  
          LDD    P3 
          ZJN    CCP13       IF NO PERMIT ENTRY FOUND 
          LDM    FPMD,T2     CHECK FOR EXPIRED PERMIT 
          SHN    21-5 
          PJN    CCP13       IF NO EXPIRATION DATE PRESENT
          LDM    FPXD,T2
          LPN    77 
          STD    CM+3 
          SHN    14 
          LMM    FPXD+1,T2
          ZJN    CCP13       IF NON-EXPIRING PERMIT 
          STD    CM+4 
          LDN    VEDS        VALIDATE EXPIRATION DATE 
          STD    CM+1 
          MONITOR  VSAM 
          LDD    CM+1 
          NJN    CCP10       IF EXPIRED 
  
*         VALIDATE ACCESS LEVEL/CATEGORY SET OF USER. 
  
 CCP13    LDN    ZERL 
          CRD    CM 
          LDM    FCAL,P2     SET ACCESS LEVEL 
          LPN    7
          STD    CM+1 
          LDM    FCFC,P2     SET ACCESS CATEGORY
          LPC    377
          STD    CM+2 
          LDM    FCFC+1,P2
          STD    CM+3 
          LDM    FCFC+2,P2
          STD    CM+4 
          LDD    MA 
          CWD    CM 
          LDN    ZERL 
          CRD    CM 
          LDN    3           CHECK ACCESS LEVEL/ACCESS CATEGORY SET 
          STD    CM+4 
          LDN    VAJS        CHECK AGAINST USER-S VALIDATION
          STD    CM+1 
          MONITOR  VSAM 
          LDD    CM+1 
          NJP    CCP10       IF NOT VALID ACCESS
  
*         CLEAR FIELDS IN CATALOG ENTRY.
  
          LDN    FCPW        SET FWA OF PASSWORD
          ADD    P2 
          STM    CCPC 
          ADN    FCAL-1-FCPW SET FWA OF ACCESS LEVEL AND CATEGORY SET 
          STM    CCPD 
          ADN    FCCN-FCAL   SET FWA OF CHARGE NUMBER 
          STM    CCDF 
          ADK    FCP1-FCCN   SET FWA OF PROJECT NUMBER
          STM    CCDG 
          ADK    FCP2-FCP1   SET FWA OF WORD 2 OF PROJECT NUMBER
          STM    CCDH 
          LDN    ZERL        CLEAR PASSWORD AND EXPIRATION DATE 
          CRM    *,ON 
 CCPC     EQU    *-1         (FWA OF PASSWORD)
          LDN    ZERL        CLEAR ACCESS LEVEL AND CATEGORIES
          CRM    *,ON 
 CCPD     EQU    *-1
          LDN    0
          STM    FCUI+1,P2   CLEAR USER INDEX 
          LDM    FCUI,P2
          SCN    77 
          STM    FCUI,P2
          LDM    SSJS 
          NJN    CCP14       IF CALLER IS *SSJ=* PROGRAM
          LDN    ZERL        CLEAR CHARGE/PROJECT FIELDS
          CRM    *,ON 
 CCDF     EQU    *-1
          LDN    ZERL 
          CRM    *,ON 
 CCDG     EQU    *-1
          LDN    ZERL 
          CRM    *,ON 
 CCDH     EQU    *-1
 CCP14    LDN    1           RETURN PERMISSION FLAG 
  
 CCP      SUBR               ENTRY/EXIT 
          LDM    FCAP,P2     CHECK ALTERNATE CATLIST PERMISSION 
          SHN    0-12 
          NJN    CCP1        IF ALTERNATE CATLIST PERMISSION PRESENT
          LDN    ACEX        USE DEFAULT PERMISSION FOR EXISTING FILES
 CCP1     LMN    ACNO 
          ZJN    CCPX        IF ALTERNATE CATLIST NOT PERMITTED 
          LDN    0           CLEAR PERMIT SEARCH STATUS 
          STD    P3 
  
*         SEARCH FOR PERMIT ENTRY.
  
          LDM    FCRI,P2     SET PERMIT INDEX 
          STD    RI 
          LDM    FCRI+1,P2
          STD    RI+1 
          ADD    RI 
          NJN    CCP4        IF PERMIT INDEX PRESENT
          LDM    FCCT,P2     CHECK FILE CATEGORY
          SHN    -6 
          LMN    FCPR 
          ZJN    CCPX        IF PRIVATE FILE
          LJM    CCP12       CHECK PERMISSION MODE IN PFC 
  
 CCP4     LDN    IPPA        PF INCREMENT FOR PERMIT FILE ACCESS
          RAM    AIPF+1 
          LDD    T6          SAVE POSITION OF CATALOGS
          STD    ST 
          LDD    T7 
          STD    SS 
          LDD    P2 
 CCP5     RJM    CSA         COMPUTE SECTOR ADDRESS 
          SETMS  IO 
          RJM    PDV         PROCESS DEVICE STATUS
          LDC    BUFB        READ PERMIT BUFFER 
          RJM    RDS
          PJN    CCP6        IF NO ERROR
          RJM    MSR         PROCESS READ ERROR 
  
 CCP6     LDM    BUFB        CHECK CONTROL BYTES
          ZJN    CCP8        IF TERMINATING SEARCH
          LDM    BUFB+1 
          SBN    NWPH+NWPE
          MJN    CCP6.0      IF INCORRECT SECTOR LENGTH 
          LPN    NWPE-1 
          ERRNZ  NWPH-NWPE   HEADER SIZE MUST EQUAL ENTRY SIZE
          ZJN    CCP6.1      IF INTEGRAL NUMBER OF PERMIT ENTRIES 
 CCP6.0   ERROR  BCS,,IW,T5,,EI  *EQXXX,DNYY,BAD CATALOG/PERMIT SECTOR* 
  
 CCP6.1   LDD    CP          SET USER NAME FOR SEARCH 
          ADN    UIDW 
          CRD    CM 
          RJM    SPB         SEARCH PERMIT BUFFER 
          NJN    CCP8        IF PERMIT FOUND
 CCP7     LDM    BUFB+FPRI   CHECK FOR PERMIT LINK
          STD    RI 
          LDM    BUFB+FPRI+1
          STD    RI+1 
          ADD    RI 
          NJP    CCP5        IF MORE PERMITS TO CHECK 
 CCP8     STD    P3          SAVE SEARCH STATUS 
          ZJN    CCP9        IF TERMINATING PERMIT SEARCH 
          LDM    FPMD,T2     CHECK PERMIT TYPE
          SHN    21-4 
          MJN    CCP7        IF ACCOUNTING PERMIT 
          SHN    4-4-21+4    SET PERMIT MODE
          LPN    17 
          STD    T1 
          LDM    FCAM,P2
          SCN    77 
          ADD    T1 
          STM    FCAM,P2
 CCP9     LDD    ST          RESET SEARCH ADDRESS 
          STD    T6 
          LDD    SS 
          STD    T7 
          SETMS  READSTR
          RJM    PDV         PROCESS DEVICE STATUS
          LDD    P3 
          NJN    CCP9.1      IF PERMIT ENTRY FOUND
          LDM    FCCT,P2     CHECK FILE CATEGORY
          SHN    -6 
          LMN    FCPR 
          ZJP    CCPX        IF PRIVATE FILE
 CCP9.1   LJM    CCP12       CHECK PERMISSION MODE IN PERMIT OR PFC 
 DFS      SPACE  4,15 
**        DFS - DETERMINE FILE SIZE.
* 
*         ENTRY  (P2) = ADDRESS OF CATALOG ENTRY. 
*                (EQ) = MASTER DEVICE EST ORDINAL.
* 
*         EXIT   LENGTH OF FILE SET IN CATALOG ENTRY. 
* 
*         USES   P3, SS, ST, CM - CM+4, T1 - T7.
* 
*         CALLS  CTA, PDV, SDN, SEI.
* 
*         MACROS ENDMS, SETMS.
  
  
 DFS2     ADD    T2 
          ZJN    DFS3        IF ZERO LENGTH 
 DFS2.1   SOM    FCLF+1,P2   DISCOUNT EOI 
          PJN    DFS3        IF NO OVERFLOW 
          AOM    FCLF+1,P2
          SOM    FCLF,P2
 DFS3     LDD    ST          RESTORE CATALOG TRACK/SECTOR/EQ
          STD    T6 
          LDD    SS 
          STD    T7 
          LDD    T5 
          LMD    EQ 
          ZJN    DFSX        IF SAME DEVICE 
          LDD    EQ          RESET MASTER DEVICE DRIVER 
          STD    T5 
          SETMS  READSTR
          RJM    PDV         PROCESS DEVICE STATUS
  
 DFS      SUBR               ENTRY/EXIT 
          LDD    T6          SAVE CATALOG TRACK 
          STD    ST 
          LDD    T7          SAVE CATALOG SECTOR
          STD    SS 
          LDM    FCLF,P2     CHECK LENGTH IN CATALOG
          ADM    FCLF+1,P2
          NJP    DFS2.1      IF FILE LENGTH ALREADY AVAILABLE 
          ENDMS 
          LDM    FCDN,P2     GET DEVICE NUMBER
          LPN    77 
          STD    P3 
          ZJN    DFS1        IF DA FILE ON MASTER DEVICE
          STD    CM 
          LDM    PFPN+4 
          RJM    SDN         SEARCH FOR DEVICE NUMBER 
          PJN    DFS1        IF DEVICE FOUND
          LJM    DFS3        RETURN LENGTH OF ZERO
  
 DFS1     AOM    RBSA        ADVANCE DA FILE COUNT
          SETMS  STATUS 
          LDD    CM+4        SET TRT ADDRESS
          SHN    3
          ADN    TRLL 
          RJM    CTA         CALCULATE FWA OF TRT 
          SBD    TH 
          STM    SEIA+1 
          SHN    -14
          LMC    ADCI 
          STM    SEIA 
          LDM    FCBT,P2     SET FIRST TRACK OF FILE
          STD    T6 
          LDM    DFSA,P3     REQUEST TRT UPDATE IF FIRST FILE ON DEVICE 
          RJM    SEI         GET FILE LENGTH
          AOM    DFSA,P3     PREVENT TRT UPDATE ON SUBSEQUENT FILES 
          LDD    T2 
          STM    FCLF,P2
          LDD    T3 
          STM    FCLF+1,P2
          LJM    DFS2        DISCOUNT EOI 
  
  
 DFSA     BSSZ   100B        TRT UPDATE FLAGS FOR EACH DEVICE IN FAMILY 
 SPB      SPACE  4,10 
**        SPB - SEARCH PERMIT BUFFER. 
* 
*         ENTRY  PERMIT BUFFER LOADED TO *BUFB* 
*                (CM - CM+3) = USER NAME FOR SEARCH.
* 
*         EXIT   (A) = 0 IF PERMIT NOT FOUND. 
*                (T2) = INDEX TO PERMIT ENTRY, IF FOUND.
* 
*         USES   T1, T2.
  
  
 SPB      SUBR               ENTRY/EXIT 
 SPB1     LDN    NWPH        ADVANCE WORD COUNT PAST HEADER 
          STD    T1 
          LDC    BUFB+2      SET DATA ADDRESS 
          ADN    NWPH*5 
          STD    T2 
 SPB2     LDD    CM 
          ZJN    SPBX        IF NO USER NAME
          LMM    FPAN,T2     COMPARE USER NAME
          NJN    SPB3        IF NO MATCH
          LDM    FPAN+1,T2
          LMD    CM+1 
          NJN    SPB3        IF NO MATCH
          LDM    FPAN+2,T2
          LMD    CM+2 
          NJN    SPB3        IF NO MATCH
          LDM    FPAN+3,T2
          LMD    CM+3 
          SCN    77 
          ZJN    SPB5        IF USER FOUND
 SPB3     LDN    NWPE*5      ADVANCE TO NEXT ENTRY
          RAD    T2 
          LDN    NWPE 
          RAD    T1 
          LMM    BUFB+1 
          NJN    SPB2        IF NOT END OF BUFFER 
          UJN    SPB6        EXIT 
  
 SPB5     LCN    1           SET ENTRY FOUND EXIT 
 SPB6     LJM    SPBX        RETURN 
 CSA      SPACE  4,15 
**        CSA - COMPUTE SECTOR ADDRESS. 
* 
*         ENTRY  (RI - RI+1) = RANDOM INDEX OF PERMIT SECTOR. 
*                (DVLW - DVLW+4) = DEVICE LAYOUT WORD.
*                (A) = ADDRESS OF FILE NAME IF NAME NOT 
*                IN FN - FN+3 OTHERWISE (A) = 0.
* 
*         EXIT   (T6) = TRACK OF RANDOM SECTOR
*                (T7) = SECTOR OF RANDOM SECTOR.
* 
*         USES   T6, T7, RI - RI+1. 
* 
*         CALLS  CRA, PDV.
* 
*         MACROS ENDMS, ERROR, SETMS. 
  
  
 CSA2     SETMS  IO 
          RJM    PDV         PROCESS DEVICE STATUS
  
 CSA      SUBR               ENTRY/EXIT 
          STM    CSAA 
          STM    CSAB 
          LDM    DVLW+2      SET FIRST TRACK IN PERMIT CHAIN
          STD    T6 
          ENDMS 
          LDN    0           SET TRT UPDATE REQUESTED 
          RJM    CRA         COVERT RANDOM ADDRESS
          PJN    CSA2        IF NO ERROR
  
*         PROCESS ERROR IN RANDOM INDEX.
  
          LDC    ** 
 CSAA     EQU    *-1
          ZJN    CSA1        IF NO NAME TO COPY 
          LDD    MA          COPY FILE NAME 
          CWM    *,ON 
 CSAB     EQU    *-1
          SBN    1
          CRD    FN 
 CSA1     ERROR  RIN,,IW,EQ  *EQXXX,DNYY, RANDOM INDEX ERROR.*
 PCA      SPACE  4,15 
**        PCA - PROCESS CATALOG ADDRESS ACCESS MODE.
* 
*         ENTRY  (IN - IN+1) = CURRENT POSITION IN FET. 
*                (T1) = OUTPUT ENTRY LENGTH FOR CATALOG AND *PFID*. 
*                (T2) = *PFC* ENTRY POINTER.
*                (CATA) = SEARCH MODE.
*                (CATB) = MASTER DEVICE NUMBER. 
*                (WDBB) = CURRENT CATALOG TRACK.
*                (WDBC) = CURRENT CATALOG SECTOR. 
*                BUFA+2 = BEGINNING OF CATALOG SECTOR BUFFER. 
* 
*         EXIT   (T1) = DECREMENTED BY ONE FOR *PFID*.
*                *PFID* WRITTEN TO CENTRAL USER BUFFER. 
  
  
 PCA      SUBR               ENTRY/EXIT 
          LDM    CATA        CHECK SEARCH MODE
          LMN    CTID 
          NJN    PCAX        IF NOT *PFID* ACCESS 
  
*         SETUP *PFID* FOR OUTPUT.
  
          LDM    WDBC        SET CATALOG SECTOR ADDRESS 
          STM    PCAA+4 
          LDM    WDBB        SET CATALOG TRACK ADDRESS
          STM    PCAA+3 
          LDD    T2          SET *PEO* VALUE
          ADC    -BUFA-2
          SHN    -NWCES      CALCULATE *PEO* VALUE
          LPN    1S"NWCEM"-1
          SHN    6
          LMM    CATB        SET MASTER DEVICE NUMBER 
          STM    PCAA+2 
  
*         WRITE *PFID* TO CENTRAL BUFFER. 
  
          LDD    IN          FORM DESTINATION ADDRESS 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IN+1 
          ADN    NWCE        OFFSET FOR *PFC* ENTRY 
          CWM    PCAA,ON     WRITE *PFID* 
          SOD    T1          ADJUST OUTPUT LENGTH 
          LJM    PCAX        RETURN 
  
 PCAA     CON    0,0,0,0,0   *PFID* BUFFER
          SPACE  4,10 
*         COMMON DECKS. 
  
  
 CRA$     SET    0           FORCE TRT UPDATE ON *CRA* CALLS
*CALL     COMPCRA 
*CALL     COMPSRA 
 SEI$     SET    0           FORCE TRT UPDATE ON *SEI* CALLS
*CALL     COMPSEI 
*CALL     COMPRNS 
*CALL     COMPSDN 
          SPACE  4,10 
*         BUFFERS 
  
  
 BUFA     EQU    *           CATALOG BUFFER 
 BUFB     EQU    BUFA+502    PERMIT BUFFER
          ERRNG  EPFW-BUFB-502  BUFFER OVERFLOW 
          TITLE  OVERLAYABLE SUBROUTINES. 
 CSU      SPACE  4,10 
**        CSU - CHECK FOR SPECIAL USER. 
* 
*         ENTRY  USER NAME WORD (UIDW) SET. 
*                (PFOU - PFOU+3) = USER NAME FROM CALL BLOCK. 
* 
*         EXIT   (UI - UI+1) CLEARED IF SPECIAL USER. 
* 
*         USES   T1, T2, CM - CM+4. 
  
  
 CSU      SUBR               ENTRY/EXIT 
          LDD    CP          GET USER USER NAME 
          ADN    UIDW 
          CRD    CM 
          LDD    CM+3        CLEAR LOWER USER NAME
          SCN    77 
          STD    CM+3 
          LDN    0           INITIALIZE COUNT 
          STD    T1 
 CSU1     AOD    T1          ADVANCE BYTE 
          LMN    5
          ZJN    CSU3        IF END OF USER NAME
          LDM    CM-1,T1     USER NAME BYTE 
          STD    T2 
          LMC    2R** 
          ZJN    CSU1        IF ** SKIP COMPARE OF CHARACTERS 
          SCN    77 
          ZJN    CSU2        IF UPPER CHARACTER * 
          LDD    T2          COMPARE UPPER CHARACTER
          LMM    PFOU-1,T1
          SCN    77 
          NJN    CSUX        IF USER NAME DO NOT MATCH
          LDD    T2          CHECK LOWER CHARACTER
          LMN    1R*
          LPN    77 
          ZJN    CSU1        IF LOWER CHARACTER = * 
 CSU2     LDD    T2          COMPARE LOWER CHARACTER
          LMM    PFOU-1,T1
          LPN    77 
          ZJN    CSU1        IF LOWER CHARACTER COMPARE 
          UJN    CSU4        USER NAMES DO NOT MATCH
  
 CSU3     STD    UI          CLEAR USER INDEX 
          STD    UI+1 
          LDN    CTNC        SET MODE TO NORMAL CATALOG SEARCH
          STM    CATA 
 CSU4     LJM    CSUX        EXIT 
 ISP      SPACE  4,20 
**        ISP - INITIALIZE SEARCH OF PERMANENT FILES. 
* 
*         ENTRY  (SFAA - SFAA+1) = CALL BLOCK ADDRESS.
*                (UI - UI+1) = USER INDEX.
* 
*         EXIT   (T5) = (EQ) = MASTER DEVICE EST ORDINAL. 
*                (T6) = CATALOG TRACK.
*                (T7) = CATALOG SECTOR. 
*                (SI) = SEARCH INDEX. 
*                (CF) = CONTINUATION FLAG.
*                (DVLW - DVLW+4) = DEVICE LAYOUT WORD.
*                (CATB) = MASTER DEVICE NUMBER. 
*                *SETMS IO* PERFORMED.
* 
*         USES   T4 - T7, RI - RI+1, CM - CM+4. 
* 
*         CALLS  CRA, CTA, PDV, SCA, SFA. 
* 
*         MACROS ERROR, SETMS.
  
  
 ISP      SUBR               ENTRY/EXIT 
  
*         INITIALIZE CATALOG SEARCH.
  
          LDN    0           SELECT NO INTERLOCK OF CATALOG TRACK 
          STD    T1 
          LDC    PFPN        SET CATALOG ADDRESS
          RJM    SCA
          PJN    ISP1        IF DEVICE AVAILABLE
          ERROR  PFN,CH,IW   *PERMANENT FILES NOT AVAILABLE.* 
  
 ISP1     SHN    3           READ DEVICE LAYOUT WORD
          ADN    ALGL 
          CRM    DVLW,ON
          ADN    PUGL-ALGL-1 READ USER NAME 
          CRD    CM 
          SBN    PUGL-PFGL   GET DEVICE NUMBER FOR MASTER DEVICE
          CRD    FN 
          LDD    FN+3        PRESERVE DEVICE NUMBER 
          LPN    77 
          STM    CATB 
          LDM    PFSR 
          LPN    77 
          ZJN    ISP3        IF NO SPECIAL REQUESTS 
          SBN    SRDN 
          NJN    ISP3        IF NOT DEVICE NUMBER LIST
          LDD    FN+3        CHECK DEVICE NUMBER
          LMM    CTDN 
          LPN    77 
          ZJN    ISP2        IF MASTER DEVICE 
          LDM    CTDN 
          LPN    77 
          ZJN    ISP3        IF DEVICE NUMBER NOT SPECIFIED 
 ISP2     STD    DN 
          LDN    PSNI        ENABLE DEVICE NUMBER SEARCH
          STM    SHBE 
 ISP3     LDM    PFPN 
          ZJN    ISP4        IF NOT AUXILIARY DEVICE
          LDD    CM 
          ZJN    ISP4        IF NOT PRIVATE DEVICE
          LDC    UJNI+SHB4-SHBA SET TO BYPASS USER INDEX CHECK
          STM    SHBA 
  
 ISP4     LDN    IPCS        PF INCREMENT OF CATALOG SEARCH 
          RAM    AIPF+1 
          LDD    T5          SET MASTER DEVICE EST ORDINAL
          STD    EQ 
          SETMS  READSTR
          RJM    PDV         PROCESS DEVICE STATUS
          LDN    0           SET SECTOR 
          STD    T7 
          STD    SI          CLEAR SEARCH INDEX 
          LDD    CM+4        SET FWA OF TRT 
          SHN    3
          ADN    TRLL 
          RJM    CTA         CALCULATE FWA OF TRT 
          SBD    TH          SET *ADC  TRTS-(4000/2)* 
          STM    CRAA+1      COMMON DECK -COMPCRA-
          STM    SRAA+1      COMMON DECK -COMPSRA-
          SHN    -14
          LMC    ADCI 
          STM    CRAA        COMMON DECK -COMPCRA-
          STM    SRAA        COMMON DECK -COMPSRA-
          LDD    MA          SET FILE NAME IF SPECIFIED 
          CWM    PFFN,ON
          SBN    1
          CRD    FN 
          RJM    SFA         SET FET ADDRESS
          ADN    CFCN        CONTINUATION CATALOG DATA ADDRESS
          CRD    CM 
          LDD    CM+2 
          SCN    77 
          ADD    CM 
          ADD    CM+1 
          STD    CF          SET CONTINUATION FLAG
          NJN    ISP5        IF CONTINUATION
          LJM    ISP10       CHECK FET REQUEST POINTERS 
  
 ISP5     LDD    CM          RESTORE SEARCH INDEX 
          SHN    14 
          STD    SI 
          SCN    77 
          ADD    CM+1        SET UPPER 12 BITS OF RANDOM INDEX
          SHN    14 
          STD    RI 
          LMD    RI 
          ADD    CM+2 
          SHN    -6 
          STD    RI+1 
          LDM    CATA        CHECK REQUEST TYPE 
          LMN    CTPM 
          NJN    ISP6        IF NOT PERMIT REQUEST
          LDN    NWPE-1      SET MASK FOR SEARCH INDEX
          STM    ISPB 
          AOM    ISPC        SET PERMIT SEARCH STATUS 
          AOM    ISPD 
          AOM    ISPE 
 ISP6     LDD    SI          VALIDATE SEARCH INDEX
          LPC    NWCE-1 
*         LPC    NWPE-1      (PERMIT SEARCH)
 ISPB     EQU    *-1
          NJN    ISP7        IF INCORRECT SEARCH INDEX
          LDM    DVLW+1      SET LABEL TRACK
*         LDM    DVLW+2      (SET PERMIT TRACK) 
 ISPC     EQU    *-1
          STD    T6 
          LDN    0           REQUEST TRT UPDATE 
          RJM    CRA         CALCULATE RANDOM ADDRESS 
          MJN    ISP7        IF ERROR IN CONVERSION 
          LDD    T6          CHECK FOR INDEX INTO LABEL/PERMITS TRACK 
          LMM    DVLW+1 
*         LMM    DVLW+2      (PERMIT SEARCH)
 ISPD     EQU    *-1
          NJN    ISP10       IF LEGAL RANDOM INDEX
 ISPE     LDN    0
*         LDN    1           (PERMIT SEARCH)
          NJN    ISP9        IF PERMIT SEARCH 
 ISP7     ERROR  ECD,CH,IW   * ERROR IN CATLIST CONTINUATION DATA.* 
  
 ISP9     LDD    T7 
          SBN    1
          MJN    ISP7        IF INCORRECT INDEX ON PERMIT SEARCH
 ISP10    RJM    SFA         CHECK FET POINTERS 
          ADN    4           READ LIMIT 
          CRD    LM-3 
          SBN    2           READ IN
          CRD    IN-3 
          LDD    IN 
          LPN    77 
          STD    IN 
          LDD    LM          CHECK BUFFER LENGTH
          LPN    77 
          STD    LM 
          SBD    IN 
          MJN    ISP11       IF IN GREATER THAN LIMIT 
          SHN    14 
          ADD    LM+1 
          SBD    IN+1 
          SBN    1           MUST HAVE ROOM FOR 1 ENTRY 
          MJN    ISP11       IF NOT LARGE ENOUGH FOR 1 ENTRY
          LDD    LM          CHECK POINTERS WITHIN FL 
          SHN    14 
          ADD    LM+1 
          SBN    1
          SHN    -6 
          SBD    FL 
          PJN    ISP11       IF LIMIT PAST FL 
          LJM    ISPX        RETURN 
  
 ISP11    ERROR  ILR,CH,IW   * PFM INCORRECT REQUEST.*
  
 ISPA     DATA   C*CATALOG* 
          SPACE  4,10 
*CALL     COMPSCA 
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          OVERFLOW  OVLA,EPFW  OVERFLOW INTO ERROR PROCESSING AREA
          OVERLAY  (DEFINE/SETDA PROCESSING.) 
          SPACE  4,10 
**        THIS OVERLAY PROCESSES THE DIRECT ACCESS FILE COMMANDS
*         *DEFINE* AND *SETDA*.  THE DEVICE OF RESIDENCE HAS
*         ALREADY BEEN DETERMINED/VALIDATED BY OVERLAY *3PB*. 
  
  
 OVL      BSS    0           ENTRY
          LJM    0,P0        PROCESS COMMAND
          TITLE  COMMAND PROCESSING.
 SDA      SPACE  4,10 
***       PROCESS *SETDA* REQUEST.
* 
*         SET THE DISK ADDRESS OF *FILE NAME* INTO THE CATALOG
*         ENTRY OF THE FILE SPECIFIED BY *PFID*.
  
  
 SDA      BSS    0           ENTRY
          LDM    FCBS,CI
          SHN    21-13
          PJN    SDA1        IF NOT DIRECT ACCESS FILE
          LDM    FCBT,CI
          ZJN    SDA2        IF NO CURRENT DISK ADDRESS IN CATALOG
 SDA1     ERROR  ICU         *INCORRECT CATALOG UPDATE.*
  
 SDA2     LDM    PFDN        SET DEVICE NUMBER
          STM    FCDN,CI
          LDD    FS+1        SET FIRST TRACK
          STM    FCBT,CI
          LDD    LF          SET FILE LENGTH
          STM    FCLF,CI
          LDD    LF+1 
          STM    FCLF+1,CI
          LDM    STAT 
          LPK    STTA 
          NJN    SDA3        IF TAPE ALTERNATE STORAGE REQUEST
          LDM    FCAF,CI     CLEAR *AFPDR*, *AFTMP* AND *AFVER* FLAGS 
          SCN    AFPDRM+AFTMPM+AFVERM 
          STM    FCAF,CI
          UJN    SDA4        UPDATE SYSTEM SECTOR 
  
 SDA3     LDM    FCTF,CI     CLEAR *TFVER* FLAG 
          SCN    TFVERM 
          STM    FCTF,CI
  
*         ENTER *DEFINE* PROCESSING TO UPDATE SYSTEM SECTOR.
  
 SDA4     LCN    EP-CI       SET ADDRESS OF CATALOG ENTRY POINTER 
          RAM    DEFA 
          LDC    MMPF*5+2*5-1  CLEAR ONLY PART OF SYSTEM SECTOR 
          STM    DEFB 
          LDC    CASS 
          STM    DEFC 
          LJM    DEF2        PROCESS SYSTEM SECTOR
 DEF      SPACE  4,10 
***       PROCESS *DEFINE* REQUEST. 
* 
*         MAKE THE FILE *FILE NAME* A DIRECT ACCESS PERMANENT FILE
*         WITH NAME *PF NAME*.
  
  
 DEF      BSS    0           ENTRY
          EXECUTE  3PD       LOAD CATALOG UPDATE ROUTINES 
          LDN    PSNI        BYPASS ALLOCATION OF IDLE SPACE
          STM    CCSB 
          STM    CCSB+1 
          STM    CCSC        FORCE CATALOG ENTRY FORMATION
          STM    CCSF        BYPASS WRITING CATALOG ENTRY TO DISK 
          STM    CCSF+1 
          STM    CCSG        BYPASS WRITING CATALOG ENTRY TO DISK 
          STM    CCSG+1 
          RJM    CUC         CHECK USER CONTROLS
          LDM    PFDN        SET DEVICE NUMBER IN CATALOG ENTRY 
          STM    FCEE 
          LDN    0           CLEAR FILE LENGTH
          STD    LF 
          STD    LF+1 
          RJM    CCS         CREATE CATALOG SECTOR
          ENDMS 
  
*         PROCESS SYSTEM SECTOR.
  
 DEF2     LDD    FS 
          STD    T5 
          SETMS  IO 
          RJM    PDV         PROCESS DEVICE STATUS
          LDD    CM+4        PRESET *COMPSEI* 
          SHN    3
          ADN    TRLL 
          RJM    CTA         CALCULATE FWA OF TRT 
          SBD    TH 
          STM    SEIA+1 
          SHN    -14
          LMC    ADCI 
          STM    SEIA 
          LDD    FS+1        SET FIRST TRACK
          STD    T6 
          LDM    LFEF 
          ZJN    DEF3        IF NOT EMPTY FILE
          LJM    DEF7        PROCESS EMPTY FILE 
  
*         CHECK ENHANCED EOI DATA.
  
 DEF3     LDN    SSTL        CHECK FILE VALIDATION ENABLED
          CRD    CM 
          LDD    CM 
          SHN    21-4 
          MJN    DEF4        IF VALIDATION NOT ENABLED
          RJM    SEI         READ EOI SECTOR
          SETMS  IO 
          RJM    PDV         PROCESS DEVICE STATUS
          LDC    BFMS 
          RJM    RDS
          MJN    DEF5        IF READ ERROR
          LDD    FS+1        RESET FIRST TRACK
          STD    T6 
          LMM    BFMS+FTEI   CHECK FIRST TRACK POINTER
          ADM    BFMS        CHECK LINKAGE BYTES
          ADM    BFMS+1 
          ZJN    DEF4        IF EOI SECTOR AND IF BOI POINTER MATCHES 
          ERROR  FSE,,,FS    *EQXXX,DNYY, FILE BOI/EOI/UI MISMATCH.*
  
 DEF4     LDN    0           IGNORE FILE NAME 
          RJM    RSS         READ SYSTEM SECTOR 
          ZJN    DEF7        IF LEGAL SYSTEM SECTOR 
          MJN    DEF5        IF READ ERROR
          ERROR  DAF,,,FS    *EQXXX,DNYY, DIRECT ACCESS FILE ERROR.*
  
 DEF5     RJM    PES         PROCESS ERROR STATUS 
          ERROR  MSE,CH,,FS  *EQXXX,DNYY, MASS STORAGE ERROR.*
  
*         CLEAR SYSTEM SECTOR BUFFER. 
  
 DEF7     ENDMS 
          LDC    77*5-1      CLEAR ENTIRE SYSTEM SECTOR 
*         LDC    MMPF*5+2*5-1  (*SETDA* - CLEAR ONLY PART OF SECTOR)
 DEFB     EQU    *-1
          STD    T1 
 DEF8     LDN    0
          STM    BFMS+2,T1
*         STM    CASS,T1     (*SETDA*)
 DEFC     EQU    *-1
          SOD    T1 
          PJN    DEF8        IF NOT END OF BUFFER 
  
*         ENTER CATALOG ENTRY INTO SYSTEM SECTOR. 
  
 DEFA     LDD    EP          ADDRESS OF CATALOG ENTRY 
*         LDD    CI          (IF *SETDA* REQUEST) 
          STD    T1 
          LDC    CTSS        ADDRESS IN SYSTEM SECTOR 
          STD    T2 
          LDC    NWCE*5 
          STD    T3 
 DEF9     LDI    T1          TRANSFER ENTRY 
          STI    T2 
          AOD    T1 
          AOD    T2 
          SOD    T3          DECREMENT BYTE COUNT 
          NJN    DEF9        IF MORE STATUS IN SYSTEM SECTOR
  
*         INITIALIZE SYSTEM SECTOR FIELDS.
  
          LDN    32          SET CURRENT ACCESS TO WRITE
          STM    CASS 
          RJM    SUC         SET USER COUNTS IN SYSTEM SECTOR 
          ENDMS 
          LDN    PDTL        SET CURRENT DATE AND TIME
          CRM    WDSS,ON
          LDK    MMFL        GET MAINFRAME ID 
          CRD    CM 
          LDD    CM          SET MAINFRAME ID 
          STM    WDSS 
          LDD    CP          GET EJT ORDINAL
          ADN    TFSW 
          CRD    CM 
          SFA    EJT,CM      SET *JSNE* WORD OF EJT 
          ADK    JSNE 
          CRM    WJSS,ON
          LDD    FA          SET FNT ENTRY IN SYSTEM SECTOR 
          STM    DEFD 
          NFA    FA,R 
          ADK    FNTL 
          CRM    FNSS,ON
          LDN    0           CLEAR FST POINTER
          STD    FA 
          LDM    FNSS+4      CHECK FILE TYPE
          SHN    -6 
          LMN    PMFT 
          ZJN    DEF10       IF FILE CREATED BY *ASSIGNPF*
          LDC    PMFT*100    SET PMFT 
          STM    FNSS+4 
          AOM    DEFE        FORCE INCREMENT OF FILE COUNT
  
*         WRITE SYSTEM SECTOR.
  
 DEF10    SETMS  IO,RW,BFMS 
          RJM    PDV         PROCESS DEVICE STATUS
          LDM    LFEF 
          ZJN    DEF11       IF NOT EMPTY FILE
          SETMS  IO,,BFMS 
          RJM    PDV         PROCESS DEVICE STATUS
          LDN    WCSF/10000&WLSF/10000  WRITE CONSECUTIVE SECTORS 
 DEF11    LMC    LDCI+WLSF/10000
          STM    WSSA 
          RJM    WSS         WRITE SYSTEM SECTOR
          MJN    DEF11.1     IF WRITE ERROR 
          LDM    LFEF 
          ZJN    DEF13       IF NOT EMPTY FILE
          RJM    WEI         WRITE EOI SECTOR 
          PJN    DEF12       IF NO MASS STORAGE ERRORS
 DEF11.1  LJM    WSE         PROCESS WRITE ERROR
  
 DEF12    ENDMS 
          LDD    FS+1        SET FILE STATUS REWOUND
          STD    FS+2 
          LDN    FSMS 
          STD    FS+3 
          LDN    4           SET OPERATION COMPLETE - FILE BUSY 
          STD    FS+4 
          LDN    FSMS        SET LAST SECTOR WRITTEN
          RJM    DTK
 DEF13    ENDMS 
          LDN    SPFS        SET PRESERVED STATUS FOR DA FILE 
          STD    CM+3 
          LDD    T5 
          LMC    4000        SET CHECKPOINT 
          STD    CM+1 
          LDD    T6 
          STD    CM+2 
          MONITOR STBM
          LDD    FS+1        SAVE PRESERVED TRACK 
          STM    PTKT 
  
*         WRITE CATALOG ENTRY TO DISK.
  
          LDD    EQ          SET MASTER EST ORDINAL 
          STD    T5 
          LDD    CC 
          LMN    CCDF 
          ZJN    DEF14       IF *DEFINE* REQUEST
          LDD    CB 
          UJN    DEF15       WRITE CATALOG ENTRY TO DISK
  
 DEF14    LDD    EB 
 DEF15    RJM    WBI         WRITE CATALOG ENTRY TO DISK
          ENDMS 
*         LDN    0           CLEAR PRESERVED TRACK
          STM    PTKT 
          RJM    CCI         CLEAR CATALOG INTERLOCK
  
*         UPDATE FNT ENTRY. 
  
          LDC    *           READ FNT 
 DEFD     EQU    *-1
          STD    FA 
          NFA    FA,R 
          ADK    FNTL 
          CRD    FN 
          ADN    FUTL-FNTL
          CRD    CM 
          LDD    FN+4        SET *PMFT* FILE TYPE 
          LPN    77 
          ADC    PMFT*100 
          STD    FN+4 
          LDD    FN+3        CLEAR MODE BITS
          SCN    77 
          STD    FN+3 
          LDM    PFUC        SET *FS* INDEX IN *FUTL* WORD
          SHN    -11
          SHN    6
          ADM    LFAL        SET FILE ACCESS LEVEL
          STD    CM+2 
          NFA    FA,R 
          ADK    FNTL 
          CWD    FN 
          ADN    FSTL-FNTL
          CWD    FS 
          ADN    FUTL-FSTL
          CWD    CM 
  
*         INCREMENT FILE COUNT (IF REQUIRED). 
  
 DEFE     LDN    0
*         LDN    1           (FILE COUNT INCREMENT REQUIRED)
          ZJN    DEF16       IF FILE COUNT ALREADY INCREMENTED
          LDD    FS          INCREMENT FILE COUNT 
          STD    CM+1 
          LDN    IUCS 
          STD    CM+3 
          MONITOR  SMDM 
 DEF16    LDD    CC 
          LMN    CCDF 
          ZJN    DEF17       IF *DEFINE* REQUEST
  
*         RETURN LOCAL FILE (*SETDA*).
  
          LDN    0           RETURN FILE
          STM    LOCF-1 
          EXECUTE  0DF,LOCF 
 DEF17    EXECUTE  3PU       TERMINATE PROGRAM
 LOCF     SPACE  4,10 
 LOCF     EQU    *+5         *0DF* LOAD ADDRESS 
          ERRNG  BFMS-LOCF-ZDFL        CHECK LENGTH OF *0DF*
          TITLE  SUBROUTINES. 
 CUC      SPACE  4,15 
**        CUC - CHECK USER CONTROLS.
* 
*         ENTRY  (MXNF) = NUMBER OF FILES ALLOWED.
*                (ACNF - ACNF+1) NUMBER OF FILES ACCUMULATED. 
*                (MXDS - MXDS+1) MAXIMUM DIRECT ACCESS FILE SIZE. 
* 
*         MACROS ERROR. 
  
  
 CUC      SUBR               ENTRY/EXIT 
          LDM    MXDS        CHECK FILE SIZE LIMIT
          ADM    MXDS+1 
          ZJN    CUC2        IF UNLIMITED ACCESS
          LDM    MXDS        CHECK SIZE LIMITS
          SBD    LF 
          MJN    CUC1        IF LIMIT EXCEEDED
          NJN    CUC2        IF LIMIT NOT EXCEEDED
          LDM    MXDS+1 
          SBD    LF+1 
          PJN    CUC2        IF LIMIT NOT EXCEEDED
 CUC1     ERROR  FTL         * FILE TOO LONG.*
  
 CUC2     LDM    MXNF        CHECK FILE NUMBER LIMIT
          ZJN    CUCX        IF NO LIMIT SET
          LDD    NF 
          SHN    14 
          ADD    NF+1 
          ADN    10          ROUND UP 
          SHN    -3 
          SBM    MXNF 
          MJN    CUCX        IF LIMIT NOT EXCEEDED
          ZJN    CUCX        IF LIMIT NOT EXCEEDED
          ERROR  COF         * TOO MANY PERMANENT FILES.* 
 SUC      SPACE  4,10 
**        SUC - SET USER COUNTS IN SYSTEM SECTOR. 
* 
*         ENTRY  (BFMS - BFMS+500) - SYSTEM SECTOR. 
*                (T5) = EST ORDINAL.
* 
*         EXIT   LOCAL WRITE FLAG SET.
* 
*         USES   T7.
* 
*         CALLS  SMI. 
  
  
 SUC      SUBR               ENTRY/EXIT 
          RJM    SMI         COMPUTE LOCAL USER COUNT BASE ADDRESS
          STD    T0 
          SHN    2
          ADD    T0 
          ADC    UCSS 
          STD    T7 
          AOI    T7 
          UJN    SUCX        RETURN 
 WSE      SPACE  4,20 
**        WSE - WRITE MASS STORAGE ERROR PROCESSOR. 
* 
*         ENTRY  (FS - FS+4) = LOCAL FILE FST.
*                (LFEF) = 0 IF LOCAL FILE WRITTEN PREVIOUSLY. 
*                (PWRF) = *PFM* RESTART FLAGS FOR RECALL. 
*                (RDCT) = DRIVER STATUS.
* 
*         EXIT   (PWRF) = *RFRR* FLAG SET IF REQUEST TO BE RETRIED
*                         DUE TO UNRECOVERABLE WRITE ERROR. 
*                (RTKT) = RESERVED TRACK TO BE RELEASED IF REQUEST
*                         TO BE RETRIED.
*                TO *ERR* TO RETRY REQUEST OR ISSUE ERROR MESSAGE.
* 
*         CALLS  PES. 
* 
*         MACROS ERROR. 
  
  
 WSE      BSS    0           ENTRY
          LDM    LFEF 
          ZJN    WSE2        IF FILE WRITTEN PREVIOUSLY 
          LDM    RDCT        DRIVER STATUS
          SHN    21-12
          PJN    WSE1        IF RECOVERABLE ERROR 
          LDM    PWRF        CHECK RESTART FLAGS
          LPK    RFRR 
          NJN    WSE3        IF REQUEST ALREADY RETRIED 
          LDK    RFRR        SET RETRY REQUEST FLAG 
          RAM    PWRF 
 WSE1     LDD    FS+1        SET RESERVED TRACK TO BE RELEASED
          STM    RTKT 
          ERROR  RTR,CH      RETRY REQUEST
  
 WSE2     RJM    PES         PROCESS ERROR STATUS 
 WSE3     ERROR  MSE,CH,,FS  *EQXXX,DNYY, MASS STORAGE ERROR.*
          SPACE  4,10 
*         COMMON DECKS. 
  
  
 EJT$     SET    0           DEFINE EJT ACCESS
*CALL     COMPGFP 
*CALL     COMPRSS 
*CALL     COMPSMI 
*CALL     COMPWEI 
*CALL     COMPWSS 
          SPACE  4,10 
*         CHECK OVERFLOW. 
  
  
          OVERFLOW  OVLC,BUF1-2  OVERFLOW INTO CATALOG BUFFER 
          OVERLAY  (DROPDS/PURGE PROCESSING.) 
          SPACE  4,10 
**        THIS OVERLAY PROCESSES THE COMMANDS *DROPDS* AND *PURGE*. 
  
  
 OVL      BSS    0           ENTRY
          LDD    EQ          RESET MASTER DEVICE EST ORDINAL
          STD    T5 
          LJM    0,P0        PROCESS COMMAND
          TITLE  COMMAND PROCESSING.
 DDS      SPACE  4,10 
***       PROCESS *DROPDS* REQUEST. 
* 
*         DROP DISK SPACE FOR DIRECT ACCESS FILE. 
  
  
 DDS      BSS    0           ENTRY
  
*         CHECK FOR CARTRIDGE ALTERNATE STORAGE COPY OF FILE. 
  
          LDM    FCAA,CI
          ADM    FCAA+1,CI
          ADM    FCAA+2,CI
          ZJN    DDS1        IF NO CARTRIDGE ALTERNATE STORAGE COPY 
          LDM    FCAF,CI
          LPN    AFOBSM 
          NJN    DDS1        IF COPY OBSOLETE 
          LDM    FCAF,CI
          LPN    AFPDEM+AFPSEM
          ZJN    DDS2        IF NO ERROR FLAGS SET
          AOM    DDSA        SET *ERROR FLAG DETECTED* FLAG 
  
*         CHECK FOR TAPE ALTERNATE STORAGE COPY OF FILE.
  
 DDS1     LDM    FCTV,CI
          ADM    FCTV+1,CI
          ZJN    DDS1.2      IF NO TAPE ALTERNATE STORAGE COPY OF FILE
          LDM    FCTF,CI     CHECK FOR ERRORS ON PRIMARY VSN
          LPK    TFPVNM+TFEPVM
          ZJN    DDS2        IF NO ERRORS ON PRIMARY VSN
          AOM    DDSA        SET *ERROR FLAG DETECTED* FLAG 
          LDM    FCTF,CI
          LPK    TFSVSM 
          ZJN    DDS1.2      IF NO SECONDARY VSN COPY OF FILE 
          LDM    FCTF,CI
          LPK    TFSVNM+TFESVM
          ZJN    DDS2        IF NO ERRORS ON SECONDARY VSN
  
 DDS1.1   ERROR  ASE         * ALTERNATE STORAGE ERROR.*
  
 DDS1.2   LDN    0           CHECK FOR ERRORS 
*         LDN    1           (ALTERNATE STORAGE ERROR DETECTED) 
 DDSA     EQU    *-1
          NJN    DDS1.1      IF ALTERNATE STORAGE ERRORS DETECTED 
          ERROR  AIO         * NO ALTERNATE STORAGE COPY OF FILE.*
  
*         RELEASE DISK SPACE FOR FILE.
  
 DDS2     RJM    SCP         SAVE CATALOG PARAMETERS
          LDN    0           CLEAR DISK ADDRESS 
          STM    FCBT,CI
          LDM    FCDN,CI     SAVE DEVICE NUMBER 
          STM    SDDA+1 
          LDC    LDCI 
          STM    SDDA 
          LDN    0           CLEAR DN AND DISK-RELATED ERRORS 
          STM    FCEC,CI
          ERRNZ  FCDN-FCEC   CODE DEPENDS ON VALUE
          LDM    FCLF,CI     CHECK IF LENGTH IS SET IN PFC
          ADM    FCLF+1,CI
          NJN    DDS3        IF LENGTH PRESENT
          AOM    DDFA        FORCE LENGTH CALCULATION 
          AOM    DDFD 
 DDS3     RJM    DDF         DELETE DIRECT ACCESS FILE
          LJM    TRP         TERMINATE PROGRAM
 PUR      SPACE  4,10 
***       PROCESS *PURGE* REQUEST.
* 
*         REMOVE PERMANENT FILE *PF NAME* FROM PERMANENT FILE SYSTEM. 
* 
*         AN INDIRECT ACCESS FILE WHICH DOES NOT HAVE A DISK RESIDENT 
*         COPY IS TREATED THE SAME AS A DIRECT ACCESS FILE WHICH
*         DOES NOT HAVE A DISK IMAGE. 
  
  
 PUR      BSS    0           ENTRY
          LDM    FCBS,CI
          SHN    6
          MJP    PUR2        IF DIRECT ACCESS FILE
          LDM    FCBT,CI     CHECK IF DISK RESIDENT 
          NJN    PUR1        IF DISK RESIDENT INDIRECT ACCESS FILE
          LDC    4000        MARK ENTRY AS DAPF HOLE
          STM    FCBS,CI
          UJN    PUR2        PROCESS AS IF DIRECT ACCESS FILE 
  
 PUR1     EXECUTE  3PD       LOAD CATALOG UPDATE ROUTINES 
          RJM    IIA         INTERLOCK INDIRECT ALLOCATION
          LDK    STNS        SET *NO JOB SUSPENSION* AFTER THIS POINT 
          RAM    STAT 
          RJM    DCE         RELEASE IAPF FILE SPACE
          ZJN    PUR1.1      IF FILE WITHIN CHAIN AND NO DELINK 
          RJM    CIA         CLEAR INDIRECT ALLOCATION INTERLOCK
          UJN    TRP         TERMINATE PROGRAM
  
 PUR1.1   RJM    CIA         CLEAR INDIRECT ALLOCATION INTERLOCK
          LDD    CB          REWRITE CATALOG ENTRY
          RJM    WBI
          ENDMS 
          UJN    TRP         TERMINATE PROGRAM
  
 PUR2     RJM    SCP         SAVE CATALOG PARAMETERS
          LDN    0           CLEAR FILE LENGTH
          STM    FCLF,CI
          STM    FCLF+1,CI
          STM    FCUI+1,CI   CLEAR USER INDEX 
          LDM    FCUI,CI
          SCN    77 
          STM    FCUI,CI
          RJM    DDF         DELETE DIRECT ACCESS FILE
          UJN    TRP         TERMINATE PROGRAM
          SPACE  4,10 
**        TRP - TERMINATE PROGRAM.
  
  
 TRP      EXECUTE  3PU       TERMINATE PROGRAM
          TITLE  SUBROUTINES. 
 DDF      SPACE  4,10 
**        DDF - DELETE DIRECT ACCESS FILE.
* 
*         READ SYSTEM SECTOR AND EITHER PURGE FILE OR SET PURGE 
*         STATUS IN SYSTEM SECTOR (IF FILE CURRENTLY ACTIVE). 
*         RELEASE THE CATALOG ENTRY FOR THE FILE. 
* 
*         CALLS  CTA, CTI, ITC, PDV, RDS, RSS, SDD, SEI, WCB, WSS.
* 
*         MACROS ENDMS, ERROR, SETMS, SFA.
  
  
 DDF      SUBR               ENTRY/EXIT 
          RJM    SDD         SEARCH FOR DIRECT ACCESS DEVICE
          ZJN    DDF1        IF DEVICE FOUND
          RJM    WCB         REWRITE CATALOG BUFFER 
          ERROR  DAD,CH,IW   * DIRECT ACCESS DEVICE ERROR.* 
  
*         PERFORM BOI/EOI VALIDATION. 
  
 DDF1     LDM    PFFT        FIRST TRACK
          NJN    DDF2        IF FILE DISK RESIDENT
          RJM    WCB         REWRITE CATALOG BUFFER 
          UJN    DDFX        RETURN 
  
 DDF2     RJM    ITC         INTERLOCK TRACK CHAIN FOR FILE 
          ZJN    DDF3        IF INTERLOCK SUCCESSFUL
          RJM    WCB         REWRITE CATALOG BUFFER 
          EXIT   TNR,CH,IW,T5,EC7  *EQXXX,DNYY, TRACK NOT RESERVED.*
  
 DDF3     AOM    DAIF        SET INTERLOCK FLAG 
          SETMS  IO 
          RJM    PDV         PROCESS DEVICE STATUS
          LDN    SSTL        CHECK FILE VALIDATION ENABLED
          CRD    CM 
          LDD    CM 
          LPN    20 
          LMN    20 
          STM    DDFE+1      SAVE VALIDATION VALUE
          NJN    DDF3.1      IF VALIDATION ENABLED
 DDFA     LDN    0
*         LDN    1           (LENGTH UPDATE REQUIRED) 
          NJN    DDF3.1      IF LENGTH UPDATE REQUIRED
          LJM    DDF4        SKIP VALIDATION
  
 DDF3.1   SFA    EST,T5      GET EST ENTRY
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4        SETUP *COMPSEI*
          SHN    3
          ADN    TRLL 
          RJM    CTA         CALCULATE FWA OF TRT 
          SBD    TH 
          STM    SEIA+1 
          SHN    -14
          LMC    ADCI 
          STM    SEIA 
          RJM    SEI         POSITION TO EOI SECTOR 
 DDFD     LDN    0
*         LDN    1           (LENGTH UPDATE REQUIRED) 
          ZJN    DDF3.2      IF LENGTH UPDATE NOT REQUIRED
          LDD    T2          SET LENGTH IN PFC
          STM    FCLF,CI
          LDD    T3 
          STM    FCLF+1,CI
 DDFE     LDC    0
*         LDC    20          (VALIDATION REQUIRED)
          ZJN    DDF4        IF VALIDATION NOT REQUIRED 
  
 DDF3.2   SETMS  IO 
          RJM    PDV         PROCESS DEVICE STATUS
          LDC    BFMS 
          RJM    RDS
          MJN    DDF6        IF READ ERROR
          LDM    PFFT        RESET FIRST TRACK
          STD    T6 
          LMM    BFMS+FTEI   CHECK FIRST TRACK POINTER
          ADM    BFMS        CHECK LINKAGE BYTES
          ADM    BFMS+1 
 DDF4     ZJN    DDF5        IF EOI SECTOR AND IF BOI POINTER MATCHES 
          LJM    DDF10       PROCESS BOI/EOI ERROR
  
*         READ SYSTEM SECTOR. 
  
 DDF5     LDN    0           IGNORE FILE NAME 
          RJM    RSS
          ZJN    DDF8        IF LEGAL SYSTEM SECTOR 
          MJN    DDF6        IF READ ERROR
          RJM    WCB         REWRITE CATALOG BUFFER 
          EXIT   DAF,CH,IW,T5,EC7  *EQXXX,DNYY,DIRECT ACCESS FILE ERROR*
  
 DDF6     RJM    PES         PROCESS ERROR STATUS 
          RJM    WCB         REWRITE CATALOG BUFFER 
          EXIT   MSE,CH,IW,T5,EC7  *EQXXX,DNYY, MASS STORAGE ERROR.*
  
*         VALIDATE SYSTEM SECTOR. 
  
 DDF8     LDM    CTSS+FCUI   COMPARE USER INDEX IN SYSTEM SECTOR
          LPN    77 
          SHN    14 
          LMM    CTSS+FCUI+1
 DDFB     LMC    *
*         LMC    UI          (USER INDEX FROM CATALOG)
          NJN    DDF10       IF USER INDEX MISMATCH 
          LDN    2
          STD    P0 
 DDF9     LDM    FCCD+2,CI   CHECK CREATION DATE
 DDFC     EQU    *-1
          LMM    CTSS+FCCD,P0 
          NJN    DDF10       IF MISMATCH ON CREATION DATE 
          SOM    DDFC 
          SOD    P0 
          PJN    DDF9        IF NOT END OF DATE 
          UJN    DDF11       CHECK FOR ACTIVE USERS 
  
*         PROCESS BOI/EOI/UI MISMATCH.
  
 DDF10    RJM    WCB         REWRITE CATALOG BUFFER 
          EXIT   FSE,CH,IW,T5,EC7  *EQXXX,DNYY,FILE BOI/EOI/UI MISMATCH*
  
*         CHECK FOR ACTIVE USERS. 
  
 DDF11    LDM    CASS        CHECK FOR ACTIVE USERS PRESENT 
          LPN    32 
          ADM    UCSS+1 
          ADM    UCSS+2 
          ADM    UCSS+3 
          ADM    UCSS+4 
          ADM    FISS        CHECK FOR FAST ATTACH FILE 
          STD    P0 
          ZJN    DDF11.1     IF NO ACTIVE USERS 
          LDM    PFSR 
          LPN    77 
          LMN    SRNB 
          NJN    DDF11.1     IF TO PURGE FILE WHEN BUSY 
          ERROR  FBS         *(FILE NAME) BUSY.*
  
*         RELEASE THE CATALOG ENTRY FOR THE FILE.  NO JOB SUSPENSION
*         IS PERFORMED IF THE DIRECT ACCESS DEVICE BECOMES INACCESSIBLE 
*         AFTER THIS POINT. 
* 
*         THE CATALOG ENTRY IS RELEASED BEFORE SETTING PURGE STATUS 
*         IN THE SYSTEM SECTOR OF THE FILE BECAUSE THE CATALOG AND
*         DIRECT ACCESS FILES MAY RESIDE ON DIFFERENT DEVICES.  THIS
*         ORDER ENSURES THAT THE CATALOG DOES NOT POINT TO AN OBSOLETE
*         FILE IF THE CATALOG DEVICE BECOMES INACCESSIBLE BEFORE THE
*         ENTRY IS RELEASED.
  
 DDF11.1  RJM    WCB         REWRITE CATALOG BUFFER 
          LDM    PFFT        RESET FIRST TRACK OF FILE
          STD    T6 
  
*         REWRITE SYSTEM SECTOR (FOR FILE WITH ACTIVE USERS). 
  
          LDD    P0 
          ZJP    DDF14       IF NO ACTIVE USERS 
          LDM    CASS        SET PURGE BIT
          LMN    40 
          STM    CASS 
          SETMS  IO,RW
          NJN    DDF13       IF DEVICE INACCESSIBLE 
          RJM    WSS         WRITE SYSTEM SECTOR
          PJN    DDF12       IF NO ERROR
          LDM    RDCT        DEVICE STATUS
          SHN    21-12
          PJN    DDF13       IF DEVICE INACCESSIBLE 
          EXIT   MSE,CH,IW,T5,EC7  *EQXXX,DNYY, MASS STORAGE ERROR.*
  
 DDF12    ENDMS 
 DDF13    LDD    T6          CLEAR TRACK INTERLOCK
          RJM    CTI
          LDN    0           CLEAR INTERLOCK FLAG 
          STM    DAIF 
          UJN    DDF15       COMPLETE 
  
*         RELEASE FILE SPACE (FOR FILE WITH NO ACTIVE USERS). 
  
 DDF14    LDD    T5          SET EST ORDINAL
          LMC    4000        SET CHECKPOINT BIT 
          STD    CM+1 
          LDD    T6 
          STD    CM+2 
          MONITOR DTKM
*         LDN    0           CLEAR TRACK INTERLOCK FLAG 
          STM    DAIF 
  
*         INCREMENT PRU LIMIT FIELD IN CONTROL POINT AREA.
*         NUMBER OF SECTORS RETURNED BY *DTKM* IS IN (CM+3 - CM+4). 
  
          LDN    CICS        INCREMENT CP AREA FIELD FUNCTION CODE
          STD    CM 
          LDK    ACLW        ADDRESS OF MASS STORAGE PRU LIMIT
          STD    CM+1 
          LDN    0D*100+18D  POSITION AND WIDTH OF LIMIT FIELD
          STD    CM+2 
          LDD    MA          WRITE *UADM* PARAMETERS TO MESSAGE BUFFER
          CWD    CM 
          LDN    1
          STD    CM+1        REQUEST COUNT
          STD    CM+2        DO NOT DROP PP 
          MONITOR  UADM 
 DDF15    LJM    DDFX        RETURN 
 SCP      SPACE  4,10 
**        SCP - SAVE CATALOG PARAMETERS.
* 
*         SAVES PARAMETERS FROM THE CATALOG ENTRY FOR LATER USE.
* 
*         EXIT   (DDFB, DDFB+1) = USER INDEX. 
*                (PFFT) = FIRST TRACK.
  
  
 SCP      SUBR               ENTRY/EXIT 
          LDM    FCUI,CI     SAVE USER INDEX
          LPN    77 
          RAM    DDFB 
          LDM    FCUI+1,CI
          STM    DDFB+1 
          LDM    FCBT,CI     SAVE FIRST TRACK 
          STM    PFFT 
          UJN    SCPX        RETURN 
 SDD      SPACE  4,15 
**        SDD - SEARCH FOR DIRECT ACCESS DEVICE.
* 
*         ENTRY  (CI) = ADDRESS OF CATALOG ENTRY. 
*                (EQ) = MASTER DEVICE EST ORDINAL.
*                (PFPN - PFPN+4) = PERMANENT FILE DEVICE DESCRIPTION. 
*                (SDDA) PRESET WITH DEVICE NUMBER IF *SETDA* REQUEST. 
* 
*         EXIT   (A) = 0 IF DEVICE FOUND. 
*                (A) .GT. 0 IF DEVICE NOT FOUND OR INACCESSIBLE.
*                (T5) = (PFEQ) = DIRECT ACCESS DEVICE EST ORDINAL.
* 
*         USES   CM, T5.
* 
*         CALLS  PDA, SDN.
  
  
 SDD2     LDD    T5          SET DIRECT ACCESS DEVICE EST ORDINAL 
          STM    PFEQ 
          LDN    0           RETURN WITH (A) = 0
  
 SDD      SUBR               ENTRY/EXIT 
          LDD    EQ          SET DIRECT ACCESS DEVICE EST ORDINAL 
          STD    T5 
          STM    PFEQ 
 SDDA     LDM    FCDN,CI     GET DIRECT ACCESS DEVICE NUMBER
*         LDC    (FCDN)      (*DROPDS*) 
          LPN    77 
          ZJN    SDDX        IF MASTER DEVICE, RETURN 
          STD    CM 
          LDM    PFPN+4      FAMILY EST ORDINAL 
          RJM    SDN         SEARCH FOR DEVICE NUMBER 
          PJN    SDD2        IF DEVICE FOUND
          ADN    1
          RJM    PDA         PROCESS DEVICE AVAILABILITY
 SDD1     LDN    1           RETURN WITH (A) .GT. 0 
          UJN    SDDX        RETURN 
 WCB      SPACE  4,20 
**        WCB - REWRITE CATALOG BUFFER. 
* 
*         ENTRY  (T5) = DIRECT ACCESS DEVICE EST ORDINAL. 
*                (CB) = ADDRESS OF CATALOG BUFFER.
*                (CC) = COMMAND CODE. 
*                (EQ) = MASTER DEVICE EST ORDINAL.
*                (PFEQ) = DIRECT ACCESS DEVICE EST ORDINAL. 
* 
*         EXIT   (T5) = DIRECT ACCESS DEVICE EST ORDINAL. 
*                CATALOG BUFFER REWRITTEN.
*                CATALOG INTERLOCK RELEASED.
*                *ENDMS* PERFORMED. 
* 
*         USES   T5.
* 
*         CALLS  CCI, WBI, WCE. 
* 
*         MACROS ENDMS. 
  
  
 WCB      SUBR               ENTRY/EXIT 
          LDD    EQ 
          LMD    T5 
          ZJN    WCB0        IF ALREADY ON MASTER DEVICE
          ENDMS 
          LDD    EQ          SET MASTER DEVICE EST ORDINAL
          STD    T5 
 WCB0     LDD    CC          CHECK COMMAND CODE 
          LMN    CCDD 
          ZJN    WCB1        IF *DROPDS* REQUEST
          RJM    WCE         UPDATE AND REWRITE CATALOG BUFFER
          UJN    WCB2        CLEAR CATALOG INTERLOCK
  
 WCB1     LDD    CB          REWRITE CATALOG BUFFER 
          RJM    WBI
          ENDMS 
 WCB2     RJM    CCI         CLEAR CATALOG INTERLOCK
          LDM    PFEQ        RESET DIRECT ACCESS DEVICE EST ORDINAL 
          STD    T5 
          UJN    WCBX        RETURN 
 WCE      SPACE  4,15 
**        WCE - REWRITE CATALOG ENTRY.
* 
*         ENTRY  (CI) = ADDRESS OF CATALOG ENTRY. 
*                (CB) = ADDRESS OF CATALOG BUFFER.
* 
*         EXIT   (FCKD) UPDATED AND CATALOG SECTOR REWRITTEN. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  WBI. 
* 
*         MACROS ENDMS. 
  
  
 WCE      SUBR               ENTRY/EXIT 
          LDN    PDTL        UPDATE CONTROL MODIFICATION DATE 
          CRD    CM 
          LDD    CM+2 
          STM    FCKD,CI
          LDD    CM+3 
          STM    FCKD+1,CI
          LDD    CM+4 
          STM    FCKD+2,CI
          LDD    CB          REWRITE CATALOG BUFFER 
          RJM    WBI
          ENDMS 
          UJN    WCEX        RETURN 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPRSS 
*CALL     COMPSDN 
*CALL     COMPWSS 
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          OVERFLOW  OVLC,BUF2-2  OVERFLOW INTO HOLE BUFFER
          OVERLAY  (DELPFC/DROPIDS/PERMIT PROCESSING.)
          SPACE  4,10 
**        THIS OVERLAY PROCESSES THE COMMANDS *DELPFC*, *DROPIDS* 
*         AND *PERMIT*. 
  
  
 OVL      BSS    0           ENTRY
          LDD    EQ          RESET MASTER DEVICE EST ORDINAL
          STD    T5 
          LJM    0,P0        PROCESS COMMAND
          TITLE  COMMAND PROCESSING.
 DIS      SPACE  4,10 
***       PROCESS *DROPIDS* REQUEST.
* 
*         DROP INDIRECT ACCESS FILE DISK SPACE. 
* 
*         THE TRACK AND SECTOR POINTERS IN THE EXISTING PFC WILL BE 
*         CLEARED, AND A HOLE WILL BE CREATED TO POINT TO THE DISK
*         SPACE.  THIS HOLE WILL EITHER BE PLACED IN A PREVIOUSLY 
*         EXISTING DAPF HOLE OR A NEW HOLE WILL BE ALLOCATED AT THE 
*         END OF THE CATALOG TRACK.  THIS IS DONE SO THAT THE 
*         POSITION OF THE ORIGINAL PFC DOES NOT CHANGE; BOTH THE
*         DESTAGE DUMP CODE AND THE PURGE AFTER DUMP CODE IN *PFDUMP* 
*         REQUIRE THAT THE POSITION OF THE PFC REMAIN CONSTANT. 
  
  
 DIS      BSS    0           ENTRY
          LDD    CI          SET CURRENT PFN FOR NEW PFC ENTRY
          ADN    FCFN 
          RJM    SFN
  
*         CHECK FOR CARTRIDGE ALTERNATE STORAGE COPY OF FILE. 
  
          LDM    FCAA,CI
          ADM    FCAA+1,CI
          ADM    FCAA+2,CI
          ZJN    DIS1        IF NO CARTRIDGE ALTERNATE STORAGE COPY 
          LDM    FCAF,CI
          LPN    AFPDEM+AFPSEM
          ZJN    DIS4        IF NO ERROR FLAGS SET
          AOM    DISA        SET *ERROR FLAG DETECTED* FLAG 
  
*         CHECK FOR TAPE ALTERNATE STORAGE COPY OF FILE.
  
 DIS1     LDM    FCTV,CI
          ADM    FCTV+1,CI
          ZJN    DIS2        IF NO TAPE ALTERNATE STORAGE COPY OF FILE
          LDM    FCTF,CI     CHECK FOR ERRORS ON PRIMARY VSN
          LPK    TFPVNM+TFEPVM
          ZJN    DIS4        IF NO ERRORS ON PRIMARY VSN
          AOM    DISA        SET *ERROR FLAG DETECTED* FLAG 
          LDM    FCTF,CI
          LPK    TFSVSM 
          ZJN    DIS2        IF NO SECONDARY VSN COPY OF FILE 
          LDM    FCTF,CI
          LPK    TFSVNM+TFESVM
          NJN    DIS3        IF ERRORS ON SECONDARY VSN 
          UJN    DIS4        CONTINUE 
  
 DIS2     LDN    0           CHECK IF ERROR FLAG DETECTED 
*         LDN    1           (ALTERNATE STORAGE ERROR FLAG DETECTED)
 DISA     EQU    *-1
          NJN    DIS3        IF ALTERNATE STORAGE ERROR FLAG DETECTED 
          ERROR  AIO         * NO ALTERNATE STORAGE COPY OF FILE.*
  
 DIS3     ERROR  ASE         * ALTERNATE STORAGE ERROR.*
  
*         SET UP HOLE TO POINT TO DATA. 
  
 DIS4     LDM    FCBT,CI     SET DISK ADDRESS 
          STM    SDAB 
          LDM    FCBS,CI
          STM    SDAC 
          LDM    FCLF,CI     SET FILE LENGTH IN (LF - LF+1) 
          STD    LF 
          LDM    FCLF+1,CI
          STD    LF+1 
          STD    HL          SIMULATE EXACT FIT HOLE, IF HOLE FOUND 
          EXECUTE  3PD       LOAD CATALOG UPDATE ROUTINES 
          LDN    PSNI        BYPASS SPACE ALLOCATION IN *CCS* 
          STM    CCSB 
          STM    CCSB+1 
          STM    CCSC        BYPASS *WBI* CALLS IN *CCS*
          STM    CCSF 
          STM    CCSF+1 
          STM    CCSG 
          STM    CCSG+1 
          ISTORE FCEL,(UJN FCE7.1)  BYPASS DATE/TIME UPDATES IN *FCE* 
          RJM    IIA         INTERLOCK INDIRECT ALLOCATION
          LDK    STNS        SET *NO JOB SUSPENSION* AFTER THIS POINT 
          RAM    STAT 
          RJM    CCS         CREATE NEW CATALOG ENTRY FOR HOLE
  
*         UPDATE EXISTING PFC AND RELEASE FILE SPACE. 
  
          LDN    0           CLEAR DISK ADDRESS IN EXISTING PFC 
          STM    FCBT,CI
          STM    FCBS,CI
          LDD    CB          REWRITE EXISTING PFC 
          RJM    WBI
          LDD    EB          SET POINTERS TO PFC TO BE DELETED
          STD    CB 
          LDD    EP 
          STD    CI 
          RJM    DCE         RELEASE IAPF FILE SPACE
          ZJN    DIS5        IF FILE WITHIN CHAIN AND NO DELINK 
          RJM    CIA         CLEAR INDIRECT ALLOCATION INTERLOCK
          UJN    DIS6        TERMINATE PROGRAM
  
 DIS5     RJM    CIA         CLEAR INDIRECT ALLOCATION INTERLOCK
          LDD    CB 
          RJM    WBI         WRITE CATALOG ENTRY
          ENDMS 
 DIS6     EXECUTE  3PU       TERMINATE PROGRAM
 DPF      SPACE  4,10 
***       PROCESS *DELPFC* REQUEST. 
* 
*         DELETE INDIRECT ACCESS FILE PFC ENTRY, AND DROP ASSOCIATED
*         DISK SPACE.  THIS REQUEST IS MADE ONLY TO DELETE THE ORIGINAL 
*         PFC LEFT OVER FROM AN *APPEND*, AFTER A CPU TRANSFER HAS BEEN 
*         PERFORMED ON THAT MACHINE.
  
  
 DPF      BSS    0           ENTRY
          EXECUTE  3PD       LOAD CATALOG UPDATE ROUTINES 
          RJM    IIA         INTERLOCK INDIRECT ALLOCATION
          LDK    STNS        SET *NO JOB SUSPENSION* AFTER THIS POINT 
          RAM    STAT 
          RJM    DCE         DELETE CATALOG ENTRY 
          ZJN    DPF1        IF FILE WITHIN CHAIN AND NO DELINK 
          RJM    CIA         CLEAR INDIRECT ALLOCATION INTERLOCK
          UJN    DPF2        TERMINATE PROGRAM
  
 DPF1     RJM    CIA         CLEAR INDIRECT ALLOCATION INTERLOCK
          LDD    CB          REWRITE CATALOG BUFFER 
          RJM    WBI
          ENDMS 
 DPF2     EXECUTE  3PU       TERMINATE PROGRAM
 PER      SPACE  4,10 
***       PROCESS *PERMIT* REQUEST. 
* 
*         CREATE PERMISSION *M* FOR USER *OUAN* TO ACCESS FILE
*         *PF NAME*.
  
  
 PER      BSS    0           ENTRY
  
*         *PERMIT* IS NOT ALLOWED ON A FILE WITH AN ACCESS LEVEL
*         LOWER THAN THAT OF THE JOB UNLESS THE CALLER IS VALIDATED 
*         FOR WRITE-DOWN PRIVILEGES OR IS A SUBSYSTEM.
  
          LDM    SSOM 
          ZJN    PER0        IF UNSECURED SYSTEM
          LDM    FCAL,CI
          LPN    7
          SBM    PFAL 
          PJN    PER0        IF FILE NOT LOWER THAN JOB 
          LDM    SVAL 
          LPN    40 
          NJN    PER0        IF USER VALIDATED FOR WRITE-DOWN 
          LDM    SSID 
          SBK    LSSI+1 
          PJN    PER0        IF SUBSYSTEM 
          ERROR  WDP,,,,SVE  * WRITE-DOWN OF DATA PROHIBITED.*
  
 PER0     LDD    RI 
          ADD    RI+1 
          ZJN    PER1        IF NO PERMIT RANDOM INDEX
          LDD    PP 
          ZJN    PER1        IF PERMIT NOT FOUND
          RJM    UEP         UPDATE EXISTING PERMIT 
          UJN    PER2        UPDATE CATALOG ENTRY 
  
*         CREATE PERMIT ENTRY.
  
 PER1     LDM    EXPC        GET EXPLICIT PERMIT COUNT
          SBK    PMLM 
          PJP    PER3        IF PERMIT LIMIT EXCEEDED 
          LDN    0           SET EXPLICIT PERMIT OPTION 
          STM    SAPF 
          STM    IACP 
          EXECUTE  3PE       LOAD PERMIT UPDATE ROUTINES
          RJM    CPE         CREATE PERMIT ENTRY
  
*         UPDATE CATALOG ENTRY. 
  
 PER2     LDN    PDTL        UPDATE CONTROL MODIFICATION DATE 
          CRD    CM 
          LDD    CM+2 
          STM    FCKD,CI
          LDD    CM+3 
          STM    FCKD+1,CI
          LDD    CM+4 
          STM    FCKD+2,CI
          LDD    CB          REWRITE CATALOG BUFFER 
          RJM    WBI
          ENDMS 
          EXECUTE  3PU       TERMINATE PROGRAM
  
*         PROCESS PERMIT LIMIT. 
  
 PER3     ERROR  PLE         * PERMIT LIMIT EXCEEDED.*
          TITLE  SUBROUTINES. 
 UEP      SPACE  4,10 
**        UEP - UPDATE EXISTING PERMIT ENTRY. 
* 
*         ENTRY  (PP) = ADDRESS OF PERMIT ENTRY TO UPDATE.
*                (MODE) = MODE TO BE PERMITTED. 
*                (PXDT - PXDT+1) = PERMIT EXPIRATION DATE.
* 
*         EXIT   PERMIT ENTRY UPDATED.
* 
*         USES   CM - CM+4, T0. 
* 
*         CALLS  WBI. 
  
  
 UEP      SUBR               ENTRY/EXIT 
          LDD    PP          SET PERMIT ENTRY ADDRESS 
          ADN    FPAC 
          STM    UEPA 
          LDN    PDTL        SET TIME/DATE IN ENTRY 
          CRD    CM 
          LDM    MODE        SET PERMIT MODE
          LPN    17 
          ADN    40          SET *EXPIRATION DATE PRESENT* BIT
          STD    T0 
          LDM    FPAC+1,PP   UPDATE MODE/ACCESS COUNT 
          SCN    77 
          ADD    T0 
          STD    CM+1 
          LDM    FPAC,PP
          STD    CM 
          LDD    MA          SET UPDATED WORD IN ENTRY
          CWD    CM 
          CRM    *,ON 
 UEPA     EQU    *-1
          LDM    PXDT+1      SET PERMIT EXPIRATION DATE 
          STM    FPXD+1,PP
          LDM    FPXD,PP
          SCN    77 
          LMM    PXDT 
          STM    FPXD,PP
          LDD    PB          REWRITE PERMIT SECTOR
          RJM    WBI
          LJM    UEPX        EXIT 
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          OVERFLOW  OVLC,BUF2-2  OVERFLOW INTO HOLE BUFFER
          OVERLAY (CHANGE/SETPFAC/SETPFAL PROCESSING.)
          SPACE  4,10 
**        THIS OVERLAY PROCESSES THE PERMANENT FILE COMMANDS
*         *CHANGE*, *SETPFAC* AND *SETPFAL*.  THESE COMMANDS
*         CHANGE FIELDS IN THE CATALOG ENTRY FOR A FILE.
*         *SETPFAC* AND *SETPFAL* WILL NOT BE PERFORMED IF THE
*         FILE IS CURRENTLY ATTACHED. 
  
  
 OVL      BSS    0           ENTRY
*         LJM    CHG         PROCESS REQUEST
          TITLE  COMMAND PROCESSING.
***       PROCESS CHANGE REQUEST. 
* 
*         CHANGE CATALOG ENTRY FOR PERMANENT FILE.
* 
*         THE PASSWORD SPECIFIED IN THE *FET* WILL BE USED UNLESS 
*         IT HAS THE VALUE 7777 7777 7777 77B.  THE *MODE*, *CT*, 
*         AND *SS* FIELDS SPECIFIED IN THE *FET* WILL ONLY BE 
*         USED IF THEY HAVE THE 40B-BIT SET.
* 
*         *CHANGE* AND *SETPFAC* ARE NOT ALLOWED IF THE ACCESS LEVEL
*         OF THE FILE IS LOWER THAN THAT OF THE JOB UNLESS THE CALLER 
*         IS VALIDATED FOR WRITE-DOWN PRIVILEGES OR IS A SUBSYETM.
  
  
 CHG      BSS    0           ENTRY
          LDM    STAT        CHECK FOR PRIVATE DEVICE 
          LPK    STPD 
          ZJN    CHG1        IF NOT PRIVATE DEVICE
          LDN    PSNI        SET BYPASS OF USER INDEX CHECK 
          STM    SCTB 
 CHG1     RJM    SFL         SET PERMANENT FILE NAMES 
          RJM    SCT         SEARCH CATALOG 
          ZJN    CHG2        IF FILE NOT FOUND
          RJM    CCE         CHANGE CATALOG ENTRY 
          LDN    PDTL        UPDATE CONTROL MODIFICATION DATE 
          CRD    CM 
          LDD    CM+2 
          STM    FCKD,CI
          LDD    CM+3 
          STM    FCKD+1,CI
          LDD    CM+4 
          STM    FCKD+2,CI
          LDD    CB          REWRITE CATALOG ENTRY
          RJM    WBI
          ENDMS 
          EXECUTE  3PU       TERMINATE PROGRAM
  
 CHG2     ERROR  FNF         (*FILENAME) NOT FOUND.*
          TITLE  SUBROUTINES. 
 CAL      SPACE  4,10 
**        CAL - CHECK ACCESS LEVEL. 
* 
*         ENTRY  (CI) = INDEX TO ENTRY. 
*                (EQ) = FAMILY EST ORDINAL. 
*                (CALA) = ALTERNATE DEVICE EST ORDINAL. 
*                (LFAL) = NEW ACCESS LEVEL. 
*                (SVAL) = USER-S JOB SECURITY VALIDATIONS.
* 
*         USES   CM - CM+4. 
* 
*         MACROS ERROR, MONITOR.
  
  
 CAL3     LDM    FCAL,CI     CHECK FOR DOWNGRADE
          LPN    7
          STD    CM 
          LDM    LFAL 
          SBD    CM 
          PJN    CALX        IF NOT DOWNGRADE 
          LDM    SVAL        CHECK FOR PF DOWNGRADE VALIDATON 
          SHN    21-6 
          MJN    CALX        IF USER HAS DOWNGRADE VALIDATION 
          LDM    SSID        CHECK SUBSYSTEM ID 
          SBK    LSSI+1 
          PJN    CALX        IF SUBSYSTEM 
          ERROR  NVD,,,,SVE  * NOT VALID TO DOWNGRADE DATA.*
  
 CAL      SUBR               ENTRY/EXIT 
          LDM    SSOM 
          ZJN    CALX        IF UNSECURED SYSTEM
          LDD    EQ          CHECK IF *LFAL* VALID FOR MASTER DEVICE
          STD    CM+2 
          LDN    VAES 
          STD    CM+1 
          LDM    LFAL 
          STD    CM+4 
          MONITOR  VSAM 
          LDD    CM+1 
          NJN    CAL2        IF FILE ACCESS NOT VALID FOR DEVICE
          LDM    FCBS,CI
          SHN    21-13
 CAL1     PJP    CAL3        IF NOT DIRECT ACCESS FILE
          LDC    ** 
 CALA     EQU    *-1
          ZJN    CAL1        IF FILE ON MASTER DEVICE 
          STD    CM+2        CHECK IF ACCESS IS VALID FOR FILE DEVICE 
          LDN    VAES 
          STD    CM+1 
          LDM    LFAL 
          STD    CM+4 
          MONITOR  VSAM 
          LDD    CM+1 
          ZJN    CAL1        IF FILE ACCESS VALID FOR DEVICE
 CAL2     ERROR  LNP,,,,SVE  * ACCESS LEVEL NOT VALID ON PF DEVICE.*
 CCE      SPACE  4,20 
**        CCE - CHANGE CATALOG ENTRY. 
* 
*         ENTRY  (CI) = INDEX TO ENTRY. 
*                (PI) = FILE CATEGORY.
*                (PI+1) = FILE MODE.
*                (FS - FS+3) = NEW FILE NAME. 
*                (PFPW) = PASSWORD. 
*                (PFCW) = USER CONTROL WORD.
*                (PXDT - PXDT+1) = PASSWORD EXPIRATION DATE.
*                (STAT) BIT 0=1 IF PASSWORD EXPIRATION DATE SPECIFIED.
*                (PFAL) = FILE ACCESS LEVEL (*SETPFAL*).
*                (PFFC - PFFC+2) = FILE CATEGORY SET (*SETPFAC*). 
* 
*         EXIT   CATALOG ENTRY CHANGED. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  CAL, CFB.
* 
*         MACROS ERROR, NFA.
  
  
 CCE14    RJM    CFB         CHECK FOR FILE BUSY
          RJM    CAL         CHECK ACCESS LEVEL 
          LDM    LFAL        *SETPFAL* CHANGE ACCESS LEVEL
          STM    FCAL,CI
          UJN    CCEX        RETURN 
  
 CCE15    RJM    CFB         CHECK FOR FILE BUSY
          LDM    PFFC        *SETPFAC* CHANGE ACCESS CATEGORY SET 
          STM    FCFC,CI
          LDM    PFFC+1 
          STM    FCFC+1,CI
          LDM    PFFC+2 
          STM    FCFC+2,CI
  
 CCE      SUBR               ENTRY/EXIT 
          LDD    CC 
          LMN    CCAL 
          ZJN    CCE14       IF *SETPFAL* REQUEST 
          LDM    SSOM 
          ZJN    CCE0        IF UNSECURED SYSTEM
          LDM    FCAL,CI
          LPN    7
          SBM    PFAL 
          PJN    CCE0        IF FILE NOT LOWER THAN JOB 
          LDM    SVAL 
          LPN    40 
          NJN    CCE0        IF USER VALIDATED FOR WRITE-DOWN 
          LDM    SSID 
          SBK    LSSI+1 
          PJN    CCE0        IF SUBSYSTEM 
          ERROR  WDP,,,,SVE  * WRITE-DOWN OF DATA PROHIBITED.*
  
 CCE0     LDD    CC 
          LMN    CCAC 
          ZJP    CCE15       IF *SETPFAC* REQUEST 
  
*         SET NEW FILE NAME.
  
          LDD    FS 
          ZJN    CCE1        IF NO NEW NAME 
          STM    FCFN,CI     ENTER NEW FILE NAME
          LDD    FS+1 
          STM    FCFN+1,CI
          LDD    FS+2 
          STM    FCFN+2,CI
          LDD    FS+3 
          SCN    77 
          LMD    UI 
          STM    FCFN+3,CI
  
*         SET NEW CHARGE AND PROJECT NUMBERS INTO PFC.
  
 CCE1     LDM    PFSR        GET SPECIAL REQUEST FUNCTION 
          LPN    77 
          LMN    SRCP 
          NJN    CCE2        IF *CP* PARAMETER NOT SPECIFIED
          LDD    CI 
          RAM    CCEC 
          NFA    CHGN        SET EXECUTING CHARGE/PROJECT FROM NFL
          CRM    FCCN,TR
 CCEC     EQU    *-1
          ERRNZ  FCP1-FCCN-5 *FCP1* MUST FOLLOW *FCCN*
          ERRNZ  FCP2-FCCN-12  *FCP2* MUST FOLLOW *FCCN*/*FCP1* 
          ERRNZ  PJ1N-CHGN+1 *PJ1N* MUST BE IMMEDIATELY AFTER *CHGN*
          ERRNZ  PJ2N-PJ1N+1 *PJ2N* MUST BE IMMEDIATELY AFTER *PJ1N*
  
*         SET USER CONTROL WORD.
  
 CCE2     LDM    PUCW 
          SHN    6
          PJN    CCE3        IF NOT SPECIFIED 
          LDD    CI 
          ADC    FCCW 
          STM    CCEA        SET ADDRESS TO WRITE CONTROL WORD
          LDD    MA 
          CWM    PUCW,ON
          SBN    1
          CRM    *,ON 
 CCEA     EQU    *-1
  
*         SET PASSWORD. 
  
 CCE3     LDN    CFPW 
          SBM    FETL 
          PJP    CCE6        IF FET NOT LONG ENOUGH FOR PASSWORD
          LDM    PFPW 
          LMC    7777 
          ZJN    CCE4        IF PASSWORD NOT SPECIFIED
          LDD    CI 
          ADN    FCPW 
          STM    CCEB        SET ADDRESS TO WRITE PASSWORD
          LDD    MA 
          CWM    PFPW,ON
          SBN    1
          CRM    *,ON 
 CCEB     EQU    *-1
          UJN    CCE5        SET PASSWORD EXPIRATION DATE 
  
*         SET PASSWORD EXPIRATION DATE. 
  
 CCE4     LDM    STAT        CHECK EXPIRATION DATE STATUS 
          LPN    STXD 
          ZJN    CCE6        IF EXPIRATION DATE NOT SPECIFIED 
          LDM    FCPW,CI
          NJN    CCE5        IF PASSWORD EXISTS 
          ERROR  PAE         * PFM ARGUMENT ERROR.* 
  
 CCE5     LDM    FCXD,CI     SET EXPIRATION DATE
          SCN    77 
          LMM    PXDT 
          STM    FCXD,CI
          LDM    PXDT+1 
          STM    FCXD+1,CI
  
*         SET CATEGORY. 
  
 CCE6     LDD    PI 
          SHN    21-13
          PJN    CCE7        IF NOT SPECIFIED 
          LDM    FCCT,CI
          LPN    37 
          ADD    PI 
          LPC    3777 
          STM    FCCT,CI
  
*         SET FILE MODE.
  
 CCE7     LDD    PI+1 
          SHN    21-5 
          PJN    CCE8        IF NOT SPECIFIED 
          LDM    FCAM,CI
          SCN    37 
          ADD    PI+1 
          SCN    40 
          STM    FCAM,CI
  
*         SET FILE SUBSYSTEM. 
  
 CCE8     LDM    PFSS 
          SHN    21-5 
          PJN    CCE9        IF SUBSYSTEM NOT SPECIFIED 
          SHN    -21+5+22 
          LMM    FCFS,CI     SAVE SUBSYSTEM IN CATALOG ENTRY
          SCN    77 
          LMM    PFSS 
          LMN    40 
          STM    FCFS,CI
  
*         CLEAR ERROR STATUS. 
  
 CCE9     LDM    PFSR 
          LPN    77 
          LMN    SRCE 
          NJN    CCE10       IF NOT CLEAR ERROR STATUS REQUEST
          LDM    FCEC,CI     CLEAR ERROR STATUS 
          LPC    7077 
          STM    FCEC,CI
          LDM    JORG 
          LMK    SYOT 
          NJN    CCE10       IF NOT SYSTEM ORIGIN 
          LDM    FCAF,CI     CLEAR MSS RELATED ERROR FLAGS
          SCN    AFPSEM+AFPDEM+AFTMPM 
          STM    FCAF,CI
  
*         SET BACKUP REQUIREMENT. 
  
 CCE10    LDM    PFBR        CHECK FOR BR PARAMETER CHANGE REQUEST
          LPC    700
          ZJN    CCE11       IF *BR* NOT SPECIFIED
          STD    CM 
          LDM    FCBR,CI
          LPC    7077 
          LMD    CM 
          STM    FCBR,CI
  
*         SET PREFERRED RESIDENCE.
  
 CCE11    LDM    PFRS        CHECK FOR PR PARAMETER CHANGE REQUEST
          LPC    7000 
          ZJN    CCE12       IF *PR* NOT SPECIFIED
          STD    CM 
          LDM    FCRS,CI
          LPC    0777 
          LMD    CM 
          STM    FCRS,CI
  
*         SET ALTERNATE CATLIST PERMISSION. 
  
 CCE12    LDM    PFAP 
          LPC    6000 
          ZJN    CCE13       IF *AC* NOT SPECIFIED
          STM    FCAP,CI
 CCE13    LJM    CCEX        RETURN 
 CFB      SPACE  4,10 
**        CFB - CHECK FOR FILE BUSY.
* 
*         ENTRY  (CI) = INDEX TO ENTRY. 
*                (EQ) = FAMILY EST ORDINAL. 
* 
*         USES   CM, T5, T6.
* 
*         CALLS  CTI, ITC, PDA, PDV, RMD, RSS, SDN. 
* 
*         MACROS ENDMS, ERROR, SETMS. 
  
  
 CFB      SUBR               ENTRY/EXIT 
          LDM    FCBS,CI
          SHN    21-13
          PJN    CFBX        IF NOT DIRECT ACCESS FILE
          ENDMS 
          LDD    EQ          SET DIRECT ACCESS DEVICE EST ORDINAL 
          STM    PFEQ 
          LDM    FCDN,CI     DETERMINE EST ORDINAL OF DEVICE
          LPN    77 
          ZJN    CFB4        IF FILE ON MASTER DEVICE 
          STD    CM 
          LDD    EQ 
          RJM    SDN         SEARCH FOR DEVICE NUMBER 
          PJN    CFB3        IF DEVICE FOUND
          ADN    1
          RJM    PDA         PROCESS DEVICE AVAILABILITY
 CFB1     ERROR  DAD,CH      * DIRECT ACCESS DEVICE ERROR.* 
  
 CFB2     ERROR  TNR,CH,,T5  *EQXXX,DNYY, TRACK NOT RESERVED.*
  
 CFB3     LDD    T5          SAVE ALTERNATE DEVICE EST ORDINAL
          STM    CALA 
          STM    PFEQ 
 CFB4     LDM    FCBT,CI
          ZJP    CFB8        IF FILE NOT DISK RESIDENT
          STM    PFFT        FIRST TRACK
          RJM    ITC         INTERLOCK TRACK CHAIN FOR FILE 
          NJN    CFB2        IF TRACK NOT RESERVED
          AOM    DAIF        SET INTERLOCK FLAG 
          SETMS  IO 
          RJM    PDV         PROCESS DEVICE STATUS
          LDN    0           DONT VERIFY FILE NAME IN SYSTEM SECTOR 
          RJM    RSS         READ SYSTEM SECTOR 
          ZJN    CFB6        IF LEGAL SYSTEM SECTOR 
          MJN    CFB5        IF READ ERROR
          ERROR  DAF,,,T5    *EQXXX,DNYY, DIRECT ACCESS FILE ERROR.*
  
 CFB5     RJM    PES         PROCESS ERROR STATUS 
          ERROR  MSE,CH,,T5  *EQXXX,DNYY, MASS STORAGE ERROR.*
  
 CFB6     ENDMS 
          LDM    CASS        CHECK IF FILE BUSY 
          ADM    FISS 
          ADM    UCSS+1 
          ADM    UCSS+2 
          ADM    UCSS+3 
          ADM    UCSS+4 
          ZJN    CFB7        IF FILE NOT BUSY 
          ERROR  FBS,CH      * FILE BUSY* 
  
 CFB7     LDD    T6 
          RJM    CTI         RELEASE FILE INTERLOCK 
          LDN    0           CLEAR INTERLOCK FLAG 
          STM    DAIF 
 CFB8     RJM    RMD         RESET TO MASTER DEVICE 
          LJM    CFBX        RETURN 
 CFN      SPACE  4,10 
**        CFN - CHECK FILE NAMES. 
* 
*         ENTRY  (FN - FN+3) = OLD FILE NAME. 
*                (FS - FS+3) = NEW FILE NAME. 
*                (P1) = 1 IF OLD ALREADY FOUND. 
*                (T3) = INDEX TO CATALOG ENTRY. 
* 
*         EXIT   (A) = 0 IF OLD NOT FOUND.
  
  
 CFN      SUBR               ENTRY/EXIT 
  
*         CHECK OLD FILE NAME.
  
 CFNA     LDN    0
*         LDN    1           (OLD FILE NAME ALREADY FOUND)
          NJN    CFN1        IF OLD FILE NAME ALREADY FOUND 
          LDI    T3 
          LMD    FN 
          NJN    CFN1        IF NOT EQUAL 
          LDM    FCFN+1,T3
          LMD    FN+1 
          NJN    CFN1        IF NOT EQUAL 
          LDM    FCFN+2,T3
          LMD    FN+2 
          NJN    CFN1        IF NOT EQUAL 
          LDM    FCFN+3,T3
          LMD    FN+3 
          SHN    -6 
 CFN1     NJP    CFN3        IF NOT OLD FILE
          LDN    ZERL        CHECK IF JOB CAN ACCESS FILE 
          CRD    CM 
          LDM    FCAL,T3     SET ACCESS LEVEL 
          LPN    7
          STD    CM+1 
          LDM    FCFC,T3     SET ACCESS CATEGORY
          LPC    377
          STD    CM+2 
          LDM    FCFC+1,T3
          STD    CM+3 
          LDM    FCFC+2,T3
          STD    CM+4 
          LDD    MA 
          CWD    CM 
          LDN    ZERL 
          CRD    CM 
          LDN    VAJS        CHECK ACCESS LEVEL AND CATEGORY SET
          STD    CM+1 
          ERRNZ  VAJS-3      CODE DEPENDS ON VALUE
          STD    CM+4 
          MONITOR  VSAM 
          LDD    CM+1 
          NJN    CFN2        IF NOT VALID ACCESS
          AOM    CFNA        SET TO BYPASS COMPARE OF OLD FILENAME
          LJM    CFNX        RETURN 
  
 CFN2     ERROR  JCA,,,,SVE  * JOB CANNOT ACCESS FILE.* 
  
*         CHECK NEW FILE NAME.
  
 CFN3     LDN    0
*         LDN    1           (NO NEW FILE NAME) 
 CFNC     EQU    *-1
          NJN    CFN4        IF NO NEW FILENAME SPECIFIED 
          LDI    T3 
          LMD    FS 
          NJN    CFN4        IF NOT EQUAL 
          LDM    FCFN+1,T3
          LMD    FS+1 
          NJN    CFN4        IF NOT EQUAL 
          LDM    FCFN+2,T3
          LMD    FS+2 
          NJN    CFN4        IF NOT EQUAL 
          LDM    FCFN+3,T3
          LMD    FS+3 
          SHN    -6 
          NJN    CFN4        IF NOT EQUAL 
          LDD    MA 
          CWD    FS 
          CRD    FN 
          ERROR  FAP         *(FILENAME) ALREADY PERMANENT.*
  
 CFN4     LDN    0
          LJM    CFNX        EXIT 
 ICT      SPACE  4,15 
**        ICT - INTERLOCK CATALOG TRACK.
* 
*         ENTRY  (T6) = CATALOG TRACK TO BE INTERLOCKED.
*                (T5) = EST ORDINAL.
* 
*         EXIT   TRACK INTERLOCKED. 
*                RECALL *PFM* IF INTERLOCK NOT AVAILABLE
*                  AFTER FOUR TRIES.
*                TO *HNG* IF CATALOG TRACK NOT RESERVED.
* 
*         CALLS  DPR, STI.
  
  
 ICT      SUBR               ENTRY/EXIT 
          LDN    3           SET RETRY COUNT
          STD    T1 
 ICT1     RJM    STI         TRY TO INTERLOCK TRACK 
          ZJN    ICTX        IF INTERLOCK SUCCESSFUL
          LMN    2
          ZJN    ICT2        IF TRACK NOT RESERVED
          SOD    T1 
          MJN    ICT3        IF RETRY COUNT EXHAUSTED 
          RJM    DPR         DELAY PRIOR TO RETRY 
          UJN    ICT1        RETRY
  
 ICT2     RJM    HNG         HANG IF CATALOG TRACK NOT RESERVED 
  
 ICT3     EXIT   INA,CH,,,EC4  * INTERLOCK NOT AVAILABLE.*
 ISP      SPACE  4,20 
**        ISP - INITIALIZE SEARCH OF PERMANENT FILES. 
* 
*         ENTRY  (SDAA) = MASTER DEVICE EST ORDINAL.
*                (CCIA) = CATALOG TRACK.
* 
*         EXIT   (T4) = MASTER DEVICE CHANNEL.
*                (T5) = MASTER DEVICE EST ORDINAL.
*                (T6) = CATALOG TRACK.
*                (T7) = CATALOG SECTOR. 
*                (DPPF) = INCREMENTED FOR CATALOG SEARCH. 
*                (MSRA) = ERROR PROCESSOR ADDRESS FOR *RNS*.
*                (P0 - P4) = INITIALIZED CATALOG SEARCH POINTERS. 
*                CATALOG TRACK INTERLOCK SET. 
*                *SETMS READ* PERFORMED.
* 
*         CALLS  ICT, IRA, PDV. 
* 
*         MACROS ERROR, SETMS.
  
  
 ISP      SUBR               ENTRY/EXIT 
          LDM    SDAA        SET MASTER DEVICE EST ORDINAL
          STD    T5 
          LDM    CCIA        SET CATALOG TRACK
          STD    T6 
          RJM    ICT         INTERLOCK CATALOG TRACK
          AOM    CCIB        SET CATALOG TRACK INTERLOCK FLAG 
 ISP1     LDN    IPCS        PF INCREMENT FOR CATALOG SEARCH
          RAM    AIPF+1 
          RJM    IRA         INITIALIZE RANDOM PROCESSORS 
          LDK    PCC         SET ERROR PROCESSOR ADDRESS FOR *RNS*
          STM    MSRA 
  
*         SET SEARCH POINTERS.
  
          LDN    0           SET STARTING CATALOG TRACK SECTOR
          STD    T7 
          LDN    ZERL        CONTIGUOUS STORAGE INITIALIZATION
          CRD    P0          TEMPORARY CATALOG SEARCH BUFFER POINTERS 
          LDC    BUF1        SET PRIMARY BUFFER POINTER 
          STD    P2 
          LDC    BUF2        SET SECONDARY BUFFER POINTER 
          STD    P3 
          SETMS  READSTR
          RJM    PDV         PROCESS DEVICE STATUS
          UJP    ISPX        RETURN 
 PCC      SPACE  4,10 
**        PCC - PROCESS CATALOG READ ERROR FOR *CHANGE*.
* 
*         ENTRY  READ ERROR DETECTED BY *COMPRNS*.
  
  
 PCC      SUBR               ENTRY
          RJM    PES         PROCESS ERROR STATUS 
          ERROR  MSE,,,EQ    *EQXXX,DNYY, MASS STORAGE ERROR.*
 SCT      SPACE  4,10 
**        SCT - SEARCH CATALOG. 
* 
*         ENTRY  (FN - FN+3) = PF NAME. 
*                (FS - FS+3) = NEW FILE NAME. 
*                (UI - UI+1) = USER INDEX.
* 
*         EXIT   (CB) = CATALOG BUFFER. 
*                (CI) = CATALOG POINTER.
*                (A)  = 0 IF FILE NOT FOUND.
* 
*         USES   CB, CI, P0, P1, T3.
* 
*         CALLS  RNS, CFN.
  
  
 SCT6     LDD    P1 
  
 SCT      SUBR               ENTRY/EXIT 
          LDN    IPCS        PF INCREMENT FOR CATALOG SEARCH
          RAM    AIPF+1 
          UJN    SCT2        READ FIRST SECTOR FOR SEARCH 
  
*         END OF SECTOR.
  
 SCT1     LDC    *           SECTOR WORD COUNT
 SCTA     EQU    *-1
          LPN    77 
          NJN    SCT6        IF EOR 
  
*         READ NEXT SECTOR FOR SEARCH.
  
 SCT2     LDM    P2,P1       SET BUFFER ADDRESS 
          STD    T3 
          LDD    T6          SAVE POSITION OF SECTOR
          STM    -2,T3
          STM    ERRC 
          LDD    T7 
          STM    -1,T3
          STM    ERRD 
          LDD    T3 
          RJM    RNS         READ SECTOR
          ZJN    SCT6        IF EOI 
          STD    P0          SAVE WORD COUNT
          STM    SCTA 
          LPN    NWCE-1 
          ZJN    SCT3        IF INTEGRAL NUMBER OF CATALOG ENTRIES
          ERROR  BCS,,,T5,,EI  *EQXXX,DNYY, BAD CATALOG/PERMIT SECTOR.* 
  
 SCT3     LDN    2
          RAD    T3          SKIP CONTROL BYTES 
          UJN    SCT5        CHECK CATALOG ENTRY
  
*         ADVANCE TO NEXT ENTRY.
  
 SCT4     LDC    NWCE*5      ADVANCE POINTER
          RAD    T3 
          LCN    NWCE        DECREMENT WORD COUNT 
          RAD    P0 
          NJN    SCT5        IF NOT END OF BUFFER 
          LJM    SCT1        PROCESS END OF BUFFER
  
*         CHECK CATALOG ENTRY.
  
 SCT5     LDM    FCUI,T3
          LPN    37 
          SHN    14 
          LMM    FCUI+1,T3
          ZJN    SCT4        IF HOLE
          LMD    UI+1 
          SHN    6
          LMD    UI 
          NJN    SCT4        IF NOT CORRECT USER INDEX
 SCTB     EQU    *-1         PRESET TO *PSN* IF PRIVATE DEVICE
          RJM    CFN         CHECK FILE NAME
          ZJN    SCT4        IF OLD NOT FOUND 
  
*         OLD FILE FOUND. 
  
          AOD    P1          SET NEW BUFFER 
          LDD    T3          SET CATALOG ENTRY POINTERS 
          STD    CI 
          LDD    P2 
          STD    CB 
 SCTC     LDN    0
*         LDN    1           (NO NEW FILE NAME) 
          ZJN    SCT4        IF NEW FILENAME SPECIFIED, CONTINUE SEARCH 
          LJM    SCTX        RETURN 
 SFL      SPACE  4,15 
**        SFL - SET FILE NAMES. 
* 
*         EXIT   (FN - FN+3) = PERMANENT FILE NAME. 
*                (FS - FS+3) = NEW FILE NAME. 
*                (PI) = CATEGORY. 
*                (PI+1) = MODE. 
* 
*         USES   FN - FN+4, FS - FS+4, PI - PI+1. 
* 
*         CALLS  ISP. 
  
  
 SFL      SUBR               ENTRY/EXIT 
          LDD    MA          SET NEW FILE NAME
          CWM    PFNF,ON
          SBN    1
          CRD    FS          SET NEW FILE NAME
          LDD    FS 
          NJN    SFL1        IF NEW FILE NAME 
          AOM    CFNC        SET TO BYPASS CHECK FOR NEW NAME 
          AOM    SCTC        SET TO BYPASS SEARCH FOR NEW NAME
 SFL1     LDM    MODE 
          SCN    77 
          STD    PI          SET CATEGORY 
          LDM    MODE 
          LPN    77 
          STD    PI+1        SET MODE 
          RJM    ISP         INITIALIZE FOR SEARCH OF CATALOG 
          UJN    SFLX        RETURN 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPSDN 
*CALL     COMPRSS 
          SPACE  4,10 
*         EQUIVALENCE EXTERNALLY REFERENCED TAGS. 
  
  
          QUAL   *
  
 PCC      EQU    /".O"/PCC
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          ERRNG  BUF1-2-*    OVERFLOW INTO CATALOG SEARCH BUFFER
  
  
          OVERFLOW  OVLC,EPFW  OVERFLOW INTO ERROR PROCESSING AREA
          OVERLAY  (SETASA/SETAF PROCESSING.) 
          SPACE  4,10 
**        THIS OVERLAY PROCESSES THE COMMANDS *SETASA* AND *SETAF*. 
  
  
 OVL      BSS    0           ENTRY
          RJM    RMD         RESET TO MASTER DEVICE 
          LJM    0,P0        PROCESS COMMAND
          TITLE  COMMAND PROCESSING.
 SAA      SPACE  4,10 
***       PROCESS *SETASA* REQUEST. 
* 
*         SET ALTERNATE STORAGE ADDRESS IN CATALOG ENTRY. 
  
  
 SAA      BSS    0           ENTRY
          LDM    STAT 
          LPK    STTA 
          NJP    SAA3        IF TAPE ALTERNATE STORAGE REQUEST
  
*         SET CARTRIDGE ALTERNATE STORAGE ADDRESS.
  
          LDM    PFAT        GET ALTERNATE STORAGE TYPE 
          LPN    77 
          LMN    ATOD 
          ZJN    SAA0        IF OPTICAL DISK STORAGE
          LDM    FCBS,CI
          SHN    21-13
          MJN    SAA1        IF DIRECT ACCESS FILE
 SAA0     LDM    FCAF,CI
          LPC    AFLOKM 
          NJN    SAA2        IF *AFLOK* STILL SET 
          ERROR  AIO         * NO ALTERNATE STORAGE COPY OF FILE.*
  
 SAA1     RJM    CDA         COMPARE DISK ADDRESS FOR DIRECT ACCESS 
 SAA2     NFA    FA,R        SET FST COMPLETE 
          ADN    FSTL 
          CWD    FS 
          LDN    0           CLEAR ALTERNATE STORAGE FLAGS
          STM    FCAF,CI
          LDM    PFAT        SET ALTERNATE STORAGE TYPE 
          LMM    FCAT,CI
          SCN    77 
          LMM    PFAT 
          STM    FCAT,CI
          LDM    PFAA        SET ALTERNATE STORAGE ADDRESS
          STM    FCAA,CI
          LDM    PFAA+1 
          STM    FCAA+1,CI
          LDM    PFAA+2 
          STM    FCAA+2,CI
          LDM    PFAT 
          LPN    77 
          LMN    ATOD 
          NJN    SAA2.1      IF NOT OPTICAL DISK STORAGE
          LDM    PFOA        SET OPTICAL DISK ADDRESS 
          STM    FCOA,CI
          LDM    PFOA+1 
          STM    FCOA+1,CI
          RJM    UFL         UPDATE FILE LENGTH 
 SAA2.1   LJM    WCE         REWRITE CATALOG ENTRY AND EXIT 
  
*         SET TAPE ALTERNATE STORAGE ADDRESS. 
  
 SAA3     LDM    FCTF,CI
          LPC    TFLOKM 
          NJN    SAA4        IF *TFLOK* STILL SET 
          ERROR  AIO         * NO ALTERNATE STORAGE COPY OF FILE.*
  
 SAA4     LDM    PFTS        SET TAPE SEQUENCE NUMBER 
          LMM    FCTS,CI
          SCN    77 
          LMM    PFTS 
          STM    FCTS,CI
          LDM    PFTS+1 
          STM    FCTS+1,CI
          LDM    PFTV        SET TAPE VSN 
          STM    FCTV,CI
          LDM    PFTV+1 
          STM    FCTV+1,CI
          LDM    PFES        CHECK TAPE FLAGS 
          LPC    -777 
          NJN    SAA6        IF UNDEFINED BITS SPECIFIED
          LDM    PFES        SET TAPE ALTERNATE STORAGE FLAGS 
          STM    FCTF,CI
          RJM    UFL         UPDATE FILE LENGTH 
 SAA5     LJM    WCE         REWRITE CATALOG ENTRY AND EXIT 
  
 SAA6     ERROR  ICU         * INVALID CATALOG UPDATE.* 
 SAF      SPACE  4,10 
***       PROCESS *SETAF* REQUEST.
* 
*         SET/CLEAR ALTERNATE STORAGE FLAGS IN CATALOG ENTRY. 
  
  
 SAF      BSS    0           ENTRY
          LDM    STAT 
          LPK    STTA 
          NJN    SAF1        IF TAPE ALTERNATE STORAGE REQUEST
          RJM    UAF         UPDATE CARTRIDGE ALTERNATE STORAGE FLAGS 
          UJN    SAF2        CONTINUE 
  
 SAF1     RJM    UTF         UPDATE TAPE ALTERNATE STORAGE FLAGS
 SAF2     LJM    WCE         REWRITE CATALOG ENTRY AND EXIT 
          TITLE  SUBROUTINES. 
 CDA      SPACE  4,15 
**        CDA - COMPARE DISK ADDRESSES. 
* 
*         ENTRY  (FS - FS+4) = FST FOR LOCAL FILE.
*                (CI) = ADDRESS OF CATALOG ENTRY. 
* 
*         EXIT   TO *ERR* IF DISK ADDRESSES DO NOT MATCH. 
* 
*         CALLS  PDA, RMD, SDN. 
* 
*         MACROS ERROR. 
  
  
 CDA      SUBR               ENTRY/EXIT 
          LDM    FCDN,CI     CHECK DEVICE NUMBER
          LPN    77 
          ZJN    CDA1        IF FILE ON MASTER DEVICE 
          STD    CM 
          LDM    PFPN+4      SET FAMILY EST ORDINAL 
          RJM    SDN         SEARCH FOR DEVICE NUMBER 
          PJN    CDA1        IF DEVICE FOUND
          ADN    1
          RJM    PDA         PROCESS DEVICE AVAILABILITY
 CDA0.1   ERROR  DAD,CH      * DIRECT ACCESS DEVICE ERROR.* 
  
 CDA1     LDD    T5          CHECK FILE EST ORDINAL 
          LMD    FS 
          ZJN    CDA3        IF FILE ON RIGHT EQUIPMENT 
 CDA2     ERROR  PVE,CH      *PFC VERIFICATION ERROR.*
  
 CDA3     LDM    FCBT,CI     CHECK FIRST TRACK
          LMD    FS+1 
          NJN    CDA2        IF FILE ON WRONG TRACK 
          RJM    RMD         RESET TO MASTER DEVICE 
          UJP    CDAX        RETURN 
 UAF      SPACE  4,10 
**        UAF - UPDATE CARTRIDGE ALTERNATE STORAGE FLAGS. 
* 
*         ENTRY  (CI) = ADDRESS OF CATALOG ENTRY. 
* 
*         EXIT   (FCAF) UPDATED.
*                (FCAF/FCAT/FCAA) CLEARED IF SET REQUEST FOR *AFOBS*, 
*                OR IF SET REQUEST FOR *AFFRE* ON A DISK-RESIDENT FILE. 
* 
*         USES   T1, T2.
  
  
 UAF      SUBR               ENTRY/EXIT 
          LDM    PFES        SAVE SET/CLEAR FLAG
          SCN    77 
          STD    T2 
          LDM    PFES        GET PROCESSOR ADDRESS
          LPN    77 
          STD    T1 
          SBN    AFMAX+1
          PJN    UAF1        IF INVALID FLAG NUMBER 
          LDM    UAFA,T1
          STD    T1 
          LJM    0,T1        PROCESS FLAG 
  
 UAFA     BSS    0           TABLE OF ERROR FLAG PROCESSORS 
          LOC    0
          CON    UAF2        *AFOBS* PROCESSOR
          CON    UAF3        *AFPSE* PROCESSOR
          CON    UAF5        *AFPDE* PROCESSOR
          CON    UAF6        *AFPDR* PROCESSOR
          CON    UAF1        *AFVER* PROCESSOR
          CON    UAF8        *AFTMP* PROCESSOR
          CON    UAF10       *AFFRE* PROCESSOR
          LOC    *O 
  
 UAF1     ERROR  ICU         *INVALID CATALOG UPDATE.*
  
*         PROCESS *ALTERNATE STORAGE COPY OBSOLETE* FLAG. 
  
 UAF2     LDD    T2          PROCESS *AFOBS*
          ZJN    UAF1        IF *CLEAR* REQUEST 
          LDM    FCBT,CI
          ZJN    UAF1        IF NO DISK ADDRESS 
          LDM    FCAF,CI
          LPN    AFPDRM 
          NJN    UAF1        IF *PSEUDO-RELEASE* SET
 UAF2.1   LDN    FCAF        CLEAR *AF*, *AT*, AND *ASA* INFO 
          ADD    CI 
          STM    UAFD 
          LDN    ZERL 
          CRM    *,ON 
 UAFD     EQU    *-1
          LJM    UAFX        RETURN 
  
*         PROCESS *ALTERNATE STORAGE COPY PERMANENT STATUS ERROR* FLAG
  
 UAF3     LDD    T2          PROCESS *AFPSE*
          ZJN    UAF1        IF *CLEAR* REQUEST 
          LDM    FCAF,CI     SET *AFPSE* FLAG 
          SCN    AFPSEM 
          LMN    AFPSEM 
 UAF4     STM    FCAF,CI     UPDATE FLAGS IN CATALOG
          LJM    UAFX        RETURN 
  
*         PROCESS *ALTERNATE STORAGE COPY PERMANENT DATA ERROR* FLAG. 
  
 UAF5     LDD    T2          PROCESS *AFPDE*
          ZJP    UAF1        IF CLEAR REQUEST 
          LDM    FCAF,CI     SET *AFPDE* FLAG 
          SCN    AFPDEM 
          LMN    AFPDEM 
          UJN    UAF4        RETURN 
  
*         PROCESS *ALTERNATE STORAGE COPY PSEUDO-RELEASED* FLAG.
  
 UAF6     LDD    T2          PROCESS *AFPDR*
          NJN    UAF7        IF *SET* REQUEST 
          STM    UAFB 
 UAF7     LDM    FCAF,CI     SET/CLEAR *AFPDR* FLAG 
          SCN    AFPDRM 
 UAFB     LMN    AFPDRM 
*         PSN                (*CLEAR* REQUEST)
          UJN    UAF4        RETURN 
  
*         PROCESS *TEMPORARY ERROR* FLAG. 
  
 UAF8     LDD    T2 
          NJN    UAF9        IF *SET* REQUEST 
          STM    UAFC 
 UAF9     LDM    FCAF,CI     SET/CLEAR *AFTMP* FLAG 
          SCN    AFTMPM 
 UAFC     LMN    AFTMPM 
*         PSN                (*CLEAR* REQUEST)
          UJN    UAF4        RETURN 
  
*         PROCESS *FREE CARTRIDGE* FLAG.
  
 UAF10    LDD    T2          PROCESS *AFFRE* FLAG 
          ZJN    UAF11       IF *CLEAR* REQUEST 
          LDM    FCBT,CI
          NJP    UAF2.1      IF FILE CURRENTLY DISK RESIDENT
          LDN    PSNI        ENABLE SET OF FLAG 
          STM    UAFE 
 UAF11    LDM    FCAF,CI     ALTERNATE STORAGE FLAGS
          LPC    -AFFREM     CLEAR *AFFRE* FLAG 
 UAFE     UJN    UAF12       DO NOT RESET FLAG
*         PSN                (*SET* REQUEST)
          LMC    AFFREM      SET *AFFRE* FLAG 
 UAF12    LJM    UAF4        STORE ALTERNATE STORAGE FLAGS
 UFL      SPACE  4,20 
**        UFL - UPDATE FILE LENGTH. 
* 
*         ENTRY  (CI) = ADDRESS OF PFC ENTRY IN BUFFER. 
* 
*         EXIT   FILE LENGTH UPDATED IN PFC.
* 
*         USES   CM, T6.
* 
*         CALLS  CTA, PDA, RMD, SDN, SEI. 
* 
*         MACROS ERROR, SETMS.
* 
*         NOTES  THIS SUBROUTINE ASSUMES THAT THE FILE IS NOT 
*                CURRENTLY ATTACHED IN A WRITEABLE MODE; THE
*                CORRECTNESS OF THAT ASSUMPTION DEPENDS ON LOGIC IN 
*                *PFDUMP* AND *PFU*.  THIS SUBROUTINE WILL ONLY BE
*                CALLED IF *TFLOK* IS STILL SET, AND *PFDUMP* DOES
*                NOT SET *TFLOK* UNTIL AFTER *PFU* HAS DETERMINED 
*                THAT THE FILE IS NOT BUSY. 
  
  
 UFL      SUBR               ENTRY/EXIT 
          LDM    FCBS,CI
          SHN    21-13
          PJN    UFLX        IF INDIRECT ACCESS FILE
          LDM    FCLF,CI
          ADM    FCLF+1,CI
          NJN    UFLX        IF FILE LENGTH NONZERO 
          LDM    FCDN,CI     CHECK DEVICE NUMBER
          LPN    77 
          ZJN    UFL2        IF FILE ON MASTER DEVICE 
  
*         PROCESS ALTERNATE DEVICE ACCESS.
  
          STD    CM 
          LDM    PFPN+4      SET FAMILY EST ORDINAL 
          RJM    SDN         SEARCH FOR DEVICE NUMBER 
          PJN    UFL2        IF DEVICE FOUND
          ADN    1
          RJM    PDA         PROCESS DEVICE AVAILABILITY
 UFL1     ERROR  DAD,CH      * DIRECT ACCESS DEVICE ERROR.* 
  
*         DETERMINE FILE LENGTH.
  
 UFL2     LDM    FCBT,CI     SET FILE FIRST TRACK 
          STD    T6 
          SETMS  STATUS 
          LDD    CM+4        SET TRT ADDRESS FOR *SEI*
          SHN    3
          ADN    TRLL 
          RJM    CTA         CALCULATE FWA OF TRT 
          SBD    TH 
          STM    SEIA+1 
          SHN    -14
          LMC    ADCI 
          STM    SEIA 
          LDN    0           FORCE CURRENT TRT
          RJM    SEI         SKIP TO EOI
          LDD    T2          SET FILE LENGTH
          STM    FCLF,CI
          LDD    T3 
          STM    FCLF+1,CI
          RJM    RMD         RESET TO MASTER DEVICE 
          UJP    UFLX        RETURN 
 UTF      SPACE  4,20 
**        UTF - UPDATE TAPE ALTERNATE STORAGE FLAGS.
* 
*         ENTRY  (CI) = ADDRESS OF CATALOG ENTRY. 
* 
*         EXIT   (FCTF) UPDATED.
* 
*         USES   T1, T2.
* 
*         NOTE - CODE TO SET AND CLEAR SOME OF THESE FLAGS ARE INCLUDED 
*                IN THIS FUNCTION ONLY FOR TESTING PURPOSES.  DURING
*                NORMAL SYSTEM OPERATION, THE FLAGS ARE SET BY OTHER
*                MEANS.  FOR EXAMPLE, *PFDUMP* SETS THE FLAG *TFLOK*
*                BY CALLING THE *PFU* FUNCTION *CTSL*, AND SETS THE 
*                FLAGS *TFSVS*, *TFLIF*, *TFCTS* AND *TFACS* BY 
*                SPECIFYING THESE BITS ON THE CALL TO *SETASA*. 
  
  
 UTF      SUBR               ENTRY/EXIT 
          LDM    PFES        SAVE SET/CLEAR FLAG
          SCN    77 
          STD    T2 
          LDM    PFES        GET PROCESSOR ADDRESS
          LPN    77 
          STD    T1 
          SBN    TFMAX+1
          PJN    UTF1        IF INVALID FLAG NUMBER 
          LDM    UTFA,T1
          STD    T1 
          LJM    0,T1        PROCESS FLAG 
  
 UTFA     BSS    0           TABLE OF ERROR FLAG PROCESSORS 
          LOC    0
          CON    UTF1        *TFVER* PROCESSOR
          CON    UTF2        *TFSVS* PROCESSOR
          CON    UTF5        *TFPVN* PROCESSOR
          CON    UTF7        *TFSVN* PROCESSOR
          CON    UTF9        *TFEPV* PROCESSOR
          CON    UTF11       *TFESV* PROCESSOR
          CON    UTF13       *TFLIF* PROCESSOR
          CON    UTF15       *TFCTS* PROCESSOR
          CON    UTF17       *TFACS* PROCESSOR
          CON    UTF1        RESERVED 
          CON    UTF1        RESERVED 
          CON    UTF19       *TFLOK* PROCESSOR
          LOC    *O 
  
 UTF1     ERROR  ICU         * INVALID CATALOG UPDATE.* 
  
*         PROCESS *SECONDARY VSN EXISTS* FLAG.
  
 UTF2     LDD    T2          PROCESS *TFSVS*
          NJN    UTF3        IF *SET* REQUEST 
          STM    UTFB 
 UTF3     LDM    FCTF,CI     SET/CLEAR *TFSVS* FLAG 
          SCN    TFSVSM 
 UTFB     LMN    TFSVSM 
*         PSN                (*CLEAR* REQUEST)
 UTF4     STM    FCTF,CI     UPDATE FLAG FIELD IN CATALOG 
          UJP    UTFX        RETURN 
  
*         PROCESS *PRIMARY VSN NOT AVAILABLE* FLAG. 
  
 UTF5     LDD    T2          PROCESS *TFPVN*
          NJN    UTF6        IF *SET* REQUEST 
          STM    UTFC 
 UTF6     LDM    FCTF,CI     SET/CLEAR *TFPVN* FLAG 
          SCN    TFPVNM 
 UTFC     LMN    TFPVNM 
*         PSN                (*CLEAR* REQUEST)
          UJN    UTF4        RETURN 
  
*         PROCESS *SECONDARY VSN NOT AVAILABLE* FLAG. 
  
 UTF7     LDM    FCTF,CI     CHECK IF SECONDARY VSN EXISTS
          LPK    TFSVSM 
          ZJP    UTF1        IF SECONDARY VSN NOT DEFINED 
          LDD    T2 
          NJN    UTF8        IF *SET* REQUEST 
          STM    UTFD 
 UTF8     LDM    FCTF,CI     SET/CLEAR *TFSVN* FLAG 
          SCN    TFSVNM 
 UTFD     LMN    TFSVNM 
*         PSN                (*CLEAR* REQUEST)
          UJN    UTF4        RETURN 
  
*         PROCESS *DATA ERROR ON PRIMARY VSN* FLAG. 
  
 UTF9     LDD    T2 
          NJN    UTF10       IF *SET* REQUEST 
          STM    UTFE 
 UTF10    LDM    FCTF,CI     SET/CLEAR *TFEPV* FLAG 
          SCN    TFEPVM 
 UTFE     LMN    TFEPVM 
*         PSN                (*CLEAR* REQUEST)
          UJP    UTF4        RETURN 
  
*         PROCESS *DATA ERROR ON SECONDARY VSN* FLAG. 
  
 UTF11    LDM    FCTF,CI     CHECK IF SECONDARY VSN EXISTS
          LPK    TFSVSM 
          ZJP    UTF1        IF SECONDARY VSN NOT DEFINED 
          LDD    T2 
          NJN    UTF12       IF *SET* REQUEST 
          STM    UTFF 
 UTF12    LDM    FCTF,CI     SET/CLEAR *TFESV* FLAG 
          SCN    TFESVM 
 UTFF     LMN    TFESVM 
*         PSN                (*CLEAR* REQUEST)
          UJP    UTF4        RETURN 
  
*         PROCESS *FILE ON LI FORMAT TAPE* FLAG.
  
 UTF13    LDD    T2          PROCESS *TFLIF*
          NJN    UTF14       IF *SET* REQUEST 
          STM    UTFG 
          STM    UTFG+1 
 UTF14    LDM    FCTF,CI     SET/CLEAR *TFLIF* FLAG 
          LPC    -TFLIFM
 UTFG     LMC    TFLIFM 
*         PSN                (*CLEAR* REQUEST)
          UJP    UTF4        RETURN 
  
*         PROCESS *FILE ON CARTRIDGE (CT/AT) TAPE* FLAG.
  
 UTF15    LDD    T2          PROCESS *TFCTS*
          NJN    UTF15       IF *SET* REQUEST 
          STM    UTFH 
          STM    UTFH+1 
 UTF16    LDM    FCTF,CI     SET/CLEAR *TFCTS* FLAG 
          LPC    -TFCTSM
 UTFH     LMC    TFCTSM 
*         PSN                (*CLEAR* REQUEST)
          UJP    UTF4        RETURN 
  
*         PROCESS *FILE ON ACS CARTRIDGE (AT) TAPE* FLAG. 
  
 UTF17    LDD    T2          PROCESS *TFACS*
          NJN    UTF18       IF *SET* REQUEST 
          STM    UTFI 
          STM    UTFI+1 
 UTF18    LDM    FCTF,CI     SET/CLEAR *TFACS* FLAG 
          LPC    -TFACSM
 UTFI     LMC    TFACSM 
*         PSN                (*CLEAR* REQUEST)
          UJP    UTF4        RETURN 
  
*         PROCESS *TFLOK* FLAG. 
  
 UTF19    LDD    T2 
          ZJP    UTF1        IF *CLEAR* REQUEST 
          LDM    FCTF,CI     SET *TFLOK* FLAG 
          LPC    -TFLOKM
          LMC    TFLOKM 
          UJP    UTF4        RETURN 
 WCE      SPACE  4,15 
**        WCE - REWRITE CATALOG ENTRY.
* 
*         ENTRY  (CI) = ADDRESS OF CATALOG ENTRY. 
*                (CB) = ADDRESS OF CATALOG BUFFER.
* 
*         EXIT   TO *3PU*.
*                (FCKD) UPDATED AND CATALOG SECTOR REWRITTEN. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  WBI. 
* 
*         MACROS ENDMS. 
  
  
 WCE      BSS    0           ENTRY
          LDN    PDTL        UPDATE CONTROL MODIFICATION DATE 
          CRD    CM 
          LDD    CM+2 
          STM    FCKD,CI
          LDD    CM+3 
          STM    FCKD+1,CI
          LDD    CM+4 
          STM    FCKD+2,CI
          LDD    CB          REWRITE CATALOG BUFFER 
          RJM    WBI
          ENDMS 
          EXECUTE  3PU       TERMINATE PROGRAM
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPSDN 
 SEI$     SET    0           FORCE TRT UPDATE ON *SEI* CALLS
*CALL     COMPSEI 
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          OVERFLOW  OVLC,BUF1-2  OVERFLOW INTO CATALOG BUFFER 
          OVERLAY  (DEVICE TO DEVICE TRANSFER.),LOCG
          SPACE  4,10 
**        THIS OVERLAY PROCESSES DEVICE-TO-DEVICE TRANSFER FOR
*         THE INDIRECT ACCESS FILE COMMANDS *GET*, *OLD*, *SAVE*, 
*         *REPLACE*, AND *APPEND*.
  
  
 OVL      BSS    0           ENTRY
          RJM    CES         CREATE EOI SECTOR
          UJN    ".Q"X       RETURN 
          TITLE  DEVICE-TO-DEVICE TRANSFER MAIN LOOP. 
**        DTD - DEVICE TO DEVICE TRANSFER.
* 
*         ENTRY  (T4 - T7) = MASS STORAGE PARMETERS TO START READ AT. 
*                (SDAA - SDAC) = MASS STORAGE PARAMETERS FOR 1ST WRITE
*                (BB) = ADDRESS TO START READING IN AT. 
*                (FA) = FST ADDRESS.
*                (LF - LF+1) = FILE LENGTH. 
* 
*         CALLS  IBA, PDV, RNS, SDP, WES, WNS.
* 
*         MACROS ERROR, SETMS.
  
  
 DTD      BSS    0           ENTRY
          LDK    PTE         SET ERROR PROCESSOR ADDRESS FOR *RNS*
          STM    MSRA 
 DTD0     LDD    BB 
          RJM    RNS
          LDI    BB 
          ADM    1,BB 
          ZJN    DTD1        IF EOI 
          RJM    IBA         INCREMENT BUFFER ADDRESSES 
          MJN    DTD0        IF BUFFER NOT FULL 
 DTD1     RJM    SDP         SWAP DISK PARAMETERS 
 DTD2     LDI    BB 
          ADM    1,BB 
          ZJP    DTD4        IF EOI SECTOR
          SOD    LF+1        DECREMENT LENGTH 
          PJN    DTD3        IF NO UNDERFLOW
          AOD    LF+1 
          SOD    LF 
          MJP    DTD7        IF LENGTH ERROR
 DTD3     RJM    WNS         WRITE NEXT SECTOR
          RJM    IBA         INCREMENT BUFFER ADDRESSES 
          MJN    DTD2        IF STILL ANOTHER SECTOR IN BUFFER
          RJM    SDP         SWAP DISK PARAMETERS 
          SETMS  READSTR,NS 
          RJM    PDV         PROCESS DEVICE STATUS
          LJM    DTD0        LOOP 
  
*         EOI SECTOR ENCOUNTERED. 
  
 DTD4     LDD    LF          CHECK FILE LENGTH
          ADD    LF+1 
          ZJN    DTD8        IF NO LENGTH ERROR 
          LDD    CC 
          LMN    CCGT 
          ZJN    DTD7        IF *GET* 
          LMN    CCOD&CCGT
          ZJN    DTD7        IF *OLD* 
          LMN    CCUG&CCOD
          ZJN    DTD7        IF *UGET*
  
*         IF EOI ENCOUNTERED ON *SAVE*/*REPLACE*/*APPEND* BEFORE
*         FILE LENGTH EXHAUSTED, FILL TO END OF FILE WITH EOF-S.
  
 DTD5     SOD    LF+1        DECREMENT LENGTH 
          PJN    DTD6        IF STILL MORE SECTORS
          AOD    LF+1 
          SOD    LF 
          MJN    DTD7        IF END OF SPACE
 DTD6     RJM    WNS         WRITE EOF
          UJN    DTD5        CHECK IF MORE EOF-S NEEDED 
  
 DTD7     LJM    PLE         PROCESS LENGTH ERROR 
  
 DTD8     RJM    WES         WRITE EOI SECTOR 
          LDD    FA 
          ZJN    DTD9        IF NOT FST 
          NFA    FA,R 
          ADN    FSTL 
          CWD    FS 
  
 DTD9     LDC    0
 DTDA     EQU    *-1         (TRANSFER ERROR FLAG)
          ZJN    DTD10       IF NO TRANSFER ERRORS
          LDM    SDAA        SET SOURCE EST ORDINAL 
          ERROR  DTE,CH      *DATA TRANSFER ERROR.* 
  
 DTD10    LDM    IAIF        CHECK FOR INDIRECT ALLOCATION INTERLOCK
          ZJN    DTD11       IF INDIRECT ALLOCATION INTERLOCK NOT SET 
          LDD    EQ          CLEAR INTERLOCK (SET CHECKPOINT BIT) 
          ADC    4000 
          STD    CM+1 
          LDM    DVLW 
          STD    CM+2 
          LDN    CTIS 
          STD    CM+3 
          MONITOR  STBM 
*         LDN    0           CLEAR INDIRECT ALLOCATION INTERLOCK FLAG 
          STM    IAIF 
 DTD11    EXECUTE  3PU       TERMINATE PROGRAM
          TITLE  SUBROUTINES. 
 DPC      SPACE  4,10 
**        DPC - DECREMENT PRU COUNTER.
* 
*         ENTRY  (DPCA) PRESET FOR SRU ACCUMULATION OPTION. 
*                       .EQ. 0 TO ACCUMULATE SRUS.
*                       .NE. 0 TO NOT ACCUMULATE SRUS.
* 
*         EXIT   (IAPF) UPDATED IF SPECIFIED NUMBER OF PRUS TRANSFERRED 
*                AND SRU ACCUMULATION OPTION ON.
  
  
 DPC      SUBR               ENTRY/EXIT 
          SOM    DPCB        DECREMENT PRUS TRANSFERRED 
          NJN    DPCX        IF INCREMENT NOT EXHAUSTED 
 DPCA     LDN    0           CHECK SRU ACCUMULATION OPTION
*         LDN    1           (NO SRU ACCUMULATION)
          NJN    DPCX        IF NO SRU ACCUMULATION 
          LDN    IPPR        INCREMENT SRUS FOR TRANSFER
          RAM    AIPF+1 
          SHN    -14
          RAM    AIPF 
          LDN    IPPN        RESET PRU TRANSFER INCREMENT 
          STM    DPCB 
          UJN    DPCX        RETURN 
  
 DPCB     CON    IPPN        PRU TRANSFER INCREMENT 
 IBA      SPACE  4,10 
**        IBA - INCREMENT BUFFER ADDRESS. 
* 
*         EXIT   (A) .LT. 0, IF BUFFER NOT FULL.
  
  
 IBA2     LDC    502         FULL BUFFER NEEDED FOR WRITE ERROR 
          RAD    BB 
          LCN    1
  
 IBA      SUBR               ENTRY/EXIT 
          LDD    BB 
          LMM    SDPA 
          ZJN    IBA2        IF FIRST SECTOR IN BUFFER
          LDI    BB 
          ZJN    IBA1        IF EOF 
          LDM    1,BB        GET LENGTH 
          SHN    2
          ADM    1,BB 
 IBA1     ADN    2
          RAD    BB 
          ADC    -BFMS
          UJN    IBAX        RETURN 
 PLE      SPACE  4,10 
**        PLE - PROCESS LENGTH ERROR. 
* 
*         CALLS  WES. 
* 
*         MACROS ERROR. 
  
  
 PLE      BSS    0           ENTRY
          RJM    WES         WRITE EOI SECTOR 
          LDM    PLEA 
          NJN    PLE1        IF LENGTH ERROR DUE TO HARDWARE FAILURE
          LDM    SDAA        SET SOURCE EST ORDINAL 
          ERROR  FLE,CH,,,,EI  *EQXXX,DNYY, FILE LENGTH ERROR.* 
  
 PLE1     LDM    SDAA        SET SOURCE EST ORDINAL 
          ERROR  FLE,CH      *EQXXX,DNYY, FILE LENGTH ERROR.* 
  
  
 PLEA     CON    0           LINKAGE ERROR DUE TO HARDWARE FAILURE
 PTE      SPACE  4,10 
**        PTE - PROCESS TRANSFER ERROR. 
* 
*         ENTRY  READ ERROR DETECTED BY *COMPRNS*.
* 
*         EXIT   (DTDA) .NE. 0 IF DATA TRANSFER ERROR OCCURRED. 
*                (PLEA) .NE. 0 IF LINKAGE ERROR OCCURRED. 
* 
*         CALLS  PES. 
  
  
 PTE      SUBR               ENTRY/EXIT 
          RJM    PES         PROCESS ERROR STATUS 
          LDM    RDCT        CHECK TYPE OF ERROR
          SHN    21-13
          PJN    PTE1        IF VALID SECTOR READ 
          AOM    PLEA        INDICATE LINKAGE ERROR 
          LDN    0           SET EOI LINKAGE TO TERMINATE TRANSFER
          STM    1,BB 
          STI    BB 
          UJN    PTEX        RETURN 
  
 PTE1     AOM    DTDA        INDICATE TRANSFER ERROR
          UJN    PTEX        RETURN 
 SDP      SPACE  4,15 
**        SDP - SWAP DISK PARAMETERS. 
* 
*         ENTRY  (SDAA - SDAC) = NEXT DEVICE PARAMETERS.
*                (T5 - T7) = CURRENT DEVICE PARAMETERS. 
* 
*         EXIT   (T4 - T7) = DISK INFORMATION FOR NEXT DEVICE.
*                (BB) = STARTING BUFFER ADDRESS.
*                *SETMS* WRITE PERFORMED. 
* 
*         USES   T0 - T7. 
* 
*         CALLS  PDV. 
* 
*         MACROS ENDMS, SETMS.
  
  
 SDP      SUBR               ENTRY/EXIT 
          ENDMS 
          LDN    T5          SWAP DEVICE PARAMETERS 
          STD    T1 
 SDP1     LDI    T1 
          STD    T0 
          LDM    SDAA-T5,T1 
          STI    T1 
          LDD    T0 
          STM    SDAA-T5,T1 
          AOD    T1 
          LMN    T7+1 
          NJN    SDP1        IF NOT ALL PARAMETERS SWAPPGD
          SETMS  IO,NS
          RJM    PDV         PROCESS DEVICE STATUS
          LDM    UERR        SET TRANSFER MODE (REWRITE OR NON-REWRITE) 
          LPC    -EPRW
          LMM    DTMD 
          STM    UERR 
          LDC    BUF         SET BUFFER ADDRESS 
 SDPA     EQU    *-1
          STD    BB 
          STM    WDSE        SET WRITE ERROR BUFFER ADDRESS 
          LJM    SDPX        RETURN 
 SNS      SPACE  4,15 
**        SNS - SET NEXT SECTOR.
* 
*         ENTRY  (T7) = CURRENT SECTOR. 
*                (SNSA) PRESET IF ACCUMULATION DESIRED. 
* 
*         EXIT   (T3) = NEXT SECTOR/TRACK.
* 
*         USES   T3.
* 
*         CALLS  SNT. 
  
  
 SNS      SUBR               ENTRY/EXIT 
          LDD    T7          SET NEXT SECTOR
          ADN    1
          STD    T3 
          LMM    SLM
          NJN    SNSX        IF NOT SECTOR LIMIT
  
*         SET NEXT TRACK. 
  
 SNSA     LDN    0
*         LDN    1           (IF PRU ACCUMULATION DESIRED)
          ZJN    SNS1        IF NO PRU ACCUMULATION 
          LDM    SLM         INCREMENT PRU COUNT FOR NEXT TRACK 
          RAM    AIPR+1 
          SHN    -14
          RAM    AIPR 
 SNS1     RJM    SNT         SET NEXT TRACK 
          STD    T3 
          UJN    SNSX        RETURN 
 WES      SPACE  4,20 
**        WES - WRITE EOI SECTOR. 
* 
*         ENTRY  (T4) = CHANNEL (RESERVED). 
*                (T5) = EST ORDINAL.
*                (T6) = EOI TRACK.
*                (T7) = EOI SECTOR. 
*                (CC) = COMMAND CODE. 
* 
*         EXIT   CHANNEL RELEASED.
*                EOI SET IN TRT IF *GET*, *OLD*, OR *UGET* REQUEST. 
*                TO *WSE* TO PROCESS WRITE ERRORS.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  WEI. 
* 
*         MACROS ENDMS, ERROR, MONITOR. 
  
  
 WES      SUBR               ENTRY/EXIT 
          LDN    0           CLEAR FST ADDRESS
          STD    FA 
          RJM    WEI         WRITE EOI
          MJP    WSE         IF WRITE ERROR 
          ENDMS 
          LDC    *           RESTORE FST ADDRESS
 WESA     EQU    *-1
          STD    FA 
          LDD    CC          CHECK REQUEST
          LMN    CCGT 
          ZJN    WES1        IF *GET* 
          LMN    CCOD&CCGT
          ZJN    WES1        IF *OLD* 
          LMN    CCUG&CCOD
          NJN    WESX        IF NOT *UGET*
 WES1     LDD    T5          SET EST ORDINAL
          STD    CM+1 
          LDD    T6          SET TRACK
          LPC    3777 
          STD    CM+2 
          LDD    T7          SET SECTOR 
          STD    CM+3 
          MONITOR DTKM       SET EOI IN TRT 
          UJP    WESX        RETURN 
  
  
 WEIA     BSSZ   WCEI*5+2    EOI BUFFER 
 WNS      SPACE  4,15 
**        WNS - WRITE NEXT SECTOR.
* 
*         WRITE SECTOR WITH NEW LINKAGE.  USES OLD WORD COUNT AND 
*         EOF FLAGS.  SYSTEM SECTORS ARE HANDLED PROPERLY ALSO. 
*         PRU INCREMENTS AND PF INCREMENTS ARE UPDATED. 
* 
*         ENTRY  (BB) = ADDRESS OF SECTOR BUFFER. 
* 
*         EXIT   TO *WSE* TO PROCESS WRITE ERRORS.
* 
*         USES   T1, T3 - T7. 
* 
*         CALLS  SNT, WDS.
  
  
 WNS      SUBR               ENTRY/EXIT 
          RJM    SNS         SET NEXT SECTOR
          LDI    BB 
          NJN    WNS1        IF NOT EOF 
  
*         PROCESS EOF.
  
          LDD    T3          SET NEXT SECTOR ADDRESS
          STM    1,BB 
          UJN    WNS3        WRITE SECTOR 
  
*         PROCESS SYSTEM SECTOR.
  
 WNS1     LMC    3777 
          NJN    WNS2        IF NOT SYSTEM SECTOR 
          LDD    T3          SET NEXT SECTOR ADDRESS
          STM    NSSS-BFMS,BB 
          UJN    WNS3        WRITE SECTOR 
  
*         PROCESS DATA SECTOR.
  
 WNS2     LDD    T3          SET NEXT SECTOR ADDRESS
          STI    BB 
  
*         WRITE SECTOR. 
  
 WNS3     LDD    BB 
          STD    T1 
          RJM    IBA         INCREMENT BUFFER ADDRESS 
          SHN    -21
          ZJN    WNS4        IF END OF BUFFER 
          LDC    WCSF&WLSF   WRITE CONSECUTIVE SECTOR 
 WNS4     LMD    T1+WLSF     WRITE LAST SECTOR
          STD    BB          RESET BUFFER ADDRESS 
          RJM    WDS
          MJN    WSE         IF WRITE ERROR 
          RJM    DPC         DECREMENT PRU COUNT
  
*         SET NEXT SECTOR.
  
          LDD    T3          SET NEXT SECTOR
          STD    T7 
          SHN    21-13
          PJN    WNS5        IF NOT TRACK POINTER 
          SHN    -21+13      SET NEXT TRACK 
          STD    T6 
          LDN    0
          STD    T7 
 WNS5     LJM    WNSX        RETURN 
 WSE      SPACE  4,15 
**        WSE - WRITE MASS STORAGE ERROR PROCESSOR. 
* 
*         ENTRY  (PWRF) = *PFM* RESTART FLAGS FOR RECALL. 
*                (RDCT) = DRIVER STATUS.
*                (STAT) = *STNS* BIT SET IF JOB SUSPENSION NOT ALLOWED. 
* 
*         EXIT   (PWRF) = *RFRR* FLAG SET IF REQUEST TO BE RETRIED
*                         DUE TO UNRECOVERABLE WRITE ERROR. 
*                TO *ERR* TO RETRY REQUEST OR ISSUE ERROR MESSAGE.
* 
*         MACROS ERROR. 
  
  
 WSE      BSS    0           ENTRY
          LDM    STAT        *PFM* STATUS BITS
          LPK    STNS 
          NJN    WSE3        IF JOB SUSPENSION INHIBITED
          LDM    RDCT        DRIVER STATUS
          SHN    21-12
          PJN    WSE1        IF RECOVERABLE ERROR 
          LDM    PWRF        CHECK RESTART FLAGS
          LPK    RFRR 
          NJN    WSE2        IF REQUEST ALREADY RETRIED 
          LDK    RFRR        SET RETRY REQUEST FLAG 
          RAM    PWRF 
 WSE1     ERROR  RTR,CH      RETRY REQUEST
  
 WSE2     ERROR  MSE,CH,,T5  *EQXXX,DNYY, MASS STORAGE ERROR.*
  
 WSE3     ERROR  MSE,CH,,T5,,EI  *EQXXX,DNYY, MASS STORAGE ERROR.*
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPWEI 
 BUF      SPACE  4,10 
*         BUF - BUFFER USED IN DEVICE TO DEVICE TRANSFER. 
  
  
 BUF      BSS    0
  
 .BUFL    SET    EPFW-BUF 
          ERRNG  .BUFL-5020  NOT ROOM FOR 8 SECTORS IN BUFFER 
 CES      SPACE  4,10 
**        CES - CREATE EOI SECTOR.
* 
*         ENTRY  (CC) = COMMAND CODE. 
*                (FA) = FST ADDRESS.
*                (FS - FS+4) = FST IMAGE (*GET*/*OLD*/*UGET* REQUEST).
*                (SDAA - SDAC) = PARAMETERS FOR 1ST WRITE.
* 
*         EXIT   (WEIA) SET UP WITH EOI DATA. 
*                (WESA) = FST ADDRESS.
  
  
 CES2     LDD    MA          MOVE FST INFORMATION TO EOI BUFFER 
          CWM    SDAA,ON
          SBN    1
 CES3     CRM    WEIA+FSEI,ON 
          LDD    FA          SAVE FST ADDRESS 
          STM    WESA 
          NFA    FA,R        COPY FILE NAME TO EOI BUFFER 
          ADK    FNTL 
          CRM    WEIA+FNEI,ON 
  
 CES      SUBR               ENTRY/EXIT 
          LDD    CC          CHECK REQUEST
          LMN    CCGT 
          ZJN    CES1        IF *GET* FUNCTION
          LMN    CCOD&CCGT
          ZJN    CES1        IF *OLD* 
          LMN    CCUG&CCOD
          NJN    CES2        IF NOT *UGET*
 CES1     LDD    MA          COPY FST IMAGE TO EOI BUFFER 
          CWD    FS 
          UJN    CES3        READ FST ENTRY 
          SPACE  4,10 
*         EQUIVALENCE EXTERNALLY REFERENCED TAGS. 
  
  
          QUAL   *
  
 BUF      EQU    /".O"/BUF
 DPCA     EQU    /".O"/DPCA 
 DPCB     EQU    /".O"/DPCB 
 DTD      EQU    /".O"/DTD
 DTDA     EQU    /".O"/DTDA 
 IBA      EQU    /".O"/IBA
 PLE      EQU    /".O"/PLE
 PLEA     EQU    /".O"/PLEA 
 PTE      EQU    /".O"/PTE
 SDP      EQU    /".O"/SDP
 SDPA     EQU    /".O"/SDPA 
 SNSA     EQU    /".O"/SNSA 
 WNS      EQU    /".O"/WNS
          OVERLAY  (APPEND - ORIGINAL FILE TRANSFER.),(BUF+5) 
          SPACE  4,10 
**        THIS OVERLAY (TOGETHER WITH OVERLAY *3PP*) PERFORMS THE 
*         DEVICE-TO-DEVICE TRANSFER OF THE ORIGINAL PERMANENT FILE, 
*         WHEN REQUIRED, FOR THE INDIRECT ACCESS FILE COMMAND 
*         *APPEND*.  ONCE THIS TRANSFER IS COMPLETE, OVERLAY *3PP*
*         IS CALLED TO COPY THE LOCAL FILE. 
  
  
 OVL      BSS    0           ENTRY
          UJN    ".Q"X       RETURN AFTER LOAD
 ADT      SPACE  4,15 
**        ADT - APPEND DISK TRANSFER. 
* 
*         ENTRY  (FS - FS+4) = FST ENTRY FOR SYSTEM FILE. 
*                (PFFN) = BEGINNING TRACK OF READ FILE. 
*                (PFFN+1) = BEGINNING SECTOR OF READ FILE.
* 
*         EXIT   TO *DTD*.
*                TO *PLE* FOR LENGTH ERRORS.
* 
*         USES   BB, P0, P1, T5, T6, T7, CM - CM+4, LF - LF+1.
* 
*         CALLS  CSS, CTI, DTD, IBA, PDV, PLE, RNS, RSS, SDP, STI, WNS. 
* 
*         MACROS ENDMS, ERROR, MONITOR, SETMS.
  
  
 ADT      BSS    0           ENTRY
          LDK    PTE         SET ERROR PROCESSOR ADDRESS FOR *RNS*
          STM    MSRA 
 ADT2     LDD    BB          READ NEXT SECTOR 
          RJM    RNS
          LDI    BB 
          ADM    1,BB 
          ZJN    ADT3        IF EOI 
          RJM    IBA         INCREMENT BUFFER ADDRESSES 
          MJN    ADT2        IF BUFFER NOT FULL 
 ADT3     RJM    SDP         SWAP DISK PARAMETERS 
 ADT4     LDI    BB 
          ADM    1,BB 
          ZJN    ADT6        IF EOI SECTOR
          SOD    LF+1        DECREMENT LENGTH 
          PJN    ADT5        IF NO UNDEFLOW 
          AOD    LF+1 
          SOD    LF 
          PJN    ADT5        IF NO LENGTH ERROR 
          LJM    PLE         PROCESS LENGTH ERROR 
  
 ADT5     RJM    WNS         WRITE NEXT SECTOR
          RJM    IBA         INCREMENT BUFFER ADDRESS 
          MJN    ADT4        IF STILL ROOM IN BUFFER
          RJM    SDP         SWAP DISK PARAMETERS 
          SETMS  READSTR,NS 
          RJM    PDV         PROCESS DEVICE STATUS
          LJM    ADT2        LOOP 
  
*         CHECK FOR DELAYED DELINK REQUEST FOR ORIGINAL FILE. 
  
 ADT6     LDM    APDK+1 
          ZJP    ADT9        IF NO DELINK REQUESTED 
          ENDMS 
          LDD    MA          COPY DELINK PARAMETERS 
          CWM    APDK,ON
          SBN    1
          CRD    CM 
          MONITOR DLKM
          LDM    STAT 
          LPC    STBD+STXC
          LMC    STBD+STXC
          ZJN    ADT9        IF EXTENDING CHAIN ON BUFFERED DEVICE
          LDD    EQ          CLEAR INDIRECT ALLOCATION INTERLOCK
          STD    CM+1 
          LDM    DVLW 
          STD    CM+2 
          LDN    CTIS 
          STD    CM+3 
          MONITOR  STBM 
*         LDN    0           CLEAR INDIRECT ALLOCATION INTERLOCK FLAG 
          STM    IAIF 
  
*         COPY LOCAL FILE TO INDIRECT FILE. 
  
 ADT9     SOM    DPCA        ENABLE SRU ACCUMULATION
          LDN    IPPN        RESET PRU TRANSFER INCREMENT 
          STM    DPCB 
          LDD    FS          SET UP LOCAL FILE PARAMETERS 
          STM    SDAA 
          LDD    FS+1 
          STM    SDAB 
          LDN    FSMS 
          STM    SDAC 
          LDC    BUF         RESET BUFFER ADDRESS 
          STM    SDPA 
          RJM    SDP         SWAP DISK PARAMETERS 
          SETMS  READSTR,NS 
          RJM    PDV         PROCESS DEVICE STATUS
          LJM    DTD         ENTER DEVICE TO DEVICE TRANSFER
 BUFA     SPACE  4,10 
*         BUFA - BUFFER FOR DEVICE TO DEVICE TRANSFER OF
*                EXISTING INDIRECT FILE.
  
  
 BUFA     BSS    0
  
 .BUFAL   SET    EPFW-BUFA
          ERRNG  .BUFAL-4316 NOT ROOM FOR 7 SECTORS IN BUFFER 
          SPACE  4,10 
*         EQUIVALENCE EXTERNALLY REFERENCED TAGS. 
  
  
          QUAL   *
  
 ADT      EQU    /".O"/ADT
 BUFA     EQU    /".O"/BUFA 
          OVERLAY  (STAGE FILE FROM ALTERNATE STORAGE.) 
 SPF      SPACE  4,15 
**        THIS OVERLAY INITIATES A STAGE OPERATION FOR A FILE WHICH 
*         IS NOT CURRENTLY RESIDENT ON DISK, BUT WHICH HAS A VALID
*         COPY ON ALTERNATE STORAGE.  THIS IS ACCOMPLISHED BY 
*         ISSUING A *TDAM* REQUEST TO THE APPROPRIATE EXECUTIVE TO
*         INITIATE STAGING OF THE FILE.  THE JOB IS THEN PLACED IN
*         TIMED-EVENT ROLLOUT TO AWAIT COMPLETION OF THE STAGE.  THE
*         ORIGINAL *PFM* REQUEST WILL BE REISSUED AUTOMATICALLY WHEN
*         THE JOB ROLLS IN. 
  
  
 SPF      BSS    0           ENTRY
          RJM    RMD         RESET TO MASTER DEVICE 
          RJM    CCC         CHECK FOR CARTRIDGE COPY 
          STD    P2          SAVE CARTRIDGE COPY STATUS 
          RJM    CTC         CHECK FOR TAPE COPY
          STD    P3          SAVE TAPE COPY STATUS
          RJM    UPF         UPDATE PFC 
  
*         CHECK ERROR STATUS. 
  
          LDN    0           INDICATE CARTRIDGE STAGING ATTEMPT 
          STD    P1 
          LDD    P2 
          ZJN    SPF5        IF NO ERROR ON CARTRIDGE COPY
          AOD    P1          INDICATE TAPE STAGING ATTEMPT
          LDD    P3 
          ZJN    SPF5        IF NO ERROR ON TAPE COPY 
  
*         FILE CANNOT BE STAGED - DETERMINE CORRECT ERROR MESSAGE.
  
          LDD    P2          CHECK CARTRIDGE COPY ERROR STATUS
          SBN    1
          NJN    SPF1        IF CARTRIDGE COPY EXISTS 
          LDD    P3          CHECK TAPE COPY ERROR STATUS 
          SBN    1
          NJN    SPF1        IF TAPE COPY EXISTS
          ERROR  AIO,CH,IW   * NO ALTERNATE STORAGE COPY EXISTS.* 
  
 SPF1     LDD    P2          CHECK CARTRIDGE COPY ERROR STATUS
          SBN    2
          ZJN    SPF2        IF STAGING DISABLED ERROR
          LDD    P3          CHECK TAPE COPY ERROR STATUS 
          SBN    2
          NJN    SPF3        IF NOT STAGING DISABLED ERROR
 SPF2     ERROR  SGD,CH,IW   * STAGING DISABLED.* 
  
 SPF3     LDD    P2          CHECK CARTRIDGE COPY ERROR STATUS
          SBN    3
          NJN    SPF4        IF NOT TEMPORARY ERROR 
          ERROR  TPE,CH,IW   *(NAME) TEMPORARY ERROR, TRY LATER.* 
  
 SPF4     ERROR  PPE,CH,IW   *(FILE NAME) PERMANENT ERROR.* 
  
*         LOOP *MXRL* TIMES ISSUING *TDAM* REQUESTS TO THE EXECUTIVE. 
  
 SPF5     RJM    STR         SETUP *TDAM* REQUEST 
          LDC    ART         SET ROLLOUT TIME LIMIT 
          STM    ERRD 
          LDN    0           INITIALIZE FOR LOOP
          STD    P0 
  
*         CHECK IF STAGING STILL ENABLED. 
  
 SPF6     LDN    SSTL        CHECK FOR STAGING DISABLED 
          CRD    CM 
          LDD    P1 
          NJN    SPF8        IF TAPE STAGING REQUEST
          LDD    CM 
          SHN    21-6 
          PJN    SPF9        IF CARTRIDGE STAGING ENABLED 
 SPF7     ERROR  SGD,CH,IW   *STAGING DISABLED.*
  
 SPF7.1   LDD    CM+1        CHECK FOR *ACS TAPE PF STAGING* ENABLED
          SHN    21-11
          UJN    SPF8.1      CHECK IF ENABLED 
  
 SPF8     LDM    FCTF,CI
          SHN    21-TFACS 
          MJN    SPF7.1      IF FILE ON ACS CARTRIDGE TAPE
          LDD    CM+1        CHECK FOR *TAPE PF STAGING* ENABLED
          SHN    21-7 
 SPF8.1   MJN    SPF7        IF STAGING DISABLED
  
*         ISSUE *TDAM* REQUEST. 
  
 SPF9     LDN    1           SET WRITE FUNCTION 
          STD    CM+1 
 SPFA     LDC    MTSI        SET *MAGNET* SUBSYSTEM ID
*         LDC    MFSI        (SET *MSS* SUBSYSTEM ID) 
*         LDC    AFSI        (SET *MSE* SUBSYSTEM ID) 
          STD    CM+2 
          LDC    6*100       SET MESSAGE LENGTH 
          STD    CM+3 
 SPFB     LDC    /MTX/PFTB   SET ADDRESS OF *MAGNET* *TDAM* BUFFER
*         LDC    MIRE        SET ADDRESS OF *MSS*/MSE* *TDAM* BUFFER
          STD    CM+4 
          MONITOR  TDAM      ISSUE *TDAM* REQUEST 
          LJM    SPFC,CM+1   PROCESS ACCORDING TO *TDAM* REQUEST STATUS 
  
 SPFC     BSS    0           *TDAM* STATUS PROCESSOR TABLE
          UJN    SPF10       (ST=0) *TDAM* REQUEST ACCEPTED 
          UJN    SPF12       (ST=1) STORAGE MOVE IN PROGRESS
          UJN    SPF13       (ST=2) NOT READY FOR DATA
          UJN    SPF12       (ST=3) REJECT (NONZERO FIRST WORD) 
          UJN    SPF13       (ST=4) INACTIVE
  
*         PROCESS THE (ST=0) NORMAL STATUS CASE OF ACCEPTED REQUEST.
  
 SPF10    RJM    ISM         ISSUE REQUEST STAGE MESSAGE
          LDD    CC 
          LMN    CCSP 
          ZJN    SPF11       IF *STAGEPF* REQUEST 
          EXIT   PSI,CH,IW,,EC2  *(PFN) STAGE INITIATED.* 
  
 SPF11    EXECUTE  3PU       TERMINATE *PFM* WITH NO ERROR STATUS 
  
*         PROCESS THE (ST=1)/(ST=3) STATUS CASES. 
  
 SPF12    AOD    P0          TRY *TDAM* *MXRL* TIMES
          SBN    MXRL 
          ZJN    SPF13       IF TIME TO GIVE UP 
          PAUSE  NE 
          LDC    370001+SBNI DELAY
          NJN    *-1         IF DELAY NOT EXHAUSTED 
          UJP    SPF6        CONTINUE REQUEST LOOP
  
*         PROCESS THE (ST=2)/(ST=4) STATUS CASES. 
  
 SPF13    LDN    0           SET EST ORDINAL FOR EVENT
          STM    ERRE 
 SPFD     LDC    MTXE        SET WAITING FOR *MAGNET* EVENT 
*         LDC    MSXE        (SET WAITING FOR *MSS* EVENT)
*         LDC    ASXE        (SET WAITING FOR *MSE* EVENT)
          STM    ERRC 
          EXIT   PWE,CH,IW,,EC1 *(PFN) WAITING FOR SUBSYSTEM.*
          TITLE  SUBROUTINES. 
 CCC      SPACE  4,20 
***       CCC - CHECK FOR CARTRIDGE ALTERNATE STORAGE COPY OF FILE. 
* 
*         ENTRY  (CI) = ADDRESS OF PFC ENTRY IN BUFFER. 
* 
*         EXIT   (A) = 0 IF CARTRIDGE COPY AVAILABLE. 
*                    = 1 IF NO CARTRIDGE COPY EXISTS. 
*                    = 2 IF COPY EXISTS BUT CARTRIDGE STAGING DISABLED. 
*                    = 3 IF COPY EXISTS BUT TEMPORARY ERROR FLAG SET. 
*                    = 4 IF COPY EXISTS BUT PERMANENT ERROR FLAG SET. 
*                *AFTMP* ERROR FLAG CLEARED IN PFC, IF PRESENT. 
* 
*         USES   CM - CM+4. 
  
  
 CCC4     LDN    1           SET *NO CARTRIDGE COPY EXISTS* STATUS
  
 CCC      SUBR               ENTRY/EXIT 
          LDM    FCAA,CI
          ADM    FCAA+1,CI
          ADM    FCAA+2,CI
          ZJN    CCC4        IF NO CARTRIDGE ALTERNATE STORAGE COPY 
          LDM    FCAF,CI
          LPK    AFOBSM 
          NJN    CCC4        IF CARTRIDGE COPY OBSOLETE 
          LDK    SSTL        CHECK IF CARTRIDGE STAGING ENABLED 
          CRD    CM 
          LDD    CM 
          SHN    21-6 
          PJN    CCC2        IF CARTRIDGE PF STAGING ENABLED
          LDN    2           SET *STAGING DISABLED* STATUS
 CCC1     UJN    CCCX        RETURN 
  
*         CLEAR CARTRIDGE TEMPORARY ERROR FLAG, IF PRESENT. 
  
 CCC2     LDD    CC 
          LMN    CCSP 
          ZJN    CCC3        IF *STAGEPF* REQUEST 
          LDM    FCAF,CI
          LPN    AFTMPM 
          ZJN    CCC3        IF NO TEMPORARY ERROR
          LMM    FCAF,CI     CLEAR TEMPORARY ERROR FLAG 
          STM    FCAF,CI
          LDN    3           SET *TEMPORARY ERROR FLAG* STATUS
          UJN    CCC1        RETURN 
  
 CCC3     LDM    FCAF,CI     CHECK FOR CARTRIDGE ERROR FLAGS
          LPN    AFPSEM+AFPDEM
          ZJN    CCC1        IF NO PERMANENT ERRORS, RETURN *AVAILABLE* 
          LDN    4           SET *PERMANENT ERROR FLAG* STATUS
          UJN    CCC1        RETURN 
 CTC      SPACE  4,15 
**        CTC - CHECK FOR TAPE ALTERNATE STORAGE COPY OF FILE.
* 
*         ENTRY  (CI) = ADDRESS OF PFC ENTRY IN BUFFER. 
* 
*         EXIT   (A) = 0 IF TAPE COPY AVAILABLE.
*                    = 1 IF NO TAPE COPY EXISTS.
*                    = 2 IF COPY EXISTS BUT TAPE STAGING DISABLED.
*                    = 3 IF COPY EXISTS BUT *VSN MISSING* FLAG SET. 
*                    = 4 IF COPY EXISTS BUT *DATA ERROR* FLAG SET.
* 
*         USES   T1, CM - CM+4. 
* 
*         CALLS  STT. 
  
  
 CTC6     LDN    1           SET *NO COPY EXISTS* STATUS
  
 CTC      SUBR               ENTRY/EXIT 
          LDM    FCTV,CI
          ADM    FCTV+1,CI
          ZJN    CTC6        IF NO TAPE ALTERNATE STORAGE COPY OF FILE
          LDK    SSTL        CHECK IF TAPE STAGING IS ENABLED 
          CRD    CM 
          LDM    FCTF,CI
          STD    T1          SAVE (FCTF)
          SHN    21-TFACS 
          MJN    CTC0.1      IF FILE ON ACS CARTRIDGE TAPE
          LDD    CM+1        CHECK FOR *TAPE PF STAGING* ENABLED
          SHN    21-7 
          PJN    CTC1        IF TAPE STAGING IS ENABLED 
 CTC0     LDN    2           SET *STAGING DISABLED* STATUS
          UJN    CTCX        RETURN 
  
 CTC0.1   LDD    CM+1        CHECK FOR *ACS TAPE PF STAGING* ENABLED
          SHN    21-11
          MJN    CTC0        IF ACS TAPE STAGING IS DISABLED
 CTC1     LDD    T1 
          LPK    TFPVNM+TFEPVM
          ZJN    CTC5        IF NO ERRORS ON PRIMARY VSN
          LDD    T1 
          LPK    TFSVSM 
          NJN    CTC4        IF SECONDARY VSN EXISTS
 CTC2     LDD    T1 
          LPK    TFPVNM 
          ZJN    CTC3        IF PRIMARY VSN AVAILABLE 
          LDN    3           SET *VSN NOT AVAILABLE* STATUS 
          UJN    CTC5.1      RETURN 
  
 CTC3     LDN    4           SET *DATA ERROR* STATUS
          UJN    CTC5.1      RETURN 
  
 CTC4     LDD    T1 
          LPK    TFSVNM+TFESVM
          ZJN    CTC5        IF NO ERRORS ON SECONDARY VSN
          LPK    TFSVNM 
          NJN    CTC2        IF SECONDARY VSN NOT AVAILABLE 
          UJN    CTC3        SET *DATA ERROR* STATUS
  
 CTC5     LDN    0           SET *COPY AVAILABLE* STATUS
 CTC5.1   LJM    CTCX        RETURN 
 GEE      SPACE  4,15 
**        GEE - GET EST ORDINAL FOR EVENT.
* 
*         ENTRY  (P1) .NE. 0 IF TAPE STAGE REQUEST. 
*                (GEEA) PRESET WITH CORRECT EQUIPMENT MNEMONIC. 
* 
*         EXIT   (T5) = EST ORDINAL FOR EVENT.
*                       FOR *MSS* STAGE, ORDINAL OF FIRST *CS* EST. 
*                       FOR *MSE* STAGE, ORDINAL OF FIRST *SS* EST. 
*                       FOR TAPE STAGE, ORDINAL OF FIRST *MT*/*NT* EST. 
* 
*         USES   T5, T6, T0 - T0+4. 
* 
*         MACROS ERROR, SFA.
  
  
 GEE      SUBR               ENTRY/EXIT 
  
*         INITIALIZE FOR EST SEARCH.
  
          LDN    ESTP        CALCULATE NUMBER OF EST ENTRIES
          CRD    T0 
          LDN    NOPE        INITIALIZE EST ORDINAL FOR SEARCH
          STD    T5 
          LDD    T0+2        SAVE LAST EST ORDINAL + 1
          STD    T6 
  
*         SEARCH FOR ALTERNATE STORAGE EQUIPMENT. 
  
 GEE1     SFA    EST,T5      READ EST ENTRY 
          ADK    EQDE 
          CRD    T0 
          LDD    T0+3        CHECK EQUIPMENT MNEMONIC 
 GEEA     LMC    2RMT        EQUIPMENT MNEMONIC FOR TAPE STAGE
*         LMC    2RCS        (EQUIPMENT MNEMONIC FOR *MSS* STAGE) 
*         LMC    2RSS        (EQUIPMENT MNEMONIC FOR *MSE* STAGE) 
          ZJN    GEEX        IF CORRECT EQUIPMENT MNEMONIC
          LDD    P1 
          ZJN    GEE2        IF NOT TAPE STAGE REQUEST
          LDD    T0+3        CHECK EQUIPMENT MNEMONIC AGAIN 
          LMC    2RNT        OTHER EQUIPMENT MNEMONIC FOR TAPE STAGE
          ZJN    GEEX        IF CORRECT EQUIPMENT MNEMONIC
 GEE2     AOD    T5          ADVANCE EST ORDINAL
          LMD    T6 
          NJN    GEE1        IF NOT END OF EST
          ERROR  PFN,CH,IW   *DEVICE UNAVAILABLE.*
 ISM      SPACE  4,15 
**        ISM - ISSUE REQUEST STAGE MESSAGE.
* 
*         ISSUES AN *STRS* ACCOUNT FILE MESSAGE TO INDICATE THAT THE
*         REQUEST FOR STAGE WAS SENT TO *MAGNET*. 
* 
*         ENTRY  (CI) = CATALOG INDEX POINTER TO CATALOG ENTRY. 
*                (P1) .NE. 0 IF TAPE STAGE REQUEST. 
*                (MSTA) = MST ADDRESS/10. 
* 
*         EXIT   ACCOUNT FILE MESSAGE ISSUED. 
* 
*         USES   T1, CM - CM+4. 
* 
*         CALLS  ACS, C2D, DFM. 
  
  
 ISM      SUBR               ENTRY/EXIT 
          LDD    P1 
 ISME     ZJN    ISMX        IF NOT TAPE PF STAGE REQUEST 
*         PSN                (IF OPTICAL DISK REQUEST)
          LDC    ISMB+3      INITIALIZE POINTER FOR *ACS* CALLS 
          STD    T1 
  
*         SET FILENAME INTO MESSAGE.
  
          LDD    CI          SET ADDRESS OF CATALOG ENTRY 
          RAM    ISMA+1 
          LDD    MA 
 ISMA     CWM    FCFN,ON     PFN AND UI 
          SBN    1           READ PFN 
          CRD    CM 
          LDD    CM+3 
          SCN    77 
          STD    CM+3        CLEAR UI BITS FROM PFN 
          LDN    CM          INSERT FILE NAME IN BUFFER 
          RJM    ACS
          LDC    ISMC        APPEND COMMA 
          RJM    ACS
  
*         CONVERT USER INDEX TO DISPLAY CODE. 
  
          LDD    MA          READ UI
          CRD    CM 
          LDD    CM+3 
          RJM    C2D         CONVERT 2 OCTAL DIGITS TO DISPLAY CODE 
          STD    CM 
          LDD    CM+4 
          SHN    -6 
          RJM    C2D         CONVERT 2 OCTAL DIGITS TO DISPLAY CODE 
          STD    CM+1 
          LDD    CM+4 
          RJM    C2D         CONVERT 2 OCTAL DIGITS TO DISPLAY CODE 
          STD    CM+2 
  
*         SUPPRESS LEADING ZEROS ON USER INDEX. 
  
          LDN    0           TERMINATE STRING BUFFER
          STD    CM+3 
          STD    CM+4        CLEAR STARTING BYTE OFFSET 
 ISM1     LDM    CM,CM+4
          ADC    -2R00
          STD    T0 
          SCN    77 
          NJN    ISM3        IF UPPER DIGIT IS NON-ZERO 
          LDD    T0 
          LPN    77 
          NJN    ISM2        IF LOWER DIGIT IS NON-ZERO 
          AOD    CM+4        INCREMENT OFFSET 
          SBN    3
          MJN    ISM1        IF ALL BYTES NOT EXAMINED
          SOD    CM+4        CORRECT OFFSET 
  
*         SET USER INDEX INTO MESSAGE.
  
 ISM2     LDM    CM,CM+4     LOWER DIGIT OF BYTE IS FIRST DIGIT 
          SHN    6
          SCN    77 
          STM    CM,CM+4
          LDN    CM 
          ADD    CM+4 
          RJM    ACS         APPEND CHARACTERS TO STRING
          AOD    CM+4 
          SBN    3
          PJN    ISM4        IF LAST BYTE WAS SENT
 ISM3     LDN    CM 
          ADD    CM+4 
          RJM    ACS         APPEND CHARACTERS TO STRING
 ISM4     LDC    ISMC        APPEND COMMA 
          RJM    ACS
  
*         SET FAMILY/PACK NAME INTO MESSAGE.
  
          LDM    MSTA        READ FAMILY/PACK NAME
          SHN    3
          ADN    PFGL 
          CRD    CM 
          LDD    CM+3        CLEAR RESERVED FIELD 
          SCN    77 
          STD    CM+3 
          LDN    CM          INSERT FAMILY IN BUFFER
          RJM    ACS
          LDC    ISMD        APPEND TERMINATOR
          RJM    ACS
  
*         ISSUE MESSAGE.
  
          LDC    ISMB+ACFN   ISSUE MESSAGE TO ACCOUNT FILE
          RJM    DFM
          LJM    ISMX        RETURN 
  
  
 ISMB     DATA   C*STRS, *   ACCOUNT FILE MESSAGE BUFFER
          BSSZ   14D
 ISMC     DATA   2H,         MESSAGE SEPARATOR
          CON    0           END OF STRING
 ISMD     DATA   2H.         MESSAGE TERMINATOR 
          CON    0           END OF STRING
 STR      SPACE  4,25 
**        STR - SETUP *TDAM* REQUEST. 
* 
*         ENTRY  (CB) = CATALOG BUFFER. 
*                (CB-1) = CATALOG SECTOR. 
*                (CB-2) = CATALOG TRACK.
*                (CI) = CATALOG INDEX POINTER TO CATALOG ENTRY. 
*                (EQ) = MASTER DEVICE EST ORDINAL.
*                (FN - FN+4) = FILE NAME. 
*                (MSEQ) = ALTERNATE STORAGE EST ORDINAL.
*                (MSTA) = MST ADDRESS/10. 
*                (PFPN - PFPN+4) = PERMANENT FILE CONTROL WORD. 
*                (PFUI - PFUI+1) = USER INDEX.
*                (P1) .NE. 0 IF TAPE STAGE REQUEST. 
*                (UI - UI+1) = USER INDEX.
* 
*         EXIT   MESSAGE BUFFER SETUP FOR *TDAM* REQUEST. 
*                (ERRE), (ERRC) SET WITH EVENT TO ROLL JOB OUT WITH.
*                (SPFA), (SPFD) SET WITH SUBSYSTEM ID, EVENT. 
*                (SPFB) SET WITH SUBSYSTEM *TDAM* BUFFER ADDRESS. 
* 
*         USES   CM - CM+4, FN - FN+4, T0 - T0+4. 
* 
*         CALLS  GEE. 
  
  
 STR      SUBR               ENTRY/EXIT 
  
*         SET FILE ACCESS LEVEL AND FUNCTION CODE.
  
          LDM    FCAL,CI     SET FILE ACCESS LEVEL
          LPN    7
          SHN    3
          LMD    HN          SET FUNCTION CODE = 1 (TAPE/*MSS*/*MSE*) 
          STD    CM 
          LDN    0
          STD    CM+1 
          LDD    P1 
          NJP    STR1.2      IF TAPE STAGE REQUEST
          LDM    FCAT,CI     GET ALTERNATE STORAGE TYPE 
          LPN    77B
          STD    T1 
          SBN    ATOD 
          NJN    STR1        IF NOT OPTICAL STORAGE 
          LDD    HN          SET FUNCTION CODE = 2  (OPTICAL DISK)
          RAD    CM 
          ISTORE ISME,(PSN)  SET *ISM* TO ISSUE OPTICAL STAGE MESSAGE 
          LDC    2RSO 
          STM    ISMB 
          UJN    STR1.1      SET SUBSYSTEM INFORMATION
  
 STR1     LDC    MIRE        SET *MSS*/*MSE* *TDAM* BUFFER ADDRESS
          STM    SPFB+1 
          ERRPL  MIRE-10000B CODE DEPENDS ON VALUE
  
*         SET SUBSYSTEM ID AND SUBSYSTEM EVENT. 
  
 STR1.1   LDM    STRC,T1     SET ALTERNATE STORAGE SUBSYSTEM ID 
          STM    SPFA+1 
          LDM    STRD,T1     SET ALTERNATE STORAGE SUBSYSTEM EVENT
          STM    SPFD+1 
          LDM    STRE,T1     SET ALTERNATE STORAGE EQUIPMENT TYPE 
          STM    GEEA+1 
  
*         SET *PEO* AND *DN*. 
  
 STR1.2   LDD    CI          OFFSET INTO CATALOG SECTOR 
          SBD    CB 
          SBN    2
          SHN    -NWCES      CALCULATE *PEO* VALUE
          LPN    1S"NWCEM"-1
          SHN    6           POSITION FOR *TDAM* REQUEST
          STD    CM+2 
          LDM    MSTA        GET DEVICE NUMBER
          SHN    3
          ADN    PFGL 
          CRD    T0 
          LDD    T0+3 
          LPN    77 
          RAD    CM+2        COMBINE *PEO* WITH *DN*
  
*         SET FLAGS FOR CARTRIDGE OR OPTICAL STAGE. 
  
          LDD    P1 
          NJN    STR2        IF TAPE STAGE REQUEST
          LDM    FCAF,CI     GET ALTERNATE STORAGE FLAGS
          LPC    AFPDRM+AFVERM+AFFREM 
          SHN    13-6        COMBINE WITH PEO AND DN
          RAD    CM+2 
  
*         SET CATALOG TRACK AND SECTOR. 
  
 STR2     LDM    -2,CB       SET CATALOG TRACK ADDRESS
          STD    CM+3 
          LDM    -1,CB       SET CATALOG SECTOR ADDRESS 
          STD    CM+4 
          LDD    MA          TDAM+0 INTO MESSAGE BUFFER 
          CWD    CM 
  
*         SET *AT* AND *ASA* FOR CARTRIDGE OR OPTICAL DISK STAGE. 
  
          LDD    P1 
          NJN    STR3        IF TAPE STAGE REQUEST
          LDN    0           CLEAR RESERVED FIELD 
          STD    CM 
          LDM    FCAT,CI     SET ALTERNATE STORAGE TYPE 
          LPN    77 
          STD    CM+1 
          LDM    FCAA,CI     SET ALTERNATE STORAGE ADDRESS (ASA)
          STD    CM+2 
          LDM    FCAA+1,CI
          STD    CM+3 
          LDM    FCAA+2,CI
          STD    CM+4 
          LDD    MA          TDAM+1 INTO MESSAGE BUFFER 
          ADN    1
          CWD    CM 
          UJN    STR4        PROCESS NEXT WORD
  
*         SET FLAGS, FILE SEQUENCE NUMBER AND VSN FOR TAPE STAGE. 
  
 STR3     LDD    CI          SET ADDRESS OF CATALOG ENTRY 
          RAM    STRA+1 
          LDD    MA          TDAM+1 INTO MESSAGE BUFFER 
          ADN    1
 STRA     CWM    FCTF,ON
  
*         SET PERMANENT FILE NAME AND USER INDEX. 
  
 STR4     LDD    CI          SET ADDRESS OF CATALOG ENTRY 
          RAM    STRB+1 
          LDD    MA          TDAM+2 INTO MESSAGE BUFFER 
          ADN    2
 STRB     CWM    FCFN,ON
  
*         SET JSN.
  
          LDD    CP          FETCH EJT ORDINAL
          ADN    TFSW 
          CRD    CM 
          SFA    EJT,CM      READ JOB SEQUENCE NUMBER 
          ADK    JSNE 
          CRD    CM 
          LDN    0
          STD    CM+2 
  
*         SET EVENT FOR CARTRIDGE STAGE.
  
          RJM    GEE         GET EST ORDINAL FOR EVENT
          LDD    T5 
          STD    CM+3 
          STM    ERRE 
          LDD    P1 
          NJN    STR5        IF TAPE STAGE REQUEST
          LDM    FCAA,CI     SET FOLDED ASA IN EVENT
          LMM    FCAA+1,CI
          LMM    FCAA+2,CI
          UJN    STR6        SET EVENT
  
*         SET EVENT FOR TAPE STAGE. 
  
 STR5     LDM    -2,CB       FOLD CATALOG TRACK AND SECTOR FOR EVENT
          SHN    6
          LMM    -1,CB
 STR6     STD    CM+4        SET EVENT
          STM    ERRC 
          LDD    MA          TDAM+3 INTO MESSAGE BUFFER 
          ADN    3
          CWD    CM 
  
*         SET FAMILY/PACK NAME AND MASTER DEVICE EST ORDINAL. 
  
          LDD    P1 
          NJN    STR7        IF TAPE STAGE REQUEST
          LDC    LDNI+0      PREVENT EST ORDINAL STORE
          STM    STRF 
 STR7     LDM    MSTA        READ FAMILY/PACK NAME
          SHN    3
          ADN    PFGL 
          CRD    CM 
          LDD    CM+3        CLEAR RESERVED FIELD 
          SCN    77 
          STD    CM+3 
 STRF     LDD    EQ          SET MASTER DEVICE EST ORDINAL
*         LDN    0           (CARTRIDGE STAGE REQUEST)
          STD    CM+4 
          LDD    MA          TDAM+4 INTO MESSAGE BUFFER 
          ADN    4
          CWD    CM 
  
*         SET FILE LENGTH AND CREATION DATE/TIME. 
  
          LDM    FCLF,CI     SET FILE LENGTH
          STD    CM 
          LDM    FCLF+1,CI
          STD    CM+1 
          LDM    FCBS,CI     GET IAPF/DAPF INDICATOR FROM SECTOR FIELD
          LPC    4000B
          LMC    4000B
          RAD    CM          SET TDAM BLOCK *I* FIELD IF IAPF 
          LDM    FCCD,CI     TRANSFER CREATION DATE AND TIME FOR TDAM 
          STD    CM+2 
          LDM    FCCD+1,CI
          STD    CM+3 
          LDM    FCCD+2,CI
          STD    CM+4 
          LDD    MA          TDAM+5 INTO MESSAGE BUFFER 
          ADN    5
          CWD    CM 
          LJM    STRX        RETURN 
  
  
 STRC     INDEX              ALTERNATE STORAGE SUBSYSTEM ID-S 
          INDEX  ATMS,MFSI   *MSS*
          INDEX  ATAS,ASSI   *MSE*
          INDEX  ATOD,MTSI   *MAGNET* 
          INDEX  ATMAX+1
  
 STRD     INDEX              ALTERNATE STORAGE EXECUTIVE EVENTS 
          INDEX  ATMS,MSXE   *MSS*
          INDEX  ATAS,ASXE   *MSE*
          INDEX  ATOD,MTXE   *MAGNET* 
          INDEX  ATMAX+1
  
 STRE     INDEX              ALTERNATE STORAGE EQUIPMENT MNEMONICS
          INDEX  ATMS,2RCS   *MSS*
          INDEX  ATAS,2RSS   *MSE*
          INDEX  ATOD,2ROD   *MAGNET* - OPTICAL DISK
          INDEX  ATMAX+1
 UPF      SPACE  4,25 
**        UPF - UPDATE PFC ON USER ACCESS.
* 
*         ON A USER ACCESS WITH NO ERRORS, UPDATE THE LAST ACCESS 
*         DATE AND TIME IN THE PFC TO PREVENT THE IMMEDIATE RELEASE 
*         OF THE FILE BEFORE IT CAN BE ACCESSED. IF ERRORS WERE 
*         DETECTED, ONLY UPDATE THE PFC TO CLEAR *AFTPE* (IF PRESENT).
* 
*         ENTRY  (CB) = CATALOG BUFFER ADDRESS. 
*                (CC) = COMMAND CODE. 
*                (CI) = ADDRESS OF PFC ENTRY IN BUFFER. 
*                (P2) = CARTRIDGE COPY ERROR STATUS.
*                (P3) = TAPE COPY ERROR STATUS. 
* 
*         EXIT   LAST ACCESS DATE AND TIME UPDATED IN THE PFC.
*                *ENDMS* PERFORMED. 
*                CATALOG INTERLOCK CLEARED. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  CCI, WBI.
* 
*         MACROS ENDMS. 
  
  
 UPF      SUBR               ENTRY/EXIT 
          LDD    CC 
          LMN    CCSP 
          ZJN    UPFX        IF *STAGEPF* REQUEST 
          LDD    P3 
          ZJN    UPF1        IF NO TAPE COPY ERRORS 
          LDD    P2 
          ZJN    UPF1        IF NO CARTRIDGE COPY ERRORS
          SBN    3
          ZJN    UPF2        IF TEMPORARY ERROR ON CARTRIDGE COPY 
          UJN    UPF3        CLEAR INTERLOCK AND RETURN 
  
 UPF1     LDN    PDTL        UPDATE LAST ACCESS DATE AND TIME 
          CRD    CM 
          LDD    CM+2 
          STM    FCAD,CI
          LDD    CM+3 
          STM    FCAD+1,CI
          LDD    CM+4 
          STM    FCAD+2,CI
 UPF2     LDD    CB          REWRITE CATALOG
          RJM    WBI
 UPF3     ENDMS 
          RJM    CCI         CLEAR CATALOG INTERLOCK
          UJN    UPFX        RETURN 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPACS 
*CALL     COMPC2D 
 EJT$     EQU    0           DEFINE *COMPGFP* ACCESS TO EJT 
*CALL     COMPGFP 
          SPACE  4,10 
*         CHECK FOR OVERFLOW. 
  
  
          OVERFLOW  OVLC,BUF1-2  OVERFLOW INTO CATALOG BUFFER 
          OVERLAY  (CPU FILE TRANSFER.),OVLU
          SPACE  4,10 
***       THIS OVERLAY PROCESSES THE TRANSFER OF INDIRECT ACCESS
*         FILES VIA THE CPU.
  
  
 OVL      BSS    0           ENTRY
          LDD    CC          CHECK COMMAND CODE 
          LMK    CCRS 
          ZJN    OVL1        IF *RPFSTAT* REQUEST 
          RJM    SCP         SET UP CPU PARAMETERS
          RJM    SCF         SET UP COMMUNICATION FILES 
          RJM    PWS         PREWRITE SYSTEM SECTOR AND EOI 
 OVL1     RJM    IDR         INITIATE *DMP=* AND SET UP RECALL REQUEST
          EXECUTE  3PU       RECALL *PFM* 
          TITLE  SUBROUTINES. 
 IDR      SPACE  4,20 
**        IDR - INITIATE *DMP=* AND SET UP *PFM* RECALL REQUEST.
* 
*         ENTRY  (CC) = COMMAND CODE. 
*                (EQ) = MASTER EST ORDINAL. 
*                (CPFB) = *CPUPFM* CALL BLOCK IF NOT *RPFSTAT*
*                         REQUEST.
*                (PWRF) = *PFM* RESTART FLAGS FOR RECALL. 
* 
*         EXIT   (CN - CN+4) = INPUT REGISTER FOR *PFM* RECALL. 
*                (FN - FN+4) = RECALL REQUEST FOR MONITOR.
*                (MP - MP+4) = PARAMETER WORD FOR *PFM* RECALL. 
*                (STAU) = *STRP* BIT SET TO RECALL *PFM*. 
*                *DMP=* ROLLOUT INITIATED, IF NO TAPE ACTIVITY PENDING. 
* 
*         USES   T1, CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 IDR      SUBR               ENTRY/EXIT 
  
*         INITIATE *DMP=*.
  
          LDD    CC          CHECK COMMAND CODE 
          LMK    CCRS 
          NJN    IDR1        IF NOT *RPFSTAT* REQUEST 
          LDM    PWCC        RESET ORIGINAL COMMAND CODE
          STD    CC 
          UJN    IDR2        SET ORIGINAL CODE FOR *DMP=* CALL
  
 IDR1     LDN    CPFBL       WRITE *CPUPFM* PARAMETER BLOCK TO NFL
          STD    T1 
          NFA    DMPN 
          CWM    CPFB,T1
          LDD    CC          SET COMMAND CODE FOR *DMP=* CALL 
 IDR2     STM    IDRA+4 
          LDD    CP          CHECK CONTROL POINT ACTIVITY 
          ADK    STSW 
          CRD    CM 
          LDD    CM+4 
          SHN    -4 
          LPN    17 
          NJN    IDR3        IF TAPE ACTIVITY PENDING 
          LDD    CP          SET *DMP=* CALL
          ADK    SPCW 
          CWM    IDRA,ON
          LDN    SAPS        SET *CPUPFM* ACTIVE STATUS 
          STD    CM+1 
          MONITOR  SJCM 
          LDN    ZERL        START *DMP=* ROLLOUT 
          CRD    CM 
          LDK    ROSR 
          STD    CM+1 
          MONITOR  ROCM 
  
*         SET UP *PFM* RECALL REQUEST.
  
 IDR3     LDD    IA          SET INPUT REGISTER 
          CRD    CN 
          LDN    ZERL 
          CRD    FN          SET RECALL REQUEST 
          CRD    MP          SET PARAMETER WORD 
          LDM    PWRF        RESTART FLAGS
          STD    MP 
          LDD    CC          ORIGINAL COMMAND CODE
          STD    MP+2 
          LDD    EQ          MASTER EST ORDINAL 
          STD    MP+3 
          LDD    CN+2        SET UP *CCRS* REQUEST IN RECALL STACK
          SCN    77 
          LMN    CCRS 
          STD    CN+2 
          LDC    PTMF        TIMED RECALL 
          STD    FN+1 
          LDC    200D        RECALL FOR 200D MILLISECONDS 
          STD    FN+4 
          LDK    STRP        SET *RECALL PFM* STATUS BIT
          RAM    STAU 
          LJM    IDRX        RETURN 
  
  
 IDRA     VFD    18/3LCPF,6/30B,18/0,18/0  *CPUPFM* CALL WORD 
 PWS      SPACE  4,15 
**        PWS - PREWRITE SYSTEM SECTOR AND EOI. 
* 
*         ENTRY  (EQ) = MASTER DEVICE EST ORDINAL.
*                (FNTB) = FNT ADDRESS OF PERMANENT FILE.
*                (LF - LF+1) = LENGTH OF PERMANENT FILE.
*                (MSTA) = MASTER DEVICE MST ADDRESS/10. 
*                (PFCB) = BUFFER CONTAINING COPY OF PFC.
*                (SDAB) = FIRST TRACK OF PERMANENT FILE.
*                (SDAC) = FIRST SECTOR OF PERMANENT FILE. 
* 
*         EXIT   TO *HNG* IF INDIRECT CHAIN TRUNCATED.
* 
*         USES   FA, T1, FS - FS+4, RI - RI+1.
* 
*         CALLS  CRA, PDV, WEI, WSS.
* 
*         MACROS ENDMS, ERROR, MONITOR, SETMS.
  
  
 PWS      SUBR               ENTRY/EXIT 
          LDD    CC 
          LMN    CCGT 
          ZJN    PWSX        IF *GET* 
          LMN    CCOD&CCGT
          ZJN    PWSX        IF *OLD* 
          LDD    EQ          SET SYSTEM SECTOR ADDRESS
          STD    T5 
          LDM    SDAB 
          STD    T6 
          LDM    SDAC 
          STD    T7 
          LDM    FNTB        READ FST 
          STD    FA 
          NFA    FA,R 
          ADK    FSTL 
          CRD    FS 
  
*         INITIALIZE BUFFER FOR SYSTEM SECTOR AND EOI.
  
          LDC    502-1       CLEAR  BUFFER
          STD    T1 
 PWS2     LDN    0           CLEAR NEXT BYTE
          STM    BFMS,T1
          SOD    T1 
          PJN    PWS2        IF MORE TO CLEAR 
          LDC    5*NWCE-1    COPY PFC TO BUFFER 
          STD    T1 
 PWS3     LDM    PFCB,T1     COPY NEXT BYTE 
          STM    CTSS,T1
          SOD    T1 
          PJN    PWS3        IF MORE TO COPY
          LDM    STAT 
          LPK    STEC 
          ZJN    PWS4        IF NOT APPEND TO END OF CHAIN
          LDN    PSNI        ALLOW FOR LACK OF SYSTEM SECTOR
          STM    PWSA 
          UJN    PWS6        SKIP SYSTEM SECTOR WRITE 
  
*         WRITE SYSTEM SECTOR.
  
 PWS4     SETMS  IO,NS
          RJM    PDV         PROCESS DEVICE STATUS
          LDM    CBFN+4 
          LPN    FGIA 
          NJN    PWS5        IF EXTENDING INDIRECTS ON BUFFERED DEVICE
          SETMS  IO,(RW,NS) 
          RJM    PDV         PROCESS DEVICE STATUS
 PWS5     RJM    WSS         WRITE SYSTEM SECTOR
          MJP    PWS8        IF WRITE ERROR 
          ENDMS 
  
*         DETERMINE EOI LOCATION AND WRITE EOI SECTOR.
  
 PWS6     LDM    CBFN+4 
          LPN    FGIA 
          NJP    PWSX        IF EXTENDING INDIRECTS ON BUFFERED DEVICE
          LDM    SDAB        RESET FIRST TRACK
          STD    T6 
          LDD    LF+1        GET NUMBER OF DATA SECTORS 
          STD    RI+1 
          LDD    LF 
          STD    RI 
          LDM    SDAC        ADD RANDOM ADDRESS OF FIRST SECTOR 
 PWSA     ADN    1           ADD ONE FOR SYSTEM SECTOR
*         PSN                (APPEND TO END OF CHAIN) 
          RAD    RI+1        RANDOM ADDRESS OF EOI FROM START OF TRACK
          SHN    -14
          RAD    RI 
          RJM    CRA         CONVERT RANDOM ADDRESS TO TRACK AND SECTOR 
          MJN    PWS7        IF ERROR IN CONVERSION 
          SETMS  IO,(RW,NS) 
          RJM    PDV         PROCESS DEVICE STATUS
          LDC    BFMS        WRITE EOI SECTOR 
          RJM    WEI
          MJN    PWS8        IF MASS STORAGE ERROR
          ENDMS 
          LJM    PWSX        RETURN 
  
 PWS7     RJM    HNG         HANG IF INDIRECT CHAIN TRUNCATED 
  
 PWS8     ERROR  MSE,CH,,T5,,EI  *EQXXX,DNYY, MASS STORAGE ERROR.*
 SCF      SPACE  4,20 
**        SCF - SET UP COMMUNICATION FILES. 
* 
*         ENTRY  (FNTA) = LOCAL FILE FNT ADDRESS. 
*                (FNTB) = /PFM*PFN/ FNT ADDRESS.
*                (FNTC) = /PFM*ILK/ FNT ADDRESS.
*                (FNTD) = /PFM*APF/ FNT ADDRESS.
*                (CC) = COMMAND CODE. 
* 
*         EXIT   FNT ENTRIES UPDATED FOR COMMUNICATION FILES. 
*                /PFM*APF/ RETURNED IF NOT NEEDED.
*                DRIVER RESET FOR MASTER DEVICE.
* 
*         USES   FA, CM - CM+4, FN - FN+4, FS - FS+4. 
* 
*         CALLS  RMD, *0DF*.
* 
*         MACROS EXECUTE, NFA.
  
  
 SCF      SUBR               ENTRY/EXIT 
  
*         SET UP /PFM*PFN/ FILE TO POINT TO PERMANENT FILE. 
  
          LDM    FNTB        SET FNT ADDRESS
          STD    FA 
          NFA    FA,R 
          ADK    FNTL 
          CRD    FN 
          LDD    CC 
          LMN    CCGT 
          ZJN    SCF1        IF *GET* REQUEST 
          LMN    CCOD&CCGT
          NJN    SCF2        IF NOT *OLD* REQUEST 
 SCF1     LDD    FN+3        SET WRITE LOCKOUT BIT IN FNT 
          SCN    1
          LMN    1
          STD    FN+3 
 SCF2     LDN    10          SET *UPDATE* MODE
          RAD    FN+3 
          LDC    100*LIFT    SET *LIFT* FILE TYPE 
          STD    FN+4 
          LDD    EQ          SET UP FST 
          STD    FS 
 SCFC     LDC    *           SET FIRST TRACK OF FILE
*         LDC    (SDAB)      (NORMAL TRANSFER)
*         LDC    (PFCB+FCBT) (APPEND TO END OF CHAIN) 
*         LDC    (DVLW)      (EXTENDING CHAIN ON BUFFERED DEVICE) 
          STD    FS+1 
 SCFA     LDC    *           SET CURRENT TRACK
          STD    FS+2 
 SCFB     LDC    *           SET SECTOR 
          STD    FS+3 
          LDN    5           SET STATUS 
          STD    FS+4 
          LDM    IAIF 
          ZJN    SCF3        IF INDIRECT ALLOCATION INTERLOCK NOT SET 
          LDC    1000 
          RAD    FS+4        SET TRACK INTERLOCK FLAG FOR FNT 
          LDN    0           CLEAR INDIRECT ALLOCATION INTERLOCK FLAG 
          STM    IAIF 
          LDN    FGIA        SET *CPUPFM* INDIRECT ALLOCATION FLAG
          RAM    CBFN+4 
          LDD    FN+3        CLEAR *UPDATE* MODE
          SCN    10 
          STD    FN+3 
 SCF3     NFA    FA,R        REWRITE FNT
          ADK    FNTL 
          CWD    FN 
          ADK    FSTL-FNTL
          CWD    FS 
  
*         SET UP /PFM*ILK/ FILE TO POINT TO CATALOG TRACK.
  
          LDM    FNTC        SET FNT ADDRESS
          STD    FA 
          NFA    FA,R        READ FNT WORDS 
          ADK    FNTL 
          CRD    FN 
          ADN    FUTL-FNTL
          CRD    CM 
          LDN    ZERL 
          CRD    FS 
          LDD    FN+3        SET WRITE LOCKOUT BIT IN FNT 
          SCN    1
          LMN    1
          STD    FN+3 
          LDC    100*LIFT    *LIFT* FILE TYPE 
          STD    FN+4 
          LDD    EQ          SET MASTER DEVICE (CATALOG) EST ORDINAL
          STD    FS 
          LDM    CCIA        SET CATALOG TRACK
          STD    FS+1 
          LDC    1005        STATUS (INCLUDING TRACK INTERLOCK BIT) 
          STD    FS+4 
          SOM    CCIB        PREVENT CLEAR OF CATALOG TRACK INTERLOCK 
          LDN    10          SET PF ACTIVITY FLAG 
          RAD    CM+2 
          LDN    0           PREVENT PF ACTIVITY DECREMENT IN *DPP* 
          STM    EPFA 
          NFA    FA,R        REWRITE FNT
          ADK    FNTL 
          CWD    FN 
          ADN    FSTL-FNTL
          CWD    FS 
          ADN    FUTL-FSTL
          CWD    CM 
  
*         UNLOAD /PFM*APF/ FILE, IF PRESENT AND NOT NEEDED. 
  
          LDM    FNTD        GET FNT ADDRESS
          STD    FA 
          ZJN    SCF4        IF NO /PFM*APF/ FILE 
          LDM    STAT 
          LPC    STEC 
          ZJN    SCF5        IF NOT APPEND TO END OF CHAIN
          LDN    1
          STM    OVL0-1 
          EXECUTE  0DF,OVL0 
          LDN    0           CLEAR FNT ADDRESS
          STM    FNTD 
          RJM    RMD         RESET TO MASTER DEVICE 
 SCF4     LJM    SCFX        RETURN 
  
*         SET UP /PFM*APF/ FILE TO POINT TO ORIGINAL FILE ON *APPEND*.
  
 SCF5     NFA    FA,R        READ FNT WORD
          ADK    FNTL 
          CRD    FN 
          LDD    FN+3        SET WRITE LOCKOUT BIT IN FNT 
          SCN    1
          LMN    1
          STD    FN+3 
          LDC    100*LIFT    SET *LIFT* FILE TYPE 
          STD    FN+4 
          LDD    EQ          SET MASTER DEVICE EST ORDINAL
          STD    FS 
          LDM    FCBT,CI     SET FIRST TRACK OF FILE
          STD    FS+1 
          LDM    APTK        SET CURRENT TRACK
          STD    FS+2 
          STD    T6 
          LDM    APSC 
          STD    FS+3 
          AOD    FS+3        SET TO FIRST DATA SECTOR 
          LMM    SLM
          NJN    SCF6        IF NOT AT END OF TRACK 
          STD    FS+3        SET TO SECTOR ZERO 
          RJM    SNT         SET NEXT TRACK 
          STD    FS+2 
 SCF6     LDN    5           SET STATUS 
          STD    FS+4 
          NFA    FA,R        REWRITE FNT WORDS
          ADK    FNTL 
          CWD    FN 
          ADN    FSTL-FNTL
          CWD    FS 
          LJM    SCFX        RETURN 
 SCP      SPACE  4,15 
**        SCP - SET UP CPU PARAMETERS.
* 
*         ENTRY  (CB) = ADDRESS OF OLD CATALOG BUFFER.
*                (CI) = ADDRESS OF OLD CATALOG ENTRY IN BUFFER. 
*                (FNTA) = FNT ADDRESS OF LOCAL FILE.
*                (IAIF) = INDIRECT ALLOCATION INTERLOCK FLAG. 
*                (MSTA) = MASTER DEVICE MST ADDRESS/10. 
*                (PFCA) = ADDRESS OF NEW CATALOG ENTRY IN BUFFER. 
* 
*         EXIT   (CPFB) = BUFFER CONTAINING CPU TRANSFER PARAMETERS.
*                (PFCB) = BUFFER CONTAINING COPY OF NEW PFC ENTRY.
*                (CRAA) PRESET. 
*                (SNTA) PRESET. 
*                (SRAA) PRESET. 
* 
*         USES   T1, T6, T7.
* 
*         CALLS  RMD, SNT, SRA. 
  
  
 SCP      SUBR               ENTRY/EXIT 
          RJM    RMD         RESET TO MASTER DEVICE 
          LDM    MSTA        CALCULATE FWA OF TRT 
          SHN    3
          ADN    TRLL 
          RJM    CTA
          SBD    TH 
          STM    CRAA+1      PRESET *COMPCRA*, *COMPSNT* AND *COMPSRA*
          STM    SNTA+1 
          STM    SRAA+1 
          SHN    -14
          LMC    ADCI 
          STM    CRAA 
          STM    SNTA 
          STM    SRAA 
  
*         SAVE COPY OF NEW PFC FOR SYSTEM SECTOR. 
  
          LDM    PFCA        GET PFC ADDRESS
          STM    SCPA 
          LDC    5*NWCE-1 
          STD    T1 
 SCP1     LDM    *,T1        COPY NEXT BYTE 
 SCPA     EQU    *-1
          STM    PFCB,T1
          SOD    T1 
          PJN    SCP1        IF MORE BYTES TO COPY
  
*         SET LOCAL FILE NAME AND FILE LENGTH(S). 
  
          NFA    FNTA,R      SET FILE NAME
          ADK    FNTL 
          CRM    CBFN,ON
          LDM    CBFN+3      CLEAR STATUS FIELD 
          SCN    77 
          STM    CBFN+3 
          LDN    0
          STM    CBFN+4 
          LDD    LF+1        SET UP FILE LENGTHS
          STM    CBLF+4 
          LDD    LF 
          STM    CBLF+3 
          LDM    APLF+1 
          STM    CBLF+2 
          LDM    APLF 
          STM    CBLF+1 
          LDN    0
          STM    CBLF 
  
*         CALCULATE FIRST DATA TRACK AND SECTOR.
  
          LDM    SDAB        SET TRACK
          STD    T6 
          STM    SCFC+1 
          STM    SCPC+1 
          LDM    SDAC        SET SECTOR 
          STD    T7 
          LDM    STAT 
          LPC    STEC 
          ZJN    SCP3.1      IF NOT *APPEND* TO END OF CHAIN
          LDM    PFCB+FCBT   SET CORRECT FIRST TRACK
          STM    SCFC+1 
          STM    SCPC+1 
          UJN    SCP4        SAVE TRACK AND SECTOR
  
 SCP3.1   AOD    T7          ADVANCE TO FIRST DATA SECTOR 
          LMM    SLM
          NJN    SCP4        IF NOT AT END OF TRACK 
          STD    T7          SET TO SECTOR ZERO 
          RJM    SNT         SET NEXT TRACK 
          STD    T6 
 SCP4     LDD    T6          SAVE TRACK 
          STM    SCFA+1 
          LDD    T7          SAVE SECTOR
          STM    SCFB+1 
  
*         CALCULATE RANDOM ADDRESS OF PERMANENT FILE. 
  
          LDM    IAIF 
          ZJN    SCP4.1      IF NOT EXTENDING CHAIN ON BUFFERED DEVICE
          LDM    DVLW        SET CORRECT FIRST TRACK FOR FST
          STM    SCFC+1 
          UJN    SCP5        SET *PFID* OF OLD CATALOG
  
 SCP4.1   LDD    CC 
          LMN    CCGT 
          ZJN    SCP6        IF *GET* REQUEST 
          LMN    CCOD&CCGT
          ZJN    SCP6        IF *OLD* REQUEST 
 SCPC     LDC    *           CALCULATE RANDOM ADDRESS 
*         LDC    (SDAB)      (TRANSFER WITHIN CHAIN)
*         LDC    (PFCB+FCBT) (APPEND TO END OF CHAIN) 
          RJM    SRA
          LDD    RI 
          STM    CBRI+3 
          LDD    RI+1 
          STM    CBRI+4 
  
*         SET *PFID* OF OLD CATALOG INTO PARAMETER BLOCK (*APPEND*).
  
 SCP5     LDD    CC 
          LMN    CCAP 
          ZJN    SCP7        IF *APPEND* REQUEST
 SCP6     LJM    SCPX        RETURN 
  
 SCP7     LDM    STAT 
          LPC    STEC 
          NJN    SCP6        IF APPEND TO END OF CHAIN
          LDM    -2,CB       SET TRACK
          STM    CBID+3 
          LDM    -1,CB       SET SECTOR 
          STM    CBID+4 
          LDM    MSTA        SET FAMILY NAME
          SHN    3
          ADN    PFGL 
          CRM    CBFM,ON
          LDM    CBFM+3      SET DEVICE NUMBER
          LPN    77 
          STM    CBID+2 
          LDD    CI          CALCULATE PFC ENTRY ORDINAL (PEO)
          SBD    CB 
          SBN    2
          SHN    -NWCES 
          LPN    1S"NWCEM"-1
          SHN    6           SET PEO
          RAM    CBID+2 
          LDN    2           COPY CREATION DATE/TIME
          STD    T1 
          LDD    CI 
          RAM    SCPB 
 SCP8     LDM    FCCD,T1     COPY NEXT BYTE 
 SCPB     EQU    *-1
          STM    CBCD+2,T1
          SOD    T1 
          PJN    SCP8        IF MORE BYTES TO COPY
          LDM    CBUI+3      SET USER INDEX 
          SCN    77 
          LMD    UI 
          STM    CBUI+3 
          LDD    UI+1 
          STM    CBUI+4 
          LJM    SCPX        RETURN 
          SPACE  4,10 
*         WORKING STORAGE AND BUFFERS.
  
*         BUFFERS.
  
 PFCB     BSS    5*NWCE      PFC SAVE BUFFER
 CPFB     BSSZ   5*CPFBL     *CPUPFM* PARAMETER BLOCK BUFFER
  
*         LOCATIONS WITHIN *CPFB* BUFFER. 
  
 CBFN     EQU    CPFB        LOCAL FILE NAME
 CBLF     EQU    CPFB+5*1    FILE LENGTHS 
 CBRI     EQU    CPFB+5*2    RANDOM INDEX 
 CBSR     EQU    CPFB+5*3    SPECIAL REQUEST BLOCK
  
*         LOCATIONS WITHIN SPECIAL REQUEST BLOCK IN *CPFB* BUFFER.
  
 CBID     EQU    CBSR+5*SFID *PFID* FIELD 
 CBCD     EQU    CBSR+5*SFCD CREATION DATE FIELD
 CBFM     EQU    CBSR+5*SFFM FAMILY NAME FIELD
 CBUI     EQU    CBSR+5*SFUI USER INDEX FIELD 
          SPACE  4,10 
*         COMMON DECKS. 
  
*CALL     COMPCRA 
 WEI$     EQU    1           ALLOW BUFFER SPECIFICATION 
*CALL     COMPSRA 
*CALL     COMPWEI 
 WIS$     EQU    1           WRITE IAPF SYSTEM SECTOR 
*CALL     COMPWSS 
          SPACE  4,10 
          USE    OVERFLOW 
  
 OVL0     EQU    *+5         ZERO-LEVEL OVERLAY LOAD ADDRESS
          ERRNG  BFMS-OVL0-ZDFL  *0DF* OVERFLOW 
          SPACE  4,10 
          OVERFLOW  OVLU,GETA  OVERFLOW INTO *GET* PROCESSING 
          SPACE  4,10 
          OVERFLOW  OVLU,SAVA  OVERFLOW INTO *SAVE* PROCESSING
          SPACE  4,10 
          OVERFLOW  OVLU,APPB  OVERFLOW INTO *APPEND* PROCESSING
          OVERLAY (ERROR PROCESSING.),OVLA
          SPACE  4,10 
**        THIS OVERLAY PROCESSES PERMANENT FILE ERRORS BY SENDING 
*         THE INDICATED ERROR MESSAGE TO THE DAYFILE, SETTING THE 
*         FST ENTRY NOT BUSY OR DELETING THE FNT/FST ENTRY IF CREATED 
*         BY *PFM*, AND TERMINATING THE CALLING PROGRAM.
  
  
 OVL      BSS    0           ENTRY
*         LJM    SEP         PROCESS ERROR
          SPACE  4,10 
***       PERMANENT FILE ERROR PROCESSING.
* 
* 
*         COMMAND OR CENTRAL PROGRAM CALLS. 
* 
*                IF THE ERROR PROCESSING BIT IS SET IN THE FET, PFM 
*                RETURNS THE ERROR CODE, SETS THE COMPLETE BIT AND
*                ISSUES THE DAYFILE MESSAGE.  THE ERROR CODE IS 
*                RETURNED IN WORD 0 OF THE FET BITS 10 - 17.
* 
*                IF THE ERROR PROCESSING BIT IS NOT SET, A DAYFILE
*                MESSAGE IS ISSUED, THE CONTROL POINT ABORTED, AND THE
*                PPU IS DROPPED.
* 
*                IF THE ERROR RETURN ADDRESS *ERAD* IS SET AND THE USER 
*                IS PROCESSING ERRORS, THE MESSAGE WILL NOT BE ISSUED 
*                TO THE DAYFILE BUT WILL BE RETURNED TO THE USER
*                PROGRAM AT RA + ERAD.  FOUR WORDS MUST BE ALLOCATED
*                AT *ERAD* FOR MESSAGE. 
* 
*                IF THE ERROR *FILE BUSY* IS ENCOUNTERED AN EVENT 
*                DESCRIPTOR (EST ORDINAL/FIRST TRACK) WILL BE SET 
*                IN *TERW* IN THE CP AREA SO THAT THE CALLING PROGRAM 
*                MAY ISSUE A ROLLOUT IF IT WANTS TO WAIT FOR FILE TO
*                BECOME AVAILABLE.
* 
*                IF A DEVICE REQUIRED BY PFM IS TEMPORARILY 
*                INACCESSIBLE, AN ERROR STATUS WILL BE RETURNED TO THE
*                CALLER IF REAL-TIME PROCESSING WAS SELECTED IN THE 
*                FET; OTHERWISE, THE JOB WILL BE ROLLED OUT IF IT IS
*                NOT A SUBSYSTEM.  THE PFM FUNCTION WILL BE RESTARTED 
*                WHEN THE JOB RESUMES EXECUTION.  THE *ATTACH*, 
*                *CATLIST*, *CHANGE*, *DEFINE*, *DELPFC*, *DROPDS*, 
*                *GET*, *PERMIT*, *PURGE*, *SETPFAC*, AND *SETPFAL* 
*                REQUESTS CAN BE INTERRUPTED ON ANY I/O OPERATION AND 
*                RESTARTED.  THE *APPEND*, *REPLACE*, AND *SAVE*
*                REQUESTS CANNOT BE INTERRUPTED ONCE THE CATALOG
*                ENTRY FOR THE PERMANENT FILE HAS BEEN WRITTEN AND
*                THE FILE TRANSFER IS IN PROGRESS.
* 
* 
*                IF ANY OF THE FOLLOWING ERRORS ARE ENCOUNTERED AND THE 
*                ERROR IS NOT DUE TO A HARDWARE FAILURE, THE MESSAGE
*                     *EQXXX, ERROR IDLE SET.*
*                WILL BE ISSUED TO THE ERROR LOG AND ERROR IDLE STATUS
*                WILL BE SET IN THE MST OF THE APPROPRIATE DEVICE.
*                THIS WILL PREVENT FURTHER ACCESS TO THE DEVICE.
* 
*                * BAD CATALOG/PERMIT SECTOR.*
*                * FILE LENGTH ERROR.*
* 
*                SETTING OF ERROR IDLE STATUS ON A FAILING DEVICE MAY 
*                BE REQUESTED FOR ANY OTHER TYPE 2 ERROR BY SPECIFYING
*                THE *EI* PARAMETER ON THE *ERROR* MACRO CALL.  THIS
*                SHOULD BE DONE IF THE ERROR CAUSES THE CATALOG OR
*                PERMITS FILE TO BE CORRUPTED.  IT WILL BE SET IN 
*                THE FOLLOWING SITUATIONS.
* 
*                * MASS STORAGE ERROR.* 
*                - AN UNRECOVERABLE WRITE ERROR OCCURRED ON THE 
*                  CATALOG OR PERMITS FILE AND DATA ON THE FILE HAS 
*                  BEEN DESTROYED.
*                - AN UNRECOVERABLE WRITE ERROR OCCURRED OR THE 
*                  DEVICE BECAME INACCESSIBLE WHILE PERMIT SECTORS
*                  WERE BEING LINKED. 
*                - AN UNRECOVERABLE WRITE ERROR OCCURRED OR THE 
*                  DEVICE BECAME INACCESSIBLE WHILE WRITING THE 
*                  CATALOG FILE OR PERFORMING THE FILE TRANSFER FOR 
*                  *APPEND*, *REPLACE*, OR *SAVE* COMMAND.
*                  (THE CATALOG ENTRY FOR THE PERMANENT FILE HAS BEEN 
*                  ASSIGNED TO THE USER PRIOR TO TRANSFERRING THE FILE
*                  AND POINTS TO UNWRITTEN FILE SPACE.) 
* 
*                * PFM ABORTED.*
*                - *CPUPFM* HAS ABORTED BEFORE THE FILE TRANSFER IS 
*                  COMPLETE FOR *APPEND*, *REPLACE*, OR *SAVE*
*                  COMMAND. 
* 
*                * TRACK LIMIT.*
*                - *CPUPFM* HAS ENCOUNTERED A TRACK LIMIT BEFORE THE
*                  FILE TRANSFER IS COMPLETE FOR *APPEND*, *REPLACE*, 
*                  OR *SAVE* COMMAND. 
          SPACE  4,10 
***       DAYFILE MESSAGES. 
* 
*         ERROR  1           * (FILE NAME) BUSY.* 
*         DIRECT ACCESS FILE ATTACHED WITH CONFLICTING MODE.
* 
*         ERROR  2           * (FILE NAME) NOT FOUND.*
*         PERMANENT FILE SPECIFED COULD NOT BE FOUND. 
*         OPTIONAL USER NAME NOT FOUND. 
*         LOCAL FILE SPECIFIED NOT FOUND. 
*         PERMANENT FILE SPECIFIED WAS NOT THE CORRECT TYPE OF FILE 
*         FOR THE COMMAND USED. FOR EXAMPLE, A DIRECT ACCESS FILE 
*         WAS FOUND USING A *GET* REQUEST OR AN INDIRECT ACCESS FILE
*         WAS FOUND USING AN *ATTACH* REQUEST.
* 
*         ERROR  3           * (FILE NAME) EMPTY.*
*         FILE CONTAINS NO DATA.
* 
*         ERROR  4           * (FILE NAME) NOT ON MASS STORAGE.*
*         FILE TO BE SAVED DOES NOT RESIDE ON MASS STORAGE. 
*         FIRST TRACK OF FILE NOT RECOGNIZABLE. 
* 
*         ERROR  5           * (FILE NAME) ALREADY PERMANENT.*
*         USER ALREADY HAS FILE SAVED OR DEFINED. 
* 
*         ERROR  6           * (FILE NAME) INCORRECT FILE TYPE.*
*         USER HAS TRIED TO DEFINE A FILE THAT IS NOT A LOCAL FILE. 
* 
*         ERROR  7           * FILE NAME ERROR.*
*         FILE NAME CONTAINS INCORRECT CHARACTERS.
* 
*         ERROR  10          * USER ACCESS NOT VALID.*
*         USER NOT VALIDATED FOR DIRECT AND/OR INDIRECT ACCESS FILES, 
*         OR ACCESS TO REMOVABLE DEVICES. 
*         USER IS NOT VALIDATED FOR ACCESS TO FAST ATTACH FILES.
*         PERMIT *CATLIST* ATTEMPTED ON A FILE WITH AN ACCESS LEVEL 
*         ABOVE THAT OF THE JOB.
* 
*         ERROR  11          * INCORRECT DEVICE REQUEST.* 
*         DEVICE TYPE SPECIFIED ON REMOVABLE DEVICE REQUEST IS
*         UNRECOGNIZED OR DOES NOT EXIST ON SYSTEM. 
*         THE PACKNAME REQUESTED FOR AUXILIARY DEVICE REQUEST IS
*         AVAILABLE IN SYSTEM BUT NOT AS TYPE REQUESTED BY *R* OPTION.
* 
*         ERROR  12          * FILE TOO LONG.*
*         LENGTH OF FILE TO BE PLACED IN PERMANENT FILES EXCEEDS
*         THE LIMIT SET BY INSTALLATION.
*         THIS MESSAGE IS ISSUED ON AN ATTACH FUNCTION IF THE USER
*         ATTEMPTS TO ATTACH A FILE IN WRITE, APPEND OR MODIFY MODE 
*         OR DEFINE AN EXISTING FILE AND THE FILE EXCEEDED THE
*         USERS FILE LENGTH CONTROLS. 
* 
*         ERROR  13          * PFM INCORRECT REQUEST.*
*         INCORRECT COMMAND CODE PASSED TO PFM. 
*         INCORRECT PERMIT MODE OR CATALOG TYPE SPECIFIED.
*         PERMIT TYPE CATLIST WITH NO FILENAME. 
*         THE *BR* OR *PR* VALUE SPECIFIED IS INCORRECT.
* 
*         ERROR  14          * DEVICE UNAVAILABLE.* 
*         ACCESS TO PERMANENT FILE DEVICE REQUESTED IS NOT POSSIBLE.
*         THIS ERROR IS ISSUED IF THE USER INDEX IS ZERO. 
*         THIS ERROR IS ISSUED IF THE MSF DEVICE ON WHICH THE FILE
*         RESIDES IS NOT DEFINED IN THE EQUIPMENT CONFIGURATION.
* 
*         ERROR  15          * DIRECT ACCESS DEVICE ERROR.* 
*         DEVICE THAT FILE RESIDES ON MAY NOT CONTAIN DIRECT ACCESS FILE
* 
*         ERROR  16          * PF UTILITY ACTIVE.*
*         UTILITY OPERATION CURRENTLY ACTIVE.  OPERATION NOT ATTEMPTED. 
*         USER SHOULD RETRY THE OPERATION.  ERROR CODE 16 IS ALSO 
*         RETURNED IN THE FET FOR ERROR 126 WITH THE ERROR MESSAGE, 
*         *WAITING - INACCESSIBLE DEVICE.*
* 
*         ERROR  17          * DATA TRANSFER ERROR.*
*         ERROR IN READ OF DATA DURING TRANSFER OF FILE.  TRANSFER
*         IS COMPLETED WITH SECTOR CONTAINING ERROR TRANSFERRED AS READ.
* 
*         ERROR  20          * TOO MANY PERMANENT FILES.* 
*         NUMBER OF FILES IN CATALOG EXCEEDS ALLOWABLE LIMIT. 
* 
*         ERROR  21          * TOO MUCH INDIRECT ACCESS FILE SPACE.*
*         CUMULATIVE SIZE OF INDIRECT FILES IN CATALOG EXCEEDS
*         THE ALLOWABLE LIMIT.
* 
*         ERROR  22          * PRUS REQUESTED UNAVAILABLE.* 
*         NUMBER OF PRUS SPECIFIED ON DEFINE REQUEST IS NOT AVAILABLE.
* 
*         ERROR  23          * I/O SEQUENCE ERROR.* 
*         PFM REQUEST ATTEMPTED ON LOCAL FILE THAT IS CURRENTLY ACTIVE. 
* 
*         ERROR  24          * LOCAL FILE LIMIT.* 
*         THE JOBS LOCAL FILE LIMIT HAS BEEN EXCEEDED BY AN ATTEMPT 
*         TO GET OR ATTACH THIS FILE. (FILE NOT ATTACHED OR RETRIEVED)
* 
*         ERROR  25          * PRU LIMIT.*
*         THE JOBS MASS STORAGE PRU LIMIT WAS EXCEEDED BY AN
*         ATTEMPT TO GET THIS FILE. (FILE NOT ATTACHED OR RETRIEVED)
* 
*         ERROR  26          * PERMIT LIMIT EXCEEDED.*
*         THE NUMBER OF EXPLICIT PERMIT ENTRIES FOR A FILE HAS
*         REACHED THE LIMIT DEFINED BY *PMLN*.
* 
*         ERROR  27          * PFM ARGUMENT ERROR.* 
*         AN INCORRECT VALUE HAS BEEN SPECIFIED IN THE FET. 
* 
*         ERROR  30          * RESEX FAILURE.*
*         RESEX HAS DETECTED AN ERROR IN CONTROL FILES OR SOME OTHER
*         FATAL ERROR HAS OCCURRED IN RESEX.
* 
*         ERROR  31          *EQXXX,DNYY, TRACK LIMIT.* 
*         EST ORDINAL XXX HAS NO SPACE. 
* 
*         ERROR  32          *EQXXX,DNYY, FILE LENGTH ERROR.* 
*         LENGTH OF FILE DOES NOT EQUAL CATALOG LENGTH DURING TRANSFER. 
* 
*         ERROR  33          *EQXXX,DNYY, RANDOM INDEX ERROR.*
*         PERMIT RANDOM ADDRESS ERROR.
* 
*         ERROR  34          *EQXXX,DNYY, DIRECT ACCESS FILE ERROR.*
*         SYSTEM SECTOR DATA FOR FILE DOES NOT VERIFY.
* 
*         ERROR  35          *EQXXX,DNYY, REPLACE ERROR.* 
*         SAME FILE FOUND TWICE DURING CATALOG SEARCH.  THIS CAN
*         OCCUR FOR APPEND OR REPLACE COMMANDS AFTER FILE IS FOUND, 
*         PURGED AND CATALOG SEARCH FOR HOLE IS CONTINUED.
* 
*         ERROR  36          *EQXXX,DNYY, PFM ABORTED.* 
*         *PFM* WAS UNABLE TO CONTINUE DUE TO AN OPERATOR OVERRIDE, 
*         OR *CPUPFM* ABORTED PRIOR TO COMPLETING ITS TRANSFER. 
* 
*         ERROR  37          *EQXXX,DNYY, MASS STORAGE ERROR.*
*         ERROR ENCOUNTERED IN READ OR WRITING PORTION OF PF CATALOG OR 
*         PERMIT INFORMATION. 
* 
*         ERROR  40          * ERROR IN FILE DATA.* 
*         ERRORS IN THE FILE DATA WERE DETECTED BY *PFDUMP* WHILE 
*         IT WAS DUMPING THE FILE; THE FILE WAS LATER RELOADED. 
* 
*         ERROR  41          * ERROR IN PERMIT DATA.* 
*         ERRORS IN THE FILE-S PERMIT ENTRIES WERE ENCOUNTERED BY 
*         *PFDUMP* WHILE IT WAS DUMPING THE FILE; THE FILE WAS LATER
*         RELOADED. 
* 
*         ERROR  42          * DATA/PERMIT ERRORS.* 
*         ERRORS WERE ENCOUNTERED IN BOTH THE DATA AND THE PERMIT 
*         ENTRIES WHILE *PFDUMP* WAS DUMPING THE FILE; THE FILE 
*         WAS LATER RELOADED. 
* 
*         ERROR  43          * EOI CHANGED BY RECOVERY.*
*         AN ERROR IN THE FILES EOI POSITION WAS DETECTED BY THE
*         RECOVERY ROUTINES. THE POSITION WAS CHANGED TO THE
*         BEST LOGICAL POSITION.
* 
*         ERROR  44 - 47     RESERVED 
* 
*         ERROR  50          *EQXXX,DNYY, FILE BOI/EOI/UI MISMATCH.*
*         THE VERIFICATION OF THE FILE-S STRUCTURE OR OWNER 
*         IDENTIFICATION FAILED.  THE FILE DATA HAS BEEN LOST.
* 
*         ERROR  51          *EQXXX,DNYY, SYSTEM SECTOR ERROR.* 
*         ERRORS ENCOUNTERED IN VERIFICATION OF SYSTEM SECTOR 
*         OF FILE.
* 
*         ERROR  52          *EQXXX,DNYY, BAD CATALOG/PERMIT SECTOR.* 
*         THE LENGTH OF THE INDICATED CATALOG OR PERMIT SECTOR IS NOT 
*         A MULTIPLE OF THE ENTRY SIZE. 
* 
*         ERROR  53          *EQXXX,DNYY, TRACK NOT RESERVED.*
*         THERE IS NO TRACK RESERVED FOR THE FILE.  THE DATA FOR THE
*         FILE HAS BEEN LOST. 
* 
*         ERROR  54 - 70     RESERVED 
* 
*         ERROR  71          * (FILE NAME) PERMANENT ERROR.*
*         UNRECOVERABLE ERRORS WERE DETECTED IN ATTEMPTING TO ACCESS
*         THE FILE ON ALTERNATE STORAGE.
* 
*         ERROR  72          * (FILE NAME) STAGE INITIATED.*
*         THE PERMANENT FILE IS BEING STAGED FROM ALTERNATE STORAGE 
*         TO DISK.
* 
*         ERROR  73          * (FILE NAME) WAITING FOR SUBSYSTEM.*
*         THE PERMANENT FILE MUST BE STAGED FROM ALTERNATE STORAGE
*         TO DISK AND THE APPROPRIATE SUBSYSTEM IS NOT CURRENTLY
*         AVAILABLE TO PERFORM THE STAGE OPERATION. 
* 
*         ERROR  74          * (FILE NAME) INTERLOCKED.*
*         A FILE CAN NOT BE ATTACHED IN *WRITE*, *MODIFY* OR *APPEND* 
*         MODE WHEN THE FILE IS ATTACHED IN UTILITY MODE. 
* 
*         ERROR  75          * (FILE NAME) IS DIRECT ACCESS.* 
*         USER IS ATTEMPTING AN INDIRECT FILE COMMAND WHEN THE FILE 
*         IS A DIRECT ACCESS FILE.
*         CURRENTLY ERROR 2 IS REPORTED IN THE *FET*. 
* 
*         ERROR  76          * (FILE NAME) IS INDIRECT ACCESS.* 
*         USER IS ATTEMPTING A DIRECT ACCESS FILE COMMAND WHEN THE
*         FILE IS AN INDIRECT ACCESS FILE.
*         CURRENTLY ERROR 2 IS REPORTED IN THE *FET*. 
* 
*         ERROR  77          * (FILE NAME) IS EXECUTE ONLY.*
*         THE SPECIFIED LOCAL FILE CANNOT BE ACCESSED BY *SAVE*,
*         *REPLACE*, *APPEND* OR *DEFINE*, SINCE IT IS AN 
*         EXECUTE-ONLY FILE.
* 
*         ERROR  100         * PF STAGING DISABLED.*
*         THE PERMANENT FILE MUST BE STAGED FROM ALTERNATE STORAGE
*         TO DISK AND EITHER *CARTRIDGE PF STAGING* OR *TAPE
*         PF STAGING*, OR BOTH, HAVE BEEN DISABLED. 
* 
*         ERROR  101         * INCORRECT PFC ADDRESS.*
*         THE DEVICE NUMBER, TRACK AND SECTOR SPECIFIED AS THE *PFC*
*         ADDRESS ARE INCORRECT.
* 
*         ERROR  102         * PFC VERIFICATION ERROR.* 
*         THE CREATION DATE AND TIME, USER INDEX OR ALTERNATE STORAGE 
*         ADDRESS DO NOT AGREE WITH THE CURRENT *PFC* CONTENTS. 
* 
*         ERROR  103         * FILE NOT DISK RESIDENT.* 
*         THE *UATTACH* FUNCTION DOES NOT SUPPORT ACCESS TO FILES WHICH 
*         ARE NOT DISK RESIDENT.
* 
*         ERROR  104         * INTERLOCK NOT AVAILABLE.*
*         A SOFTWARE INTERLOCK IS CURRENTLY NOT AVAILABLE TO A REQUESTOR
*         SPECIFYING *EP* AND *UP* EXIT PROCESSING OPTIONS. 
* 
*         ERROR  105         * ALTERNATE IMAGE OBSOLETE.* 
*         THE *DROPDS* FUNCTION DOES NOT RETURN THE DISK SPACE FOR
*         FILES WITH ALTERNATE STORAGE MARKED OBSOLETE OR WITHOUT 
*         AN ALTERNATE STORAGE ADDRESS SPECIFIED IN THE *PFC*.
* 
*         ERROR  106         * ALTERNATE STORAGE ERROR.*
*         AN ATTEMPT TO DROP DISK SPACE WHEN A PERMANENT ERROR STATUS 
*         IS SET FOR THE ALTERNATE STORAGE FILE COPY. 
* 
*         ERROR  107         * FNT FULL.* 
*         FNT SPACE IS NOT CURRENTLY AVAILABLE FOR A REQUEST WHICH HAS
*         BOTH *EP* AND *UP* EXIT PROCESSING OPTIONS SET. 
* 
*         ERROR  110         * INCORRECT CATALOG UPDATE.* 
*         THIS ERROR IS ISSUED IF AN ALTERNATE STORAGE ADDRESS EXISTS 
*         AND THE ALTERNATE STORAGE COPY IS NOT MARKED OBSOLETE WHEN
*         PERFORMING A *SETASA* FUNCTION.  THIS ERROR IS ALSO ISSUED
*         IF A DISK ADDRESS EXISTS FOR A FILE IN THE *PFC* ENTRY WHEN 
*         PERFORMING A *SETDA* OR *UREPLAC* FUNCTION. 
* 
*         ERROR  111         * PFM EXCESS ACTIVITY.*
*         THE SYSTEM *PFM* ACTIVITY COUNT IS AT LIMIT. THIS CONDITION 
*         IS ONLY REPORTED FOR REQUESTS WITH BOTH *EP* AND *UP* EXIT
*         PROCESSING OPTIONS SET. 
* 
*         ERROR  112         * NOT VALIDATED TO SET XD/XT.* 
*         THE USER HAS ATTEMPTED TO SET AN EXPIRATION DATE FOR A FILE,
*         AND IS NOT VALIDATED FOR THAT PRIVILEGE.
* 
*         ERROR  113         * XD/XT EXCEEDS MAXIMUM.*
*         THIS MESSAGE IS ISSUED WHEN THE USER SPECIFIES AN EXPIRATION
*         DATE OR TERM WHICH IS LARGER THAN THE PREDEFINED SYSTEM 
*         MAXIMUM EXPIRATION TERM.
* 
*         ERROR  114         * JOB CANNOT ACCESS FILE.* 
*         THE ACCESS LEVEL AND CATEGORY SET OF THE CALLING JOB DOES NOT 
*         ALLOW ACCESS TO THE SPECIFIED FILE. 
* 
*         ERROR  115         * ACCESS LEVEL NOT VALID FOR JOB.* 
*         THE SPECIFIED ACCESS LEVEL IS NOT VALID FOR THE CALLING JOB.
* 
*         ERROR  116         * WRITE-DOWN OF DATA PROHIBITED.*
*         THE LOCAL FILE HAS A HIGHER ACCESS LEVEL THAN THE FILE IT IS
*         REPLACING OR IS BEING APPENDED TO.
*         THE LOCAL FILE FILE HAS A LOWER ACCESS LEVEL THAN THE JOB ON
*         A *DEFINE* REQUEST. 
*         THE PERMANENT FILE HAS A LOWER ACCESS LEVEL THAN THE JOB ON 
*         A *PERMIT*, *CHANGE*, OR *SETPFAC* REQUEST. 
* 
*         ERROR  117         * ACCESS CATEGORIES NOT VALID FOR JOB.*
*         THE SPECIFIED ACCESS CATEGORY SET IS NOT VALID FOR THE
*         CALLING JOB.
* 
*         ERROR  120         * ACCESS LEVEL NOT VALID ON PF DEVICE.*
*         THE LOCAL FILE ACCESS LEVEL IS INCOMPATIBLE WITH THE
*         USERS MASTER DEVICE ACCESS LEVEL LIMITS.
* 
*         ERROR  121         * NOT VALID TO DOWNGRADE DATA.*
*         THE USER HAS ISSUED *SETPFAL* REQUESTING THE FILE TO BE 
*         CHANGED TO A LOWER ACCESS LEVEL AND DOES NOT HAVE THE 
*         PRIVILEGE TO MAKE DATA LESS SECURE. 
* 
*         ERROR  122         * (FILE NAME) - NO TEMP DEVICE FOUND.* 
*         THE USER HAS ATTEMPTED TO RETRIEVE AN INDIRECT PERMANENT
*         FILE FOR WHICH THERE IS NO TEMPORARY DEVICES VALID FOR THE
*         FILE-S ACCESS LEVEL.
* 
*         ERROR  123         * ACCESS LEVEL NOT VALID FOR FILE.*
*         ONE OF TWO ERRORS - 
*         1. THE SPECIFIED ACCESS LEVEL IS LESS THAN THE CURRENT
*         ACCESS LEVEL OF THE LOCAL FILE, AND THE CALLER IS NOT 
*         VALIDATED TO DOWNGRADE FILES. 
*         2. THE SPECIFIED ACCESS LEVEL IS NOT VALID ON THE DEVICE THAT 
*         THE LOCAL FILE RESIDES ON; THEREFORE, THE USER CAN NOT *SAVE* 
*         OR *DEFINE* THE FILE AT THAT ACCESS LEVEL.
* 
*         ERROR  124         * (FILE NAME) TEMPORARY ERROR, TRY LATER.* 
*         THE SYSTEM HAS ENCOUNTERED A TEMPORARY PROBLEM WHICH PREVENTS 
*         IT FROM STAGING YOUR FILE IN FROM ALTERNATE STORAGE.
*         WAIT AWHILE, THEN TRY AGAIN.
* 
*         ERROR  125         * WAITING FOR NFL.*
*         YOUR JOB HAS BEEN DELAYED AND/OR ROLLED OUT WAITING FOR NFL.
* 
*         ERROR  126         * WAITING - INACCESSIBLE DEVICE.*
*         ACCESS TO THE PERMANENT FILE DEVICE REQUESTED IS NOT
*         ALLOWED AT THIS TIME BECAUSE THE DEVICE HAS *SUSPECT*,
*         *OFF*, OR *DOWN* STATUS.  ERROR CODE 16 IS RETURNED IN
*         THE FET FOR THIS CONDITION.  USER SHOULD RETRY THE
*         OPERATION.
* 
*         ERROR  127         (NO MESSAGE) 
*         REQUEST IS BEING RETRIED BY *PFM*.
* 
*         ERROR  130         * ERROR IN CATLIST CONTINUATION DATA.* 
*         THE CATLIST CONTINUATION DATA SPECIFIED IN *FET+6* POINTS 
*         TO AN INCORRECT TRACK AND/OR SECTOR.
          SPACE  4,30 
***       ERROR LOG MESSAGES. 
* 
*         THE FOLLOWING MESSAGES ARE ISSUED TO THE ERROR LOG AS WELL
*         AS TO THE USER AND SYSTEM DAYFILES.  IN THE ERROR LOG, THE
*         PREFIX *EQXXX,DNYY,* IS ADDED TO EACH OF THE MESSAGES.
* 
*         * TRACK LIMIT.* 
*         * FILE LENGTH ERROR.* 
*         * RANDOM INDEX ERROR.*
*         * DIRECT ACCESS FILE ERROR.*
*         * REPLACE ERROR.* 
*         * PFM ABORTED.* 
*         * MASS STORAGE ERROR.*
*         * FILE BOI/EOI/UI MISMATCH.*
*         * SYSTEM SECTOR ERROR.* 
*         * BAD CATALOG/PERMIT SECTOR.* 
*         * TRACK NOT RESERVED.*
* 
*         WHENEVER ONE OF THE ABOVE MESSAGES IS ISSUED TO THE ERROR 
*         LOG, ONE OF THE FOLLOWING MESSAGES IS ALSO ISSUED TO THE
*         ERROR LOG TO IDENTIFY THE FILE IN ERROR.
* 
*         *EQXXX, FM=FAMILY,PF=PFN,UI=USERINDEX.* 
*         *EQXXX, TK=TRACK,SC=SECTOR.*
* 
*         IF *PFM* SETS ERROR IDLE ON THE DEVICE AS THE RESULT OF 
*         THE ERROR CONDITION, THE FOLLOWING MESSAGE IS ALSO ISSUED 
*         TO THE ERROR LOG. 
* 
*         *EQXXX, ERROR IDLE SET.*
          TITLE  SYSTEM ERROR PROCESSING. 
 SEP      SPACE  4,25 
**        SEP - SYSTEM ERROR PROCESSING.
* 
*         ENTRY  (P1) = 3/EXC,7/MNE,1/EIF,1/CIF.
*                (EXC) = EXIT CASE. 
*                (MNE) = ERROR MNEMONIC.
*                (EIF) = ERROR IDLE FLAG. 
*                (CIF) = CHANNEL INTERLOCKED FLAG.
*                (P2) = EST ORDINAL.
* 
*         EXIT   (EP) = *EP* BOOLEAN. 
*                (P0) = ERROR IDLE FLAG.
*                (P1) = ERROR CODE. 
*                (P3) = EXIT CASE.
*                (RT) = *RT* BOOLEAN. 
*                (UP) = *UP* BOOLEAN. 
*                SEPB = EXIT CASE.
*                TO *EXC* (X=0,1,...,6) TO PROCESS EXIT CASE. 
*                TO *RCL* TO RETRY REQUEST. 
* 
*         USES   T1 - T3, P1 - P3, FA, CM - CM+4, FN - FN+4, FS - FS+4. 
* 
*         CALLS  CAD, CAI, CEI, CLE, PDE, PPF, PRT, SFA.
  
  
 MBUF     BSS    0           MESSAGE ASSEMBLY BUFFER
  
 SEP      BSS    0           ENTRY
          LDD    P1          SEPARATE EXIT CASE 
          SHN    0-11 
          STD    P3 
          STM    SEPB        SAVE EXIT CASE 
          LDD    P1          SEPARATE ERROR IDLE FLAG 
          LPN    2
          STD    P0 
          LDD    P1          SEPARATE ERROR CODE
          SHN    0-2
          LPC    177
          STD    P1 
  
*         SET UP THE *RT*, *EP* AND *UP* DIRECT CELLS.
  
          LDM    EPOP        SET UP *RT*
          SHN    0-1
          LPN    1
          STD    RT 
          LDM    EPOP        SET UP *EP*
          SHN    0-2
          LPN    1
          STD    EP 
          LDM    EPOP        SET UP *UP*
          SHN    0-3
          LPN    1
          STD    UP 
  
*         PERFORM COMMON INITIAL ERROR PROCESSING.
  
          RJM    CAI         CLEAR ALLOCATION AND *DAPF* INTERLOCKS 
          RJM    CAD         CHECK FOR ACCESS DENIED
          RJM    CEI         CHECK FOR ERROR IDLE 
          RJM    CLE         CHECK FOR LENGTH ERROR 
          RJM    PRT         PROCESS PRESERVED AND RESERVED TRACKS
          RJM    PDE         PROCESS *DMP=* 
          RJM    PPF         PROCESS SPECIAL *PFM* FILES
  
*         INVOKE EXIT CASE. 
  
          LDD    P1          CHECK ERROR CODE 
          LMK    /ERRMSG/RTR
          ZJP    RCL         IF REQUEST TO BE RETRIED 
          LDM    SEPA,P3     GET EXIT CASE ADDRESS
          STM    SEPA 
          LJM    E0C         EXIT 0 CASE
 SEPA     EQU    *-1
          CON    E1C         EXIT 1 CASE
          CON    E2C         EXIT 2 CASE
          CON    E3C         EXIT 3 CASE
          CON    E4C         EXIT 4 CASE
          CON    E5C         EXIT 5 CASE
          CON    E6C         EXIT 6 CASE
          CON    E7C         EXIT 7 CASE
 SEPB     CON    0           EXIT CASE OF *EXC* 
 E0C      SPACE  4,15 
**        E0C - EXIT 0 CASE PROCESSING. 
* 
*         EXIT   ERROR CODE IS RETURNED IN THE *FET*. 
*                IF (EP) = 0 THE JOB IS ABORTED.
*                IF (EP) = 1, THE JOB IS NOT ABORTED. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  PEM, UFF.
  
  
 E0C      BSS    0           ENTRY
          LDD    P1 
          LMK    /ERRMSG/FBS
          NJN    E0C1        IF NOT *FILE BUSY* 
          LDD    CP          SET *FILE BUSY* EVENT INTO *TERW*
          ADK    TERW 
          CRD    CM 
          LDD    CM+2        SET TIME 
          SCN    77 
          SHN    3
          LMM    ERRD 
          SHN    22-3 
          STD    CM+2 
          SHN    -6 
          SCN    77 
          LMM    ERRE        SET EST ORDINAL
          STD    CM+3 
          LDM    ERRC        SET FOLDED EVENT 
          STD    CM+4 
          LDD    CP 
          ADK    TERW 
          CWD    CM 
 E0C1     RJM    PEM         PROCESS ERROR MESSAGE
          LJM    UFF         UPDATE FET FIELDS AND EXIT 
 E1C      SPACE  4,25 
**        E1C - EXIT 1 CASE PROCESSING. 
* 
*         SPECIAL *EP* AND *UP* CONTROLLED FOR TIME DEPENDENT 
*           PROCESSING WITH A POSSIBILITY OF ROLLOUT. 
* 
*         ENTRY  (EP) = *EP* BOOLEAN. 
*                (UP) = *UP* BOOLEAN. 
* 
*         EXIT   IF *EP* AND *UP*.
*                  IF EMRA, COPY MESSAGE TO EMRA BUFFER.
*                  SET STATUS IN FET. 
*                  EXIT PFM.
*                SET MESSAGE IN *MS2W*. 
*                IF SSID FIELD ZERO, ROLLOUT JOB. 
*                RECALL REQUEST.
*                EXIT PFM.
* 
*         USES   CM+1 - CM+4. 
* 
*         CALLS  GEA, REM, WCM. 
* 
*         MACROS MONITOR. 
  
  
 E1C      BSS    0           ENTRY
          LDD    EP 
          ZJN    E1C3        IF *EP* NOT SET
          LDD    UP 
          ZJN    E1C3        IF *UP* NOT SET
  
*         RETURN STATUS TO USER.
  
 E1C1     RJM    GEA         GET USER ERROR MESSAGE ADDRESS *EMRA*
          ZJN    E1C2        IF NO ERROR MESSAGE ADDRESS
          LDM    ERRMSG,P1   SPECIFY MESSAGE ADDRESS
          RJM    REM         RETURN ERROR MESSAGE 
 E1C2     LJM    UFF         UPDATE FET FIELDS AND EXIT 
  
*         RECALL/ROLLOUT THE USER.
  
 E1C3     RJM    WCM         SET MESSAGE IN *MS2W*
          LDM    SSID        CHECK SUBSYSTEM ID 
          NJN    E1C4        IF JOB NOT ROLLABLE
          LDM    ERRD        SET ROLLOUT TIME 
          STD    CM+2 
          LDM    ERRE        SET ROLLOUT EST ORDINAL
          STD    CM+3 
          LDM    ERRC        SET FOLDED ROLLOUT EVENT 
          STD    CM+4 
          ADD    CM+3 
          ADD    CM+2 
          NJN    E1C3.1      IF TIMED EVENT ROLLOUT 
          SOM    E1CA        SET SCHEDULER ROLLOUT OPTION 
          ERRNZ  ROTE-ROSR-1 CODE DEPENDS ON VALUE
 E1C3.1   LDD    MA          WRITE *ROCM* PARAMETERS TO MB
          CWD    CM 
 E1CA     LDN    ROTE        SELECT TIMED/EVENT ROLLOUT 
*         LDN    ROSR        (SELECT SCHEDULER ROLLOUT) 
          STD    CM+1 
          MONITOR ROCM       REQUEST ROLLOUT
 E1C4     LJM    RCL         SET FOR PFM RECALL AND EXIT PFM
 E2C      SPACE  4,15 
**        E2C - EXIT 2 CASE PROCESSING. 
* 
*         SPECIAL *UP* OR *RT* CONTROLLED FOR STAGE INITIATED 
*           PROCESSING. 
* 
*         ENTRY  (RT) = *RT* BOOLEAN. 
*                (UP) = *UP* BOOLEAN. 
* 
*         EXIT   IF *UP* OR *RT*, 
*                  IF *EMRA*, COPY MESSAGE TO *EMRA* BUFFER.
*                  SET STATUS IN FET. 
*                  EXIT PFM.
*                SET MESSAGE AT *MS1W* IN *CPA* FOR THE JOB.
*                IF SSID FIELD ZERO, ROLLOUT JOB. 
*                RECALL REQUEST.
*                EXIT PFM.
  
  
 E2C      BSS    0           ENTRY
          LDD    UP 
          ZJN    E2C2        IF *UP* NOT SET
 E2C1     LJM    E1C1        RETURN STATUS TO CALLER
  
 E2C2     LDD    RT 
          NJN    E2C1        IF *RT* SET
          UJP    E1C3        COMPLETE FOR NOT *UP*/*RT* 
 E3C      SPACE  4,15 
**        E3C - EXIT 3 CASE PROCESSING. 
* 
*         UNCONDITIONALLY ABORT THE REQUESTING JOB. 
* 
*         EXIT   MESSAGE ISSUED TO JOB DAYFILE. 
*                MESSAGE ISSUED TO SYSTEM DAYFILE.
* 
*         CALLS  IDM, UFF.
  
  
 E3C      BSS    0           ENTRY
          LDM    ERRMSG,P1   ISSUE MESSAGE TO DAYFILE 
          RJM    IDM
  
*         ABORT THE JOB.
  
          LDK    STAJ        SET *ABORT JOB* STATUS BIT 
          RAM    STAU 
          LJM    UFF         UPDATE FET FIELDS AND EXIT 
 E4C      SPACE  4,15 
**        E4C - EXIT 4 CASE PROCESSING. 
* 
*         SPECIAL *EP*/*IP* OR *EP*/*UP* CONTROLLED FOR TIME DEPENDENT
*           PROCESSING WITH RECALL POSSIBILITY. 
* 
*         ENTRY  (EP) = *EP* BOOLEAN. 
*                (UP) = *UP* BOOLEAN. 
*                (EPOP) = ERROR PROCESSING OPTIONS. 
* 
*         EXIT   IF *EP*/*IP*, OR IF *EP*/*UP* AND NON-ROLLABLE JOB,
*                  IF EMRA, COPY MESSAGE TO EMRA BUFFER.
*                  SET STATUS IN FET. 
*                  EXIT PFM.
*                RECALL REQUEST.
*                EXIT PFM.
* 
*         CALLS  E1C1, RCL. 
  
  
 E4C      BSS    0           ENTRY
          LDD    EP 
          ZJN    E4C1        IF *EP* NOT SET
          LDM    EPOP 
          LPN    1
          NJN    E4C0        IF *IP* SET
          LDD    UP 
          ZJN    E4C1        IF *UP* NOT SET
          LDM    SSID        CHECK SUBSYSTEM ID 
          ZJN    E4C1        IF ROLLABLE JOB
 E4C0     LJM    E1C1        RETURN STATUS TO USER
  
 E4C1     RJM    WCM         SET MESSAGE IN *MS2W*
          LJM    RCL         RECALL *PFM* 
 E5C      SPACE  4,10 
**        E5C - EXIT 5 CASE PROCESSING. 
* 
*         SECURITY VIOLATION PROCESSING - ABORT JOB WITH *SVET* ERROR.
*           IF CALLER IS *SSJ=*, PROCESS AS NORMAL ERROR. 
* 
*         ENTRY  (P1) = ERROR CODE. 
* 
*         EXIT   TO *E0C* IF CALLER IS *SSJ=*.
*                MESSAGE ISSUED TO JOB DAYFILE. 
*                MESSAGE ISSUED TO SYSTEM DAYFILE.
*                (SVET) = SECURITY VIOLATION ERROR FLAG SET.
* 
*         CALLS  IDM, UFF.
  
  
 E5C      BSS    0           ENTRY
          LDM    SSJS 
          NJP    E0C         IF CALLER IS *SSJ=*
          LDM    ERRMSG,P1   ISSUE MESSAGE TO DAYFILE 
          RJM    IDM
  
*         ABORT THE JOB WITH AN *SVET* ERROR. 
  
          LDN    SVET        SET SECURITY VIOLATION ERROR FLAG
          STD    CM+1 
          MONITOR  CEFM 
          LJM    UFF         UPDATE FET FIELDS AND EXIT 
 E6C      SPACE  4,25 
**        E6C - EXIT 6 CASE PROCESSING. 
* 
*         SPECIAL *RT* CONTROLLED FOR TIME DEPENDENT PROCESSING OF
*           AN INACCESSIBLE MASS STORAGE DEVICE.
* 
*         ENTRY  (P1) = ERROR CODE. 
*                (P2) = EST ORDINAL OF DEVICE.
*                (RT) = *RT* BOOLEAN. 
*                (PWRF) = RESTART FLAGS FOR *PFM* RECALL. 
*                *RT* IS SET IF THE CALLER IS A SUBSYSTEM.
* 
*         EXIT   TO *E1C1*, IF *RT* SET, TO RETURN STATUS TO CALLER.
*                TO *1RJ* TO ROLLOUT THE JOB. 
* 
*         USES   IR+4, MP - MP+4. 
* 
*         CALLS  PAF, *1RJ*.
* 
*         MACROS EXECUTE. 
  
  
 E6C      BSS    0           ENTRY
          LDD    RT 
          NJP    E1C1        IF *RT* SET
  
*         SELECT EVENT ROLLOUT THROUGH OVERLAY *1RJ*. 
  
          RJM    PAF         PROCESS PF ACTIVITY COUNT AND FNT
          LDN    ZERL        SET PARAMETER WORD FOR *PFM* RECALL
          CRD    MP 
          LDM    PWRF        RESTART FLAGS
          STD    MP 
          LDD    P1          ERROR CODE 
          STD    MP+1 
          LDD    P2          SET EST ORDINAL
          STD    IR+4 
          EXECUTE  1RJ       ROLLOUT THE JOB
 E7C      SPACE  4,10 
**        E7C - EXIT 7 CASE PROCESSING. 
* 
*         SPECIAL PROCESSING FOR TYPE 2 ERRORS IN *PURGE*.  ISSUE THE 
*           ERROR MESSAGE TO THE ERROR LOG BUT DO NOT ABORT THE JOB.
* 
*         NOTE THAT CATALOG ENTRY FOR THE FILE HAS BEEN DELETED BEFORE
*         THIS OVERLAY IS INVOKED IN THIS CASE. 
* 
*         EXIT   MESSAGE ISSUED TO ERROR LOG. 
*                ERROR CODE CLEARED.
* 
*         CALLS  SEQ, UFF.
  
  
 E7C      BSS    0           ENTRY
          RJM    SEQ         ISSUE ERROR LOG MESSAGE
          LDN    0           CLEAR ERROR CODE 
          STD    P1 
          LJM    UFF         UPDATE FET FIELDS AND EXIT 
          TITLE  SUBROUTINES. 
 CPN      SPACE  4,10 
**        CPN - COPY NAME.
*         COPIES NAME WITH BLANK FILL.
* 
*         ENTRY  (T3) = SOURCE ADDRESS. 
*                (A) = DESTINATION ADDRESS. 
* 
*         USES   T3, P3.
  
  
 CPN      SUBR               ENTRY/EXIT 
          STD    P3          SAVE DESTINATION ADDRESS 
          ADN    3
          STM    CPNA 
 CPN1     LDI    T3 
          SCN    77 
          NJN    CPN2        IF NOT NULL CHARACTER
          LDC    100*1R 
 CPN2     STI    P3 
          LDI    T3 
          LPN    77 
          NJN    CPN3        IF NOT NULL CHARACTER
          LDN    1R 
 CPN3     RAI    P3          ASSEMBLE CHARACTERS
          AOD    T3 
          AOD    P3 
          LMC    ** 
 CPNA     EQU    *-1
          NJN    CPN1        IF NOT LAST FULL BYTE
          LDI    T3 
          SCN    77 
          ZJN    CPNX        IF NULL CHARACTER
          LMN    1R,
          STI    P3 
          UJN    CPNX        RETURN 
 GEA      SPACE  4,15 
**        GEA - GET ERROR MESSAGE RETURN ADDRESS. 
* 
*         ENTRY  (EP) = ERROR PROCESSING STATUS.
* 
*         EXIT   (A) = 0 IF *EP* OR *EMRA* NOT SPECIFIED. 
*                (A) = *EMRA* ADDRESS IF *EP* AND *EMRA* SPECIFIED. 
  
  
 GEA      SUBR               ENTRY/EXIT 
          LDD    EP 
          ZJN    GEAX        IF *EP* BOOLEAN NOT SET IN *FET* 
          LDM    EMRA        FORM *EMRA* BASE ADDRESS 
          LPN    37 
          SHN    14 
          ADM    EMRA+1 
          UJN    GEAX        RETURN WITH*EMRA*
 IDM      SPACE  4,10 
**        IDM - ISSUE DAYFILE MESSAGE.
* 
*         ENTRY  (A) = ADDRESS OF MESSAGE PLUS DESTINATION. 
* 
*         EXIT   ISSUES MESSAGE WITH FET ADDRESS. 
* 
*         USES   T1 - T4. 
* 
*         CALLS  DFM, C2D.
  
  
 IDM      SUBR               ENTRY/EXIT 
          STD    T4          SAVE ADDRESS 
          STD    T1 
          SHN    -14
          STD    T3 
          LDM    SFAA 
          LPN    77 
          ADM    SFAA+1 
          ZJN    IDM1        IF NO FET ADDRESS PRESET 
          LDM    EPOP        CHECK ADDRESS SUPPRESS BIT 
          LPN    20 
          ZJN    IDM2        IF FET ADDRESS NOT TO BE SUPPRESSED
 IDM1     LJM    IDM6        ISSUE MESSAGE WITHOUT ADDRESS
  
*         FIND END OF MESSAGE.
  
 IDM2     LDI    T1 
          SHN    -6 
          ZJN    IDM3        IF END OF MESSAGE
          LDI    T1 
          LPN    77 
          ZJN    IDM4        IF END OF MESSAGE
          AOD    T1 
          UJN    IDM2        LOOP 
  
 IDM3     SOD    T1          REPLACE *.* WITH *,* 
          LDI    T1 
          SCN    77 
          ADN    1R,
          STI    T1 
          AOD    T1 
          UJN    IDM5        ADD FET ADDRESS TO MESSAGE 
  
 IDM4     LDC    2R,         REPLACE *.* WITH *,* 
          STI    T1 
          AOD    T1 
  
*         STORE * AT * AT END OF MESSAGE. 
  
 IDM5     LDC    2R A 
          STI    T1 
          AOD    T1 
          LDC    2RT
          STI    T1 
          AOD    T1 
  
*         SET FET ADDRESS IN MESSAGE. 
  
          RJM    SFA         CONVERT FET ADDRESS
          SHN    14 
          SBD    RA 
          SHN    6
          STD    T2 
          SHN    -14
          RJM    C2D         CONVERT DIGITS 
          STI    T1 
          AOD    T1 
          LDD    T2 
          SHN    -6 
          RJM    C2D         CONVERT DIGITS 
          STI    T1 
          AOD    T1 
          LDD    T2 
          RJM    C2D         CONVERT DIGITS 
          STI    T1 
          AOD    T1 
          LDC    2R.
          STI    T1 
          AOD    T1 
          LDN    0           SET ZERO BYTE
          STI    T1 
  
*         ISSUE MESSAGE.
  
 IDM6     LDD    T3          RESET MESSAGE ADDRESS
          SHN    14 
          ADD    T4 
          RJM    DFM         ISSUE MESSAGE
          LJM    IDMX        RETURN 
 MEC      SPACE  4,15 
**        MEC - MODIFY ERROR CODES. 
* 
*         ENTRY  (P1) = ERROR CODE FOR POSSIBLE MODIFICATION. 
* 
*         EXIT   (P1) = ERROR CODE TO BE REPORTED IN THE *FET*. 
  
  
  
*         CHANGE CODE WHICH REPORTS A WAIT FOR AN INACCESSIBLE
*         DEVICE TO *PF UTILITY ACTIVE*.
  
 MEC2     LMK    /ERRMSG/WID&/ERRMSG/FIA
          NJN    MECX        IF NOT *WID*, RETURN 
          LDK    /ERRMSG/PFA CHANGE ERROR CODE TO *PFA* 
          STD    P1 
  
 MEC      SUBR               ENTRY/EXIT 
          LDD    P1          CHECK FOR ERROR CODES TO MODIFY
          LMN    /ERRMSG/FDA
          ZJN    MEC1        IF *FDA* THEN MODIFY 
          LMN    /ERRMSG/FIA&/ERRMSG/FDA
          NJN    MEC2        IF NOT *FIA* 
 MEC1     LDN    /ERRMSG/FNF CHANGE ERROR CODE TO *FNF* 
          STD    P1 
          UJN    MECX        RETURN 
 MFN      SPACE  4,10 
**        MFN - MERGE FILE NAME WITH MESSAGE. 
* 
*         ENTRY  (A) = FIRST WORD ADDRESS OF MESSAGE. 
*                (FN - FN+3) = FILE NAME. 
* 
*         EXIT   (A) = FIRST WORD ADDRESS OF MESSAGE. 
* 
*         USES   T1 - T3. 
  
  
 MFN      SUBR               ENTRY/EXIT 
          STD    T1          SAVE MESSAGE ADDRESS 
          LDC    MBUF        ASSEMBLY AREA
          STD    T2 
          LDN    1R          BLANK FIRST CHARACTER
          STI    T2 
          AOD    T2 
          LDN    FN 
          STD    T3 
          LDD    FN+3        CLEAR TRAILING CONTROL INFORMATION 
          SCN    77 
          STD    FN+3 
 MFN1     LDI    T3          GET BYTE 
          SHN    -6          UPPER CHARACTER
          ZJN    MFN2        IF END OF FILE NAME
          STI    T2 
          AOD    T2 
          LDI    T3          LOWER CHARACTER
          LPN    77 
          ZJN    MFN2        IF END OF FILE NAME
          STI    T2 
          AOD    T2 
          AOD    T3 
          UJN    MFN1        LOOP TO END OF FILE NAME 
  
 MFN2     LDN    1R          INSERT SPACE 
          STI    T2 
          AOD    T2 
 MFN3     LDI    T1          UPPER MESSAGE CHARACTER
          SHN    -6 
          STI    T2 
          ZJN    MFN4        IF END OF MESSAGE
          AOD    T2 
          LDI    T1          LOWER MESSAGE CHARACTER
          LPN    77 
          STI    T2 
          ZJN    MFN4        IF END OF MESSAGE
          AOD    T2 
          AOD    T1 
          UJN    MFN3        MOVE NEXT CHARACTER
  
 MFN4     STM    1,T2        SET END OF MESSAGE 
          STM    2,T2 
          LDC    MBUF 
          STD    T1 
          STD    T3 
 MFN5     LDI    T1 
          ZJN    MFN6        IF END OF MESSAGE REACHED
          SHN    6
          LMM    1,T1 
          STI    T3 
          AOD    T3 
          LDN    2
          RAD    T1 
          UJN    MFN5        LOOP TO COMPLETE MESSAGE 
  
 MFN6     STI    T3          SET END OF MESSAGE 
          LDC    MBUF        EXIT WITH (A) = MESSAGE ADDRESS
          LJM    MFNX        RETURN 
 PAF      SPACE  4,15 
**        PAF - PROCESS PF ACTIVITY COUNT AND LOCAL FILE FNT. 
* 
*         ENTRY  (EPFA) = EST ORDINAL OF DEVICE IF PF ACTIVITY
*                         TO BE DECREMENTED.
*                (FNTA) = FNT ADDRESS OF LOCAL FILE.
* 
*         EXIT   LOCAL FILE FNT SET COMPLETE. 
*                PF ACTIVITY COUNT DECREMENTED IF IT WAS SET. 
* 
*         USES   CM - CM+4, FS - FS+4.
* 
*         MACROS MONITOR. 
  
  
 PAF      SUBR               ENTRY/EXIT 
  
*         DECREMENT PF ACTIVITY COUNT.
  
          LDM    EPFA        EST ORDINAL
          ZJN    PAF1        IF ACTIVITY NOT SET
          STD    CM+1 
          LDN    DPAS        DECREMENT PF ACTIVITY COUNT
          STD    CM+3 
          MONITOR  STBM 
  
*         SET LOCAL FILE FNT COMPLETE.
  
 PAF1     LDM    FNTA 
          STD    FA 
          ZJN    PAFX        IF NO LOCAL FILE FNT, RETURN 
          NFA    FA,R 
          ADN    FSTL 
          CRD    FS 
          LDD    FS+4        SET FST COMPLETE 
          SCN    1
          ADN    1
          STD    FS+4 
          NFA    FA,R 
          ADN    FSTL 
          CWD    FS 
          UJN    PAFX        RETURN 
 PEA      SPACE  4,15 
**        PEA - PROCESS ERRORS REQUIRING SPECIAL ACTION.
* 
*         ENTRY  (P1) = ERROR CODE. 
*                (EP) = *EP* BOOLEAN FROM *FET*.
*                (SEPB) = EXIT CASE.
* 
*         EXIT   IF THE USER IS NOT PROCESSING ERRORS;
*                  SET *TKET* ERROR FLAG IF *PRL* ERROR.
*                  SET *FLET* ERROR FLAG IF *LFL* ERROR.
*                  THE *STAJ* (ABORT JOB) STATUS BIT IS SET.
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 PEA      SUBR               ENTRY/EXIT 
          LDD    EP 
          NJN    PEAX        IF *EP* SPECIFIED
          LDD    P1          CHECK ERROR TYPE 
          LMN    /ERRMSG/PRL
          NJN    PEA1        IF NOT TRACK LIMIT 
          LDN    TKET        SET *TKET* ERROR FLAG
          STD    CM+1 
          UJN    PEA2        SET TRACK LIMIT
  
 PEA1     LMN    /ERRMSG/LFL&/ERRMSG/PRL CHECK ERROR TYPE 
          NJN    PEA3        IF NOT FILE LIMIT
          LDN    FLET        SET *FLET* ERROR FLAG
          STD    CM+1 
 PEA2     MONITOR CEFM
          UJN    PEAX        RETURN 
  
 PEA3     LDM    SEPB 
          NJN    PEAX        IF SPECIAL EXIT CASE 
          LDK    STAJ        SET *ABORT JOB* STATUS BIT 
          RAM    STAU 
          UJN    PEAX        RETURN 
 PEM      SPACE  4,15 
**        PEM - PROCESS ERROR MESSAGE.
* 
*         ENTRY  (P1) = ERROR CODE. 
*                (EP) = *EP* BOOLEAN FROM FET (0 OR 1). 
* 
*         EXIT   ERROR MESSAGE ISSUED BY TYPE.
* 
*         USES   T1.
* 
*         CALLS  DFM, GEA, IDM, MFN, PEA, REM, SEQ. 
  
  
 PEM      SUBR               ENTRY/EXIT 
          LDD    P1 
          ZJN    PEMX        IF NO ERROR (*RPFSTAT* REQUEST)
          LDM    ERRCLS,P1   ERROR TYPE OR CLASS
          STD    T1 
          SHN    1           DETERMINE MESSAGE CODE BASE ADDRESS
          ADC    TDMO 
          STM    PEMB        SET MESSAGE CODE ADDRESS 
          LDM    PEMA,T1     ESTABLISH CASE OF MESSAGE TYPE 
          STM    PEMA 
          LJM    PEM1        TYPE = 0 (FILE NAME REQUIRED)
 PEMA     EQU    *-1
          CON    PEM2        TYPE = 1 (ISSUE TO JOB DAYFILE ONLY) 
          CON    PEM5        TYPE = 2 (SYSTEM ERROR)
          CON    PEM6        TYPE = 3 (NO MESSAGE ERROR)
  
*         PROCESS TYPE 0 ERROR MESSAGE. 
  
 PEM1     LDM    ERRMSG,P1   BASE ADDRESS OF MESSAGE
          RJM    MFN         MERGE FILENAME AND MESSAGE 
          STM    ERRMSG,P1   SET NEW ERROR MESSAGE ADDRESS
  
*         PROCESS TYPE 1 ERROR MESSAGE. 
  
 PEM2     RJM    GEA         GET USER ERROR MESSAGE ADDRESS *EMRA*
          ZJN    PEM3        IF ERMSG AND *EP* NOT SPECIFIED
          LDM    ERRMSG,P1   SPECIFY MESSAGE ADDRESS
          RJM    REM         RETURN ERROR MESSAGE 
          UJN    PEM4        RETURN 
  
 PEM3     RJM    PEA         PROCESS ERRORS REQUIRING SPECIAL ACTION
          LDM    **,EP       GET MESSAGE OPTION 
 PEMB     EQU    *-1         (TABLE ADDRESS FOR MESSAGE TYPE) 
          SHN    14          POSITION 
          MJN    PEM4        IF NO MESSAGE TO ISSUE 
          ADM    ERRMSG,P1   ADD MESSAGE ADDRESS
          RJM    IDM         ISSUE MESSAGE
 PEM4     LJM    PEMX        RETURN 
  
*         PROCESS TYPE 2 ERROR MESSAGE. 
*         SYSTEM ERROR - ISSUE *SYSTEM ERROR* TO JOB DAYFILE. 
  
 PEM5     LDC    PEMD+CPON   *SYSTEM ERROR* 
          RJM    DFM
          RJM    SEQ         ISSUE ERROR LOG MESSAGE
          UJN    PEM2        COMPLETE ERROR PROCESSING
  
*         PROCESS TYPE 3 ERROR MESSAGE. 
  
 PEM6     LDM    ERRMSG,P1   SET MESSAGE DESTINATION ADDRESS
          STM    PEMC 
          LDD    CP          READ MESSAGE AT CP AREA
          ADN    MS1W 
          CRM    **,TR
 PEMC     EQU    *-1
          LJM    PEM2        COMPLETE ERROR PROCESSING
  
 PEMD     DATA   C*SYSTEM ERROR.* 
 TDMO     SPACE  4,10 
**        TDMO - TABLE OF DAYFILE MESSAGE OPTIONS.
* 
*T        12/(OPTION IF CP ABORTING),12/(OPTION IF *EP* SET)
*         BIT 5 IS SET IF NO MESSAGE IS TO BE ISSUED. 
  
  
 TDMO     BSS    0
          CON    0,CPON/10000B                   TYPE 0 
          CON    0,CPON/10000B                   TYPE 1 
          CON    NMSN/10000B,NMSN/10000B         TYPE 2 
          CON    40B,40B                         TYPE 3 
 PPF      SPACE  4,15 
**        PPF - PROCESS SPECIAL *PFM* FILES.
* 
*         ENTRY  (FNTA) = LOCAL FILE FNT ADDRESS. 
*                (ERRB) = 0 IF LOCAL FILE CREATED BY *PFM*. 
*                (FNTB) = /PFM*PFN/ FNT ADDRESS.
*                (FNTC) = /PFM*ILK/ FNT ADDRESS.
*                (FNTD) = /PFM*APF/ FNT ADDRESS.
* 
*         EXIT   FILES UNLOADED IF CREATED BY *PFM*.
* 
*         CALLS  *0DF*. 
  
  
 PPF      SUBR               ENTRY/EXIT 
          LDN    1
          STM    LOCF-1      SET *UNLOAD* OPTION FOR *0DF*
  
*         PROCESS LOCAL FILE. 
  
          LDM    FNTA 
          ZJN    PPF1        IF NO LOCAL FILE FNT 
          STD    FA 
          LDM    ERRB 
          NJN    PPF1        IF LOCAL FILE NOT CREATED BY *PFM* 
 PPFA     LDN    0
*         LDN    1           (*SYOT* + *GET* + *FILE LENGTH ERROR*) 
          NJN    PPF1        IF FILE SHOULD NOT BE RETURNED 
          EXECUTE  0DF,LOCF 
          MJN    PPF1        IF DEVICE INACCESSIBLE 
          LDN    0           CLEAR LOCAL FILE FNT ADDRESS 
          STM    FNTA 
  
*         PROCESS /PFM*PFN/.
  
 PPF1     LDM    FNTB        GET FNT ADDRESS
          ZJN    PPF2        IF FILE NOT PRESENT
          STD    FA 
          EXECUTE  0DF,LOCF 
  
*         PROCESS /PFM*ILK/.
  
 PPF2     LDM    FNTC        GET FNT ADDRESS
          ZJN    PPF3        IF FILE NOT PRESENT
          STD    FA 
          EXECUTE  0DF,LOCF 
  
*         PROCESS /PFM*APF/.
  
 PPF3     LDM    FNTD        GET FNT ADDRESS
          ZJN    PPF4        IF FILE NOT PRESENT
          STD    FA 
          EXECUTE  0DF,LOCF 
 PPF4     LJM    PPFX        RETURN 
 RCL      SPACE  4,15 
**        RCL - RECALL PFM. 
* 
*         ENTRY  (P1) = ERROR CODE. 
*                (PWRF) = RESTART FLAGS.
* 
*         EXIT   (CN - CN+4) = INPUT REGISTER FOR *PFM* RECALL. 
*                (FN - FN+4) = RECALL REQUEST FOR MONITOR.
*                (MP - MP+4) = PARAMETER WORD FOR *PFM* RECALL. 
*                (AIPF, AIPF+1) = 0.
*                (STAU) = *STRP* BIT SET TO RECALL *PFM*. 
*                TO *3PU* TO RECALL *PFM*.
  
  
 RCL      BSS    0           ENTRY
          LDN    0           CLEAR PF ACCUMULATOR INCREMENT 
          STM    AIPF 
          STM    AIPF+1 
          LDN    ZERL 
          CRD    FN          SET RECALL REQUEST 
          CRD    MP          SET PARAMETER WORD 
          LDM    PWRF        RESTART FLAGS
          STD    MP 
          LDD    P1          ERROR CODE 
          STD    MP+1 
          LDD    IA          READ INPUT REQUEST REGISTER
          CRD    CN 
          LDD    MP+1        CHECK ERROR CODE 
          LMK    /ERRMSG/RTR
          NJN    RCL2        IF NOT RETRY REQUEST 
          LDD    CC          COMMAND CODE 
          LMN    CCRS 
          NJN    RCL1        IF NOT *RPFSTAT* REQUEST 
          LDD    CN+2        SET ORIGINAL COMMAND CODE IN REQUEST 
          SCN    77 
          LMM    PWCC 
          STD    CN+2 
 RCL1     LDN    0
          UJN    RCL3        SET DELAY TO 0 MILLISECONDS
  
 RCL2     LDC    250D        SET DELAY TO 250D MILLISECONDS 
 RCL3     STD    FN+4 
          LDC    PTMF        SET TIMED RECALL 
          STD    FN+1 
          LDK    STRP        SET *RECALL PFM* STATUS BIT
          RAM    STAU 
          EXECUTE  3PU       RECALL *PFM* 
 REM      SPACE  4,10 
**        REM - RETURN ERROR MESSAGE. 
* 
*         ENTRY  (A) = ADDRESS OF ERROR MESSAGE.
*                (EMRA - EMRA+1) ADDRESS FOR MESSAGE RETURN.
* 
*         CALLS  NONE 
* 
*         USES   T1, T2, T3 
  
  
 REM      SUBR
          STM    REMA        SAVE MESSAGE ADDRESS 
          STD    T1 
          LDN    5           SET BYTES PER WORD 
          STD    T2 
          LDN    1
          STD    T3          INITIALIZE CM WORD COUNT 
  
 REM1     LDI    T1          SEARCH FOR END OF MESSAGE
          ZJN    REM2        IF ZERO BYTE FOUND 
          AOD    T1 
          SOD    T2 
          NJN    REM1        IF NOT FULL CM WORD
          AOD    T3 
          LDN    5
          STD    T2          RESET BYTES PER WORD 
          UJN    REM1        CONTINUE TO END OF MESSAGE 
  
 REM2     AOD    T1          CLEAR REMAINDER OF MESSAGE TO FULL WORD
          SOD    T2 
          ZJN    REM3        IF FULL CM WORD
          LDN    0
          STI    T1          CLEAR MESSAGE TAIL 
          UJN    REM2        LOOP FOR FULL CM WORD
  
 REM3     LDM    EMRA        STORE MESSAGE
          LPN    37 
          SHN    6
          ADD    RA 
          SHN    6
          ADM    EMRA+1 
          CWM    *,T3        SEND MESSAGE TO CENTRAL
 REMA     EQU    *-1
          LJM    REMX        RETURN 
 SEQ      SPACE  4,12 
**        SEQ - SET EQUIPMENT INFORMATION IN MESSAGE. 
* 
*         SETS THE DEVICE TYPE, EST ORDINAL AND DEVICE NUMBER INTO
*         THE ERROR MESSAGE AND ISSUES IT TO THE ERROR LOG.  ALSO 
*         ISSUES TO THE ERROR LOG EITHER A MESSAGE SPECIFYING FAMILY, 
*         FILE NAME AND USER INDEX, OR A MESSAGE SPECIFYING TRACK 
*         AND SECTOR. 
* 
*         ENTRY  (CC) = COMMAND CODE. 
*                (P1) = ERROR CODE. 
*                (P2) = EST ORDINAL.
*                (ERRC) = TRACK (FOR *BCS* ERROR).
*                (ERRD) = SECTOR (FOR *BCS* ERROR). 
* 
*         CALLS  CFN, C2D, DFM. 
* 
*         USES   T2, T3, CM - CM+4. 
* 
*         MACROS SFA. 
  
  
 SEQ6     LDM    ERRMSG,P1   ISSUE MESSAGE TO ERRLOG
          ADC    ERLN 
          RJM    DFM
 SEQA     LDN    0
*         LDN    1           (EXTENDED MESSAGE REQUIRED)
          ZJN    SEQX        IF EXTENDED MESSAGE NOT REQUIRED 
          LDC    SEQB+ERLN   ISSUE FM/PF/UI EXTENDED MESSAGE
*         LDC    SEQD+ERLN   (ISSUE TRACK/SECTOR EXTENDED MESSAGE)
 SEQE     EQU    *-1
          RJM    DFM
 SEQF     UJN    SEQX        RETURN 
*         PSN                (ERROR IDLE SET) 
          LDC    SEQG+ERLN   *EQXXX, ERROR IDLE SET.* 
          RJM    DFM
  
 SEQ      SUBR               ENTRY/EXIT 
          LDD    P1 
          LMN    /ERRMSG/RSE
          ZJN    SEQ6        IF RESEX ERROR 
          AOM    SEQA        FLAG EXTENDED MESSAGE REQUIRED 
          LDM    ERRMSG,P1   SET MESSAGE ADDRESS
          STD    T2 
          LDD    P2          CONVERT UPPER TWO DIGITS OF EST ORDINAL
          SHN    -3 
          RJM    C2D
          STM    1,T2 
          STM    SEQB+1 
          STM    SEQD+1 
          STM    SEQG+1 
          LDD    P2          CONVERT LOWER DIGIT OF EST ORDINAL 
          LPN    7
          SHN    6
          ADC    2R0, 
          STM    2,T2 
          STM    SEQB+2 
          STM    SEQD+2 
          STM    SEQG+2 
          SFA    EST,P2      READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4        READ PFGL WORD OF MST
          SHN    3
          ADN    PFGL 
          CRD    CM 
          LDD    CM+3        CONVERT DEVICE NUMBER
          RJM    C2D
          STM    4,T2 
          LDD    P1 
          LMN    /ERRMSG/BCS
          NJN    SEQ1        IF NOT *BAD CATALOG/PERMIT SECTOR* 
          LJM    SEQ5        PROCESS TRACK/SECTOR ERROR MESSAGE 
  
*         SET UP *EQXXX, FM= ,PF= ,UI= .* MESSAGE.
  
 SEQ1     LDN    CM          COPY FAMILY NAME 
          STD    T3 
          LDC    SEQB+5      COPY NAME TO BUFFER
          RJM    CPN
          LDD    CC 
          LMN    CCCT 
          NJN    SEQ2        IF NOT CATLIST ERROR 
          LDD    FN 
          NJN    SEQ2        IF FILE NAME DEFINED 
          LDC    SEQC        SET FILE NAME TO *PERMITS* 
          UJN    SEQ4        SET *PERMITS* ADDRESS
  
 SEQ2     LDM    PFFN        CHECK PERMANENT FILE NAME
          ZJN    SEQ3        IF NOT SPECIFIED IN FET
          LDC    PFFN        SET ADDRESS OF PERMANENT FILE NAME 
          UJN    SEQ4        SET ADDRESS
  
 SEQ3     LDN    FN          SET ADDRESS OF LOCAL FILE NAME 
 SEQ4     STD    T3 
          LDC    SEQB+13
          RJM    CPN
          LDD    UI+1        COPY USER INDEX
          RJM    C2D
          STM    SEQB+23
          LDD    UI+1 
          SHN    -6 
          RJM    C2D
          STM    SEQB+22
          LDD    UI 
          RJM    C2D
          STM    SEQB+21
          LJM    SEQ6        ISSUE MESSAGES 
  
*         SET UP *EQXXX, TK= ,SC= .* MESSAGE. 
  
 SEQ5     LDM    ERRC        CONVERT TRACK NUMBER 
          SHN    -6 
          RJM    C2D
          STM    SEQD+5 
          LDM    ERRC 
          RJM    C2D
          STM    SEQD+6 
          LDM    ERRD        CONVERT SECTOR NUMBER
          SHN    -6 
          RJM    C2D
          STM    SEQD+11
          LDM    ERRD 
          RJM    C2D
          STM    SEQD+12
          LDN    SEQD-SEQB   FORCE TRACK/SECTOR OF EXTENDED MESSAGE 
          RAM    SEQE 
          LJM    SEQ6        ISSUE MESSAGES 
  
 SEQB     DATA   C*EQXXX, FM=       , PF=       , UI=      .* 
 SEQC     DATA   C*PERMITS* 
 SEQD     DATA   C*EQXXX, TK=    ,SC=    .* 
 SEQG     DATA   C*EQXXX, ERROR IDLE SET.*
 UFF      SPACE  4,15 
**        UFF - UPDATE FET FIELDS.
* 
*         ENTRY  (P1) = ERROR CODE. 
* 
*         EXIT   TO *3RT*.
*                (FN - FN+4) = FET + 0 WITH ERROR STATUS SET. 
*                (FS - FS+4) = FET + 1. 
*                (STAU) = *STDS* FLAG SET TO DROP PP. 
* 
*         USES   T1, T2.
* 
*         CALLS  MEC, SFA, *3PU*. 
  
  
 UFF      BSS    0           ENTRY
          RJM    MEC         MODIFY ERROR CODE IF NEEDED
          RJM    SFA         READ FIRST WORD OF *FET* 
          ZJN    UFF1        IF NO FET ADDRESS
          CRD    FN 
          ADN    1           READ FET + 1 
          CRD    FS 
          LDD    P1          FORM MSB OF ERROR CODE 
          SHN    -2 
          STD    T2 
          LDD    P1          FORM LSB OF ERROR CODE 
          LPN    3
          SHN    13-1 
          ADN    1           SET COMPLETE BIT 
          STD    T1 
          LDD    FN+3        MERGE WITH END OF FILE NAME
          SCN    77 
          ADD    T2 
          STD    FN+3 
          LDD    FN+4 
          LPC    1776        CLEAR COMPLETE AND ERROR CODE BITS 
          ADD    T1 
          STD    FN+4 
 UFF1     LDK    STDS        SET *DROP PP* STATUS BIT 
          RAM    STAU 
          EXECUTE  3PU       DROP PP
 WCM      SPACE  4,15 
**        WCM - WRITE CONTROL POINT MESSAGE.
* 
*         ENTRY  (P1) = ERROR CODE. 
* 
*         EXIT   MESSAGE WRITTEN TO *MS2W* OF JOB CONTROL POINT.
* 
*         USES   T1.
* 
*         CALLS  MFN. 
  
  
 WCM      SUBR               ENTRY/EXIT 
          LDM    ERRCLS,P1   CHECK MESSAGE TYPE 
          NJN    WCM1        IF NOT TYPE 0 MESSAGE
          LDM    ERRMSG,P1   MERGE FILE NAME WITH MESSAGE 
          RJM    MFN
          UJN    WCM2        SETUP TO WRITE MESSAGE 
  
 WCM1     LDM    ERRMSG,P1
 WCM2     STM    WCMA        SET FOR MESSAGE COPY TO *MS2W* 
          ADN    5*3-1       FORCE END OF LINE
          STM    WCMB+1 
          LDN    0
 WCMB     STM    *
          LDD    CP          SET DESTINATION ADDRESS
          ADN    MS2W 
          CWM    *,TR        COPY MESSAGE TO *MS2W* OF JOB
 WCMA     EQU    *-1
          UJN    WCMX        RETURN 
          TITLE  ERROR MESSAGES.
**        ERROR MESSAGES. 
* 
*         FORMAT (FIRST WORD), ERROR DESTINATION FLAG.
*                (SECOND WORD), FIRST WORD ADDRESS OF MESSAGE.
* 
*         CONTENTS OF FIRST WORD. 
*                0, SEND FILE NAME MESSAGE TO CONTROL POINT DAYFILE.
*                1, SEND MESSAGE TO CONTROL POINT DAYFILE.
*                2, SEND MESSAGE TO CONTROL POINT DAYFILE AND ERRORLOG. 
  
  
          LIST   -R 
  
 MXER     EQU    /ERRMSG/MXER 
 ERRCLS   INDEX 
  
 FBS      ERRMSG 0,(BUSY.)
 FNF      ERRMSG 0,(NOT FOUND.) 
 EFL      ERRMSG 0,(EMPTY.) 
 NMS      ERRMSG 0,(NOT ON MASS STORAGE.) 
 FAP      ERRMSG 0,(ALREADY PERMANENT.) 
 IFT      ERRMSG 0,(INCORRECT FILE TYPE.) 
  
 FNE      ERRMSG 1,( FILE NAME ERROR.)
 IUA      ERRMSG 1,( USER ACCESS NOT VALID.)
 IDR      ERRMSG 1,( INCORRECT DEVICE REQUEST.) 
 FTL      ERRMSG 1,( FILE TOO LONG.)
 ILR      ERRMSG 1,( PFM INCORRECT REQUEST.)
 PFN      ERRMSG 1,( DEVICE UNAVAILABLE.) 
 DAD      ERRMSG 1,( DIRECT ACCESS DEVICE ERROR.) 
 PFA      ERRMSG 1,( PF UTILITY ACTIVE.)
 DTE      ERRMSG 1,( DATA TRANSFER ERROR.)
 COF      ERRMSG 1,( TOO MANY PERMANENT FILES.) 
 COS      ERRMSG 1,( TOO MUCH INDIRECT ACCESS FILE SPACE.)
 SPN      ERRMSG 1,( PRUS REQUESTED UNAVAILABLE.) 
 IOE      ERRMSG 1,( I/O SEQUENCE ERROR.) 
 LFL      ERRMSG 1,( LOCAL FILE LIMIT.) 
 PRL      ERRMSG 1,( PRU LIMIT.)
 PLE      ERRMSG 1,( PERMIT LIMIT EXCEEDED.)
 PAE      ERRMSG 1,( PFM ARGUMENT ERROR.) 
 RSE      ERRMSG 2,( RESEX FAILURE.)
 TKL      ERRMSG 2,(EQXXX,DNYY, TRACK LIMIT.) 
 FLE      ERRMSG 2,(EQXXX,DNYY, FILE LENGTH ERROR.) 
 RIN      ERRMSG 2,(EQXXX,DNYY, RANDOM INDEX ERROR.)
 DAF      ERRMSG 2,(EQXXX,DNYY, DIRECT ACCESS FILE ERROR.)
 RPE      ERRMSG 2,(EQXXX,DNYY, REPLACE ERROR.) 
 ABT      ERRMSG 2,(EQXXX,DNYY, PFM ABORTED.) 
 MSE      ERRMSG 2,(EQXXX,DNYY, MASS STORAGE ERROR.)
 EDA      ERRMSG 1,( ERROR IN FILE DATA.) 
 EPT      ERRMSG 1,( ERROR IN PERMIT DATA.) 
 EDP      ERRMSG 1,( DATA/PERMIT ERRORS.) 
 FLC      ERRMSG 1,( EOI CHANGED BY RECOVERY.)
 NEM      ERRMSG 3,(                              ) 
 RS2      ERRMSG 1,()        RESERVED 
 RS3      ERRMSG 1,()        RESERVED 
 RS4      ERRMSG 1,()        RESERVED 
 FSE      ERRMSG 2,(EQXXX,DNYY, FILE BOI/EOI/UI MISMATCH.)
 SSE      ERRMSG 2,(EQXXX,DNYY, SYSTEM SECTOR ERROR.) 
 BCS      ERRMSG 2,(EQXXX,DNYY, BAD CATALOG/PERMIT SECTOR.) 
 TNR      ERRMSG 2,(EQXXX,DNYY, TRACK NOT RESERVED.)
 PPE      ERRMSG 0,(PERMANENT ERROR.) 
 PSI      ERRMSG 0,(STAGE INITIATED.) 
 PWE      ERRMSG 0,(WAITING FOR SUBSYSTEM.) 
 FIN      ERRMSG 0,(INTERLOCKED.) 
 FDA      ERRMSG 0,(IS DIRECT ACCESS.)
 FIA      ERRMSG 0,(IS INDIRECT ACCESS.)
 FEO      ERRMSG 0,(IS EXECUTE ONLY.) 
 SGD      ERRMSG 1,( PF STAGING DISABLED.)
 IPA      ERRMSG 1,( INCORRECT PFC ADDRESS.)
 PVE      ERRMSG 1,( PFC VERIFICATION ERROR.) 
 FND      ERRMSG 1,( FILE NOT DISK RESIDENT.) 
 INA      ERRMSG 1,()  INTERLOCK NOT AVAILABLE (NO MESSAGE) 
 AIO      ERRMSG 1,( NO ALTERNATE STORAGE COPY OF FILE.)
 ASE      ERRMSG 1,( ALTERNATE STORAGE ERROR.)
 FTF      ERRMSG 1,( FNT FULL.) 
 ICU      ERRMSG 1,( INCORRECT CATALOG UPDATE.) 
 PEA      ERRMSG 1,( PFM EXCESS ACTIVITY.)
 NVX      ERRMSG 1,( NOT VALIDATED TO SET XD/XT.) 
 DEM      ERRMSG 1,( XD/XT EXCEEDS MAXIMUM.)
 JCA      ERRMSG 1,( JOB CANNOT ACCESS FILE.) 
 LNJ      ERRMSG 1,( ACCESS LEVEL NOT VALID FOR JOB.) 
 WDP      ERRMSG 1,( WRITE-DOWN OF DATA PROHIBITED.)
 CNJ      ERRMSG 1,( ACCESS CATEGORIES NOT VALID FOR JOB.)
 LNP      ERRMSG 1,( ACCESS LEVEL NOT VALID ON PF DEVICE.)
 NVD      ERRMSG 1,( NOT VALID TO DOWNGRADE DATA.)
 NTD      ERRMSG 0,(- NO TEMP DEVICE FOUND.)
 LNF      ERRMSG 1,( ACCESS LEVEL NOT VALID FOR FILE.)
 TPE      ERRMSG 0,(TEMPORARY ERROR, TRY LATER.)
 WNF      ERRMSG 1,( WAITING FOR NFL.)
 WID      ERRMSG 1,( WAITING - INACCESSIBLE DEVICE.)
 RTR      ERRMSG 3,()  REQUEST BEING RETRIED BY PFM (NO MESSAGE)
 ECD      ERRMSG 1,( ERROR IN CATLIST CONTINUATION DATA.) 
  
          INDEX  MXER 
  
  
 ERRMSG   INDEX 
 ERRMT    HERE
          INDEX  MXER 
  
          LIST   *
  
          USE    LITERALS 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPACS 
*CALL     COMPCTI 
*CALL     COMPC2D 
*CALL     COMPSES 
*CALL     COMPTGB 
  
  
*         ACCOUNT FILE MESSAGE BUFFER.
  
 SVM      DATA   C*MPNF, *
          BSSZ   14 
  
 SVMA     DATA   2H,         MESSAGE SEPARATOR
          CON    0           END OF STRING
 SVMB     DATA   2H.         MESSAGE TERMINATOR 
          CON    0
          SPACE  4,10 
 LOCF     EQU    *+5         ZERO LEVEL OVERLAY ADDRESS 
          ERRNG  BFMS-LOCF-ZDFL   *0DF* OVERFLOW
          TITLE  OVERLAYABLE SUBROUTINES. 
 CAD      SPACE  4,10 
**        CAD - CHECK FOR ACCESS DENIED.
* 
*         ENTRY  (P1) = ERROR MESSAGE.
*                (PFPN) = OPTIONAL PACK NAME. 
*                (PFOU) = ALTERNATE USER NAME.
* 
*         EXIT   *MPNF* ACCOUNT FILE MESSAGE ISSUED ON *FNF* ERRORS.
* 
*         CALLS  ACS, DFM, SFN. 
* 
*         USES   T1, FN - FN+4. 
  
  
 CAD      SUBR               ENTRY/EXIT 
          LDD    P1 
          LMN    /ERRMSG/FNF
          NJN    CADX        IF NOT * FILE NOT FOUND.*
          LDM    PFOU 
          ZJN    CADX        IF NOT AN ALTERNATE USER 
          LDD    MA          SAVE FN - FN+4 
          CWD    FN 
          CRM    CADA,ON
          LDM    PFFN        GET PERMANENT FILE NAME
          ZJN    CAD1        IF PF NAME NOT SPECIFIED 
          LDN    PFFN-PFSN
 CAD1     ADC    PFSN 
          RJM    SFN
          LDC    SVM+3       INITIALIZE MESSAGE POINTER FOR ACS CALLS 
          STD    T1 
          LDN    FN          INSERT FILE NAME IN MESSAGE BUFFER 
          RJM    ACS
          LDC    SVMA        APPEND COMMA SEPARATOR 
          RJM    ACS
          LDC    PFOU        SET USER NAME IN MESSAGE BUFFER
          RJM    SFN
          LDN    FN 
          RJM    ACS
          LDC    SVMA        APPEND COMMA SEPARATOR 
          RJM    ACS
          LDM    PFPN        CHECK FOR PACK NAME
          ZJN    CAD2        IF NO PACK NAME
          LDC    PFPN        SET PACK NAME IN MESSAGE BUFFER
          RJM    SFN
          LDN    FN 
          RJM    ACS
 CAD2     LDC    SVMB        APPEND MESSAGE TERMINATOR
          RJM    ACS
          LDC    SVM+ACFN    ISSUE DAYFILE MESSAGE
          RJM    DFM
          LDC    CADA        RESTORE FILE NAME
          RJM    SFN
          LJM    CADX        RETURN 
  
  
 CADA     BSSZ   5           FILE NAME
 CAI      SPACE  4,15 
**        CAI - CLEAR ALLOCATION AND *DAPF* INTERLOCKS. 
* 
*         ENTRY  (EQ) = MASTER DEVICE EST ORDINAL.
*                (AILK) = CATALOG/PERMIT ALLOCATION INTERLOCK TRACK.
*                (DAIF) = DIRECT ACCESS FILE INTERLOCK FLAG.
*                (IAIF) = INDIRECT ALLOCATION INTERLOCK FLAG. 
*                (PFEQ) = DIRECT ACCESS FILE EST ORDINAL. 
*                (PFFT) = DIRECT ACCESS FILE FIRST TRACK. 
* 
*         EXIT   ALLOCATION INTERLOCKS CLEARED. 
*                DIRECT ACCESS FILE INTERLOCK CLEARED.
* 
*         USES   T5.
* 
*         CALLS  CTI. 
  
  
 CAI      SUBR               ENTRY/EXIT 
          LDD    EQ 
          ADC    4000        SET CHECKPOINT VIA *STBM*
          STD    T5 
          LDM    AILK 
          ZJN    CAI1        IF NO CATALOG/PERMIT ALLOCATION INTERLOCK
          RJM    CTI         CLEAR TRACK INTERLOCK
 CAI1     LDM    IAIF 
          ZJN    CAI2        IF INDIRECT ALLOCATION INTERLOCK NOT SET 
          LDM    DVLW 
          RJM    CTI         CLEAR INDIRECT ALLOCATION INTERLOCK
          LDN    0           CLEAR INDIRECT ALLOCATION INTERLOCK FLAG 
          STM    IAIF 
 CAI2     LDM    DAIF 
          ZJN    CAIX        IF DIRECT ACCESS FILE INTERLOCK NOT SET
          LDM    PFEQ 
          ADC    6000        CHECKPOINT + NO HANG ON UNRESERVED TRACK 
          STD    T5 
          LDM    PFFT 
          RJM    CTI         CLEAR DIRECT ACCESS FILE INTERLOCK 
          UJP    CAIX        RETURN 
 CEI      SPACE  4,15 
**        CEI - CHECK FOR ERROR IDLE REQUIRED.
* 
*         ENTRY  (P0) = ERROR IDLE FLAG.
*                (P1) = ERROR CODE. 
*                (P2) = EST ORDINAL.
* 
*         EXIT   ERROR IDLE STATUS SET ON DEVICE IF APPROPRIATE.
*                (SEQF) = PRESET TO FORCE *EQXXX, ERROR IDLE SET.*
*                         MESSAGE IF ERROR IDLE SET.
* 
*         USES   T5.
* 
*         CALLS  SES. 
* 
*         MACROS SMSTF. 
  
  
 CEI      SUBR               ENTRY/EXIT 
          LDD    P0 
          ZJN    CEIX        IF NO ERROR IDLE REQUESTED 
          ISTORE SEQF,(PSN)  FORCE *EQXXX, ERROR IDLE SET.* MESSAGE 
          LDD    P2          SET ERROR IDLE STATUS ON DEVICE
          STD    T5 
          LDN    STEI        ERROR IDLE STATUS
          RJM    SES
          SMSTF  GDEI        SET ERROR IDLE FLAG
          UJN    CEIX        RETURN 
 CLE      SPACE  4,10 
**        CLE - CHECK FOR LENGTH ERROR. 
* 
*         ENTRY  (P1) = ERROR CODE. 
*                (CC) = COMMAND CODE. 
* 
*         EXIT   (PPFA, PRTA) UPDATED IF *SYOT* LENGTH ERROR ON *GET*.
  
  
 CLE      SUBR               ENTRY/EXIT 
          LDD    CC 
          LMN    CCGT 
          NJN    CLEX        IF NOT *GET* REQUEST 
          LDM    JORG 
          LMK    SYOT 
          NJN    CLEX        IF NOT SYSTEM ORIGIN JOB 
          LDD    P1 
          LMN    /ERRMSG/FLE
          NJN    CLEX        IF NOT *FILE LENGTH ERROR* 
          AOM    PPFA 
          AOM    PRTA 
          UJN    CLEX        RETURN 
 PDE      SPACE  4,15 
**        PDE - PROCESS *DMP=* JOB. 
* 
*         ENTRY  (CP) = CONTROL POINT ADDRESS.
* 
*         EXIT   (SEPW) = CPU COMMUNICATION WORD CLEARED
* 
*         USES   T3, CM - CM+4. 
  
  
 PDE      SUBR               ENTRY/EXIT 
          LDD    CP          CHECK *DMP=* STATUS
          ADC    SEPW 
          STD    T3 
          CRD    CM 
          LDD    CM 
          LPN    20 
          NJN    PDEX        IF *DMP=* ENTRY POINT PRESENT
          LDN    ZERL        CLEAR CPU COMMUNICATION WORD 
          CRD    CM 
          LDD    T3 
          ADN    SPCW-SEPW
          CWD    CM 
          UJN    PDEX        RETURN 
 PRT      SPACE  4,20 
**        PRT - PROCESS PRESERVED AND RESERVED TRACKS.
* 
*         ENTRY  (FS - FS+4) = LOCAL FILE FST.
*                (FNTA) = LOCAL FILE FNT ADDRESS. 
*                (PTKT) = PRESERVED TRACK IF NON-ZERO.
*                (RTKE) = EST ORDINAL FOR RESERVED TRACK. 
*                (RTKT) = RESERVED TRACK IF NON-ZERO. 
* 
*         EXIT   (FS+1 - FS+3) = 0 IF RESERVED TRACK RELEASED.
*                (AIPR, AIPR+1) = 0 IF RESERVED TRACK RELEASED. 
*                PRESERVED FILE BIT CLEARED IF SET. 
*                RESERVED TRACK RELEASED IF RESERVED. 
* 
*         USES   FA, CM - CM+4. 
* 
*         MACROS MONITOR, NFA.
  
  
 PRT      SUBR               ENTRY/EXIT 
          LDM    PTKT        CHECK PRESERVED TRACK
          ZJN    PRT1        IF TRACK NOT PRESERVED 
          STD    CM+2 
          SBM    RTKT 
          ZJN    PRT1        IF TRACK ALSO RESERVED 
          LDD    FS          SET EST ORDINAL AND CHECKPOINT 
          LMC    4000 
          STD    CM+1 
          LDN    CPFS        CLEAR PRESERVED FILE BIT 
          STD    CM+3 
          MONITOR  STBM 
 PRT1     LDN    0
*         LDN    1           (*SYOT* + *GET* + *FILE LENGTH ERROR*) 
 PRTA     EQU    *-1
          NJN    PRTX        IF TRACK SHOULD NOT BE RELEASED
          LDM    RTKT        CHECK RESERVED TRACK 
          ZJN    PRTX        IF NO RESERVED TRACK TO RELEASE
          STD    CM+2        DROP RESERVED TRACK
          LDM    RTKE 
          LMC    4000 
          STD    CM+1 
          MONITOR DTKM
*         LDN    0           CLEAR FST
          STD    FS+1 
          STD    FS+2 
          STD    FS+3 
          STM    AIPR        CLEAR MASS STORAGE INCREMENT 
          STM    AIPR+1 
          LDM    FNTA        RESTORE FNT ADDRESS
          STD    FA 
          NFA    FA,R        UPDATE FST 
          ADN    FSTL 
          CWD    FS 
          UJP    PRTX        RETURN 
  
  
          OVERFLOW  OVLA,EPFW  OVERFLOW INTO ERROR PROCESSING AREA
          OVERLAY  (TERMINATE PROGRAM.),OVLA
          SPACE  4,10 
***       THIS OVERLAY PERFORMS TERMINATION PROCESSING FOR *PFM*. 
  
  
 OVL      BSS    0           ENTRY
          LDM    IAIF 
          ZJN    OVL0        IF INDIRECT ALLOCATION INTERLOCK NOT SET 
          RJM    HNG         HANG 
  
 OVL0     RJM    CLF         COMPLETE LOCAL FILE FST
          LDM    STAU        CHECK *PFM* STATUS BITS
          LPK    STRP+STDP
          NJN    OVL1        IF *PFM* TO BE RECALLED OR TERMINATED
          RJM    CCI         CLEAR CATALOG INTERLOCK
          RJM    SFS         SET FET STATUS 
 OVL1     UJN    DPP         DROP PP
 CLF      SPACE  4,10 
**        CLF - COMPLETE LOCAL FILE FST.
* 
*         ENTRY  (FNTA) = LOCAL FILE FNT ADDRESS. 
* 
*         USES   CM - CM+4. 
  
  
 CLF      SUBR               ENTRY/EXIT 
          LDM    FNTA 
          STD    FA 
          ZJN    CLFX        IF NO LOCAL FILE FNT 
          NFA    FA,R 
          ADN    FSTL 
          CRD    CM 
          LDD    CM+4        SET LOCAL FILE FST COMPLETE
          SCN    1
          LMN    1
          STD    CM+4 
          NFA    FA,R 
          ADN    FSTL 
          CWD    CM 
          UJN    CLFX        RETURN 
 DPP      SPACE  4,25 
**        DPP - DROP PP.
* 
*         ENTRY  (CN - CN+4) = INPUT REGISTER FOR *PFM* RECALL. 
*                (FN - FN+4) = RECALL REQUEST FOR MONITOR.
*                (MP - MP+4) = PARAMETER WORD FOR *PFM* RECALL. 
*                (AIPF, AIPF+1) = ACCUMULATOR INCREMENT FOR PF ACCESS.
*                (AIPR, AIPR+1) = ACCUMULATOR INCREMENT FOR PRU COUNT.
*                (EPFA) = EST ORDINAL OF DEVICE IF PF ACTIVITY COUNT
*                         TO BE DECREMENTED.
*                (STAU) = *STAJ* BIT SET IF JOB TO BE ABORTED.
*                         *STRP* BIT SET IF *PFM* TO BE RECALLED. 
* 
*         EXIT   PF ACTIVITY COUNT DECREMENTED IF IT WAS SET. 
*                ACCOUNTING UPDATED.
*                JOB ABORTED IF *STAJ* SET. 
*                *PFM* RECALLED IF *STRP* SET.
*                TO *PPR*.
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR, NFA.
  
  
 DPP      BSS    0           ENTRY
  
*         DECREMENT PF ACTIVITY COUNT.
  
          LDM    EPFA        EST ORDINAL
          ZJN    DPP2        IF ACTIVITY NOT SET
          STD    CM+1 
          LDN    DPAS        DECREMENT PF ACTIVITY COUNT
          STD    CM+3 
          MONITOR STBM
  
*         UPDATE ACCOUNTING.
  
 DPP2     LDM    AIPR        SET ACCUMULATOR INCREMENT FOR PRU COUNT
          STM    DPPB 
          LDM    AIPR+1 
          STM    DPPB+1 
          LDM    AIPF        SET ACCUMULATOR INCREMENT FOR PF ACCESS
          STM    DPPD 
          LDM    AIPF+1 
          STM    DPPD+1 
          LDD    MA          TRANSMIT REQUEST TO MESSAGE BUFFER 
          CWM    DPPA,TR
          LDN    2           SET NUMBER OF REQUESTS 
          STD    CM+1 
          LDM    STAU        CHECK *PFM* STATUS BITS
          LPK    STAJ+STRP
          NJN    DPP3        IF JOB BEING ABORTED OR *PFM* RECALLED 
          STD    CM+2        SELECT DROP PP OPTION
          MONITOR  UADM      UPDATE ACCOUNTING
          LJM    DPP5        EXIT TO PP RESIDENT
  
 DPP3     LDM    DPPB 
          ADM    DPPB+1 
          ADM    DPPD 
          ADM    DPPD+1 
          ZJN    DPP3.1      IF NO ACCOUNTING TO UPDATE 
          LDN    1           SELECT NO DROP OPTION
          STD    CM+2 
          MONITOR  UADM      UPDATE ACCOUNTING
 DPP3.1   LDM    STAU 
          LPK    STRP 
          NJN    DPP4        IF *PFM* TO BE RECALLED
          MONITOR  ABTM      ABORT JOB
          UJN    DPP5        EXIT TO PP RESIDENT
  
*         RECALL *PFM*. 
  
 DPP4     LDD    CN+1        CLEAR AUTO RECALL BIT IN INPUT REGISTER
          SCN    40 
          STD    CN+1 
          LDD    IA 
          CWD    CN 
          LDN    40          FORCE AUTO RECALL BIT IN RECALL REQUEST
          RAD    CN+1 
          LDD    MA 
          CWD    CN          INPUT REGISTER FOR RECALL
          ADN    1
          CWD    MP          PARAMETER WORD FOR RECALL
          ADN    1
          CWD    FN 
          CRD    CM          RECALL REQUEST 
          MONITOR  RECM      RECALL AND DROP PP 
 DPP5     LJM    PPR         EXIT TO PP RESIDENT
  
  
 DPPA     BSS    0           REQUEST TO UPDATE ACCOUNTING 
          CON    CDCS        SUBFUNCTION CODE 
          CON    ACLW        ADDRESS OF CONTROL POINT WORD
          CON    0*100+22    POSITION AND WIDTH OF FIELD
 DPPB     CON    0,0         VALUE OF INCREMENT FOR PRU COUNT 
  
 DPPC     BSS    0           REQUEST TO UPDATE ACCOUNTING 
          CON    AISS        SUBFUNCTION CODE 
          CON    IOAW        ADDRESS OF CONTROL POINT WORD
          CON    0*100+24    POSITION AND WIDTH OF FIELD
 DPPD     CON    0,0         VALUE OF INCREMENT FOR PF ACCESS 
 SFS      SPACE  4,15 
**        SFS - SET FET STATUS. 
* 
*         ENTRY  (STAU) = STATUS FLAGS. 
*                (FN - FN+4) = FET + 0 IF *STDS* SET IN *STAU*. 
*                (FS - FS+4) = FET + 1 IF *STDS* SET IN *STAU*. 
* 
*         EXIT   FET SET COMPLETE.
* 
*         USES   CM - CM+4, FN - FN+4, FS - FS+4. 
* 
*         CALLS  SFA. 
  
  
 SFS      SUBR               ENTRY/EXIT 
          RJM    SFA
          ZJN    SFSX        IF NO FET ADDRESS
          LDM    STAU 
          LPK    STDS 
          NJN    SFS1        IF RETURNING ERROR CODE IN FET 
          RJM    SFA
          CRD    FN          READ FET STATUS WORD 
          ADN    1
          CRD    FS          FET LENGTH/RANDOM BIT
          LDD    FN+4 
          LPC    1776 
          LMN    1           SET COMPLETION STATUS
          STD    FN+4 
          LDD    FN+3        CLEAR UPPER BITS OF ERROR STATUS 
          SCN    77 
          STD    FN+3 
  
*         UPDATE RANDOM INDEX IF RANDOM FET.
*         DO NOT UPDATE IF FET IS TOO SHORT OR OUTSIDE FL.
  
 SFS1     LDD    FS+3        CHECK FET LENGTH 
          SHN    -6 
          SBN    CFCN-4 
          MJN    SFS2        IF FET TOO SHORT 
          LDD    FS+1 
          SHN    21-13
          PJN    SFS2        IF NOT RANDOM FET
          LDD    IR+3        CHECK RANDOM INDEX FIELD WITHIN FL 
          LPN    77 
          SHN    14 
          LMD    IR+4 
          ADN    CFCN 
          SHN    -6 
          SBD    FL 
          PJN    SFS2        IF RANDOM INDEX FIELD NOT WITHIN FL
          LDN    ZERL 
          CRD    CM 
          LDD    HN          SET RANDOM INDEX REWOUND 
          STD    CM+2 
          RJM    SFA
          ADN    CFCN 
          CWD    CM 
 SFS2     RJM    SFA
          CWD    FN 
          UJP    SFSX        RETURN 
          SPACE  4,10 
**        DEFINE COMMAND PROCESSOR SYMBOLS. 
  
  
          QUAL   3PC
 CMD      HERE
          QUAL   *
          SPACE  4,10 
          OVERFLOW  OVLA,EPFW  OVERFLOW INTO ERROR PROCESSING AREA
  
          TTL    PFM - PERMANENT FILE MANAGER.
          END 
