MFILES
          IDENT  MFILES,FETS
          ABS 
          SST 
          ENTRY  CLEAR
          ENTRY  OUT
          ENTRY  OVWRITE
          ENTRY  RETURN 
          ENTRY  REWIND 
          ENTRY  SETFS
          ENTRY  UNLOAD 
          ENTRY  NPC= 
          ENTRY  RFL= 
          ENTRY  SSM= 
          SYSCOM B1 
          TITLE  MFILES - MULTIPLE FILE PROCESSOR.
*COMMENT  MFILES - MULTIPLE FILE PROCESSOR. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
*****     MFILES - MULTIPLE FILE PROCESSOR. 
* 
*         A.    SKJOLDEBRAND.     75/09/07. 
*         H. G. VARNIS.           79/01/02. 
* 
*         *MFILES* REQUESTS THAT CERTAIN OPERATIONS BE PERFORMED ON A 
*         SUBSET OF FILES ASSIGNED TO A JOB.
 MFILES   SPACE  4,30 
***       *MFILES* REQUESTS THAT CERTAIN OPERATIONS BE PERFORMED ON A 
*         SUBSET OF FILES ASSIGNED TO A JOB.  THE SUBSET IS DEFINED BY
*         THE COMMAND AS FOLLOWS: 
* 
*         FORMAT    FORMAT                   SUBSET 
*          CODE 
* 
*            0  NAME.                   ALL FILES 
*            1  NAME(*)                 ALL FILES 
*            2  NAME(*,LFN1,...,LFNN)   ALL FILES EXCEPT LFN1,...,LFNN
*            3  NAME(LFN1,...,LFNN)     FILES LFN1,...,LFNN 
* 
*         LEGAL COMMAND NAMES ARE *CLEAR*, *OUT*, *OVWRITE*,
*         *RETURN*, *REWIND*, *SETFS*, AND *UNLOAD*.  OPERATIONS AND
*         ALLOWED FORMATS ARE GIVEN BY THE FOLLOWING TABLE. 
* 
*                                                  0   1   2   3
*                                                 --- --- --- --- 
*         CLEAR    RELEASE FILE FROM JOB           X   X   X   -
*         OUT      RELEASE FILE TO OUTPUT QUEUE    X   X   X   -
*         OVWRITE  OVERWRITE FILES                 -   X   X   X
*         RETURN   RELEASE FILE FROM JOB           -   X   X   X
*         REWIND   POSITION FILE AT BOI            -   X   X   X
*         SETFS    SET FILE STATUS                 -   X   X   X
*         UNLOAD   RELEASE FILE FROM JOB           -   X   X   X
* 
*         WHERE:  X = FORMAT ALLOWED FOR THIS COMMAND.
*                 - = FORMAT NOT ALLOWED FOR THIS COMMAND.
* 
* 
*         NOTES:  
* 
*         1.     THE *CLEAR* AND *RETURN* COMMANDS PRODUCE
*                IDENTICAL OPERATIONS ON THE FILES TO WHICH THEY REFER. 
*                THEY DIFFER ONLY IN ALLOWED COMMAND FORMATS. 
 MFILES   SPACE  4,20 
***       THE COMMAND.
* 
* 
*         CLEAR.             RETURNS ALL FILES EXCEPT FOR FILES WITH
*                            *CBST*, *CKST* OR *NDST* STATUS, AND 
*                            THE OPTICAL DISK CONTROL FILE *ZZZZZOD*. 
* 
*         CLEAR/OP=O.        RETURNS ALL OPTICAL DISK FILES AND THE 
*                            OPTICAL DISK CONTROL FILE *ZZZZZOD*. 
* 
*         CLEAR(*)           RETURNS ALL FILES EXCEPT FOR FILES WITH
*                            *CBST*, *CKST* OR *NDST* STATUS, AND 
*                            THE OPTICAL DISK CONTROL FILE *ZZZZZOD*. 
* 
*         CLEAR(*/OP=O)      RETURNS ALL OPTICAL DISK FILES AND THE 
*                            OPTICAL DISK CONTROL FILE *ZZZZZOD*. 
* 
*         CLEAR(*,LFN1,...,LFNN)       RETURNS ALL FILES EXCEPT FOR 
*                            FILES LFN1,...,LFNN, FILES WITH *CBST*,
*                            *CKST* OR *NDST* STATUS, AND THE OPTICAL 
*                            DISK CONTROL FILE *ZZZZZOD*. 
* 
* 
*         OUT.               RELEASES TO THE OUTPUT QUEUE ALL 
*                            FILES OF TYPE *QFFT* AND ALL FILES 
*                            WITH THE SPECIAL NAMES *OUTPUT*, 
*                            *PUNCH*, *PUNCHB*, AND *P8*. 
* 
*         OUT(*)             SAME AS *OUT.* 
* 
*         OUT(*/OP=X)        SAME AS *OUT.* USING THE OPTION *X*. 
*                            THIS FORM IS USED ONLY BY THE SYSTEM 
*                            DURING JOB TERMINATION PROCESSING. 
*                            THE POSSIBLE VALUES OF THE OPTION
*                            *X* AND THEIR MEANINGS ARE SHOWN 
*                            BELOW. 
* 
*                            E         PERFORM END-OF-JOB ROUTING.
* 
*         OUT(*,LFN1,...,LFNN)         SAME AS *OUT* WITH THE 
*                            EXCEPTION OF FILES LFN1,...,LFNN.
* 
* 
*         OVWRITE,*.         OVERWRITE ALL MASS STORAGE FILES EXCEPT
*                            FOR FILES NOT IN WRITE MODE. 
* 
*         OVWRITE,*/OP=OPTIONS.        OVERWRITE ALL MASS STORAGE FILES 
*                            EXCEPT FOR FILES NOT IN WRITE MODE WITH
*                            THE FOLLOWING OPTIONS. 
*                            Z - OVERWRITE THE FILE WITH BINARY ZEROES. 
*                                BOTH THE Z AND THE X OPTIONS CANNOT
*                                BE SIMULTANEOUSLY SELECTED.  THIS IS 
*                                THE DEFAULT VALUE. 
* 
*                            X - OVERWRITE THE FILE FIRST WITH BINARY 
*                                ZEROS, THEN WITH BINARY ONES, THEN 
*                                WITH A PATTERN OF ALTERNATING BINARY 
*                                ONES AND ZEROS.
* 
*                            R - RETURN ALL FILES PROCESSED AFTER 
*                                COMPLETION.
* 
*         OVWRITE,*,LFN1,...,LFNN/OP=OPTIONS. 
*                            OVERWRITE ALL MASS STORAGE FILES EXCEPT
*                            FOR FILES NOT IN WRITE MODE AND FILES
*                            LFN1,...LFNN USING SELECTED OPTIONS. 
* 
*         OVWRITE,LFN1,...,LFNN/OP=OPTIONS. 
*                            OVERWRITE FILES LFN1,...,LFNN USING
*                            SELECTED OPTIONS.  NON-MASS STORAGE FILES
*                            AND FILES NOT IN WRITE MODE WILL BE
*                            IGNORED. 
* 
* 
*         RETURN(*)          RETURNS ALL FILES EXCEPT FOR FILES WITH
*                            *CBST*, *CKST* OR *NDST* STATUS, AND 
*                            THE OPTICAL DISK CONTROL FILE *ZZZZZOD*. 
* 
*         RETURN(*/OP=O)     RETURNS ALL OPTICAL DISK FILES AND THE 
*                            OPTICAL DISK CONTROL FILE *ZZZZZOD*. 
* 
*         RETURN(*,LFN1,...,LFNN)      RETURNS ALL FILES EXCEPT FOR 
*                            FILES LFN1,...,LFNN, FILES WITH *CBST*,
*                            *CKST* OR *NDST* STATUS, AND THE OPTICAL 
*                            DISK CONTROL FILE *ZZZZZOD*. 
* 
*         RETURN(LFN1,...LFNN)         RETURNS FILES LFN1,...,LFNN. 
*                            WILL *NOT* RETURN THE OPTICAL DISK 
*                            CONTROL FILE *ZZZZZOD*.
* 
* 
*         REWIND(*)          REWINDS ALL FILES. 
* 
*         REWIND(*,LFN1,...,LFNN)      REWINDS ALL FILES EXCEPT 
*                            FOR FILES LFN1,...,LFNN. 
* 
*         REWIND(LFN1,...,LFNN)        REWINDS FILES LFN1,...LFNN.
* 
* 
*         SETFS(*/FS=S)      SET FILE STATUS *S* ON ALL FILES.
* 
*         SETFS(*,LFN1,...,LFNN/FS=S)  SET FILE STATUS *S* ON ALL FILES 
*                            EXCEPT FILES LFN1,...,LFNN.
* 
*         SETFS(LFN1,...,LFNN/FS=S)    SET FILE STATUS *S* ON FILES 
*                            LFN1,....,LFNN.
* 
* 
*         UNLOAD(*)          UNLOADS ALL FILES EXCEPT FOR FILES WITH
*                            *CBST*, *CKST* OR *NDST* STATUS, AND 
*                            THE OPTICAL DISK CONTROL FILE *ZZZZZOD*. 
* 
*         UNLOAD(*/OP=O)     UNLOADS ALL OPTICAL DISK FILES AND THE 
*                            OPTICAL DISK CONTROL FILE *ZZZZZOD*. 
* 
*         UNLOAD(*,LFN1,...,LFNN)      UNLOADS ALL FILES EXCEPT FOR 
*                            FILES LFN1,...,LFNN, FILES WITH *CBST*,
*                            *CKST* OR *NDST* STATUS, AND THE OPTICAL 
*                            DISK CONTROL FILE *ZZZZZOD*. 
* 
*         UNLOAD(LFN1,...,LFNN)        UNLOADS FILES LFN1,...LFNN.
*                            WILL *NOT* UNLOAD THE OPTICAL DISK 
*                            CONTROL FILE *ZZZZZOD*.
          SPACE  4,10 
