COMCPFP 
COMMON
          CTEXT  COMCPFP - PERMANENT FILE UTILITY PRESET ROUTINES.
          SPACE  4,10 
          IF     -DEF,QUAL$,1 
          QUAL   COMCPFP
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***       PFP - PERMANENT FILE UTILITY PRESET ROUTINES. 
*         G. S. YODER.    86/08/15. 
          TITLE  COMCPFP - OUTPUT FILE ROUTINES.
 DVS      SPACE  4,10 
**        DVS - WRITE DEVICE STATUS SUBHEADER.
* 
*         ENTRY  (X2) = OUTPUT FILE FET ADDRESS.
* 
*         EXIT   TO SHR.
*                (X6) = SUBHEADER LINE COUNT. 
* 
*         MACROS WRITEH.
  
  
 DVS      BSS    0           ENTRY
          WRITEH X2,DVSA,9   WRITE DEVICE STATUS SUBHEADER
          WRITEH X2,DVSB,9
          WRITEH X2,BLAN,1
          SX6    3           SET LINE COUNT 
          EQ     SHR         RETURN 
 FDS      SPACE  4,15 
**        FDS - FORMAT DEVICE STATUS ENTRY. 
* 
*         ENTRY  (A5) = ADDRESS OF ENTRY. 
*                (X5) = FIRST WORD OF ENTRY.
* 
*         EXIT   DEVICE STATUS WRITTEN TO OUTPUT FILE.
* 
*         USES   X - 0, 1, 2, 5, 6. 
*                A - 5, 6.
* 
*         CALLS  ALN, CDD, COD, ZTB.
* 
*         MACROS WRITEH.
  
  
 FDS      SUBR               ENTRY/EXIT 
          MX0    -6 
          BX1    -X0*X5 
          RJ     COD         CONVERT DEVICE NUMBER
          MX0    12 
          SA6    COBF        SET DEVICE NUMBER
          BX1    X0*X5
          LX1    12 
          RJ     ZTB         BLANK FILL DEVICE TYPE 
          LX5    -6 
          SA6    COBF+1      SET DEVICE TYPE
          MX0    -3 
          BX1    -X0*X5 
          SX1    X1+B1
          RJ     CDD         CONVERT UNIT COUNT 
          LX5    -6 
          SA6    COBF+2      SET UNIT COUNT 
          MX0    -12
          BX1    -X0*X5 
          RJ     CDD         CONVERT TRACK COUNT
          LX5    -12
          SA6    COBF+6      SET TRACK COUNT
          BX1    -X0*X5 
          RJ     CDD         CONVERT TRACKS AVAILABLE 
          LX5    -12
          SA6    COBF+7      SET TRACKS AVAILABLE 
          BX1    -X0*X5 
          RJ     CDD         CONVERT TRACK SIZE 
          SA6    COBF+8 
          SA5    A5+B1
          MX0    -8 
          BX1    -X0*X5 
          RJ     COD         CONVERT DEVICE MASK
          LX5    -8 
          SA6    COBF+3      SET DEVICE MASK
          BX1    -X0*X5 
          RJ     COD         CONVERT DIRECT ACCESS MASK 
          LX5    -16
          SA6    COBF+4      SET DIRECT ACCESS MASK 
          MX0    -9 
          BX1    -X0*X5 
          RJ     CDD         CONVERT NUMBER OF CATALOG TRACKS 
          SA6    COBF+5      SET NUMBER OF CATALOG TRACKS 
          SX6    1           SET LINE COUNT 
          RJ     ALN         ALLOCATE LINES 
          WRITEH O,COBF,9 
          EQ     FDSX        RETURN 
 IOF      SPACE  4,15 
**        IOF - INITIALIZE OUTPUT FILES.
* 
*         EXIT   OUTPUT AND SUMMARY FILE INITIALIZED. 
*                OUTPUT FILE NAME SET IN FET TO FLAG OUTPUT FILE
*                  INITIALIZED. 
* 
*         USES   X - 1, 2, 5, 6.
*                A - 1, 2, 5, 6.
* 
*         CALLS  PFO, SDT, SPT, WIS.
* 
*         MACROS GETPP, SETFET, SETFS, WRITEO.
  
  
 IOF      SUBR               ENTRY/EXIT 
  
*         INITIALIZE OUTPUT FILE.  THE FILE NAME IS SET IN THE FET LAST 
*         TO INDICATE OUTPUT FILE INITIALIZATION COMPLETE TO ERROR
*         ROUTINES THAT MAY BE CALLED PRIOR TO *IOF*. 
  
          SA1    CPAR+/COMSPFS/CPLB 
          NZ     X1,IOF1     IF OUTPUT FILE SELECTED
          SX6    B0+         CLEAR ALL OUTPUT OPTIONS 
          SA6    CPAR+/COMSPFS/CPLO 
          SA6    O
          EQ     IOF2        PROCESS SUMMARY FILE 
  
 IOF1     RJ     SPT         SET UP OUTPUT FILE PAGE TITLE
          GETPP  IOFA,PGLL,IOFB  GET PAGE PARAMETERS
          SA1    CPAR+/COMSPFS/CPLB 
          SA2    O
          MX6    -18
          BX6    -X6*X2 
          BX6    X6+X1
          SA6    A2          SET FILE NAME IN FET 
          SA1    /COMSPFS/UTLN  GET UTILITY NAME
          SX6    1R*
          BX6    X1+X6
          LX6    -6 
          WRITEO O           WRITE RECORD NAME
          WRITEC O,IOFB      WRITE FORMAT EFFECTOR
          SETFS  O,0         CLEAR SPECIAL FILE STATUS
          RJ     SDT         SET DEFAULT PAGE TITLE 
  
*         INITIALIZE SUMMARY FILE.
  
 IOF2     SA1    CPAR+/COMSPFS/CPSU 
          ZR     X1,IOFX     IF NO SUMMARY FILE PROCESSING
          SA5    SU 
          RJ     PFO         OPEN SUMMARY FILE
          SETFET SU,ERP=B0   CLEAR USER ERROR PROCESSING
          RJ     WIS         WRITE INITIAL BLOCKS 
          EQ     IOFX        RETURN 
  
  
 IOFA     BSSZ   2           *GETPP* PARAMETER BLOCK
 IOFB     CON    0           PRINT DENSITY FORMAT CONTROL CHARACTER 
 ODV      SPACE  4,10 
**        ODV - OUTPUT DEVICE STATUS TO SELECTED OUTPUT FILES.
* 
*         ENTRY  (X6) = ADDRESS OF DEVICE STATUS INFORMATION BUFFER.
* 
*         EXIT   DEVICE STATUS WRITTEN TO OUTPUT FILE IF SELECTED.
*                DEVICE STATUS BLOCK WRITTEN TO SUMMARY FILE IF 
*                  SELECTED.
* 
*         USES   X - 1, 2, 3, 5, 6, 7.
*                A - 1, 2, 3, 5, 6, 7.
* 
*         CALLS  FAB, FDS, MWA, RPP, SDT. 
  
  
 ODV      SUBR               ENTRY/EXIT 
          SA6    ODVA        SET BUFFER ADDRESS 
          SA6    ODVB 
  
*         WRITE OUTPUT FILE.
  
          SA1    CPAR+/COMSPFS/CPLO 
          ZR     X1,ODV2     IF NO OUTPUT FILE
          SX2    DVTX        SET DEVICE STATUS TITLE TEXT 
          SX6    DVS         SET SUBHEADER PROCESSOR
          RJ     RPP         RESET PAGE PARAMETERS
          SA5    ODVA 
          SA5    X5 
 ODV1     RJ     FDS         FORMAT DEVICE STATUS 
          SA2    ODVB 
          SX6    X2+2        ADVANCE ENTRY ADDRESS
          SA5    X6          READ FIRST WORD OF ENTRY 
          SA6    A2 
          NZ     X5,ODV1     IF NOT END OF DEVICES
          RJ     SDT         RESET DEFAULT PAGE TITLE 
  
*         WRITE SUMMARY FILE. 
  
 ODV2     SA1    CPAR+/COMSPFS/CPSU 
          ZR     X1,ODVX     IF NO SUMMARY FILE 
          SA1    OFFN 
          SA2    OFPN 
          SA3    OFUN 
          BX6    X1+X2       SET FAMILY NAME OR PACK NAME 
          BX7    X3 
          SA6    ODVC 
          ZR     X2,ODV3     IF NOT AUXILIARY DEVICE
          SA7    ODVC+1      SET USER NAME
 ODV3     SA1    ODVA        SET BUFFER ADDRESS 
          SA2    X1 
          SX0    B1+B1       COUNT FAMILY/PACK/USER HEADER
 ODV4     SA2    A2+2        ADVANCE BUFFER ADDRESS 
          SX0    X0+2        COUNT ENTRY
          NZ     X2,ODV4     IF NOT END OF DEVICES
          SA1    TSBI+/COMSPFS/DSSB 
          BX6    X1 
          SX1    B1+B1       SET HEADER ENTRY WORD COUNT
          SA6    CFBI        SET DEVICE STATUS BLOCK IDENTIFIER 
          SX2    ODVC        SET ADDRESS OF HEADER ENTRY
          RJ     MWA         MOVE HEADER TO ASSEMBLY BUFFER 
          SX1    X0-2        SET LENGTH OF DEVICE ENTRIES 
          SX0    0           SET BLOCK CONTINUATION 
          SA2    ODVA        SET DEVICE STATUS BUFFER ADDRESS 
          RJ     MWA         MOVE DEVICE STATUS TO ASSEMBLY BUFFER
          RJ     FAB         FLUSH ASSEMBLY BUFFER
          EQ     ODVX        RETURN 
  
  
 ODVA     CON    0           DEVICE STATUS INFORMATION BUFFER ADDRESS 
 ODVB     CON    0           ENTRY POINTER
 ODVC     CON    0           FAMILY NAME OR PACK NAME 
          CON    0           USER NAME OF PRIVATE AUXILIARY DEVICE
 SPT      SPACE  4,20 
**        SPT - SET UP PAGE TITLE.
* 
*         ENTRY  (OFUC) = UTILITY CODE IF *PFLIST* UTILITY. 
*                (OFFN) = FAMILY NAME IF *PFLIST* UTILITY.
*                (OFPN) = PACK NAME IF *PFLIST* UTILITY.
*                (OFUN) = AUXILIARY DEVICE USER NAME IF *PFLIST*
*                         UTILITY.
* 
*         EXIT   PARAMETERS SET IN PAGE TITLE.
* 
*         USES   X - 1, 2, 3, 5, 6. 
*                A - 1, 2, 3, 6.
*                B - 2, 5.
* 
*         CALLS  SNM, ZTB.
* 
*         MACROS EDATE, ETIME, MOVE.
  
  
 SPT      SUBR               ENTRY/EXIT 
  
*         SET UP UTILITY NAME, FAMILY NAME, AND PACK NAME AND AUXILIARY 
*         DEVICE USER NAME FOR OUTPUT FILES FROM *PFS* PARAMETERS IF
*         NOT *PFLIST* UTILITY. 
  
          SA1    /COMSPFS/UTLC
          SX2    X1-/COMSPFS/LIUT 
          ZR     X2,SPT1     IF *PFLIST* UTILITY
          SA2    CPAR+/COMSPFS/CPFN 
          SA3    CPAR+/COMSPFS/CPPN 
          MX7    42 
          BX6    X1 
          SA6    OFUC        SET UTILITY CODE 
          BX6    X7*X2
          BX7    X7*X3
          SA6    OFFN        SET FAMILY NAME
          SA7    OFPN        SET PACK NAME
          ZR     X3,SPT1     IF NOT AUXILIARY DEVICE
          SA1    CPAR+/COMSPFS/CPUN 
          BX6    X1 
          SA6    OFUN        SET AUXILIARY DEVICE USER NAME 
  
*         SET PAGE TITLE TEXT.
  
 SPT1     SA2    OFUC 
          SA2    SPTA+X2     GET TITLE TEXT POINTERS
          SX5    X2          SAVE MAIN TITLE TEXT POINTER 
          LX2    -18
          SX2    X2+         SET PRESET TITLE TEXT POINTER
          MOVE   PTTAL,X2,PTTA  MOVE PRESET PAGE TITLE TEXT 
          MOVE   MTTAL,X5,MTTA  MOVE MAIN PAGE TITLE TEXT 
  
*         SET FAMILY NAME OR PACK NAME. 
  
          SA1    OFFN 
          ZR     X1,SPT2     IF NO FAMILY NAME
          SB5    SPTB        SET FAMILY MESSAGE ADDRESS 
          EQ     SPT3        SET FAMILY NAME
  
 SPT2     SA1    OFPN 
          ZR     X1,SPT4     IF NO PACK NAME
          SB5    SPTC        SET PACK NAME MESSAGE ADDRESS
 SPT3     SB2    1R?
          RJ     SNM         SET FAMILY OR PACK NAME
          SA1    B5 
          RJ     ZTB         BLANK FILL ZEROES
          SA6    PGFM 
          SA1    B5+B1
          RJ     ZTB         BLANK FILL ZEROES
          SA6    PGFM+1 
  
*         SET EXECUTING UTILITY NAME AND SYSTEM LEVEL.
  
 SPT4     SA1    /COMSPFS/UTLN
          SB2    1R?
          SB5    SPTD 
          RJ     SNM         SET UTILITY NAME 
          SA1    SPTD 
          BX6    X1 
          SA6    PGUT 
          SA1    SPTD+1      BLANK FILL UTILITY NAME AND SYSTEM LEVEL 
          RJ     ZTB
          SA6    PGUT+1 
  
*         SET DATE AND TIME.
  
          SA1    /COMSPFS/STDT
          BX5    X1 
          AX1    18 
          EDATE  X1 
          SA6    PGSD        SET START DATE 
          MX1    -18
          BX1    -X1*X5 
          ETIME  X1 
          SA6    PGST        SET START TIME 
  
*         SET EXTENDED PAGE HEADER FOR FILE PROCESSING. 
  
          SA1    SPTE 
          BX6    X1 
          SA6    /COMCFCE/CHDR1+9  SET HEADER EXTENSION 
          EQ     SPTX        RETURN 
  
  
*         TITLE CONTROL TABLE.
  
 SPTA     IVFD
          IVFD   /COMSPFS/LDUT,(24/0,18/PTLD,18/MTLD)  *PFLOAD* 
          IVFD   /COMSPFS/DUUT,(24/0,18/PTDU,18/MTDU)  *PFDUMP* 
          IVFD   /COMSPFS/CAUT,(24/0,18/PTCA,18/MTCA)  *PFCAT*
          IVFD   /COMSPFS/ATUT,(24/0,18/PTAT,18/MTAT)  *PFATC*
          IVFD   /COMSPFS/COUT,(24/0,18/PTCO,18/MTCO)  *PFCOPY* 
          IVFD   /COMSPFS/RLUT,(24/0,18/PTRL,18/MTRL)  *PFREL*
          IVFD   /COMSPFS/MXUT
  
 SPTB     DATA   C* FAMILY ???????.*
 SPTC     DATA   C* PACK ???????.*
 SPTD     DATA   C* ??????? - LVL "NOSLVL".*
 SPTE     DATA   10H SEQUENCE 
  
*         TABLE OF MAIN PROGRAM PAGE TITLE TEXT.
*         EACH SET OF TITLES MUST BE *MTTAL* WORDS LONG.
  
 MTLD     DATA   50H1PFLOAD - FILES LOADED. 
          DATA   50H1PFLOAD - CATALOG IMAGE RECORD. 
          DATA   50H1PFLOAD - USER SUMMARY. 
          DATA   50H1PFLOAD - TAPE ALTERNATE STORAGE SUMMARY. 
          DATA   50H1PFLOAD.
  
 MTDU     DATA   50H1PFDUMP - FILES DUMPED. 
          DATA   50H1PFDUMP - CATALOG IMAGE RECORD. 
          DATA   50H1PFDUMP - USER SUMMARY. 
          DATA   50H1PFDUMP - TAPE ALTERNATE STORAGE SUMMARY. 
          DATA   50H1PFDUMP.
  
 MTCA     DATA   50H1PFCAT - FILES CATALOGED. 
          DATA   50H
          DATA   50H1PFCAT - USER SUMMARY.
          DATA   50H1PFCAT - TAPE ALTERNATE STORAGE SUMMARY.
          DATA   50H1PFCAT. 
  
 MTAT     DATA   50H1PFATC - FILES ON ARCHIVE.
          DATA   50H1PFATC - CATALOG IMAGE RECORD.
          DATA   50H1PFATC - USER SUMMARY.
          DATA   50H1PFATC - TAPE ALTERNATE STORAGE SUMMARY.
          DATA   50H1PFATC. 
  
 MTCO     DATA   50H1PFCOPY - FILES COPIED. 
          DATA   50H
          DATA   50H1PFCOPY - USER SUMMARY. 
          DATA   50H1PFCOPY - TAPE ALTERNATE STORAGE SUMMARY. 
          DATA   50H1PFCOPY.
  
 MTRL     DATA   50H1PFREL - FILES PROCESSED. 
          DATA   50H
          DATA   50H1PFREL - USER SUMMARY.
          DATA   50H1PFREL - TAPE ALTERNATE STORAGE SUMMARY.
          DATA   50H1PFREL. 
  