***       DAYFILE MESSAGES. 
* 
* 
*         * ERROR IN ARGUMENTS.* = AN INCORRECT ARGUMENT OR FORMAT
*                WAS USED ON THE COMMAND.  COMPARE THE
*                COMMAND USED WITH THE DOCUMENTED FORMATS.
* 
*         * FILE STATUS NOT SPECIFIED.* = A *SETFS* COMMAND WAS 
*                ISSUED WITH NO FILE STATUS SPECIFIED.
* 
*         * INCORRECT FILE STATUS.* = THE FILE STATUS SPECIFIED 
*                ON A *SETFS* COMMAND WAS NOT VALID.
* 
*         * INCORRECT */* OPTION.* = AN INCORRECT COMMAND 
*                OPTION WAS ENTERED FOLLOWING A */* SEPARATOR.
* 
*         * NNN FILE(S) PROCESSED.* = NNN IS THE NUMBER OF FILES FOR
*                WHICH THE FUNCTION WAS REQUESTED.
* 
*         * XXXXXXX ROUTED.  JSN IS YYYY.* = XXXXXXX IS THE NAME
*                OF THE FILE BEING ROUTED AND YYYY IS THE JSN WHICH 
*                WAS ASSIGNED TO THAT FILES QFT ENTRY.
* 
*         * (FILENAME) NOT ON MASS STORAGE.* = THE NAMED FILE WAS NOT 
*                PROCESSED BECAUSE IT DOES NOT RESIDE ON MASS STORAGE.
* 
*         * (FILENAME) NOT IN WRITE MODE.* = THE NAMED FILE WAS NOT 
*                PROCESSED BECAUSE IT IS NOT IN WRITE MODE. 
 MFILES   TITLE  CONSTANTS AND MACRO DEFINITIONS. 
 MFILES   SPACE  4,10 
**        DEFINITION COMMON DECKS.
  
  
*CALL     COMCMAC 
*CALL     COMCCMD 
*CALL     COMSDSP 
*CALL     COMSJCE 
*CALL     COMSLFD 
          SPACE  4,15 
**        MACRO DEFINITIONS.
 ACON     SPACE  4,10 
**        ACON - SET ARGUMENT CONTROL.
* 
*         ACON   P,T
* 
*         ENTRY  *P* = ARGUMENT PROCESSOR ADDRESS.
*                *T* = ARGUMENT TABLE (*COMCARG* FORMAT) ADDRESS. 
* 
*         EXIT   24/0, 18/P, 18/T 
  
  
          PURGMAC ACON
 ACON     MACRO  P,T
+         VFD    24/0,18/P,18/T 
          ENDM
 SCON     SPACE  4,10 
**        SCON - SET COMMAND CONTROL. 
* 
*         SCON   A,B,C,D,EXP,CF 
* 
*         ENTRY  *A* = 1 IF FORMAT 0 ALLOWED. 
*                *B* = 1 IF FORMAT 1 ALLOWED. 
*                *C* = 1 IF FORMAT 2 ALLOWED. 
*                *D* = 1 IF FORMAT 3 ALLOWED. 
*                *EXP* = ADDRESS OF FILE EXCLUSION PROCESSOR. 
*                *CF* = *CIO* FUNCTION CODE.
  
  
          PURGMAC SCON
  
 SCON     MACRO  A,B,C,D,EXP,CF 
          VFD    1/A,1/B,1/C,1/D,20/0,18/EXP,18/CF
          ENDM
 MFILES   SPACE  4,10 
****      INSTALLATION PARAMETERS.
  
  
 MNF      EQU    200B        FILES PROCESSED PER *GETFNT* CALL
****
          SPACE  4,10 
**        ASSEMBLY CONSTANTS. 
  
  
 FMT0     EQU    0           FORMAT 0 
 FMT1     EQU    1           FORMAT 1 
 FMT2     EQU    2           FORMAT 2 (EXCLUSION FORMAT)
 FMT3     EQU    3           FORMAT 3 (INCLUSION FORMAT)
 FNTBL    EQU    2*MNF+2     *GETFNT* BUFFER SIZE 
 PSBFL    EQU    1           LENGTH OF PSEUDO BUFFER FOR FETS 
 FRDC     EQU    20B         *DSP* FLAG FOR DISPOSITION CODE
 MFILES   TITLE  TABLES AND DATA STORAGE. 
**        FETS. 
  
  
          ORG    110B 
 FETS     BSS    0
 FET1     FILEB  PSBF,PSBFL,(FET=8) 
 FET2     FILEB  PSBF,PSBFL,(FET=8) 
 FET3     FILEB  PSBF,PSBFL,(FET=8) 
 FETX     FILEB  PSBF,PSBFL,(FET=13)  *GETFNT* FET (MUST BE LAST FET) 
  
 FETC     EQU    FETX+8      *GETFNT* CONTROL WORD ADDRESS
 FETL     EQU    FET2-FET1   FET LENGTH 
 FETW     EQU    FETX-FETS   LENGTH OF FET BLOCK
 FETN     EQU    FETW/FETL+1 NUMBER OF FETS 
          SPACE  4,10 
**        RESERVED LOCATIONS. 
  
  
 CSOC     CON    0           COMMAND OPTION COUNT 
 EOJS     CON    0           END-OF-JOB PROCESSING STATUS 
 FICT     CON    0           FILE COUNT 
 FLST     CON    0           FILE STATUS TO BE SET
 FRMT     CON    0           FORMAT CODE
 OPARG    CON    0           *OP=* ARGUMENT 
 OPOF     CON    0           *OP=O* PROCESSED FLAG
 OVWF     CON    0           *OVWRITE* OPTION FLAG
 NOJF     CON    1           *NOJT* TERMINATION FLAG
 ZODF     CON    0           OPTICAL DISK CONTROL FILE FOUND FLAG 
          SPACE  4,10 
**        PRESERVED REGISTER STORAGE LOCATIONS. 
  
  
 SVA3     CON    0           SAVE (A3)
 SVB2     CON    0           SAVE (B2)
 SVB3     CON    0           SAVE (B3)
 SVB4     CON    0           SAVE (B4)
          SPACE  4,10 
**        *GETFNT* CONTROL WORD.
  
  
 GFCW     VFD    12/MNF,6/0,18/0,2/0,1/1,3/4,18/FNTB
          SPACE  4,10 