*         TABLE OF PRESET PAGE TITLE TEXT.
*         EACH SET OF TITLES MUST BE *PTTAL* WORDS LONG.
  
 PTLD     DATA   50H1PFLOAD - ACTIVE DEVICE STATUS. 
  
 PTDU     DATA   50H1PFDUMP - ACTIVE DEVICE STATUS. 
  
 PTCA     DATA   50H1PFCAT - ACTIVE DEVICE STATUS.
  
 PTAT     DATA   50H
  
 PTCO     DATA   50H
  
 PTRL     DATA   50H1PFREL - ACTIVE DEVICE STATUS.
 WIS      SPACE  4,10 
**        WIS - WRITE INITIAL BLOCKS TO SUMMARY FILE. 
* 
*         EXIT   PREFIX TABLE AND SYSTEM BLOCK WRITTEN TO FILE. 
* 
*         USES   X - 0, 1, 2, 4, 5, 6, 7. 
*                A - 1, 2, 4, 5, 6, 7.
* 
*         CALLS  ZTB. 
* 
*         MACROS ETIME, MOVE, SYSTEM, VERSION, WRITEW.
  
  
 WIS      SUBR               ENTRY/EXIT 
          SA1    CPAR+/COMSPFS/CPSR  SET RECORD NAME
          RJ     ZTB
          MX0    42 
          BX6    X0*X6
          SA6    WISB 
          SA1    /COMSPFS/STDT  SET PACKED DATE/TIME
          BX7    X1 
          BX5    X1 
          SA7    WISI 
          AX1    18 
          EDATE  X1          CONVERT DATE 
          SA6    WISC 
          SA6    WISG 
          MX1    -18
          BX1    -X1*X5 
          ETIME  X1          CONVERT TIME 
          SA6    WISC+1 
          SA6    WISG+1 
          SA1    /COMSPFS/UTLN  SET UTILITY NAME
          SX6    SABFL       ADD MAXIMUM BLOCK LENGTH 
          BX6    X1+X6
          SA6    WISF 
          SA5    CPAR+/COMSPFS/CPFN 
          SA4    CPAR+/COMSPFS/CPPN 
          SX6    2RFM 
          MX7    42 
          BX5    X7*X5
          BX4    X7*X4
          NZ     X5,WIS1     IF FAMILY NAME PRESENT 
          SX6    2RPN 
          NZ     X5,WIS1     IF PACK NAME PRESENT 
          SX6    B0+
 WIS1     BX1    X1+X6       MERGE UTILITY NAME AND MNEMONIC
          RJ     ZTB         BLANK FILL UTILITY NAME
          SA6    WISD 
          BX1    X4+X5
          ZR     X1,WIS2     IF NEITHER FAMILY NOR PACK NAME
          SX2    1R=
          BX1    X1+X2
          LX1    -6 
 WIS2     RJ     ZTB         BLANK FILL FAMILY OR PACK NAME 
          SA6    WISD+1 
          VERSION  WISK      READ SYSTEM TITLE AND VERSION
          SX0    WISH        SET SYSTEM TITLE ADDRESS 
 WIS3     SA1    X0          READ NEXT WORD 
          RJ     ZTB         BLANK FILL NAME
          SA6    X0 
          SX0    X0+B1
          SX1    X0-WISH-4
          NZ     X1,WIS3     IF NOT END OF SYSTEM TITLE 
          MOVE   4,WISH,WISE MOVE SYSTEM TITLE TO PREFIX TABLE
          WRITEW SU,WISA,33B  WRITE BLOCKS TO SUMMARY FILE
          EQ     WISX        RETURN 
  
  
 WISA     VFD    12/7700B,12/0016B,36/0  PREFIX TABLE IDENTIFIER
 WISB     CON    0           RECORD NAME
 WISC     CON    0           DATE 
          CON    0           TIME 
          BSSZ   4
 WISD     DATA   10HPFUUUUU FM  FIRST TWO WORDS OF COMMENT
          DATA   10H
 WISE     BSSZ   4           SYSTEM TITLE 
          DATA   10H
  
          VFD    42/6LSYSTEM,18/13B  SYSTEM BLOCK HEADER
 WISF     CON    0           UTILITY NAME 
 WISG     CON    0           DATE 
          CON    0           TIME 
 WISH     BSSZ   4           SYSTEM TITLE 
          BSSZ   2           SYSTEM VERSION 
 WISI     CON    0           PACKED DATE/TIME 
 WISJ     CON    NOSLVL      SYSTEM LEVEL 
  
 WISK     VFD    1/1,11/30,12/0,12/0,6/0,18/WISH
          SPACE  4
*         PRESET PAGE TITLE TEXT AREA.
  
 PTTA     BSS    0
 DVTX     DATA   50H
 PTTAL    EQU    *-PTTA 
  
*         DEVICE STATUS PAGE SUBHEADER. 
  
  
 DVSA     DATA   50H    DEVICE    DEVICE      UNIT    DEVICE       DAF
          DATA   40H   CATALOG     TOTAL AVAILABLE     TRACK
 DVSB     DATA   50H    NUMBER      TYPE     COUNT      MASK      MASK
          DATA   50H    TRACKS    TRACKS    TRACKS      SIZE
          TITLE  COMCPFP - COMMON PRESET ROUTINES.
 ASF      SPACE  4,20 
**        ASF - ASSIGN SECURE FILE. 
* 
*         ENTRY  (SYSS) = SYSTEM SECURITY MODE. 
*                (PCUA) = UPPER ACCESS LEVEL TO PROCESS.
*                (A5) = FET ADDRESS.
* 
*         EXIT   FILE ASSIGNED. 
*                IF NOT ALREADY ASSIGNED, A DEVICE THAT ALLOWS THE
*                UPPER LEVEL THAT WILL BE PROCESSED IS SELECTED.
*                TO *ABT* IF FILE CANNOT BE ASSIGNED. 
* 
*         USES   X - 0, 1, 2, 6, 7. 
*                A - 1, 2, 6, 7.
*                B - 2. 
* 
*         MACROS REQUEST, SETFET, STATUS. 
  
  
 ASF      SUBR               ENTRY/EXIT 
          SA1    SYSS 
          ZR     X1,ASFX     IF NOT SECURE SYSTEM 
          STATUS A5          DETERMINE IF FILE IS ASSIGNED
          SA1    A5 
          MX0    -11
          LX0    1
          BX2    -X0*X1 
          NZ     X2,ASFX     IF FILE EXISTS 
          SA2    A5+B1       SET SECURITY PROCESSING BIT
          SX6    B1 
          LX6    39-0 
          BX7    -X6*X2 
          BX6    X6+X7
          SA6    A2 
          SA1    A5+4        SET ACCESS LEVEL 
          SA2    PCUA 
          LX2    36 
          BX6    X1+X2
          SA6    A1 
          SETFET A5,ERP=E,DTY==2RMS  SET ERROR PROCESSING 
          REQUEST  A5,U,N    REQUEST FILE ASSIGNMENT
          SA1    A5 
          MX0    -8 
          AX1    10 
          BX2    -X0*X1 
          NZ     X2,ASF1     IF UNABLE TO ASSIGN FILE 
          SETFET A5,ERP=B0   CLEAR ERROR PROCESSING 
          EQ     ASFX        RETURN 
  
 ASF1     SB2    ERAL        * ACCESS LEVELS NOT ALLOWED ON ...*
          EQ     ABT         ABORT
 DSS      SPACE  4,10 
**        DSS - DETERMINE SECURITY STATUS.
* 
*         EXIT   (SYSS) = SYSTEM SECURITY MODE. 
*                (SYLA) = SYSTEM LOWER ACCESS LEVEL LIMIT.
*                (SYUA) = SYSTEM UPPER ACCESS LEVEL LIMIT.
* 
*         USES   X - 0, 1, 2, 6, 7. 
*                A - 1, 2, 6, 7.
* 
*         MACROS GETSSL.
  
  
 DSS      SUBR               ENTRY/EXIT 
          GETSSL DSSA        GET SYSTEM SECURITY STATUS 
          SA2    DSSA 
          MX0    -6 
          LX2    12 
          BX6    -X0*X2      SYSTEM SECURITY MODE 
          SA6    SYSS 
          ZR     X6,DSSX     IF NOT SECURE SYSTEM 
          LX2    6
          BX7    -X0*X2      SYSTEM LOWER LIMIT 
          LX2    6
          BX6    -X0*X2      SYSTEM UPPER LIMIT 
          SA7    SYLA 
          SA6    SYUA 
          EQ     DSSX        RETURN 
  
  
 DSSA     CON    0           SYSTEM SECURITY STATUS RETURN
 PFO      SPACE  4,20 
**        PFO - PROCESS FILE OPENING. 
* 
*         ENTRY  (X1) = FILE NAME.
*                (A5) = FET ADDRESS.
*                (X5) = FIRST WORD OF FET.
* 
*         EXIT   FET FILE NAME PRESET.
*                FILE REQUESTED ON APPROPRIATELY SECURE EQUIPMENT, IF 
*                NOT ALREADY ASSIGNED.  EQUIPMENT SECURITY VERIFIED, IF 
*                THE FILE IS ALREADY ASSIGNED.
*                FET CONTROL WORD STATUS WORD PRESET. 
*                FET ERROR PROCESSING BIT SET IF NOT MASS STORAGE FILE. 
* 
*         USES   X - 0, 5, 6. 
*                A - 6. 
* 
*         MACROS OPEN, SETFS. 
* 
*         CALLS  ASF, VES.
  
  
 PFO      SUBR               ENTRY/EXIT 
          MX0    42          SET FILE NAME
          BX6    X0*X1
          BX5    -X0*X5 
          BX6    X6+X5
          SA6    A5 
          RJ     ASF         ASSIGN SECURE FILE 
          OPEN   A5,READNR,R OPEN FILE
          RJ     VES         VERIFY EQUIPMENT SECURITY
          SETFS  A5,0        CLEAR SPECIAL FILE STATUS
          EQ     PFOX        RETURN 
 RPS      SPACE  4,20 
**        RPS - READ PERMANENT FILE SELECTIONS. 
* 
*         IT IS ASSUMED THAT THE FILE SELECTION BUFFER IS AT THE END OF 
*         MEMORY. 
* 
*         ENTRY  (X0) = SELECTIONS BUFFER ADDRESS.
* 
*         EXIT   FILE SELECTIONS READ TO BUFFER FROM SCRATCH FILE 
*                  ZZZZZGB IF PRESENT.
*                (/COMSPFS/FISP) = SELECTION BUFFER POINTER IF
*                  SELECTIONS PRESENT.
* 
*         USES   X - 5, 7.
*                A - 5, 7.
* 
*         MACROS MEMORY, READ, RETURN, REWIND, SETFET.
  
  
 RPS      SUBR               ENTRY/EXIT 
          SA5    /COMSPFS/NFIS
          ZR     X5,RPSX     IF NO FILE SELECTIONS
          BX7    X0 
          SX5    X5+64       LENGTH = COUNT + SECTOR FILL 
          SA7    /COMSPFS/FISP  SET BUFFER POINTER FOR *COMCPFS*
          IX7    X5+X0       LWA+1 OF INCREASED MEMORY
          MEMORY CM,,R,X7    INCREASE FL FOR SELECTION BUFFER 
          SETFET RPSA,(BUF=X0,X5)  SET FET POINTERS FOR DIRECT READ 
          REWIND RPSA,R 
          READ   RPSA        READ FILE SELECTIONS 
          RETURN RPSA        RETURN SCRATCH FILE
          EQ     RPSX        RETURN 
  
  
 RPSA     BSS    0           FILE SELECTIONS SCRATCH FILE FET 
 ZZZZZGB  FILEB  0,0,FET=10 
 VES      SPACE  4,20 
**        VES - VERIFY EQUIPMENT SECURITY.
* 
*         ENTRY  FILE ASSIGNED. 
*                (A5) = FET ADDRESS.
*                (SYSS) = SYSTEM SECURITY MODE. 
*                (PCLA) = LOWER ACCESS LEVEL TO PROCESS.
*                (PCUA) = UPPER ACCESS LEVEL TO PROCESS.
* 
*         EXIT   (EQAL) = *GETEAL* STATUS WORD. 
*                TO *ABT* IF RANGE OF ACCESS LEVELS TO BE PROCESSED 
*                  IS NOT ALLOWED ON ASSIGNED EQUIPMENT.
* 
*         USES   X - 0, 1, 2, 6, 7. 
*                A - 1, 2, 6, 7.
*                B - 2. 
* 
*         MACROS GETEAL, STATUS.
  
  
 VES      SUBR               ENTRY/EXIT 
          STATUS A5,P 
          SA1    A5+6        GET EST ORDINAL
          MX0    -12
          LX1    12 
          BX6    -X0*X1 
          SA6    EQAL 
          BX6    X6-X6       CLEAR FET+6
          SA6    A1 
          SA6    A6-B1       CLEAR FET+5
          SA1    SYSS 
          ZR     X1,VESX     IF NOT SECURED SYSTEM
          GETEAL EQAL        GET EQUIPMENT/DEVICE ACCESS LEVEL LIMITS 
          SA1    EQAL 
          LX1    -12
          BX2    -X0*X1 
          MX0    -3 
          BX6    -X0*X2      EQUIPMENT UPPER LIMIT
          LX2    -3 
          BX7    -X0*X2      EQUIPMENT LOWER LIMIT
          SA1    PCUA 
          SA2    PCLA 
          IX6    X6-X1
          NG     X6,VES1     IF UPPER LEVEL NOT ALLOWED 
          IX7    X2-X7
          PL     X7,VESX     IF LOWER LEVEL ALLOWED 
 VES1     SB2    ERAL        * ACCESS LEVELS NOT ALLOWED ON ...*
          EQ     ABT         ABORT
          SPACE  4,10 
*         COMMON PRESET MESSAGES
  
  
 ERAL     DATA   C* ACCESS LEVELS NOT ALLOWED ON ARCHIVE FILE EQUIPMENT.
,*
          SPACE  4,10 
*         RESERVED LOCATIONS. 
  
  
 OFFN     CON    0           OUTPUT FILE FAMILY NAME
 OFPN     CON    0           OUTPUT FILE PACK NAME
 OFUC     CON    0           OUTPUT FILE UTILITY NAME 
 OFUN     CON    0           OUTPUT FILE USER NAME FOR AUILIARY DEVICE
 PCLA     CON    8           LOWER ACCESS LEVEL TO PROCESS
 PCUA     CON    -1          UPPER ACCESS LEVEL TO PROCESS
 EQAL     CON    0           EQUIPMENT ACCESS LEVELS (*GETEAL* STATUS)
 SYLA     CON    0           SYSTEM LOWER ACCESS LEVEL LIMIT
 SYUA     CON    0           SYSTEM UPPER ACCESS LEVEL LIMIT
 PFA$     IF     DEF,PFA$ 
          TITLE  COMCPFP - PFLOAD/PFAM PRESET ROUTINES. 
 SSS      SPACE  4,10 
**        SSS - SET SECURED SYSTEM STATUS.
* 
*         EXIT   (PCLA) = LOWER ACCESS LEVEL TO PROCESS.
*                (PCUA) = UPPER ACCESS LEVEL TO PROCESS.
*                (SYSS) .NE. 0 IF SECURED SYSTEM. 
* 
*         USES   X - 1, 2, 6, 7.
*                A - 1, 2, 6, 7.
* 
*         CALLS  DSS. 
  
  
 SSS      SUBR               ENTRY/EXIT 
          RJ     DSS         SET SECURED SYSTEM STATUS
          SA1    SYSS 
          ZR     X1,SSSX     IF NOT SECURED SYSTEM
          SA1    CPAR+/COMSPFS/CPLA 
          SA2    CPAR+/COMSPFS/CPUA 
          NZ     X1,SSS1     IF ACCESS LEVELS SPECIFIED 
          SA1    SYLA        USE SYSTEM LIMITS
          SA2    SYUA 
 SSS1     BX6    X1 
          BX7    X2 
          SA6    PCLA        SET LOWER LEVEL TO PROCESS 
          SA7    PCUA        SET UPPER LEVLL TO PROCESS 
          EQ     SSSX        RETURN 
 PFA$     ENDIF 
 DVA$     IF     DEF,DVA$ 
          TITLE  COMCPFP - PERMANENT FILE DEVICE ACCESS ROUTINES. 
 BMT      SPACE  4,20 
**        BMT - BUILD MASS STORAGE TABLE AND MASTER DEVICE TABLE. 
* 
*         ENTRY  (CPAR) = CRACKED PARAMETER ARRAY.
* 
*         EXIT   *MSTT* INITIALIZED.
*                *TMDA* INITIALIZED.
*                SUMMARY FILE DEVICE STATUS BUFFER INITIALIZED. 
*                (MSSF) = 0, IF NO *MSS* TYPE EQUIPMENT FOUND IN EST. 
*                       = 1, IF *MSS* TYPE EQUIPMENT FOUND IN EST.
*                (ASFF) = 0, IF NO *MSE* EQUIPMENT FOUND IN EST.
*                       = 1, IF *MSE* EQUIPMENT FOUND IN EST. 
* 
*         USES   X - 0, 1, 2, 3, 6, 7.
*                A - 1, 2, 3, 6, 7. 
*                B - 2, 3, 4. 
* 
*         CALLS  RSB=.
* 
*         MACROS SYSTEM.
  
  
 BMT      SUBR               ENTRY/EXIT 
  