**        COMMAND TABLE.
  
  
 TCSC     BSS    0                FWA OF CONTROL WORD TABLE 
 CLCC     SCON   1,1,1,0,CPF,70B  CLEAR 
 OUCC     SCON   1,1,1,0,COF,0B   OUT 
 OVCC     SCON   0,1,1,1,CMS,244B OVWRITE 
 OVCR     SCON   0,1,1,1,CMS,254B OVWRITE RETURN
 RTCC     SCON   0,1,1,1,CPF,70B  RETURN
 RWCC     SCON   0,1,1,1,0,50B    REWIND
 SFCC     SCON   0,1,1,1,CIF,0    SETFS 
 UNCC     SCON   0,1,1,1,CPF,60B  UNLOAD
 TACW     SPACE  4,10 
**        TACW - TABLE OF ARGUMENT CONTROL WORDS. 
* 
*         THIS TABLE IS ADDRESSED USING THE OFFSET (*TACW*) FROM
*         THE CORRESPONDING ENTRY IN THE COMMAND
*         CONTROL WORD TABLE. 
  
  
 TACW     EQU    *-TCSC      TABLE OFFSET FROM *TCSC* 
          ACON   CAP,TOARG   CLEAR
          ACON   OAP,TOARG   OUT
          ACON   VAT,TOARG   OVWRITE
          ACON   VAT,TOARG   OVWRITE RETURN 
          ACON   CAP,TOARG   RETURN 
          ACON   0,0         REWIND 
          ACON   SAP,TSARG   SETFS
          ACON   CAP,TOARG   UNLOAD 
 TDSP     SPACE  4,10 
**        TDSP - *DSP* PARAMETER BLOCK. 
  
  
 TDSP     BSSZ   1
          VFD    42/0,18/FRFN  RETURN JSN TO CALLER 
          BSSZ   5
 TSFN     SPACE  4,10 
**        TSFN - TABLE OF SPECIAL FILE NAMES. 
* 
*T        42/FILE NAME, 18/ 0 
  
  
 TSFN     BSS    0           START OF TABLE 
          LOC    0
 OTPT     CON    0LOUTPUT 
          CON    0LPUNCH
          CON    0LPUNCHB 
          CON    0LP8 
          CON    0           END OF TABLE 
          LOC    *O 
          SPACE  4,10 
 MFILES   TITLE  COMMAND ENTRY POINTS.
**        CLEAR.
* 
*         RETURN FILES ASSIGNED TO A JOB. 
  
  
 CLEAR    SB2    CLCC        SET COMMAND WORD ADDRESS 
          EQ     MFP         ENTER MAIN ROUTINE 
 OUT      SPACE  4,10 
**        OUT.
*         OUT(.../OP=X) 
* 
*         RELEASE FILES ASSIGNED TO A JOB TO THE OUTPUT QUEUE.
*         THE OPTION SPECIFIED BY *X* IS DESCRIBED BELOW.  IT 
*         IS VALID ONLY DURING JOB TERMINATION PROCESSING.
* 
*                E           PERFORM END-OF-JOB ROUTING.
* 
*                Q           QUEUE FILE REGARDLESS OF USER
*                            VALIDATION LIMITS. 
  
  
 OUT      SB2    OUCC        SET COMMAND WORD ADDRESS 
          EQ     MFP         ENTER MAIN LOOP
 OVWRITE  SPACE  4,10 
**        OVWRITE.
* 
*         OVERWRITE FILES.
  
  
 OVWRITE  SB2    OVCC        SET COMMAND WORD ADDRESS 
          EQ     MFP         ENTER MAIN ROUTINE 
          SPACE  4,10 
**        RETURN. 
* 
*         RETURN FILES ASSIGNED TO A JOB. 
  
  
 RETURN   SB2    RTCC        SET COMMAND WORD ADDRESS 
          EQ     MFP         ENTER MAIN ROUTINE 
          SPACE  4,10 
**        REWIND. 
* 
*         REWIND FILES ASSIGNED TO A JOB. 
  
  
 REWIND   SB2    RWCC        SET COMMAND WORD ADDRESS 
          EQ     MFP         ENTER MAIN ROUTINE 
 SETFS    SPACE  4,10 
**        SETFS.
* 
*         SET STATUS ON FILES ASSIGNED TO A JOB.
  
  
 SETFS    SB2    SFCC        SET COMMAND WORD ADDRESS 
          EQ     MFP         ENTER MAIN ROUTINE 
          SPACE  4,10 
**        UNLOAD. 
* 
*         UNLOAD FILES ASSIGNED TO A JOB. 
  
  
 UNLOAD   SB2    UNCC        SET COMMAND WORD ADDRESS 
*         EQ     MFP         ENTER MAIN ROUTINE 
 MFILES   TITLE  MAIN PROGRAM.
 MFILES   SPACE  4,10 
**        RESERVED REGISTER USAGE.
* 
*                (A3) = ADDRESS OF FIRST FILE NAME ARGUMENT.
*                (B2) = COMMAND WORD ADDRESS. 
 MFP      SPACE  4,15 
**        MFP - MULTIPLE FILE PROCESSOR.
* 
*         ENTRY  (B2) = COMMAND WORD ADDRESS. 
* 
*         USES   X - 4, 6, 7. 
*                A - 4, 6, 7. 
* 
*         CALLS  IFC, PAF, PRS. 
* 
*         MACROS ENDRUN, GETFNT, RECALL.
  
  
 MFP      BSS    0           ENTRY
          RJ     PRS         PRESET 
          SA4    GFCW        PUT *GETFNT* CONTROL WORD IN FET 
          BX6    X4 
          SX7    B0 
          SA6    FETC 
          SA7    FNTB        SET INITIAL *GETFNT* CALL
 MFP1     GETFNT FETX 
          RJ     PAF         PROCESS ALL FILES
          ZR     X1,MFP2     IF ALL FILES RETURNED IN BUFFER
          RECALL FETX 
          EQ     MFP1        GET ANOTHER BUFFER OF FNT ENTRIES
  
*         TERMINATE JOB.
  
 MFP2     SA4    FRMT        GET FORMAT CODE
          SX4    X4-FMT3
          ZR     X4,MFP3     IF FORMAT 3
          RJ     IFC         ISSUE FILE COUNT MESSAGE 
 MFP3     ENDRUN
          TITLE  SUBROUTINES. 
 ABT      SPACE  4,10 
**        ABT - ISSUE MESSAGE AND ABORT.
* 
*         ENTRY  (X2) = MESSAGE ADDRESS.
* 
*         MACROS ABORT, MESSAGE.
  
  
 ABT      BSS    0           ENTRY
          MESSAGE  X2,3 
          ABORT              ABORT CONTROL POINT
 CFN      SPACE  4,20 
**        CFN - CHECK FILE NAME FOR EXCLUSION.
* 
*         *CFN* CHECKS AN ARGUMENT LIST FOR THE PRESENCE OF THE FILE
*         NAME GIVEN BY AN FNT ENTRY.  DEPENDING ON THE CONTROL 
*         COMMAND, OTHER EXCLUSION TESTS MAY BE MADE. 
* 
*         ENTRY  (X1) = FNT ENTRY.
*                (X3) = FILE NAME.
*                (A1) = ADDRESS OF FNT ENTRY IN *GETFNT* BUFFER.
*                (A3) = ADDRESS OF FIRST ARGUMENT.
*                (B2) = COMMAND WORD ADDRESS. 
* 
*         EXIT   (X6) = 0 IF FILE TO BE EXCLUDED. 
*                (X6) .NE. 0 IF FILE NOT TO BE EXCLUDED.
* 
*         USES   X - 0, 4, 6. 
*                A - 4. 
*                B - 7. 
* 
*         CALLS  IRJ. 
* 
*         NOTE   EXCLUSION PROCESSOR SUBROUTINES MUST NOT DESTROY 
*                REGISTERS A3, X3, B2, B3, OR B4. 
  
  
 CFN      SUBR               ENTRY/EXIT 
          SA4    B2          GET EXCLUSION PROCESSOR ADDRESS
          MX0    -18
          AX4    18 
          BX4    -X0*X4 
          ZR     X4,CFN1     IF NO EXCLUSION PROCESSOR DEFINED
          SB7    X4+         SET PROCESSOR ADDRESS
          RJ     IRJ         EXECUTE EXCLUSION PROCESSOR
          ZR     X6,CFNX     IF FILE TO BE EXCLUDED 
 CFN1     SA4    FRMT        GET FORMAT CODE
          SB7    X4-FMT3
          SA4    A3+         READ FIRST FILE NAME ARGUMENT
 CFN2     ZR     X4,CFN3     IF END OF ARGUMENT LIST
          BX6    X4-X3
          SA4    A4+B1       READ NEXT ARGUMENT 
          NZ     X6,CFN2     IF NOT FOUND 
  
*         THE FILE NAME WAS FOUND AS ONE OF THE ARGUMENTS SPECIFIED 
*         (EITHER FORMAT 2 OR FORMAT 3 WAS USED).  AN ADDITIONAL CHECK
*         IS REQUIRED TO DETERMINE IF THE FILE IS TO BE INCLUDED
*         OR EXCLUDED FROM PROCESSING.  IF THE INCLUSION FORMAT 
*         (FORMAT 3) WAS SPECIFIED, THE FILE WILL NOT BE EXCLUDED.
  
          NZ     B7,CFNX     IF NOT FORMAT 3
          SX6    B1+         SET FILE NOT EXCLUDED
          EQ     CFNX        RETURN 
  
*         THE FILE NAME DID NOT MATCH ANY OF THE ARGUMENTS SPECIFIED. 
*         A CHECK MUST BE MADE TO DETERMINE IF THE FILE SHOULD
*         BE EXCLUDED OR INCLUDED BY THE PROCESSING TYPE SPECIFIED. 
*         IF THE INCLUSION FORMAT (FORMAT 3) WAS SPECIFIED, THE 
*         FILE WILL BE EXCLUDED.
  
 CFN3     NZ     B7,CFNX     IF NOT FORMAT 3
          SX6    B0+         SET FILE EXCLUDED
          EQ     CFNX        RETURN 
 CIF      SPACE  4,10 
**        CIF - CHECK FOR INPUT* FILE.
* 
*         ENTRY  (X1) = FNT ENTRY.
* 
*         EXIT   (X6) = 0 IF FILE IS INPUT*.
* 
*         USES   X - 0, 4, 6, 7.
*                A - 4. 
  
  
 CIF      SUBR               ENTRY/EXIT 
          SA4    =6LINPUT*
          MX0    42 
          BX7    X0*X1
          BX6    X4-X7
          EQ     CIFX        RETURN 
 CMS      SPACE  4,15 
**        CMS - CHECK FOR MASS STORAGE AND READ ONLY FILE.
* 
*         ENTRY  (X1) = FNT ENTRY.
*                (A1) = ADDRESS OF FNT ENTRY IN *GETFNT* BUFFER.
*                (X3) = FILE NAME.
*                (A3) = ADDRESS OF FIRST ARGUMENT.
* 
*         EXIT   (X6) = 0 IF FILE TO BE EXCLUDED. 
* 
*         USES   X - 0, 1, 4, 6.
*                A - 4. 
*                B - 2, 3, 5. 
* 
*         CALLS  CIF, RSR, SNM, SVR.
* 
*         MACROS MESSAGE. 
  
  
 CMS      SUBR               ENTRY/EXIT 
          MX0    2
          LX0    14-59
          BX6    X0*X1
          SB5    -CMSA       MESSAGE TEXT 
          NZ     X6,CMS1     IF FILE NOT MASS STORAGE 
          RJ     CIF
          ZR     X6,CMSX     IF INPUT* FILE 
          SA4    A1+B1       CHECK FOR WRITE MODE 
          MX0    -4 
          SX6    B1+         SET FILE INCLUDED
          LX4    -4 
          BX4    -X0*X4 
          SB5    X4 
          EQ     B5,B1,CMSX  IF FILE IN WRITE MODE
          SB5    -CMSB       MESSAGE TEXT 
  
*         SEARCH ARGUMENT LIST FOR MATCHING FILE NAME TO DETERMINE
*         IF WARNING MESSAGE SHOULD BE ISSUED.
  
 CMS1     SA4    A3+         READ FIRST FILE NAME ARGUMENT
 CMS2     ZR     X4,CMS3     IF END OF ARGUMENT LIST
          BX0    X4-X3
          SA4    A4+B1       READ NEXT ARGUMENT 
          NZ     X0,CMS2     IF NOT FOUND 
          SA4    FRMT        GET FORMAT CODE
          SX4    X4-FMT3
          NZ     X4,CMS3     IF NOT FORMAT 3
  
*         ISSUE WARNING MESSAGE AND EXCLUDE FILE. 
  
          RJ     SVR         SAVE REGISTERS 
          SB2    1R+         SET SEARCH CHARACTER 
          SB3    CMSC        MESSAGE ASSEMBLY BUFFER
          MX0    42 
          BX1    X0*X1       FILE NAME
          RJ     SNM         SET NAME IN MESSAGE
          MESSAGE  CMSC,3,R 
          RJ     RSR         RESTORE REGISTERS
 CMS3     SX6    B0+         EXCLUDE FILE 
          EQ     CMSX        RETURN 
  
 CMSA     DATA   C* +++++++ NOT ON MASS STORAGE.* 
 CMSB     DATA   C* +++++++ NOT IN WRITE MODE.* 
 CMSC     BSS    4           ASSEMBLY BUFFER
 COC      SPACE  4,10 
**        COC - CHECK FOR OPTICAL CONTROL FILE *ZZZZZOD*. 
* 
*         ENTRY  (X1) = FNT ENTRY.
* 
*         EXIT   (X6) = 0 IF FILE IS ZZZZZOD. 
* 
*         USES   X - 0, 4, 6, 7.
*                A - 4. 
  
  
 COC      SUBR               ENTRY/EXIT 
          MX0    2
          LX0    14-59
          BX6    X0*X1
          NZ     X6,COCX     IF FILE NOT MASS STORAGE 
          SA4    =7LZZZZZOD 
          MX0    42 
          BX7    X0*X1
          BX6    X4-X7
          EQ     COCX        RETURN 
 COF      SPACE  4,20 
**        COF - CHECK IF OUTPUT FILE. 
* 
*         *COF* CHECKS TO SEE IF THE GIVEN FILE SHOULD BE 
*         ROUTED TO THE OUTPUT QUEUE.  THE CRITERIA USED
*         FOR SELECTION ARE - 
* 
*                (1)  FILE TYPE IS *QFFT*.
*                (2)  FILE IS A LOCAL FILE (FILE TYPE *LOFT*) AND 
*                     HAS A SPECIAL NAME, *OUTPUT*, *PUNCH*, *P8*,
*                     OR *PUNCHB*.
* 
*         ENTRY  (X1) = FNT ENTRY.
*                (X3) = FILE NAME.
* 
*         EXIT   (X6) = NONZERO IF FILE TO BE ROUTED TO QUEUE.
* 
*         USES   X - 4, 6, 7. 
*                A - 4. 
*                B - 6. 
  
  
 COF      SUBR               ENTRY/EXIT 
  
*         CHECK FILE TYPE.
  
          BX4    X1          CHECK FNT PARAMETERS 
          MX6    -2 
          AX4    13 
          BX6    -X6*X4 
          NZ     X6,COF3     IF NOT MASS STORAGE FILE 
          BX4    X1          CHECK FILE TYPE
          MX6    -6 
          AX4    6
          BX7    -X6*X4 
          SB6    X7-QFFT
          ZR     B6,COF1.1   IF QUEUED FILE 
          SB6    X7-LOFT
          NZ     B6,COF3     IF NOT LOCAL FILE
          SA4    NOJF        CHECK TERMINATION OPTION FLAG
          ZR     X4,COF3     IF NOT ROUTING *SPECIAL NAME* LOCAL FILES
  
*         CHECK FOR SPECIAL FILE NAMES. 
  
 COF1     SA4    TSFN+B6     READ TABLE ENTRY 
          ZR     X4,COF3     IF END OF TABLE
          BX7    X4-X3       COMPARE FILE NAMES 
          SB6    B6+B1       ADVANCE TABLE INDEX
          NZ     X7,COF1     IF NO MATCH
  
*         PROCESS END-OF-JOB FILE ROUTING.
  
 COF1.1   SA4    EOJS        CHECK FOR END-OF-JOB PROCESSING
          ZR     X4,COF2     IF NOT END-OF-JOB
          BX7    -X6*X1      CHECK FILE STATUS
          SX7    X7-SOST
          ZR     X7,COF2     IF *SOST* STATUS 
          SA4    NOJF        CHECK TERMINATION OPTION FLAG
          ZR     X4,COF2     IF ROUTING ANY QUEUED FILE 
          SA4    TSFN+OTPT   CHECK FILE NAME
          BX7    X3-X4
          NZ     X7,COF2     IF FILE NAME .NE. *OUTPUT* 
          BX4    X1          CHECK IF *OUTPUT* IS LOCKED
          LX4    59-12
          PL     X4,COF3     IF *OUTPUT* IS NOT LOCKED
  