*         READ EST ENTRIES. 
  
          SA1    BMTA        READ EST POINTER 
          MX7    1
          BX6    X1 
          SA7    ESTBUF 
          SA6    ESTADD 
          SYSTEM RSB,R,A6 
          SA2    ESTBUF      SET *COMCRSB* ENTRY CONDITIONS 
          MX3    -12
          SX1    A2          SET ADDRESS TO TRANSFER TO 
          AX2    24 
          BX3    -X3*X2 
          SX7    X3 
          AX2    12          SET ADDRESS TO TRANSFER FROM 
          R=     X6,ESTE
          IX3    X3*X6       SET WORD COUNT 
          SX4    B0          SET SUBSYSTEM (= *CMR*)
          MX6    1
          SA6    X1 
          SA7    BMTB        SAVE EST SIZE TO SEARCH
          RJ     RSB=        READ EST 
          SB2    NOPE-1      INITIALIZE EST ORDINAL FOR SEARCH
          SA1    BMTB        SET NUMBER OF EST ENTRIES
          SB3    X1 
          SB4    B0          SET INITIAL MASS STORAGE TABLE INDEX 
  
*         READ NEXT MST ENTRY.
  
 BMT2     SB2    B2+B1       ADVANCE EST ORDINAL
          EQ     B2,B3,BMT10 IF END OF EST
          SX2    B2 
          R=     X6,ESTE
          IX7    X2*X6
          SA1    ESTBUF+X7+EQDE  READ EST ENTRY 
          PL     X1,BMT7     IF NOT MASS STORAGE EQUIPMENT
          MX2    -12         SET MST ADDRESS
          BX6    -X2*X1 
          LX1    59-54
          LX6    18+3 
          NG     X1,BMT2     IF DEVICE UNAVAILABLE
          SX2    MSTL        SET MST LENGTH 
          SX7    MSTBUF      SET MST BUFFER ADDRESS 
          LX2    36 
          BX1    X6+X7
          MX7    1           SET ABSOLUTE MEMORY FLAG 
          BX6    X1+X2
          SA7    MSTBUF 
          SA6    MSTADD 
          SYSTEM RSB,R,A6    READ MST ENTRY 
  
*         CHECK FOR USABLE MST ENTRY. 
  
          SA1    MSTBUF+STLL CHECK DEVICE STATUS
          SA2    BMTC 
          BX6    X2*X1
          NZ     X6,BMT2     IF UNLOADED, PF OR FULL INITIALIZATION 
          SA1    MSTBUF+PUGL COMPARE USER NAMES 
          SA2    CPAR+/COMSPFS/CPUN 
          MX0    42 
          BX6    X0*X1
          ZR     X6,BMT3     IF PUBLIC PACK 
          BX6    X6-X2
 BMT3     SA3    MSTBUF+PFGL GET FAMILY/PACK NAME 
          SA1    CPAR+/COMSPFS/CPPN  GET PACK NAME PARAMETER
          SA2    MSTBUF+MDGL GET AUXILIARY DEVICE FLAG
          BX7    X0*X6
          LX2    59-57
          PL     X2,BMT2     IF DEVICE HAS 8 WORD CATALOG FORMAT
          LX2    59-58-59+57
          NZ     X1,BMT4     IF PACK NAME SPECIFIED 
          SA1    CPAR+/COMSPFS/CPFN  GET FAMILY NAME PARAMETER
          BX2    -X2         TOGGLE AUXILIARY DEVICE FLAG 
          SX7    B0          CLEAR USER NAME COMPARISON 
 BMT4     PL     X2,BMT2     IF NOT CORRECT TYPE OF DEVICE
          BX6    X1-X3
          BX2    X0*X6
          NZ     X7,BMT2     IF NOT CORRECT USER NAME 
          NZ     X2,BMT2     IF NOT CORRECT FAMILY/PACK NAME
  
*         BUILD FIRST WORD OF MASS STORAGE TABLE INFORMATION. 
  
          SA1    MSTBUF+ALGL GET FIRST TRACKS AND CATALOG TRACK COUNT 
          MX3    36 
          BX6    X3*X1       SET IAPF, CATALOG, AND PERMIT TRACKS 
          AX1    12 
          MX3    -9 
          BX3    -X3*X1      NUMBER OF CATALOG TRACKS 
          LX3    9+6
          BX6    X6+X3       MERGE NUMBER OF CATALOG TRACKS 
          SA2    MSTBUF+PFGL GET DEVICE NUMBER AND ACCESS LEVELS
          MX3    -6 
          LX2    -6 
          BX0    -X3*X2      DEVICE ACCESS LEVEL LIMITS 
          LX2    -6 
          BX7    -X3*X2      DEVICE NUMBER
          BX6    X6+X7       MERGE DEVICE NUMBER
          SX1    B2          EST ORDINAL
          LX1    6
          BX6    X6+X1       MERGE EST ORDINAL
          SA6    MSTT+B4     PUT FIRST WORD IN TABLE
  
*         BUILD SECOND WORD OF MASS STORAGE TABLE INFORMATION.
  
          MX3    -16
          SA1    MSTBUF+PUGL GET DEVICE MASKS 
          BX6    -X3*X1      SET DEVICE MASKS 
          MX3    -12
          SX1    B2 
          R=     X7,ESTE
          IX1    X1*X7       EST ENTRY RELATIVE ADDRESS 
          SA1    ESTBUF+X1+EQDE  GET MST ADDRESS AND EQUIPMENT MNEMONIC 
          BX2    -X3*X1      MST ADDRESS
          LX2    -12
          LX1    -12
          BX7    -X3*X1      EQUIPMENT MNEMONIC 
          LX7    18 
          BX6    X7+X6       MERGE EQUIPMENT MNEMONIC 
          LX0    30 
          BX6    X0+X6       MERGE ACCESS LEVEL LIMITS
          BX6    X2+X6       MERGE MST ADDRESS
          SA1    MSTBUF+MDGL GET SECTOR LIMIT 
          BX7    -X3*X1      SECTOR LIMIT 
          LX7    36 
          BX6    X6+X7       MERGE SECTOR LIMIT 
          SA6    A6+B1       PUT SECOND WORD IN TABLE 
  
*         BUILD DEVICE STATUS ENTRY FOR SUMMARY FILE. 
  
          SA1    MSTT+B4     READ FIRST WORD OF *MSTT* ENTRY
          MX3    -16
          MX7    -9 
          BX3    -X3*X6      DEVICE MASKS 
          LX1    -15
          BX7    -X7*X1      NUMBER OF CATALOG TRACKS 
          LX1    15 
          LX7    24 
          BX7    X7+X3       MERGE NUMBER OF CATALOG TRACKS AND MASKS 
          SA7    DSTBUF+1+B4  WRITE SECOND WORD OF STATUS ENTRY 
          MX2    12 
          LX2    -12
          BX7    X2*X6       SECTOR LIMIT 
          MX2    12 
          LX6    30 
          BX6    X2*X6       EQUIPMENT MNEMONIC 
          MX2    -6 
          BX7    X7+X6       MERGE EQUIPMENT MNEMONIC 
          BX1    -X2*X1      DEVICE NUMBER
          BX7    X7+X1       MERGE DEVICE NUMBER
          SA1    MSTBUF+TDGL
          MX6    -24
          LX1    12 
          BX1    -X6*X1      TRACKS AVAILABLE AND TOTAL TRACKS
          LX1    12 
          BX7    X7+X1       MERGE TRACK COUNTS 
          SA1    MSTBUF+DDLL SET UNIT COUNT - 1 
          MX3    -3 
          LX1    -48
          BX3    -X3*X1 
          LX3    6
          BX7    X7+X3
          SA7    DSTBUF+B4   WRITE FIRST WORD OF STATUS ENTRY 
          SB4    B4+2        ADVANCE TABLE INDEX
          EQ     BMT2        PROCESS NEXT EQUIPMENT 
  