*         RETURN STATUS TO ROUTE FILE.
  
 COF2     SX6    B1+
          EQ     COFX        RETURN 
  
*         RETURN STATUS TO IGNORE FILE. 
  
 COF3     SX6    B0+
          EQ     COFX        RETURN 
  
 CPF      SPACE  4,10 
**        CPF - CHECK FOR PROTECTED FILE. 
* 
*         ENTRY  (X1) = FNT ENTRY.
*                (X3) = FILE NAME.
*                (A3) = ADDRESS OF FIRST ARGUMENT.
* 
*         EXIT   (X6) = 0 IF PROTECTED FILE TO BE EXCLUDED. 
* 
*         USES   X - 4, 6, 7. 
*                A - 4, 7.
* 
*         CALLS  COC, CIF, RSR, SVR.
* 
*         MACROS FILINFO. 
  
  
 CPF5     SX7    X4+         SET CONTROL FILE FOUND FLAG IF *OP=O*
          SA7    ZODF 
  
 CPF      SUBR               ENTRY/EXIT 
          RJ     CIF
          ZR     X6,CPFX     IF INPUT* FILE 
          RJ     COC         CHECK FOR OPTICAL CONTROL FILE 
          SA4    OPOF 
          ZR     X6,CPF5     IF OPTICAL CONTROL FILE
          NZ     X4,CPF4     IF *OP=O* SPECIFIED
          MX4    -6          CHECK IF *CBST*, *CKST* OR *NDST* STATUS 
          BX4    -X4*X1 
          SX6    X4-CBST
          ZR     X6,CPF1     IF CHECKPOINT FILE 
          SX6    X4-CKST
          ZR     X6,CPF1     IF CHECKPOINT FILE 
          SX6    X4-NDST
          NZ     X6,CPFX     IF NOT NO-AUTO-DROP STATUS 
  
*         IT IS A PROTECTED FILE.  SEARCH THE ARGUMENT LIST FOR 
*         MATCHING FILE NAME.  IF A MATCH IS FOUND AND INCLUSION
*         PROCESSING (FORMAT 3) HAS BEEN SELECTED, RETURN (X6)
*         NON-ZERO SO THAT THE FILE WILL BE PROCESSED.  OTHERWISE,
*         RETURN (X6) = 0 SO THAT THE FILE WILL BE EXCLUDED.
  
 CPF1     SA4    A3+         READ FIRST FILE NAME ARGUMENT
 CPF2     ZR     X4,CPFX     IF END OF ARGUMENT LIST
          BX7    X4-X3
          SA4    A4+B1       READ NEXT ARGUMENT 
          NZ     X7,CPF2     IF NOT FOUND 
          SA4    FRMT        GET FORMAT CODE
          SX4    X4-FMT3     CHECK FOR FORMAT 3 
 CPF3     NZ     X4,CPFX     IF FILE TO BE EXCLUDED 
          SX6    B1+         PROCESS THE FILE 
          EQ     CPFX        RETURN 
  
*         *OP=O* SPECIFIED - CHECK FOR OPTICAL DISK FILE. 
  
 CPF4     SA4    CPFA        SET UP *FILINFO* PARAMETER BLOCK 
          MX6    42 
          BX7    X6*X1
          BX6    -X6*X4 
          BX7    X6+X7
          SA7    A4+
          RJ     SVR         SAVE REGISTERS 
          FILINFO  CPFA      GET FILE INFORMATION 
          RJ     RSR         RESTORE REGISTERS
          SA4    CPFA+1 
          BX6    X6-X6       SET TO EXCLUDE FILE IF NOT OPTICAL DISK
          AX4    48 
          SX4    X4-2ROD
          EQ     CPF3        EXCLUDE FILE UNLESS ON OPTICAL DISK
  
 CPFA     VFD    42/0,6/5,12/1  *FILINFO* PARAMETER BLOCK 
          BSSZ   5
 GNF      SPACE  4,20 
**        GNF - GET NONBUSY FET.
* 
*         *GNF* DETERMINES WHETHER ANY FET IN THE SET OF FETS IS
*         CURRENTLY BUSY WITH THE GIVEN FILE AND IF NONE IS, RETURNS
*         THE ADDRESS OF A NONBUSY FET. 
* 
*         ENTRY  (X3) = FILE NAME TO LOOK FOR.
* 
*         EXIT   (X2) = 0 IF A FET IS BUSY WITH THE FILE. 
*                (X2) = ADDRESS OF A NONBUSY FET OTHERWISE. 
* 
*         USES   X - 0, 1, 2. 
*                A - 1. 
*                B - 5, 7.
* 
*         MACROS RECALL.
  
  
 GNF2     SX2    A1+         SAVE ADDRESS OF NONBUSY FET
          NZ     B5,GNFX     IF EXCLUSION FORM
 GNF3     SA1    A1+FETL
          SB7    A1-FETX-1
          NG     B7,GNF1     IF NOT PAST END OF FETS
          NZ     X2,GNFX     IF NONBUSY FET FOUND 
          RECALL FETS 
  
 GNF      SUBR               ENTRY/EXIT 
          SA1    FRMT        GET FORMAT CODE
          SB5    X1-FMT3
          SA1    FETS 
          MX0    42 
          BX2    X2-X2
 GNF1     LX1    59-0 
          NG     X1,GNF2     IF NOT BUSY
          LX1    1           RESTORE X1 
          NZ     B5,GNF3     IF EXCLUSION FORM
          BX1    X0*X1
          BX1    X1-X3
          NZ     X1,GNF3     IF NOT A FILE NAME MATCH 
          SX2    B0+
          EQ     GNFX        RETURN 
 IFC      SPACE  4,15 
**        IFC - ISSUE FILE COUNT MESSAGE. 
* 
*         ENTRY  (FICT) = FILE COUNT. 
* 
*         EXIT   MESSAGE ISSUED.
* 
*         USES   X - 1, 2, 6. 
*                A - 1, 6.
* 
*         CALLS  CDD. 
* 
*         MACROS MESSAGE. 
  
  
 IFC      SUBR               ENTRY/EXIT 
          SA1    FICT        GET FILE COUNT 
          SX2    IFCA        ASSUME NO FILES
          ZR     X1,IFC1     IF NO FILES PROCESSED
          SX6    X1-1        CHECK FILE COUNT 
          SX2    IFCB 
          ZR     X6,IFC1     IF ONE FILE PROCESSED
          RJ     CDD         CONVERT TO DECIMAL 
          SA1    IFCC        MERGE FILE COUNT WITH MESSAGE
          MX2    24 
          LX6    36 
          BX1    -X2*X1 
          BX6    X2*X6
          BX6    X6+X1
          SA6    A1 
          SX2    A1          SET MESSAGE ADDRESS
 IFC1     MESSAGE X2,3       ISSUE DAYFILE MESSAGE
          EQ     IFCX        RETURN 
  
 IFCA     DATA   C* NO FILES PROCESSED.*
 IFCB     DATA   C* 1 FILE PROCESSED.*
 IFCC     DATA   C* 000 FILES PROCESSED.* 
 IRJ      SPACE  4,15 
**        IRJ - INDEX RETURN JUMP.
* 
*         EXECUTES A RETURN JUMP TO (B7). 
* 
*         ENTRY  (B7) = BRANCH ADDRESS. 
* 
*         EXIT   TO (B7)+1. 
*                JUMP INSTRUCTION TO RETURN LOCATION IN ((B7)). 
* 
*         USES   X - 5, 6.
*                A - 5, 6.
  
  
 IRJ      SUBR               ENTRY/EXIT 
          SA5    IRJ         READ RETURN INSTRUCTION
          BX6    X5          SET RETURN IN CALLED ROUTINE 
          SA6    B7 
          JP     B7+1        ENTER CALLED ROUTINE 
 PAF      SPACE  4,20 