*         CHECK FOR *MSS*/*MSE* EQUIPMENT TYPE. 
  
 BMT7     LX1    10-22
          MX0    -11
          BX1    -X0*X1      EXTRACT EQUIPMENT TYPE CODE FOR EST ENTRY
          SX6    B1 
          SX2    X1-2RCS
          ZR     X2,BMT8     IF *MSS* SELECTOR
          SX2    X1-2RCT
          NZ     X2,BMT9     IF NOT *MSS* TRANSPORT 
 BMT8     SA6    MSSF        SET *MSS* ENVIRONMENT FLAG 
 BMT9     SX2    X1-2RSS
          NZ     X2,BMT2     IF NOT *MSE* TYPE EQUIPMENT
          SA6    ASFF        SET *MSE* ENVIRONMENT FLAG 
          EQ     BMT2        READ NEXT EST ENTRY
  
*         TERMINATE MASS STORAGE TABLE. 
  
 BMT10    BX6    X6-X6       TERMINATE MASS STORAGE TABLE 
          SA6    MSTT+B4
          SA6    A6+B1
          SA6    DSTBUF+B4   TERMINATE DEVICE STATUS BUFFER 
          SA6    A6+1 
  
*         BUILD MASTER DEVICE TABLE.
  
          SA1    MSTT-2 
          SX0    377B 
 BMT11    SA1    A1+2        CHECK NEXT *MSTT* ENTRY
          SA2    A1+1 
          SB2    -B1         INITIALIZE SUBFAMILY INDEX 
          ZR     X1,BMTX     IF END OF ENTRIES
          BX2    X0*X2       SET DEVICE MASK
 BMT12    ZR     X2,BMT11    IF NO MASK BITS TO CHECK 
          LX2    -1          CHECK NEXT MASK BIT
          SB2    B2+B1       ADVANCE SUBFAMILY INDEX
          BX3    X2 
          SX2    X2 
          PL     X3,BMT12    IF MASK BIT NOT SET
          SX6    A1+         SET *MSTT* ADDRESS 
          SA6    TMDA+B2
          EQ     BMT12       CHECK NEXT BIT IN MASK 
  
  
 BMTA     VFD    24/1,18/ESTP,18/ESTBUF  EST POINTER PARAMETER
 BMTB     BSSZ   1           NUMBER OF EST ENTRIES
  
 LFPR     DECMIC LFPR        DEFINE MASK FOR INITIALIZE/UNLOAD
 LIAL     DECMIC LIAL 
 LIHD     DECMIC LIHD 
 LIFD     DECMIC LIFD 
 LIPF     DECMIC LIPF 
 LUNL     DECMIC LUNL 
 LDUL     DECMIC LDUL 
 BMTC     CON    1S"LFPR"+1S"LIAL"+1S"LIHD"+1S"LIFD"+1S"LIPF"+1S"LUNL"+1
,S"LDUL"
 SFP      SPACE  4,15 
**        SFP - SET PERMANENT FILE PARAMETERS.
* 
*         ENTRY  (CPAR) = CRACKED PARAMETER ARRAY.
* 
*         EXIT   (GPAR - GPAR+2) = ORIGINAL USER PARAMETER VALUES.
*                PERMANENT FILE PARAMETERS SET IN CONTROL POINT AREA. 
*                *PDWD* SET FOR ACCESS TO FAMILY OR AUXILLIARY DEVICE 
*                  CATALOGS.
*                (FMPN) = FAMILY NAME OR PACK NAME. 
* 
*         USES   X - 1, 2, 3, 6, 7. 
*                A - 1, 2, 6, 7.
* 
*         MACROS GETPFP, SETPFP.
  
  
 SFP      SUBR               ENTRY/EXIT 
  
*         SET CONTROL POINT AREA PARAMETERS.
  
          GETPFP GPAR        GET CURRENT PARAMETERS 
          SA1    GPAR        SET PARAMETER FLAGS IN BLOCK 
          SX6    FMPR+PKPR+UNPR+UIPR
          BX7    X1+X6
          SA2    CPAR+/COMSPFS/CPFN  SET FAMILY NAME IN BLOCK 
          SA7    A1 
          SA1    CPAR+/COMSPFS/CPPN  SET PACK NAME IN BLOCK 
          MX3    42 
          BX7    X3*X2
          ZR     X1,SFP1     IF PACK NAME NOT SPECIFIED 
          SX6    PKPR+UNPR+UIPR 
 SFP1     SA2    CPAR+/COMSPFS/CPUN  SET USER NAME IN BLOCK 
          BX6    X7+X6
          BX7    X3*X1
          SA6    SPAR 
          SA7    A6+B1
          BX6    X3*X2
          SX1    A6          SET PARAMETER BLOCK ADDRESS
          SA6    A7+B1
          SETPFP X1          SET PARAMETERS 
  
*         SET PARAMETERS FOR CATALOG ACCESS.
  
          SA1    MSTT 
          SA2    CPAR+/COMSPFS/CPPN 
          MX6    -9 
          MX3    42          SET PACKNAME FOR AUXILIARY DEVICE
          LX1    -6 
          BX6    -X6*X1      SET EST ORDINAL FOR FAMILY DEVICE
          ZR     X2,SFP2     IF NOT PROCESSING AUXILIARY DEVICE 
          BX6    X3*X2
 SFP2     SA6    PDWD        SET PF DESCRIPTION FOR *CATS* FILE 
  
*         SET FAMILY OR PACK NAME FOR *PFM* PROCESSING AND MESSAGES.
  
          SA1    CPAR+/COMSPFS/CPFN 
          BX6    X3*X2
          BX7    X3*X1
          BX7    X6+X7
          SA7    FMPN        SET FAMILY NAME OR PACK NAME 
          EQ     SFPX        RETURN 
 SMK      SPACE  4,15 
**        SMK - SET FILE SELECTION MASK.
* 
*         EXIT   (MASK) = FILE SELECTION MASK.
*                (SXUF) .NE. 0 IF *SYSTEMX* FILES ARE THE ONLY FILES TO 
*                  PROCESS ON SUBFAMILY 7.
*                TO *ABT* IF *DN* OR *TD* DEVICE NOT FOUND OR IF NO 
*                  FILES SELECTED.
* 
*         USES   X - 0, 1, 2, 3, 4, 6, 5, 7.
*                A - 1, 2, 3, 6, 7. 
*                B - 2, 3, 4, 5, 6, 7.
* 
*         CALLS  SUM. 
  
  
 SMK      SUBR               ENTRY/EXIT 
  
*         INITIALIZE *PFLOAD* FLAG. 
  
          SA5    /COMSPFS/UTLC
          SX5    X5-/COMSPFS/LDUT 
  
*         PRESET DEVICE SEARCH PARAMETERS.
  
          SA1    CPAR+/COMSPFS/CPDN 
          SA2    CPAR+/COMSPFS/CPTD 
          IX1    X1+X2
          SB4    X1          SET *DN* OR *TD* DEVICE NUMBER 
          SB2    MSTT 
          SX3    B0          INITIALIZE CUMULATIVE MASTER DEVICE MASK 
          SB5    B0          INITIALIZE *DN* OR *TD* DEVICE FOUND FLAG
          SB6    B0          INITIALIZE *DA* DEVICE COUNT 
          SB7    B0          INITIALIZE *DA* DEVICES FOUND
          ZR     X5,SMK1     IF *PFLOAD*, DO NOT CHECK *DA* SELECTIONS
          SA1    CPAR+/COMSPFS/CPDA 
          SX2    X1 
          NZ     X2,SMK1     IF *DA=R* OR *DA=N* SPECIFIED
          SA2    A1+B1
          CX1    X1 
          CX2    X2 
          IX1    X1+X2       SET NUMBER OF *DA* DEVICE SELECTIONS 
          SB6    X1 
  
*         ACCUMULATE DEVICE MASKS.
  
 SMK1     SA1    B2          GET DEVICE NUMBER
          SA2    B2+B1       GET DEVICE MASKS 
          SB2    B2+2        ADVANCE DEVICE INDEX 
          ZR     X1,SMK3     IF END OF DEVICES
          MX0    -6 
          BX1    -X0*X1      DEVICE NUMBER
          MX0    -8 
          SB3    X1 
          BX6    -X0*X2      DEVICE MASK
          AX2    8
          BX3    X3+X6       ACCUMULATE IAPF MASTER DEVICE MASK 
          BX7    -X0*X2      DIRECT ACCESS MASK 
          BX4    X3          ACCUMULATE DAPF MASTER DEVICE MASK 
          SB3    B3-B4
          NZ     B3,SMK2     IF NOT *DN* OR *TD* DEVICE 
          SB5    B1+         FLAG *DN* OR *TD* DEVICE FOUND 
          SA6    SMKA        SAVE DEVICE MASK 
          SA7    SMKA+1      SAVE DIRECT ACCESS MASK
 SMK2     ZR     B6,SMK1     IF NOT CHECKING *DA* DEVICE SELECTIONS 
          MX0    -5 
          BX0    -X0*X1 
          AX1    5
          SB3    X0 
          SA1    CPAR+/COMSPFS/CPDA+X1
          LX1    B3 
          PL     X1,SMK1     IF NOT *DA* SELECTED DEVICE
          SA1    SMKB 
          SA2    A1+B1
          SB7    B7+B1       COUNT *DA* DEVICE FOUND
          BX6    X1+X6       ACCUMULATE *DA* DEVICES MASK 
          BX7    X2+X7       ACCUMULATE *DA* DEVICES DIRECT MASK
          SA6    A1 
          SA7    A2 
          EQ     SMK1        PROCESS NEXT DEVICE
  
*         CHECK *DN* OR *TD* DEVICE FOUND AND APPLY *DN* OR *TD* DEVICE 
*         MASK CONSTRAINTS. 
  
 SMK3     ZR     B4,SMK6     IF NO *DN* OR *TD* DEVICE
          NZ     B5,SMK4     IF DEVICE FOUND
          SB2    ERMN        * SELECTED MASTER OR TRUE DEVICE NOT ...*
          EQ     ABT         ABORT
  
 SMK4     SA1    CPAR+/COMSPFS/CPDN 
          NZ     X1,SMK5     IF *DN* SPECIFIED
          ZR     X5,SMK5     IF *PFLOAD*, SKIP *TD* RESIDENCY CHECK 
          SA3    SMKA        SET IAPF MASK
          SA2    SMKA+1 
          EQ     SMK7        PROCESS *TD* DEVICE DAPF RESIDENCY 
  
 SMK5     SA3    SMKA        SET IAPF MASK FOR FILES CATALOGED ON *DN*
          SX4    X3+         SET DAPF MASK FOR FILES CATALOGED ON *DN*
  
*         PROCESS *DA* DEVICE SELECTIONS.  IF NOT ALL SELECTED *DA* 
*         DEVICES WERE FOUND, THE DIRECT ACCESS FILE CONSTRAINT IS NOT
*         APPLIED BECAUSE THE DIRECT ACCESS MASKS OF THE MISSING
*         DEVICES ARE NOT KNOWN.
  
 SMK6     ZR     B6,SMK8     IF NOT PROCESSING *DA* DEVICE SELECTIONS 
          SA1    SMKB 
          SA2    A1+B1
          BX3    X3*X1       EXCLUDE IAPF-S NOT ON *DA* DEVICES 
          NE     B6,B7,SMK8  IF NOT ALL *DA* DEVICES FOUND
  
*         PROCESS *TD* OR *DA* DIRECT ACCESS FILE RESIDENCY CONSTRAINT. 
*         DIRECT ACCESS FILES CATALOGED ON THE SUBFAMILY USER INDICES 
*         CAN RESIDE ON THE MASTER DEVICE EVEN IF NOT PERMITTED BY THE
*         DIRECT ACCESS DEVICE MASK.  *SYSTEMX* FILES SUCH AS 
*         TERMINATED DAYFILES CAN RESIDE ON ANY DEVICE.  THE *SXUF* 
*         FLAG IS SET IF *SYSTEMX* DIRECT ACCESS FILES IN VIOLATION OF
*         THE MASKS OF THE SELECTED RESIDENCY DEVICES ARE THE ONLY
*         SUBFAMILY 7 DIRECT ACCESS FILES TO BE PROCESSED.
  
 SMK7     BX2    X3+X2       INCLUDE FORCED MASTER RESIDENT DAPF-S
          SX6    X2+
          SX1    200B 
          BX2    X2+X1       INCLUDE *SYSTEMX* DAPF-S 
          BX4    X4*X2       EXCLUDE DAPF-S NOT ON SELECTED DEVICES 
          BX6    X2-X6
          SA6    SXUF        PRESET *SYSTEMX* ONLY UI STATUS
  
*         APPLY INDIRECT OR DIRECT ACCESS ONLY CONSTRAINT.
  
 SMK8     SA1    CPAR+/COMSPFS/CPOP 
          BX6    X3+X4       FORM COMBINED DIRECT/INDIRECT MASK 
          LX1    59-55
          PL     X1,SMK9     IF NOT DIRECT ONLY SELECTION 
          SX6    X4+         SELECT DIRECTS ONLY
 SMK9     LX1    59-56-59+55
          PL     X1,SMK10    IF NOT INDIRECT ONLY SELECTION 
          BX6    X3          SELECT INDIRECTS ONLY
  
*         APPLY USER INDEX SELECTIONS CONSTRAINT. 
  
 SMK10    SA2    CPAR+/COMSPFS/CPDI 
          SA1    /COMSPFS/FISP
          ZR     X2,SMK11    IF NO *PFLOAD* DESTINATION USER INDEX
          BX7    X2 
          SX1    SMKC        SET LIST ADDRESS 
          SA7    SMKC        SET ENTRY IN LIST
 SMK11    ZR     X1,SMK12    IF NO USER INDEX SELECTIONS
          RJ     SUM         SET COMPOSITE USER INDEX MASK
          BX6    X6*X4       INCLUDE SELECTED USER INDICES
 SMK12    ZR     X6,SMK13    IF NO FILES SELECTED 
          SA6    MASK        SET FILE SELECTION MASK
          SA1    SXUF 
          BX6    X6*X1       CLEAR FLAG IF NO *SYSTEMX* FILES SELECTED
          SA6    A1 
          EQ     SMKX        RETURN 
  
*         PROCESS NO FILES SELECTED.
  
 SMK13    SB2    ERNF        * NO FILES SELECTED.*
          EQ     ABT         ABORT
  
  
 SMKA     CON    0           *DN* OR *TD* DEVICE MASK 
          CON    0           *DN* OR *TD* DEVICE DAPF MASK
  
 SMKB     CON    0           *DA* DEVICES COMPOSITE MASK
          CON    0           *DA* DEVICES COMPOSITE DAPF MASK 
  
 SMKC     CON    0           DESTINATION USER INDEX 
          CON    0           LIST TERMINATOR
          SPACE  4,10 
*         DEVICE ACCESS ERROR MESSAGES. 
  
  
 ERMN     DATA   C* SELECTED MASTER OR TRUE DEVICE NOT FOUND.*
 ERNF     DATA   C* NO FILES SELECTED.* 
  
  
 DVA$     ENDIF 
          SPACE  4,10 
 PFD$     IF     DEF,PFD$ 
          TITLE  COMCPFP - PFDUMP/PFDM PRESET ROUTINES. 
 CAL      SPACE  4,15 
**        CAL - CHECK ACCESS LEVELS.
* 
*         ENTRY  (SYSS) = SYSTEM SECURITY MODE. 
*                (SYLA) = SYSTEM LOWER ACCESS LEVEL LIMIT.
*                (SYUA) = SYSTEM UPPER ACCESS LEVEL LIMIT.
* 
*         EXIT   (PCLA) = LOWER ACCESS LEVEL TO PROCESS IF NO ERROR.
*                (PCUA) = UPPER ACCESS LEVEL TO PROCESS IF NO ERROR.
*                (X2) .GE. 0 IF RANGE WITHIN SYSTEM ACCESS LIMITS.
*                (X2) .LT. 0 IF RANGE NOT WITHIN SYSTEM ACCESS LIMITS.
* 
*         USES   X - 0, 1, 2, 3, 6, 7.
*                A - 1, 2, 6, 7.
  
  
 CAL      SUBR               ENTRY/EXIT 
          SA1    CPAR+/COMSPFS/CPLA 
          SA2    CPAR+/COMSPFS/CPUA 
          MX0    -3 
          BX6    -X0*X1 
          BX7    -X0*X2 
          NZ     X2,CAL4     IF ACCESS LEVELS SPECIFIED 
          SA2    SYSS 
          ZR     X2,CALX     IF NOT SECURE SYSTEM 
  
*         DETERMINE LOWER AND UPPER ACCESS LEVEL LIMITS OF DEVICES. 
  
          SA1    MSTT+1 
          SX6    7           INITIALIZE LOWER ACCESS LEVEL
          SX7    B0+         INITIALIZE UPPER ACCESS LEVEL
 CAL1     LX1    -30
          BX2    -X0*X1      DEVICE UPPER ACCESS LEVEL LIMIT
          LX1    -3 
          BX1    -X0*X1      DEVICE LOWER ACCESS LEVEL LIMIT
          IX3    X7-X2
          PL     X3,CAL2     IF PREVIOUS UPPER .GE. CURRENT 
          BX7    X2          SET NEW UPPER LIMIT
 CAL2     IX3    X1-X6
          PL     X3,CAL3     IF PREVIOUS LOWER .LE. CURRENT 
          BX6    X1          SET NEW LOWER LIMIT
 CAL3     SA1    A1+2 
          NZ     X1,CAL1     IF MORE DEVICES TO PROCESS 
  
*         COMPARE DEVICE LIMITS WITH SYSTEM LIMITS. 
  
          SA1    SYLA 
          SA2    SYUA 
          IX2    X2-X7
          NG     X2,CALX     IF UPPER LIMIT OUT OF RANGE
          IX2    X6-X1
          NG     X2,CALX     IF LOWER LIMIT OUT OF RANGE
  
*         SET LOWER AND UPPER ACCESS LEVELS TO PROCESS. 
  
 CAL4     SA6    PCLA        SET RANGE
          SA7    PCUA 
          EQ     CALX        RETURN 
 OSP      SPACE  4,15 
**        OSP - OUTPUT SELECTION PARAMETERS.
* 
*         ENTRY  CPAR = CRACKED PARAMETER ARRAY ADDRESS.
* 
*         EXIT   SELECTION PARAMETERS WRITTEN TO OUTPUT FILE. 
* 
*         USES   X - 0, 1, 2, 5, 6. 
*                A - 0, 1, 2, 5, 6. 
* 
*         CALLS  COD, ZTB.
* 
*         MACROS EDATE, ETIME, WRITEH.
  
  
 OSP      SUBR               ENTRY/EXIT 
          SA1    CPAR+/COMSPFS/CPLB 
          ZR     X1,OSPX     IF OUTPUT FILE NOT SELECTED
          WRITEH O,OSPO,1 
          SA1    MASK        SET FILE SELECTION MASK
          RJ     COD
          SA6    OSPA+2 
          SA1    /COMSPFS/UTLN  SET UTILITY NAME
          SX6    1R*
          LX6    54 
          LX1    -6 
          BX1    X1+X6
          RJ     ZTB         BLANK FILL NAME
          SA6    OSPB 
          SA5    /COMSPFS/STDT
          BX1    X5 
          AX1    18 
          EDATE  X1          SET DATE 
          SA6    OSPB+1 
          MX1    -18
          BX1    -X1*X5 
          ETIME  X1          SET TIME 
          SA6    OSPB+2 
          WRITEH O,OSPB,3 
          SA1    /COMSPFS/UTLC
          WRITEH X2,OSPA,4
          SA1    CPAR+/COMSPFS/CPIP 
          ZR     X1,OSP2     IF PROCESSING NOT INHIBITED
          WRITEH X2,OSPD,3
 OSP2     SA1    CPAR+/COMSPFS/CPDT 
          ZR     X1,OSP3     IF NOT DESTAGE DUMP
          WRITEH X2,OSPG,3
 OSP3     SA1    CPAR+/COMSPFS/CPSD 
          ZR     X1,OSP4     IF INHIBIT DATES NOT TO BE RESET 
          WRITEH X2,OSPS,4
 OSP4     SA5    CPAR+/COMSPFS/CPOP 
          MX0    1
          LX0    47-59
          BX1    X0*X5
          ZR     X1,OSP5     IF FILE STAGING NOT SUPPRESSED 
          WRITEH X2,OSPR,3
 OSP5     MX0    2
          LX5    3
          BX5    X0*X5
          ZR     X5,OSP7     IF NOT INDIRECT OR DIRECT ONLY 
          PL     X5,OSP6     IF DIRECT ONLY 
          WRITEH O,OSPL,3 
          EQ     OSP7        CHECK ACCESS LEVEL OPTIONS 
  
 OSP6     WRITEH O,OSPM,3 
 OSP7     SA1    CPAR+/COMSPFS/CPLA 
          ZR     X1,OSP8     IF NO ACCESS LEVELS SPECIFIED
          SA1    PCLA 
          SA2    TALV+X1     GET ACCESS LEVEL NAME
          MX0    42 
          BX1    X0*X2
          RJ     ZTB
          SA6    OSPT+2      ADD LEVEL TO MESSAGE 
          SA1    PCUA 
          SA2    TALV+X1     GET ACCESS LEVEL NAME
          BX1    X0*X2
          MX0    -42
          RJ     ZTB
          LX6    -18         ADD LEVEL TO MESSAGE 
          BX6    -X0*X6 
          SA1    OSPT+3 
          BX1    X0*X1
          BX6    X1+X6
          SA6    A1 
          WRITEH O,OSPT,4 
 OSP8     SA5    CPAR+/COMSPFS/CPOP 
          MX0    3
          BX5    X0*X5
          ZR     X5,OSP11    IF NO DATE OPTION SPECIFIED
          LX5    1-59        SET *CREATED*, *ACCESSED* OR *MODIFIED*
          SA1    OSPH+X5
          BX6    X1 
          SA6    OSPB 
          SA5    CPAR+/COMSPFS/CPAD 
          ZR     X5,OSP9     IF *AD=YYMMDD* NOT SPECIFIED 
          SA1    OSPI        SET *AFTER* IN MESSAGE 
          BX6    X1 
          SA6    A6+B1
          BX1    X5          SET AFTER DATE IN MESSAGE
          AX1    18-0 
          EDATE  X1 
          SA6    OSPB+2 
          MX0    -18         SET AFTER TIME IN MESSAGE
          BX1    -X0*X5 
          ETIME  X1 
          SA6    OSPB+3 
 OSP9     SA5    CPAR+/COMSPFS/CPBD 
          ZR     X5,OSP10    IF *BD=YYMMDD* NOT SPECIFIED 
          SA1    OSPJ        SET *BEFORE* IN MESSAGE
          BX6    X1 
          SA6    A6+B1
          BX1    X5          SET BEFORE DATE IN MESSAGE 
          AX1    18-0 
          SA0    A6+1 
          EDATE  X1 
          SA6    A0 
          MX0    -18         SET BEFORE TIME IN MESSAGE 
          BX1    -X0*X5 
          SA0    A6+B1
          ETIME  X1 
          SA6    A0+
 OSP10    WRITEH O,OSPB,A6-OSPB+1  WRITE DATE SELECTION MESSAGE 
  
 OSP11    SA2    /COMSPFS/FISP
          SA1    CPAR+/COMSPFS/CPUI 
          ZR     X2,OSP13    IF NO FILE SELECTIONS
          ZR     X1,OSP12    IF SELECTIONS FOR MULTIPLE USER INDICES
          RJ     COD         CONVERT USER INDEX 
          SA6    OSPF+3 
          WRITEH O,OSPF,4 
          EQ     OSP13       WRITE FINAL OUTPUT LINE
  
 OSP12    WRITEH O,OSPE,5 
 OSP13    WRITEH O,OSPO,1 
          EQ     OSPX        RETURN 
  
  
 OSPA     DATA   30C FILE SELECTION MASK
 OSPB     DATA   80C
 OSPC     DATA   30C *PFUUUUU 
 OSPD     DATA   30H PROCESSING INHIBITED 
 OSPE     DATA   50H SELECTED FILES FOR MULTIPLE USER INDICES 
 OSPF     DATA   40H SELECTED FILES FOR USER INDEX
 OSPG     DATA   30H DESTAGE FILES TO TAPE
 OSPH     DATA   10H MODIFIED 
          DATA   10H ACCESSED 
          DATA   10H CREATED
 OSPI     DATA   10H AFTER
 OSPJ     DATA   10H BEFORE 
 OSPL     DATA   30H INDIRECT ACCESS FILES ONLY 
 OSPM     DATA   30H DIRECT ACCESS FILES ONLY 
 OSPO     DATA   10H1 
 OSPR     DATA   30H FILE STAGING SUPPRESSED
 OSPS     DATA   40H RESET DISK SPACE RELEASE INHIBIT DATES 
 OSPT     DATA   40H ACCESS LEVELS FROM           TO
          SPACE  4
 PFD$     ENDIF 
          SPACE  4
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 DSS      EQU    /COMCPFP/DSS 
 IOF      EQU    /COMCPFP/IOF 
 ODV      EQU    /COMCPFP/ODV 
 PFO      EQU    /COMCPFP/PFO 
 RPS      EQU    /COMCPFP/RPS 
 SPT      EQU    /COMCPFP/SPT 
 EQAL     EQU    /COMCPFP/EQAL
 OFFN     EQU    /COMCPFP/OFFN
 OFPN     EQU    /COMCPFP/OFPN
 OFUN     EQU    /COMCPFP/OFUN
 OFUC     EQU    /COMCPFP/OFUC
 PCLA     EQU    /COMCPFP/PCLA
 PCUA     EQU    /COMCPFP/PCUA
 SYLA     EQU    /COMCPFP/SYLA
 SYUA     EQU    /COMCPFP/SYUA
 PFA$     IF     DEF,PFA$ 
 SSS      EQU    /COMCPFP/SSS 
 PFA$     ENDIF 
 DVA$     IF     DEF,DVA$ 
 BMT      EQU    /COMCPFP/BMT 
 SFP      EQU    /COMCPFP/SFP 
 SMK      EQU    /COMCPFP/SMK 
 DVA$     ENDIF 
 PFD$     IF     DEF,PFD$ 
 CAL      EQU    /COMCPFP/CAL 
 OSP      EQU    /COMCPFP/OSP 
 OSPA     EQU    /COMCPFP/OSPA
 PFD$     ENDIF 
 QUAL$    ENDIF 
          ENDX