**        PAF - PROCESS ALL FILES.
* 
*         *PAF* REQUESTS AN OPERATION FOR EACH FILE IN THE SET OF 
*         FNT ENTRIES EXCEPT THOSE THAT ARE EXCLUDED. 
* 
*         ENTRY  (A3) = ADDRESS OF THE FIRST ARGUMENT.
*                (B2) = COMMAND WORD ADDRESS. 
* 
*         EXIT   (X1) = 0 IF ALL FILES RETURNED IN THE BUFFER.
* 
*         USES   X - 0, 1, 3. 
*                A - 1, 3.
*                B - 3, 4.
* 
*         CALLS  CFN, POF.
  
  
 PAF3     SA1    ZODF 
          ZR     X1,PAFX     IF NOT PROCESSING OPTICAL CONTROL FILE 
          SA3    =7LZZZZZOD 
          RJ     POF         PROCESS ONE FILE 
*         SX1    0           (*POF* EXIT CONDITION) 
  
 PAF      SUBR               ENTRY/EXIT 
          SB4    FNTBL-1     END OF *GETFNT* BUFFER 
          SB3    B1 
 PAF1     SA1    B3+FNTB     GET FNT ENTRY
          MX0    42 
          BX3    X0*X1
          ZR     X1,PAF3     IF END OF ENTRIES
          RJ     CFN         CHECK FILE NAME FOR EXCLUSION
          ZR     X6,PAF2     IF FILE TO BE EXCLUDED 
          RJ     POF         PROCESS ONE FILE 
 PAF2     SB3    B3+2 
          NE     B3,B4,PAF1  IF MORE FNT ENTRIES
          SX1    B1+
          EQ     PAFX        RETURN 
 POF      SPACE  4,20 
**        POF - PROCESS ONE FILE. 
* 
*         *PAF* REQUESTS AN OPERATION FOR ONE FILE. 
* 
*         ENTRY  (X3) = NAME OF FILE TO BE PROCESSED. 
*                (B2) = COMMAND WORD ADDRESS. 
* 
*         EXIT   SPECIFIED FILE PROCESSED AS REQUESTED. 
*                (X1) = 0.
* 
*         USES   X - 0, 1, 2, 4, 6, 7.
*                A - 1, 4, 6, 7.
*                B - 2, 3, 5, 6.
* 
*         CALLS  CIO=, GNF, RSR, SNM, SVR.
* 
*         MACROS MESSAGE, ROUTE, SETFS. 
  
  
 POF      SUBR               ENTRY/EXIT 
          SB6    B2-OUCC
          ZR     B6,POF3     IF *OUT* COMMAND 
          SA4    B2          GET *CIO* CODE 
          SX7    X4 
          RJ     GNF         GET NONBUSY FET
          ZR     X2,POF5     IF FILE ALREADY DONE 
          SX4    B1 
          BX6    X3+X4
          SA6    X2+
          SB6    B2-SFCC
          ZR     B6,POF2     IF *SETFS* COMMAND 
          SB6    B2-OVCC
          NZ     B6,POF1     IF NOT *OVWRITE* COMMAND 
          SA1    OVWF        OPTIONAL PARAMETER INDICATOR 
          LX1    18-0 
          BX2    X1+X2       COMBINE OPTIONAL PARAMETER WITH FILE NAME
  
*         PROCESS *CIO* FUNCTION. 
  
 POF1     RJ     CIO=        MAKE REQUEST 
          EQ     POF4        INCREMENT FILE COUNT 
  
*         PROCESS  *LFM* REQUEST. 
  
 POF2     SA1    FLST        SET FILE STATUS
          SETFS  X2,X1
          EQ     POF4        INCREMENT FILE COUNT 
  
*         PROCESS *DSP* FUNCTION. 
  
 POF3     BX7    X3          SET FILE NAME
          MX0    42 
          BX1    X0*X7
          SA7    TDSP 
          RJ     SVR         SAVE REGISTERS 
          SB2    1R=         SET SCAN PARAMETER 
          SB5    -POFA       SET STENCIL ADDRESS
          SB3    POFB        SET ASSEMBLY BUFFER ADDRESS
          RJ     SNM         SET NAME IN MESSAGE
          ROUTE  TDSP,RECALL
          MX0    24 
          SA1    TDSP        GET JSN RETURNED 
          BX1    X0*X1
          SB2    1R+         SET SCAN PARAMETER 
          SB5    POFB        SET *POFB* AS ASSEMBLY BUFFER
          RJ     SNM         SET NAME IN MESSAGE
          MESSAGE  POFB,0,RECALL  SEND MESSAGE TO USER DAYFILE
          RJ     RSR         RESTORE REGISTERS
 POF4     SA1    FICT        INCREMENT FILE COUNT 
          SX6    X1+B1
          SA6    A1 
 POF5     SX1    B0+
          EQ     POFX        RETURN 
  
 POFA     DATA   C* ======= ROUTED.  JSN IS ++++. * 
 POFB     DATA   C* ======= ROUTED.  JSN IS ++++. * 
 RSR      SPACE  4,10 
**        RSR - RESTORE RESERVED REGISTERS. 
* 
*         RESTORES THE CONTENTS OF X3, A3, B2, B3, AND B4.
* 
*         ENTRY  (SVA3)   = (A3). 
*                ((SVA3)) = (X3). 
*                (SVB2)   = (B2). 
*                (SVB4)   = (B4). 
*                (SVB3)   = (B3). 
* 
*         USES   X - 3. 
*                A - 3. 
*                B - 2, 3, 4. 
  
  
 RSR      SUBR               ENTRY/EXIT 
          SA3    SVB4        RESTORE (B4) 
          SB4    X3 
          SA3    A3-B1       RESTORE (B3) 
          SB3    X3 
          SA3    A3-B1       RESTORE (B2) 
          SB2    X3 
          SA3    A3-B1       READ A3
          SA3    X3+         RESTORE (A3) AND (X3)
          EQ     RSRX        RETURN 
 SVR      SPACE  4,15 
**        SVR - SAVE RESERVED REGISTERS.
* 
*         SAVES RESERVED REGISTERS A3, X3, B2, B3, AND B4.
*         THESE REGISTERS MAY LATER BE RESTORED BY
*         EXECUTING *RSR*.  NOTE THAT X3 IS NOT SAVED 
*         DIRECTLY, BUT IS AUTOMATICALLY RELOADED WHEN
*         A3 IS RESTORED. 
* 
*         EXIT   (SVA3) = (A3). 
*                (SVB2) = (B2). 
*                (SVB4) = (B4). 
*                (SVB3) = (B3). 
* 
*         USES   X - 6. 
*                A - 6. 
  
  
 SVR      SUBR               ENTRY/EXIT 
          SX6    A3          SAVE (A3)
          SA6    SVA3 
          SX6    B2          SAVE (B2)
          SA6    A6+B1
          SX6    B3+         SAVE (B3)
          SA6    A6+B1
          SX6    B4          SAVE (B4)
          SA6    A6+B1
          EQ     SVRX        RETURN 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMCCDD 
*CALL     COMCCIO 
*CALL     COMCCPM 
*CALL     COMCLFM 
*CALL     COMCSNM 
*CALL     COMCSYS 
 BUFFERS  SPACE  4,10 
**        BUFFER ASSIGNMENTS. 
  
  
          USE    BUFFERS
  
 PSBF     EQU    *           PSEUDO BUFFER FOR FETS 
 FNTB     EQU    PSBF+PSBFL  BUFFER FOR *GETFNT*
 RFL=     EQU    FNTB+FNTBL 
 NPC=     EQU    0           FORCE OPERATING SYSTEM PARAMETER FORMAT
 SSM=     EQU    0           DECLARE *SSM=* ENTRY POINT 
  
          ERRNG  JTFL*100B-RFL=  IF OVERFLOW MAXIMUM JOB TERMINATION FL 
 MFILES   TITLE  OVERLAID PRESET. 
 PRS      SPACE  4,30 
**        PRS - PRESET. 
* 
*         *PRS* DETERMINES THE FORMAT OF THE CALLING CONTROL
*         COMMAND, SETS THE ADDRESS OF THE FIRST ARGUMENT 
*         TO PROCESS AND CHECKS FOR THE PRESENCE OF NONZERO 
*         SEPARATORS (= OR /).
* 
*         ENTRY  (B2) = COMMAND WORD ADDRESS. 
* 
*         EXIT   (X3) = FIRST ARGUMENT. 
*                (A3) = ADDRESS OF FIRST ARGUMENT TO PROCESS. 
*                (FRMT) = COMMAND FORMAT CODE.
*                TO *ABT* IF ARGUMENT ERROR.
* 
*         USES   X - 0, 1, 2, 3, 4, 5, 6. 
*                A - 1, 3, 4, 6.
*                B - 1, 3, 4, 5, 6. 
* 
*         CALLS  MOL, POL.
* 
*         ERROR  TO *ABT*.
  
  
 PRS      SUBR               ENTRY/EXIT 
          SB1    1           SET CONSTANT B1=1
          RJ     MOL         MOVE */* OPTION LIST 
          SX2    =C* ERROR IN ARGUMENTS.* 
          SB4    B0          INITIALIZE FORMAT CODE TO 0
          ERRNZ  FMT0        ADJUST IF VALUE CHANGES
          MX0    42 
          SA3    ARGR        GET FIRST ARGUMENT 
          SA4    ACTR        GET ARGUMENT COUNT 
          SB3    X4+
          ZR     B3,PRS1     IF NO ARGUMENTS - FORMAT 0 
          SB4    FMT3 
          SA4    PRSA        GET SPECIAL ARGUMENT VALUE (*) 
          BX4    X3-X4
          NZ     X4,PRS1     IF ARGUMENT NOT * - FORMAT 3 
          SA3    A3+B1
          SB3    B3-B1       ADJUST ARGUMENT COUNT FOR *
          SB4    B1 
          ERRNZ  FMT1-1      ADJUST IF VALUE CHANGES
          ZR     B3,PRS1     IF ONLY * - FORMAT 1 
          SB4    B4+B1       SET FORMAT CODE TO 2 
          ERRNZ  FMT2-FMT1-1 ADJUST IF VALUE CHANGES
  
*         CHECK COMMAND FORMAT VALIDITY.
  
 PRS1     SA1    B2          GET CONTROL WORD 
          LX4    X1,B4
          PL     X4,ABT      IF INCORRECT COMMAND FORMAT
  
*         CHECK SEPARATORS OF ARGUMENTS.
  
          SA1    A3          GET FIRST ARGUMENT 
          SB5    B0 
          SX6    B4+         SAVE FORMAT CODE 
          SA6    FRMT 
          SB6    B4-FMT3
          NZ     B6,PRS2     IF NOT FORMAT 3
          MX6    6
          BX4    X6*X1
          SX5    1R*
          LX4    6
          BX4    X4-X5
          ZR     X4,ABT      IF FIRST CHARACTER OF FILENAME IS *
 PRS2     EQ     B5,B3,PRS3  IF END OF ARGUMENTS
          BX4    -X0*X1 
          ZR     X1,ABT      IF BLANK ARGUMENT
          NZ     X4,ABT      IF SEPARATOR IS = OR / 
          SA1    A1+B1
          SB5    B5+B1
          EQ     PRS2        CHECK NEXT ARGUMENT
  
 PRS3     NZ     X1,ABT      IF NOT ZERO LAST WORD
          RJ     POL         PROCESS */* OPTION LIST
          EQ     PRSX        RETURN 
  
 PRSA     DATA   0L*         SPECIAL ARGUMENT 
 MFILES   TITLE  OVERLAID PRESET SUBROUTINES. 
 MOL      SPACE  4,20 
**        MOL - MOVE */* OPTION LIST. 
* 
*         MOVES THE OPTION LIST DELIMITED BY THE */* SEPARATOR
*         TO A SEPARATE OPTION LIST AND CLEARS IT FROM THE
*         ORIGINAL COMMAND PARAMETER LIST.  THE PARAMETER 
*         COUNT OF THE REMAINING COMMAND PARAMETER LIST 
*         IS ADJUSTED TO REFLECT THE NEW PARAMETER COUNT. 
* 
*         ENTRY  (B2) = COMMAND WORD ADDRESS. 
* 
*         EXIT   (CSOC) = COUNT OF */* OPTION LIST PARAMETERS.
*                (TOPS) = */* OPTION LIST.
*                (ACTR) = ADJUSTED PARAMETER COUNT. 
* 
*         ERROR  TO *ABT* IF NO FILE STATUS SPECIFIED ON *SETFS*. 
* 
*         USES   X - 0, 1, 2, 6, 7. 
*                A - 1, 6, 7. 
*                B - 4, 5, 6, 7.
  
  
 MOL      SUBR               ENTRY/EXIT 
          SA1    ACTR        GET ARGUMENT COUNT 
          SB6    B0          CLEAR INDEX
          MX0    42          SET PARAMETER MASK 
          SB7    X1+         (B7) = ARGUMENT COUNT
          ZR     B7,MOLX     IF NO ARGUMENTS, RETURN
  
*         SEARCH FOR */* DELIMITER IN PARAMETER LIST. 
  
 MOL1     SA1    ARGR+B6     READ ARGUMENT
          SB6    B6+B1       COUNT ARGUMENT 
          BX6    -X0*X1      CHECK SEPARATOR
          SX6    X6-1R/ 
          ZR     X6,MOL2     IF */* 
          NE     B6,B7,MOL1  IF NOT END OF PARAMETER LIST 
          SX2    =C* FILE STATUS NOT SPECIFIED.*
          SB5    B2-SFCC
          ZR     B5,ABT      IF *SETFS* COMMAND 
          EQ     MOLX        RETURN 
  
*         ADJUST PARAMETER COUNT. 
  
 MOL2     BX7    X0*X1       CLEAR */* FROM PARAMETER 
          SA7    A1 
          SA1    ACTR        READ PARAMETER COUNT WORD
          SX6    B6          SET NEW PARAMETER COUNT
          BX1    X0*X1
          NZ     X7,MOL3     IF NOT NOW A NULL LAST PARAMETER 
          SX6    X6-1        DECREMENT PARAMETER COUNT
 MOL3     BX6    X1+X6       STORE NEW PARAMETER COUNT
          SA6    A1+
          SX7    B7-B6       SET OPTION LIST ARGUMENT COUNT 
          SA7    CSOC 
          SX7    B0          CLEAR (X7) 
          SB4    B0          CLEAR INDEX
  
*         MOVE OPTIONS TO SEPARATE LIST.
  
 MOL4     SA1    ARGR+B6     READ OPTION FROM PARAMETER LIST
          SB6    B6+B1       COUNT OPTION 
          BX6    X1 
          SA6    TOPS+B4     STORE OPTION IN OPTION LIST
          SA7    A1          CLEAR OPTION FROM PARAMETER LIST 
          SB4    B4+B1
          NE     B6,B7,MOL4  IF NOT END OF LIST 
          EQ     MOLX        RETURN 
 CAP      SPACE  4,25 
**        CAP - *CLEAR* ARGUMENT PROCESSOR. 
* 
*         PROCESSES THE OPTIONAL ARGUMENTS FOR THE *CLEAR*, 
*         *RETURN* AND *UNLOAD* COMMANDS.  *OP=O* ALLOWED 
*         ONLY ON FORMAT 0 OR 1 FOR THESE COMMANDS. 
* 
*         ENTRY  (OPARG) = *OP=* ARGUMENT.
*                (B4) = FORMAT MODE.
* 
*         EXIT   (OPOF) = NON-ZERO IF PROCESSING ONLY OPTICAL DISK
*                         FILES AND THE *ZZZZZOD* FILE (*O* OPTION).
* 
*         ERROR  TO *ABT* IF INCORRECT ARGUMENT OR FORMAT.
* 
*         USES   X - 1, 2, 6. 
*                A - 1, 6.
  
  
 CAP      SUBR               ENTRY/EXIT 
          SX2    =C+ INCORRECT */* OPTION.+  PRESET ERROR MESSAGE 
          SA1    OPARG       READ ARGUMENT
          SX6    1RO         CLEAR, RETURN OR UNLOAD W/OP=O.
          LX1    6
          BX1    X6-X1
          NZ     X1,ABT      IF NOT *O* OPTION
  
*         PROCESS *O* OPTION. 
  
          GT     B4,B1,ABT   IF NOT FORMAT 0 OR 1.
          SA6    OPOF 
          EQ     CAPX        RETURN 
 OAP      SPACE  4,25 
**        OAP - *OUT* ARGUMENT PROCESSOR. 
* 
*         PROCESSES THE OPTIONAL ARGUMENTS FOR THE *OUT*
*         COMMAND.
* 
*         ENTRY  (OPARG) = *OP=* ARGUMENT.
* 
*         EXIT   (EOJS) = END-OF-JOB STATUS IF PROCESSING 
*                         *E* OPTION. 
* 
*         ERROR  TO *ABT* IF INCORRECT ARGUMENT.
* 
*         USES   X - 1, 2, 4, 6.
*                A - 1, 4, 6. 
* 
*         MACROS GETEOJS. 
  
  
 OAP      SUBR               ENTRY/EXIT 
          SX2    =C+ INCORRECT */* OPTION.+  PRESET ERROR MESSAGE 
          ZR     B4,ABT      IF FORMAT CODE = 0 
          SA1    OPARG       READ ARGUMENT
          SX6    1RE
          LX1    6
          BX6    X6-X1
          NZ     X6,ABT      IF NOT *E* OPTION
  
*         CHECK FOR JOB TERMINATION IN PROGRESS.
  
          GETEOJS  OAPA      READ END-OF-JOB STATUS 
          SA4    OAPA        READ REPLY WORD
          SX2    =C+ INCORRECT */* OPTION.+ 
          SX6    X4-100B     CHECK FOR TERMINATION IN PROGRESS
          NG     X6,ABT      IF TERMINATION NOT IN PROGRESS 
          MX2    -3          MASK FOR TERMINATION DISPOSITION 
          BX2    -X2*X4 
          SX6    X2-NOJT
          SA6    NOJF        SET *NOJT* TERMINATION OPTION
  
*         PROCESS *E* OPTION. 
  
          SX6    X4+         SET END-OF-JOB PROCESSING STATUS 
          SA6    EOJS 
          EQ     OAPX        RETURN 
  
 OAPA     CON    0           *GETEOJS* REPLY WORD 
 SAP      SPACE  4,15 
**        SAP - *SETFS* ARGUMENT PROCESSOR. 
* 
*         PROCESSES THE ARGUMENTS FOR THE *SETFS* COMMAND.
* 
*         ENTRY  (FLST) = SPECIFIED FILE STATUS (DISPLAY CODE). 
* 
*         EXIT   (FLST) = FILE STATUS (BINARY). 
* 
*         ERROR  TO *ABT* IF INCORRECT ARGUMENT.
* 
*         USES   X - 0, 1, 2, 4, 6. 
*                A - 1, 4, 6. 
  
  
 SAP      SUBR               ENTRY/EXIT 
          SA1    FLST 
          SX2    =C* INCORRECT FILE STATUS.*
          MX0    42 
          SA4    SAPA 
 SAP1     BX6    X0*X4       CHECK TABLE FOR MATCH
          BX6    X1-X6
          ZR     X6,SAP2     IF SPECIFIED FILE STATUS FOUND 
          SA4    A4+B1
          NZ     X4,SAP1     IF NOT END OF TABLE
          EQ     ABT         PROCESS INCORRECT FILE STATUS
  
 SAP2     SX6    X4          SAVE FILE STATUS VALUE 
          SA6    A1 
          EQ     SAPX        RETURN 
  
  
 SAPA     BSS    0           TABLE OF VALID FILE STATUSES 
          VFD    42/0LAD,18/0 
          VFD    42/0LNAD,18/NDST 
          CON    0
 VAT      SPACE  4,15 
**        VAT - *OVWRITE* ARGUMENT PROCESSOR. 
* 
*         PROCESSES THE OPTIONAL ARGUMENTS FOR THE *OVWRITE* COMMAND. 
* 
*         ENTRY  (OPARG) = *OP=* ARGUMENT.
* 
*         EXIT   (OVWF) = 0, IF *Z* OPTION SELECTED.
*                         3, IF *X* OPTION SELECTED.
*                (B2) = COMMAND WORD ADDRESS. 
* 
*         ERROR  TO *ABT* IF INCORRECT ARGUMENT.
* 
*         USES   X - 0, 2, 4, 6, 7. 
*                A - 4, 6.
*                B - 2, 3, 5. 
  
 VAT      SUBR               ENTRY/EXIT 
          SX2    =C+ INCORRECT */* OPTION.+ 
          SX6    3           PRESET *X* OPTION
          MX0    -6 
          SA4    OPARG       LIST OF OPTIONAL PARAMETERS
          SB3    B1          INITIALIZE OPTION COUNTER
 VAT1     LX4    6           RIGHT JUSTIFY CHARACTER
          BX7    -X0*X4 
          ZR     X7,VAT4     IF END OF OPTIONAL PARAMETERS
          SB5    X7-1RZ 
          ZR     B5,VAT3     IF *Z* PARAMETER 
          SB5    X7-1RX 
          ZR     B5,VAT2     IF *X* PARAMETER 
          SB5    X7-1RR 
          NZ     B5,ABT      IF NOT A LEGAL OPTION
          SB2    OVCR        RESET COMMAND
          EQ     VAT1        CHECK NEXT OPTION
  
 VAT2     SA6    OVWF        SET *X* OPTION FLAG
 VAT3     SB3    B3-1        DECREMENT OPTION COUNT 
          EQ     VAT1        PROCESS NEXT OPTION
  
 VAT4     LT     B3,ABT      IF INCORRECT OPTION COMBINATION
          EQ     VATX        RETURN 
 POL      SPACE  4,15 
**        POL - PROCESS OPTION LIST.
* 
*         CRACKS THE COMMAND OPTIONAL ARGUMENTS 
*         AND EXECUTES THE ARGUMENT PROCESSOR DEFINED FOR 
*         THE COMMAND.
* 
*         ERROR  TO *ABT* IF ARGUMENT ERROR.
* 
*         USES   X - 1, 2, 4. 
*                A - 1, 4.
*                B - 4, 5, 7. 
* 
*         CALLS  ARG, IRJ, RSR, SVR.
* 
*         NOTE   THE ARGUMENT PROCESSOR SUBROUTINES MUST NOT
*                DESTROY (B4), (A3), OR (X3). 
  
  
 POL      SUBR               ENTRY/EXIT 
          SA4    CSOC        CHECK OPTION LIST PARAMETER COUNT
          ZR     X4,POLX     IF NULL LIST, RETURN 
          SA1    B2+TACW     GET ARGUMENT CONTROL WORD
          ZR     X1,POL1     IF NO ARGUMENTS ALLOWED
  
*         PROCESS ARGUMENT LIST.
  
          RJ     SVR         SAVE RESERVED REGISTERS
          SB4    X4          SET ARGUMENT COUNT 
          SB5    X1          SET ARGUMENT TABLE ADDRESS 
          SA4    TOPS        READ FIRST ARGUMENT
          RJ     ARG         CRACK ARGUMENT LIST
          RJ     RSR         RESTORE RESERVED REGISTERS 
          NZ     X1,POL1     IF ERROR IN ARGUMENT LIST
  
*         EXECUTE ARGUMENT PROCESSOR. 
  
          SA1    B2+TACW     GET ARGUMENT CONTROL WORD
          AX1    18 
          SB7    X1          SET PROCESSOR ADDRESS
          ZR     B7,POLX     IF NO PROCESSOR DEFINED
          RJ     IRJ         EXECUTE PROCESSOR
          EQ     POLX        RETURN 
  
*         PROCESS ARGUMENT ERROR. 
  
 POL1     SX2    =C+ INCORRECT */* OPTION.+ 
          EQ     ABT         ABORT
          SPACE  4,10 
*         *CLEAR*, *OUT*, *OVWRITE*, *RETURN* AND *UNLOAD*
*         COMMAND ARGUMENT TABLE. 
  
  
 TOARG    BSS    0           ARGUMENT TABLE FOR *COMCARG* 
 OP       ARG    OPARG,OPARG
          ARG 
 TSARG    SPACE  4,10 
*         *SETFS* COMMAND ARGUMENT TABLE. 
  
  
 TSARG    BSS    0
 FS       ARG    FLST,FLST
          ARG 
 MFILES   SPACE  4,10 
**        OVERLAID COMMON DECKS.
  
  
*CALL     COMCARG 
 MFILES   SPACE  4,10 
**        TOPS - TABLE OF COMMAND */* OPTIONS.
  
  
 TOPS     BSS    0           OPTIONS TABLE FWA
 TOPSE    EQU    TOPS+64     END OF TABLE 
  
  
          ERRNG  RFL=-TOPSE  PRESET OVERFLOWS BUFFERS.
  
  
          END 
