RECLAIM 
          IDENT  RECLAIM,ORIG 
          ABS 
          SST 
          ENTRY  RECLAIM
          ENTRY  RFL= 
          ENTRY  SDM= 
          SYSCOM B1 
          LIST   F
          TITLE  RECLAIM - PERMANENT FILE DUMP/LOAD UTILITY.
*COMMENT  RECLAIM - PERMANENT FILE DUMP/LOAD UTILITY. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 RECLAIM  SPACE  4,10 
***       RECLAIM - PERMANENT FILE DUMP/LOAD UTILITY. 
* 
*         J. L. COURTNEY.    81/11/23.
*         R. G. UPTON.       80/10/01.
*         J. G. HAMBLETON.   79/11/01.
*         R. L. LAMEY.       78/09/01.
          SPACE  4,10 
***       *RECLAIM* IS A UTILITY WHICH ENABLES USER TO EASILY PROVIDE 
*         MAGNETIC TAPE BACKUP FOR PERMANENT FILES AS WELL AS MAINTAIN
*         GREATER CONTROL OVER THE SIZE OF THEIR PERMANENT FILE DISK
*         SPACE.  THE DUMPED FILES CAN THEN LATER BE LOADED AS
*         PERMANENT FILES OR AS LOCAL FILES.
* 
*         INFORMATION ABOUT DUMPED FILES IS KEPT IN A DIRECT ACCESS 
*         FILE DATABASE IN THE USER CATALOG.  THIS DATABASE STORES
*         EACH FILE TYPE (IA OR DA), USER NAME, TAPE VSN WHERE IT WAS 
*         DUMPED, POSITION ON THE TAPE, AND DATE IT WAS DUMPED. 
          SPACE  4,20 
***       COMMAND FORMAT. 
* 
* 
*         RECLAIM(P1,P2...PN) 
*                OR 
*         RECLAIM(P1,P2...PN)/KW,OP1...OPN./KW,OP1...OPN./KW,OP1...OPN. 
* 
* 
*         *P* MAY BE ONE OF THE FOLLOWING - 
* 
*         PARAMETER          DESCRIPTION
*         ---------          -----------
* 
*         DB=PFN             NAME OF THE DIRECT ACCESS FILE CONTAINING
*                            THE *RECLAIM* DATABASE.  DEFAULT NAME
*                            IS *RECLDB*. 
* 
*         I=LFN              NAME OF THE LOCAL FILE CONTAINING
*                            USER INPUT DIRECTIVES.  DEFAULT NAME 
*                            IS *INPUT*.
* 
*         L=LFN              LIST OUTPUT FILE NAME.  DEFAULT NAME 
*                            IS *OUTPUT*. 
* 
*         NA                 PREVENTS *RECLAIM* FROM ABORTING IN CASE 
*                            OF PROGRAM ERROR.  IF OMITTED *RECLAIM*
*                            WILL ABORT WHEN AN ERROR OCCURS. 
* 
*         NH                 INHIBITS *RECLAIM* FROM PRINTING A HEADER
*                            IN THE OUTPUT FILE.  A HEADER IS PRINTED 
*                            IF THIS OPTION IS OMITTED. 
* 
*         NV                 PREVENTS *RECLAIM* FROM VALIDATING THAT A
*                            RECLAIM DUMP EXISTS ON A DUMP FILE BEING 
*                            WRITTEN AT END-OF-INFORMATION.  ALLOWS A 
*                            RECLAIM DUMP TO BE WRITTEN TO ANY FILE.
* 
*         PN=PACKNAM         OPTIONAL PACK NAME FOR THE DATABASE FILE.
* 
*         PW=PASSWRD         OPTIONAL PASSWORD FOR THE DATABASE FILE. 
* 
*         R=DEVTYPE          OPTIONAL RESIDENCE DEVICE TYPE FOR THE 
*                            DATABASE FILE.  USED ALONG WITH THE *PN* 
*                            PARAMETER.  IF NOT SPECIFIED, THE SYSTEM 
*                            DEFAULT DEVICE TYPE WILL BE USED.
* 
*         S                  INDICATES THE SITE-MAINTAINED DATABASE IS
*                            TO BE USED RATHER THAN A USER DATABASE.
*                            USER DATABASE IS ASSUMED BY DEFAULT. 
* 
*         T=LFN              TAPE NUMBER FILE.  DEFAULT NAME IS 
*                            *NUMBERS*. 
* 
*         UN=USERNAM         OPTIONAL ALTERNATE USER NAME WHERE THE 
*                            DATABASE RESIDES.
* 
*         Z                  INDICATES DIRECTIVES ARE TO BE TAKEN FROM
*                            COMMAND LINE.  DEFAULT IS FROM *INPUT*.
* 
*                            RECLAIM(...Z...)/DIR./DIR./DIR.
*                                      / IS ANY CHARACTER NOT IN *DIR*. 
          SPACE  4,20 
***       *KW*  MAY BE ONE OF THE FOLLOWING - 
* 
* 
*         *KW*     DESCRIPTION
*         ----     -----------
* 
* 
*         COMPACT  REMOVES DELETED OR UNSELECTED FILES FROM A 
*                  DUMP TAPE. 
* 
*         COPY     LOADS TO LOCAL FILES ALL FILES MEETING THE CRITERIA
*                  SPECIFIED BY THE OPTIONS FOLLOWING THE KEYWORD.
* 
*         DELETE   DISABLES ALL FILES MEETING THE SPECIFIED CRITERIA. 
* 
*         DUMP     DUMPS TO TAPE ALL FILES MEETING THE SPECIFIED
*                  CRITERIA.
* 
*         END      ENDS *RECLAIM* PROCESSING. 
* 
*         LIST     LISTS THE NAMES OF ALL PERMANENT FILES MEETING THE 
*                  SPECIFIED CRITERIA.
* 
*         LOAD     LOADS ALL OF THE TAPE FILES MEETING THE SPECIFIED
*                  CRITERIA.
* 
*         REMOVE   PERMANENTLY REMOVES A TAPE VSN FROM THE DATABASE.
* 
*         RESET    RESTORES FILES MEETING THE SPECIFIED CRITERIA WHICH
*                  WERE PREVIOUSLY DISABLED BY THE *DELETE* DIRECTIVE.
* 
*         SET      REDEFINES THE *RECLAIM* DIRECTIVE OPTION DEFAULTS. 
* 
*         UPDATE   UPDATE THE *RECLAIM* DATABASE. 
* 
* 
*         SEE *RECLAIM* DIRECTIVES DESCRIPTIONS BELOW FOR DETAILS.
          SPACE  4,20 
***       *OPN* MAY BE ANY OF THE FOLLOWING - 
* 
* 
*         *OP*               DESCRIPTION
*         ----               -----------
* 
* 
*         AA=YYMMDD          PROCESS ONLY FILES ACCESSED AFTER YYMMDD.
*                            USEFUL FOR *DUMP*.  IF *DB=0*, THEN USABLE 
*                            ALSO FOR *COPY*, *LIST* AND *LOAD*.
* 
*         AB=YYMMDD          PROCESS ONLY FILES ACCESSED BEFORE YYMMDD. 
*                            USEFUL FOR *DUMP*.  IF *DB=0*, THEN USABLE 
*                            ALSO FOR *COPY*, *LIST* AND *LOAD*.
* 
*         AD=YYMMDD          PROCESS ONLY FILES ACCESSED ON YYMMDD. 
*                            USEFUL FOR *DUMP*.  IF *DB=0*, THEN USABLE 
*                            ALSO FOR *COPY*, *LIST* AND *LOAD*.
* 
*         AS=ASOP            SPECIFIES WHETHER TO PRESERVE PERMANENT
*                            FILE CATALOG DATA RELATING TO CARTRIDGE
*                            AND TAPE ALTERNATE STORAGE.  *ASOP* MAY BE 
*                            *Y* OR *N*.  IF *AS* IS OMITTED, *ASOP*
*                            DEFAULTS TO *N*.  IF SPECIFIED WITHOUT AN
*                            EQUIVALENCE, *ASOP* IS ASSUMED TO BE *Y*.
*                            THE *AS* OPTION IS USEFUL ONLY WHERE A 
*                            *RECLAIM* DUMP TAPE WILL BE PROCESSED BY 
*                            THE *NOS* UTILITY *PFLOAD*.
*                            USED ONLY WITH THE *DUMP* DIRECTIVE. 
* 
*         CF=CLFN            SPECIFIES THE LOCAL FILE NAME TO BE USED 
*                            FOR THE COMPACTED DUMP.  IF *CF* IS
*                            OMITTED, THE LFN IS THE NAME SPECIFIED BY
*                            THE *CN* OPTION.  IF THE *CN* OPTION IS
*                            OMITTED, THE LFN *NTAPE* IS USED.
*                            USED WITH THE *COMPACT* DIRECTIVE. 
* 
*         CN=CPFN            NAME BY WHICH THE COMPACTED DUMP WILL
*                            BE IDENTIFIED IN THE DATABASE IF THE 
*                            ORIGINAL DUMP FILE IS NOT OVERWRITTEN. 
*                            ALSO THE PERMANENT FILE NAME THAT WILL 
*                            BE USED FOR LATER REFERENCES BY *RECLAIM*
*                            TO THE FILE.  THIS OPTION DOES NOT SAVE, 
*                            REPLACE OR DEFINE THE PERMANENT FILE; THAT 
*                            IS THE RESPONSIBILITY OF THE USER. 
*                            USED WITH THE *COMPACT* DIRECTIVE. 
* 
*         CT=VSN             COMPACTED TAPE VSN.  USED WITH *COMPACT*.
* 
*         D=DEN              SPECIFIES TAPE DENSITY WHEN REQUESTING A 
*                            DUMP.  ACCEPTABLE VALUES ARE:  
* 
*                            LO -  7-TRACK REEL TAPE, 200 BPI.
*                            HI -  7-TRACK REEL TAPE, 556 BPI.
*                            HY -  7-TRACK REEL TAPE, 800 BPI.
*                            HD -  9-TRACK REEL TAPE, 800 CPI.
*                            PE -  9-TRACK REEL TAPE, 1600 CPI. 
*                            GE -  9-TRACK REEL TAPE, 6250 CPI. 
*                            CE -  CARTRIDGE TAPE, 38000 CPI. 
*                            AE -  ACS CARTRIDGE TAPE, 38000 CPI. 
* 
*         DA=YYMMDD          PROCESS ONLY FILES DUMPED AFTER *YYMMDD*.
* 
*         DB=YYMMDD          PROCESS ONLY FILES DUMPED BEFORE *YYMMDD*. 
* 
*         DD=YYMMDD          PROCESS ONLY FILES DUMPED ON *YYMMDD*. 
* 
*         DE                 PROCESS ONLY DELETED FILES.  DEFAULT IS
*                            UNDELETED FILES. 
* 
*         DF=DLFN            SPECIFIES THE LOCAL FILE NAME TO BE USED 
*                            FOR THE DUMP FILE.  IF *DF* IS OMITTED,
*                            THE LFN IS THE NAME SPECIFIED ON THE *DN*
*                            OPTION.  IF THE *DN* OPTION IS OMITTED,
*                            THE LFN *TAPE* IS USED.  MAY BE USED WITH
*                            *COMPACT*, *COPY*, *DUMP*, *LOAD* OR ANY 
*                            DIRECTIVE THAT REQUIRES A DUMP TO BE READ
*                            OR WRITTEN.  FOR *COMPACT*, APPLIES TO THE 
*                            ORIGINAL DUMP. 
* 
*         DN=DPFN            NAME BY WHICH THE DUMP FILE IS IDENTIFIED
*                            IN THE DATABASE.  FOR A MASS STORAGE DUMP, 
*                            THE PERMANENT FILE NAME USED BY *RECLAIM*
*                            TO ACCESS THE DUMP FILE.  THIS OPTION DOES 
*                            NOT SAVE, REPLACE OR DEFINE THE PERMANENT
*                            FILE; THAT IS THE RESPONSIBILITY OF THE
*                            USER.  THE *DN* OPTION IS LOGICALLY THE
*                            EQUIVALENT OF AND INTERCHANGEABLE WITH THE 
*                            *TN* OPTION, EXCEPT THAT IF NO *DT*, *MT*
*                            OR *NT* OPTION IS SPECIFIED, A *DN* OPTION 
*                            IMPLIES A MASS STORAGE DUMP WHILE A *TN* 
*                            OPTION IMPLIES A TAPE DUMP.
*                            USED WITH THE *COMPACT*, *COPY*, *DELETE*, 
*                            *DUMP*, *LIST*, *LOAD* AND *RESET* 
*                            DIRECTIVES.
* 
*         DT=DTYPE           SPECIFIES THE RESIDENCY OF THE DUMP FILE 
*                            BEING REFERENCED.  ACCEPTABLE VALUES ARE:  
* 
*                            MS -  MASS STORAGE (DISK). 
*                            MT -  7-TRACK MAGNETIC TAPE - EQUIVALENT 
*                                  TO USING THE OBSOLETE *MT* OPTION. 
*                            NT -  9-TRACK MAGNETIC TAPE - EQUIVALENT 
*                                  TO USING THE OBSOLETE *NT* OPTION, 
*                                  AND THE DEFAULT VALUE FOR *DTYPE*. 
*                            CT -  CARTRIDGE TAPE.
*                            AT -  ACS CARTRIDGE TAPE.
* 
*                            USED WITH THE *COMPACT*, *COPY*, *DELETE*, 
*                            *DUMP*, *LIST*, *LOAD* AND *RESET* 
*                            DIRECTIVES.
* 
*         EI                 WRITE DUMPED FILES AT EOI ON THE TAPE. 
*                            THIS OPTION IS SELECTED BY DEFAULT FOR 
*                            THE *DUMP* DIRECTIVE.
*                            USED WITH *DUMP* AND *COMPACT* DIRECTIVES. 
* 
*         EI=NO              WRITE DUMPED FILES OVER ANY EXISTING 
*                            FILES ON THE TAPE.  THIS OPTION IS 
*                            SELECTED BY DEFAULT FOR THE *COMPACT*
*                            DIRECTIVE. 
*                            USED WITH *DUMP* AND *COMPACT* DIRECTIVES. 
* 
*         EI=YES             WRITE DUMPED FILES AT EOI ON THE TAPE. 
*                            SAME AS UNEQUIVALENCED *EI*. 
* 
*         EX=EXOP            SPECIFIES THE USE OF EXCEPTION PROCESSING
*                            FOR THE CURRENT *RECLAIM* DIRECTIVE.  THE
*                            ACCEPTABLE VALUES ARE *Y* AND *N*.  IF THE 
*                            *EX* OPTION IS OMITTED, *EX=N* IS ASSUMED. 
*                            *EX=N* INDICATES NORMAL PROCESSING, THAT 
*                            ONLY FILES MEETING ALL SELECTION CRITERIA
*                            ARE PROCESSED.  *EX=Y* INDICATES THAT ONLY 
*                            FILES *FAILING* TO MEET ALL THE SELECTION
*                            CRITERIA ARE TO BE PROCESSED.
*                            USED WITH THE *COMPACT*, *COPY*, *DELETE*, 
*                            *DUMP*, *LIST*, *LOAD* AND *RESET* 
*                            DIRECTIVES.
* 
*         F=FORMAT           FORMAT OF USER TAPE.  USED WHEN REQUESTING 
*                            A DUMP.  ACCEPTABLE VALUES ARE:  
* 
*                            I  -  INTERNAL FORMAT (DEFAULT). 
*                            SI -  SYSTEM INTERNAL FORMAT (NOS/BE). 
*                            F  -  FOREIGN FORMAT.
*                            S  -  STRANGER FORMAT. 
*                            L  -  LONG BLOCK STRANGER FORMAT.
*                            LI -  LONG BLOCK INTERNAL FORMAT.
* 
*         FI=NN              FILE POSITION ON TAPE.  IF OMITTED THIS
*                            WILL NOT BE A PROCESSING CRITERION.
* 
*         FN=FILENAME        SAME AS THE *PF* OPTION EXCEPT THAT WHEN 
*                            USED WITH THE *DUMP* DIRECTIVE, *RECLAIM*
*                            FIRST CHECKS TO SEE IF THE FILE IS LOCAL,
*                            AND IF SO DUMPS THE LOCAL FILE.
*                            THE *TY* OPTION CAN BE USED WITH THE *FN*
*                            OPTION TO SPECIFY WHETHER THE NAMED LOCAL
*                            FILES ARE TO BE DUMPED AS IF THEY WERE 
*                            DIRECT OR INDIRECT ACCESS PERMANENT FILES. 
*                            THE DEFAULT IS DIRECT ACCESS.
*                            USED WITH THE *COMPACT*, *COPY*, *DELETE*, 
*                            *DUMP*, *LIST*, *LOAD* AND *RESET* 
*                            DIRECTIVES.  FOR ALL EXCEPT THE *DUMP* 
*                            DIRECTIVE, THE *FN* AND *PF* OPTIONS ARE 
*                            INTERCHANGEABLE.  IF BOTH THE *FN* AND THE 
*                            *PF* OPTIONS ARE OMITTED, THE FILES TO BE
*                            PROCESSED ARE DETERMINED BY OTHER OPTIONS. 
* 
*         FT                 THE DUMP TAPE BEING REQUESTED IS *FOREIGN* 
*                            IN THAT IT IS NOT KNOWN TO THE NOS TAPE
*                            MANAGEMENT SUBSYSTEM (TMS).  *FT* CAN BE 
*                            USED ONLY WHEN *TMS* IS ACTIVE.  USED WITH 
*                            THE *COMPACT*, *COPY*, *DUMP*, *LIST* AND
*                            *LOAD* DIRECTIVES. 
* 
*         GT=NNNN            PROCESS ONLY FILES WITH LENGTH GREATER 
*                            THAN *NNNN* PRUS.
* 
*         LT=NNNN            PROCESS ONLY FILES WITH LENGTH LESS
*                            THAN *NNNN* PRUS.
* 
*         LV                 PROCESS LATEST VERSION OF THE FILE (MOST 
*                            RECENT DUMP DATE).  DEFAULT IS THE LATEST
*                            VERSION FOR THE *LOAD* DIRECTIVE.
* 
*         MA=YYMMDD          PROCESS ONLY FILES MODIFIED AFTER YYMMDD.
* 
*         MB=YYMMDD          PROCESS ONLY FILES MODIFED BEFORE YYMMDD.
* 
*         MD=YYMMDD          PROCESS ONLY FILES MODIFED ON YYMMDD.
* 
*         MT                 SPECIFIES THE USE OF A 7-TRACK TAPE. THIS
*                            IS AN OBSOLETE FORM AND SHOULD NO LONGER 
*                            BE USED.  *DT=MT* SHOULD BE USED INSTEAD.
*                            USED ONLY WITH THE *DUMP* DIRECTIVE. 
* 
*         NA                 NO ABORT OPTION.  DO NOT ABORT IF ANY OF 
*                            THE FILES SPECIFIED WITH THIS DIRECTIVE
*                            ARE NOT FOUND.  NOTE THAT ANY ERROR OTHER
*                            THAN A *FILE NOT FOUND* WILL STILL CAUSE 
*                            *RECLAIM* TO ABORT UNLESS THE *NA* COMMAND 
*                            PARAMETER IS ALSO SPECIFIED. 
* 
*         NF=NNN             NUMBER OF FILES (VERSIONS) TO PROCESS. 
*                            THE *LIST* OPTION ASSUMES AN UNLIMITED 
*                            NUMBER OF FILES.  ALL OTHER OPTIONS
*                            DEFAULT TO NF=1. 
* 
*         NN=PFN             SPECIFIES THE NEW NAME OF A FILE PROCESSED 
*                            BY *DUMP*, *LOAD* AND *COPY* DIRECTIVES. 
*                            ALLOWS MULTIPLE LOADS OF THE SAME FILE AND 
*                            DUMPING, LOADING OR COPYING TO A DIFFERENT 
*                            FILE NAME. 
* 
*         NT                 SPECIFIES THE USE OF A 9-TRACK TAPE. THIS
*                            IS AN OBSOLETE FORM AND SHOULD NO LONGER 
*                            BE USED.  *DT=NT* SHOULD BE USED INSTEAD.
*                            USED ONLY WITH THE *DUMP* DIRECTIVE. 
* 
*         OV                 OVERWRITE OLD DUMP TAPE WITH COMPRESSED
*                            DUMP.  USED WITH *COMPACT* DIRECTIVE.
* 
*         PO=X               FORCES SPECIFIED STANDARD NOS PROCESSING 
*                            OPTION X FOR TAPE REQUEST.  OPTIONS *I*, 
*                            *P* AND *S* ARE NOT ACCEPTED BY *RECLAIM*. 
* 
*         PF=PFN             SPECIFIES PERMANENT FILE NAME PFN TO BE
*                            PROCESSED BY *RECLAIM*.  IF OMITTED ALL
*                            FILES MEETING THE OTHER SELECTION CRITERIA 
*                            ARE PROCESSED. 
* 
*         PF=*               INDICATES A LIST OF PERMANENT FILE NAMES 
*                            TO BE SPECIFIED BY THE USER WILL FOLLOW. 
*                            UP TO 999 FILE NAMES MAY BE ENTERED. 
*                            *RECLAIM* PROMPTS INTERACTIVE USERS FOR
*                            THE LIST OF FILE NAMES.  BATCH JOBS
*                            SPECIFY THE NAMES AS THE FOLLOWING LINE(S) 
*                            ON THE *INPUT* FILE.  NAMES MAY BE OF THE
*                            FORM *PFN1,PFN2,PFN3...* OR OF THE FORM
*                            *NEW1=PFN1,PFN2,NEW3=PFN3...*, WHERE 
*                            *NEW* IS THE NEW NAME TO BE APPLIED TO THE 
*                            FILE ON THE LOAD OR DUMP (SEE *NN* ABOVE). 
* 
*         PW=PASSWORD        INDICATES THE *TMS* PASSWORD REQUIRED TO 
*                            ACCESS THE REQUESTED DUMP TAPE.  USED ONLY 
*                            WHEN *TMS* IS ACTIVE IN THE NOS SYSTEM AND 
*                            THE *FT* OPTION IS NOT SELECTED.  CAN BE 
*                            USED WITH THE *COMPACT*, *COPY*, *DUMP*, 
*                            *LIST* AND *LOAD* DIRECTIVES.
* 
*         RC=NNNN            RECORD NUMBER ON TAPE.  USED IN
*                            CONJUNCTION WITH *FI*.  IF OMITTED IT IS 
*                            NOT USED AS A CRITERION FOR PROCESSING.
* 
*         RP=RPOP            SPECIFIES WHETHER AND HOW A FILE IS TO BE
*                            LOADED/COPIED FROM A DUMP FILE IF A LOCAL
*                            OR PERMANENT FILE BY THE SAME NAME ALREADY 
*                            EXISTS.  ACCEPTABLE VALUES FOR *RPOP* ARE
*                            *Y*, *N* AND *C*.  *RP* SPECIFIED ALONE IS 
*                            THE SAME AS IF *RP=Y* HAD BEEN SPECIFIED.
*                            WHEN USED WITH THE *COPY* DIRECTIVE, *RP*
*                            OR *RP=Y* SPECIFIES THAT A LOCAL FILE OF 
*                            THE SAME NAME AS THE FILE BEING COPIED 
*                            WILL BE REWOUND BEFORE BEING OVERWRITTEN,
*                            WHILE *RP=C* MEANS THAT THE COPY WILL BE 
*                            DONE AT THE CURRENT LOCATION.  IF *RP* IS
*                            OMITTED OR *RP=N* IS SPECIFIED, A LOCAL
*                            FILE WITH THE SAME NAME WILL BE RETURNED 
*                            PRIOR TO COPYING FROM THE DUMP FILE. 
*                            USED WITH *COPY* AND *LOAD* DIRECTIVES.
* 
*         RS=FILERES         SPECIFIES THE ACCEPTABLE RESIDENCE(S) FOR
*                            FILES TO BE DUMPED.  *FILERES* VALUES ARE
*                            *C* FOR CARTRIDGE, *D* FOR DISK AND *T*
*                            FOR TAPE.  MORE THAN ONE RESIDENCE CAN BE
*                            SPECIFIED BY CONCATENATING THE LETTERS 
*                            FOR THE DESIRED RESIDENCES.  FOR EXAMPLE,
*                            *RS=CD* WOULD SELECT THOSE FILES RESIDENT
*                            ON EITHER DISK OR CARTRIDGE.  IF OMITTED 
*                            OR SPECIFIED WITHOUT A VALUE, ANY FILE 
*                            RESIDENCE IS CONSIDERED ACCEPTABLE.
*                            USED ONLY WITH THE *DUMP* DIRECTIVE. 
* 
*         TN=VSN             PROCESSES ONLY FILES FROM THE SPECIFIED
*                            TAPE NUMBER.  FOR THE *COPY*, *LIST* AND 
*                            *LOAD* DIRECTIVES, IF THE TAPE IS NOT IN 
*                            THE USER DATABASE *RECLAIM* WILL REQUEST 
*                            THE TAPE AND TRY TO ADD APPROPRIATE
*                            INFORMATION TO THE DATBASE, BASED ON THE 
*                            FILES PREVIOUSLY DUMPED TO THIS TAPE.
*                            THIS ALLOWS THE USER TO RECOVER AT LEAST 
*                            SOME PORTIONS OF THE DATABASE IF IT IS 
*                            DESTROYED OR PURGED. 
* 
*         TO=USERNAME        INDICATES THE USERNAME OF THE OWNER OF THE 
*                            DUMP TAPE BEING REQUESTED.  USED ONLY WHEN 
*                            *TMS* IS ACTIVE IN THE NOS SYSTEM AND THE
*                            *FT* OPTION IS NOT SELECTED.  CAN BE USED
*                            WITH THE *COMPACT*, *COPY*, *DUMP*, *LIST* 
*                            AND *LOAD* DIRECTIVES. 
* 
*         TY=T               FILE TYPE(S) TO BE PROCESSED.  *D* OR *I*. 
*                            DEFAULT IS BOTH FILE TYPES.
* 
*         UN=USERNAM         PROCESS ONLY FILES FOR SPECIFIED USER
*                            NAME.  THIS OPTION IS USED WHEN DUMPED 
*                            FILES ARE SHARED AMONG TWO OR MORE 
*                            USER NAMES.  WHEN OMITTED, PROCESSING IS 
*                            PERFORMED ON THE DUMPED FILES FOR THE
*                            CALLING USER.  *UN* VALUE OF *0* INDICATES 
*                            ALL USER NAMES TO BE PROCESSED (E.G., BY 
*                            THE *LIST* DIRECTIVE). 
          TITLE  *RECLAIM* DIRECTIVES.
          SPACE  4,20 
***       *RECLAIM* DIRECTIVES. 
* 
* 
*         *RECLAIM* IS A GENERAL PURPOSE PERMANENT FILE RETRIEVAL 
*         SYSTEM WHICH ALLOWS VARIOUS TYPES OF FILE MANIPULATION
*         AND INTERROGATION BY EMPLOYING ONE OR MORE OF THE 
*         FOLLOWING DIRECTIVES (*?* IS A TERMINAL INPUT PROMPT)-- 
* 
* 
* 
*         COMPACT.
* 
*         THE *COMPACT* DIRECTIVE ALLOWS THE USER TO PERMANENTLY
*         REMOVE UNWANTED FILES FROM A GIVEN DUMP TAPE.  FIRST
*         THE USER LOGICALLY TURNS OFF THE UNNEEDED FILES WITH THE
*         *DELETE* DIRECTIVE.  THEN THE USER ISSUES A *COMPACT* 
*         TO PHYSICALLY REMOVE THE FILES FROM THE DUMP TAPE.  THE USER
*         HAS THE OPTION OF WRITING THE SHORTENED DUMP OVER THE OLD 
*         TAPE OR CREATING A NEW TAPE.
* 
*                RECLAIM. 
*                ? DELETE,TN=123456,FI=1,NF=999999. 
*                ? COMPACT,TN=123456,OV.
* 
*         WILL DELETE ALL THE DUMPED FILES ON THE FIRST FILE OF TAPE
*         *123456*, AND THEN REMOVE THEM FROM THE TAPE.  WRITES THE 
*         DUMP OVER THE OLD TAPE.  IF OTHER FILE SELECTION CRITERIA 
*         ARE SPECIFIED (E.G., *LV*, *DD*, ETC.), ONLY FILES SATISFYING 
*         THOSE CRITERIA WILL BE RETAINED--ALL DELETED FILES AND FILES
*         NOT FULFILLING THE SELECTION CRITERIA WILL BE REMOVED.  IF
*         NO FILES MEET THE CRITERIA, NO ACTION WILL OCCUR (*COMPACT* 
*         OF A VSN CONTAINING ONLY DELETED FILES WILL DO NOTHING).
* 
* 
* 
*         COPY. 
* 
*         THIS OPTION ALLOWS USERS TO COPY ONE OR MORE OF THEIR FILES 
*         DIRECTLY FROM TAPE TO A LOCAL FILE.  THE COPIED FILES ARE 
*         LOADED TO THE SAME LOGICAL FILE NAMES AS THEIR ORIGINAL 
*         PERMANENT FILE NAMES. 
* 
*                RECLAIM(Z)/COPY,LV,NF=7,DD=YYMMDD. 
* 
*         COPIES TO LOCAL FILES 7 FILES THAT WERE DUMPED ON *YYMMDD*. 
* 
* 
* 
*         DELETE. 
* 
*         DISABLES ALL FILES MEETING THE SPECIFIED CRITERIA.  THIS
*         PERMITS A USER TO LOAD ALL FILES ON A TAPE EXCEPT THOSE THAT
*         HAVE BEEN DISABLED.  DELETED FILES ARE NOT PHYSICALLY REMOVED 
*         FROM THE TAPE AND CAN BE RESTORED USING *RESET*.
* 
*                RECLAIM. 
*                ? DELETE,PF=C,DB=YYMMDD,NF=100.
* 
*         DELETES REPORTING OF UP TO 100 FILES CALLED *C* THAT WERE 
*         DUMPED BEFORE *YYMMDD*. 
* 
* 
* 
*         DUMP. 
* 
*         DUMPS TO TAPE ALL FILES MEETING THE SPECIFIED CRITERIA. 
*         FILES ARE DUMPED IN *PFDUMP* FORMAT AND ARE READABLE BY 
*         *RECLAIM* AND *PFLOAD*.  THE DATABASE FILE WILL CONTAIN 
*         INFORMATION REQUIRED BY *RECLAIM* TO RELOAD THE FILE IN THE 
*         FUTURE.  IF THE SPECIFIED DATABASE FILE DOES NOT CURRENTLY
*         EXIST, *RECLAIM* WILL TRY TO CREATE IT.  UNLESS *EI=NO* IS
*         SPECIFIED, THE DUMPED FILES WILL BE WRITTEN ON THE TAPE 
*         FOLLOWING THE END OF INFORMATION. 
* 
*                RECLAIM(Z)/DUMP,TY=D,TN=001442 
* 
*         WILL DUMP ALL DIRECT ACCESS PERMANENT FILES TO MAGNETIC TAPE
*         WITH VSN *001442*.
* 
* 
* 
*         END.
* 
*         ENDS THE CURRENT *RECLAIM* SESSION.  *END* IS NOT REQUIRED
*         IF THE *Z* PARAMETER IS USED ON THE *RECLAIM* COMMAND.
*         ON AN INTERACTIVE TERMINAL A CARRIAGE RETURN IS EQUIVALENT
*         TO *END*. 
* 
* 
* 
*         LIST. 
* 
*         THE *LIST* DIRECTIVE ENABLES USERS TO RETRIEVE INFORMATION
*         ON ALL OF THE PERMANENT FILES THAT HAVE BEEN ENTERED INTO 
*         THE DATABASE DEPENDING ON USER SPECIFIED CRITERIA.  FILES ARE 
*         LISTED IN ALPHABETICAL ORDER. 
* 
*                RECLAIM(Z)/LIST,MA=YYMMDD,TY=D.
* 
*         LISTS ALL DIRECT ACCESS FILES WHICH HAVE BEEN MODIFIED
*         AFTER *YYMMDD*. 
* 
* 
* 
*         LOAD. 
* 
*         LOADS TAPE FILES INTO THE PERMANENT FILE CATALOG BASED ON 
*         THE SPECIFIED CRITERIA.  THE MOST RECENTLY MODIFIED VERSION 
*         OF A FILE IS LOADED UNLESS OTHER CHARACTERISTICS ARE
*         INDICATED.  IF A FILE NAME SPECIFIED IN A *LOAD* DIRECTIVE
*         (OR THE NEW NAME SPECIFIED BY THE *NN* OPTION) ALREADY
*         EXISTS IN THE CATALOG THE FILE WILL NOT BE LOADED.
* 
*                RECLAIM(Z)/LOAD,PF=A,DD=YYMMDD./LOAD,PF=B,LV.
* 
*         LOAD FILE WITH THE PERMANENT FILE NAME OF *A* WHICH HAS A 
*         DUMP DATE OF *YYMMDD* PLUS THE LATEST VERSION OF *B*. 
* 
* 
* 
*         REMOVE. 
* 
*         PERMANENTLY REMOVES A TAPE VSN FROM THE DATABASE.  ALL FILES
*         FOR THAT TAPE NUMBER WILL BE PURGED.
* 
*                RECLAIM. 
*                ? REMOVE,TN=001234.
* 
*         ALL ENTRIES IN THE USER DATABASE ON THE CURRENT USER NAME 
*         FOR THE TAPE *001234* WILL BE DELETED.
* 
* 
* 
*         RESET.
* 
*         THE RESET OPTION ENABLES UNDELETING DELETED FILES.  FILES 
*         MEETING THE SPECIFIED CRITERIA WHICH WERE PREVIOUSLY DISABLED 
*         BY *DELETE* WILL BE RESTORED. 
* 
*                RECLAIM. 
*                ? RESET,NF=777 
* 
*         UNDELETE UP TO 777 FILES WHICH HAVE BEEN PREVIOUSLY DELETED.
* 
* 
* 
*         SET.
* 
*         ALLOWS SPECIFICATION OF NEW DEFAULT DIRECTIVE OPTIONS.
*         A *SET* DIRECTIVE WITH NO OPTIONS HAS NO EFFECT.
* 
*                RECLAIM. 
*                ? SET,LV,TY=D,MB=YYMMDD. 
* 
*         DURING THE REMAINDER OF THIS SESSION (OR UNTIL AN OVERRIDING
*         *SET* IS ENTERED) THE USER IS ONLY INTERESTED IN THE LATEST 
*         VERSION OF DIRECT ACCESS FILES THAT WERE LAST MODIFIED
*         BEFORE *YYMMDD*.
* 
* 
* 
*         UPDATE. 
* 
*         THIS OPTION IS USED TO UPDATE THE *RECLAIM* DATABASE.  IT 
*         REQUIRES THE *UPDATES* FILE AND THE *NUMBERS* FILE AS INPUT.
* 
*                RECLAIM(Z)/UPDATE. 
          TITLE  DAYFILE MESSAGES.
          SPACE  4,20 
***       DAYFILE MESSAGES. 
* 
* 
*         * ADDING FILE FFFFFFF TO DATABASE.* - FILE NAMED FFFFFFF
*                IS BEING READ AND *RECLAIM* IS ADDING INFORMATION FOR
*                THIS FILE TO THE USER DATABASE.
* 
*         * ADDING TAPE VVVVVV  TO DATABASE.* - TAPE WITH VSN VVVVVV
*                IS BEING READ AND *RECLAIM* IS ADDING INFORMATION FOR
*                THIS TAPE TO THE USER DATABASE.
* 
*         * CANNOT ATTACH/GET FILE - FILE SKIPPED.* - WHILE TRYING TO 
*                DUMP A PERMANENT FILE, *RECLAIM* DETECTED A *PFM*
*                ERROR WHEN PERFORMING A *GET* OR *ATTACH* FUNCTION.
* 
*         * CONTACT CUSTOMER SERVICES -- DB ERROR.* - A SERIOUS SITE
*                DATABASE ERROR HAS OCCURRED. 
* 
*         * CONTACT CUSTOMER SERVICES -- DB MISSING.* - A SERIOUS SITE
*                DATABASE ERROR HAS OCCURRED. 
* 
*         * CT, CN OR OV KEYWORD NOT PRESENT.* - WHILE PROCESSING A 
*                *COMPACT* DIRECTIVE, *RECLAIM* FOUND THAT NONE OF THE
*                *CT=VSN*, *CN=LFN* OR *OV* KEYWORDS WERE SPECIFIED IN
*                THE OPTIONS.  ONE OF THESE OPTIONS IS REQUIRED.
* 
*         * DATABASE CORRUPTED.* - AN ERROR WAS ENCOUNTERED WHILE 
*                READING THE DATABASE.  THIS USUALLY MEANS THE DATABASE 
*                IS EMPTY OR HAS BEEN OVERWRITTEN WITH SOMETHING
*                UNIDENTIFIABLE TO *RECLAIM*. 
* 
*         * DATABASE NOT FOUND -- DEFINING NEW ONE.* - *RECLAIM*
*                DETECTED THAT THERE WAS NO DATABASE IN THE USER
*                CATALOG, SO IT TRIES TO CREATE A NEW ONE.
* 
*         * DIRECTIVE ARGUMENT ERROR.* - *RECLAIM* DETECTED A 
*                SYNTAX ERROR IN AN INPUT DIRECTIVE.
* 
*         * DUMP DENIED FOR SPECIFIED DATABASE.* - USER REQUESTED 
*                ACCESS TO THE SITE DATABASE BUT WAS NOT PRIVILEGED.
* 
*         * DUMP FILE CONTAINS 63 DUMPS.  FILE IS FULL.* - *RECLAIM*
*                DETECTED THAT THE DUMP FILE IT WAS DIRECTED TO USE 
*                ALREADY CONTAINS THE MAXIMUM NUMBER OF DUMPS.
* 
*         * DUMP FILE MALFUNCTION - EOI ENCOUNTERED.* - THE END OF
*                INFORMATION WAS ENCOUNTERED BEFORE THE PROPER DUMP 
*                FILE OR RECORD WAS FOUND.  THE DUMP FILE MAY HAVE
*                BEEN OVERWRITTEN OR IMPROPERLY COPIED. 
* 
*         * DUMP FILE MALFUNCTION - FILE NAME MISMATCH.* - THE FILE TO
*                BE PROCESSED IS NOT THE ONE FOUND AT THE POSITION ON 
*                THE DUMP FILE INDICATED BY THE DATABASE.  THE DUMP 
*                FILE MAY HAVE BEEN OVERWRITTEN OR IMPROPERLY COPIED. 
* 
*         * DUMP FILE MALFUNCTION - FILE TRUNCATED.* - THE FILE BEING 
*                PROCESSED WAS INCOMPLETE ON THE DUMP FILE.  THE DUMP 
*                FILE MAY HAVE BEEN OVERWRITTEN OR IMPROPERLY COPIED. 
* 
*         * DUMP FILE MALFUNCTION - POSITION LOST.* - THE DUMP FILE 
*                POSITION DOES NOT AGREE WITH INTERNAL INDICATORS OR
*                POSITION INFORMATION FROM THE DATABASE.
* 
*         * DUMP FILE MALFUNCTION - UNRECOGNIZABLE PFC.* - WHAT SHOULD
*                BE THE PFC RECORD FOR THE FILE BEING PROCESSED IS NOT
*                A PFC RECORD.  THE DUMP FILE MAY HAVE BEEN OVERWRITTEN 
*                OR IMPROPERLY COPIED.
* 
*         * DUMP FILE MUST BE IN WRITE MODE.* - A *DUMP* OR *COMPACT* 
*                WAS ATTEMPTED USING A MASS STORAGE DUMP FILE WHICH WAS 
*                ATTACHED IN SOME MODE OTHER THAN WRITE MODE. 
* 
*         * DUMP FILE NOT FOUND.* - A *LOAD* OR *COPY* WAS ATTEMPTED, 
*                BUT THE MASS STORAGE DUMP FILE WHICH WAS INDICATED BY
*                THE DATABASE COULD NOT BE FOUND.  THE FILE MAY HAVE
*                BEEN PURGED OR MAY NEVER HAVE BEEN MADE PERMANENT. 
* 
*         * ERROR IN ATTACHING USER DATABASE.* - *RECLAIM* DETECTED A 
*                *PFM* ERROR WHEN ATTEMPTING TO ATTACH THE
*                USER DATABASE. 
* 
*         * ERROR IN FILE NAME LIST.* - A SYNTAX ERROR WAS FOUND IN 
*                THE LIST OF FILE NAMES ENTERED IN RESPONSE TO USING
*                THE (PF=*) OPTION. 
* 
*         * FILE NOT FOUND OR FAILED CRITERIA - FFFFFFF.* - *RECLAIM* 
*                DID NOT PROCESS FILE *FFFFFFF* BECAUSE IT COULD NOT
*                BE FOUND ON THE DUMP FILE(*LOAD* OR *COPY*), NO LOCAL
*                OR PERMANENT FILE BY THAT NAME COULD BE FOUND(*DUMP*), 
*                OR THE FILE WAS FOUND, BUT FAILED THE OTHER CRITERIA.
* 
*         * INCORRECT ARGUMENT VALUE.* - A DIRECTIVE KEYWORD WAS
*                EQUATED TO AN INVALID VALUE.  THIS COULD BE A NAME 
*                LONGER THAN SEVEN CHARACTERS, AN ALPHABETIC STRING 
*                WHEN A NUMBER IS EXPECTED, ETC.
* 
*         * INCORRECT TAPE DENSITY.* - AN INVALID NOS TAPE DENSITY WAS
*                REQUESTED FOR THE *DUMP* DIRECTIVE.
* 
*         * INCORRECT TAPE FORMAT.* - AN INVALID NOS TAPE FORMAT WAS
*                REQUESTED FOR THE *DUMP* DIRECTIVE.
* 
*         * NO DATA FOUND FOR USER NAME.* - *RECLAIM* COULD NOT FIND
*                THE CALLING USER IN THE DIRECTORY OF THE DATABASE. 
* 
*         * NO FILES FOUND FOR SPECIFIED DUMP FILE.* - FOR A *COPY*,
*                *LOAD* OR *LIST* DIRECTIVE, NO ENTRIES WERE FOUND IN 
*                THE DATABASE FOR THE DUMP FILE SPECIFIED.  *RECLAIM* 
*                MAY TRY TO READ THE DUMP FILE AND ENTER IT INTO THE
*                DATABASE.
* 
*         * NO FILES SELECTED - NO ACTION TAKEN.* - *COMPACT* FOUND 
*                NO FILES TO RETAIN AND SO NO ACTION OCCURRED.
* 
*         * NO VALID DUMP FOUND ON DUMP FILE.* - FOR A *COPY*, *LOAD* 
*                OR *LIST* OPERATION, *RECLAIM* DETERMINED THAT THE 
*                SPECIFIED DUMP FILE WAS NOT A *RECLAIM* DUMP FILE. 
*                THE DIRECTIVE BEING PROCESSED WILL BE IGNORED. 
* 
*         * RECLAIM ABORTED.* - *RECLAIM* HAS DETECTED AN ERROR OR
*                THE USER HAS INITIATED AN ABORT. 
* 
*         * RECLAIM ARGUMENT ERROR.* - AN INCORRECT ARGUMENT WAS
*                DETECTED ON THE *RECLAIM* COMMAND LINE.
* 
*         * RECLAIM COMPLETE.* - NORMAL COMPLETION. 
* 
*         * REMOVE DENIED FOR SPECIFIED DATABASE.* - NON-PRIVILEGED 
*                USER ATTEMPTED TO USE *REMOVE* WITH SITE DATABASE. 
* 
*         * REQUESTING DUMP FILE.* - *RECLAIM* IS REQUESTING THE DUMP 
*                FILE SPECIFIED BY *TN* OR *DN*, AND WILL ATTEMPT TO
*                REBUILD THE DATABASE ENTRIES FOR THIS DUMP FILE. 
* 
*         * SEE DAYFILE - UNABLE TO COMPACT XXXXXXX.* - *RECLAIM* 
*                CANNOT COMPACT FILE *XXXXXXX* DUE TO A TAPE, DATABASE
*                OR OTHER ERROR, AS INDICATED IN THE DAYFILE. 
* 
*         * SEE DAYFILE - UNABLE TO LOAD XXXXXXX.* - *RECLAIM* CANNOT 
*                LOAD FILE *XXXXXXX*.  THE FILE IS ALREADY PERMANENT, 
*                OR A TAPE, DATABASE OR OTHER ERROR HAS OCCURRED, AS
*                INDICATED IN THE DAYFILE.
* 
*         * TAPE DENSITY/DEVICE/FORMAT MISMATCH.* - AN OPERATION OTHER
*                THAN A *DUMP* OR *COMPACT* AT *BOI* WAS ATTEMPTED ON 
*                AN EXISTING *RECLAIM* DUMP TAPE, BUT THE SPECIFIED 
*                DENSITY, DEVICE TYPE OR TAPE FORMAT DID NOT MATCH THE
*                EXISTING DENSITY, DEVICE TYPE OR TAPE FORMAT.
* 
*         * TAPE NUMBER FILE EMPTY.* - *UPDATE* HAS BEEN ATTEMPTED
*                WITHOUT THE *NUMBERS* FILE.
* 
*         * TN OR DN MUST BE SPECIFIED.* - A *RECLAIM* OPERATION WAS
*                ATTEMPTED WHICH REQUIRED A DUMP FILE NAME OR TAPE
*                NUMBER, BUT NEITHER WAS SPECIFIED. 
* 
*         * TOO MANY FILE NAMES IN LIST.* - WHEN READING THE LIST OF
*                FILE NAMES SPECIFIED AFTER USING (PF=*), *RECLAIM* 
*                DETECTED THAT THE NUMBER OF FILE NAMES EXCEEDED THE
*                MAXIMUM NUMBER THAT *RECLAIM* CAN HANDLE.  WHEN THIS 
*                HAPPENS *RECLAIM* WILL IGNORE THE DIRECTIVE WHICH HAD
*                THE (PF=*).
* 
*         * UNKNOWN DUMP FILE WILL BE OVERWRITTEN.* - WHEN PREPARING TO 
*                DO AN INCREMENTAL DUMP (THAT IS, THE TAPE IS TO BE 
*                WRITTEN AT THE EOI), *RECLAIM* DETECTED THAT THE DUMP
*                FILE SPECIFIED DID NOT HAVE VALID DUMP INFORMATION 
*                ON IT.  THIS WOULD HAPPEN IF THE DUMP FILE WAS EMPTY,
*                OR HAD BEEN USED FOR SOMETHING BESIDES FILE DUMPS. 
*                IF THE USER IS EXECUTING INTERACTIVELY, *RECLAIM* WILL 
*                ALSO ISSUE A PROMPT, * IS THIS OK (YES OR NO)?*, AND 
*                WILL ASK THE USER FOR A RESPONSE.  THUS THE USER HAS A 
*                CHANCE TO PREVENT *RECLAIM* FROM OVERWRITING THE FILE. 
* 
*         * USER DATABASE MISSING.* - THE USER DATABASE FILE WAS
*                NOT FOUND. 
* 
*         * WAITING FOR DATABASE NON-BUSY.* - WHILE TRYING TO ATTACH
*                THE DATABASE, *RECLAIM* DETECTED THAT THE DATABASE 
*                WAS BUSY (I.E. ATTACHED BY SOME OTHER USER IN A
*                CONFLICTING MODE, SUCH AS WRITE MODE).  WHEN THIS
*                HAPPENS *RECLAIM* WILL ROLL OUT FOR TEN SECONDS AND
*                THEN TRY AGAIN TO ATTACH THE DATABASE.  *RECLAIM*
*                WILL CONTINUE THIS UNTIL IT CAN ATTACH THE DATABASE
*                SUCCESSFULLY OR THE USER INTERRUPTS *RECLAIM*. 
* 
* 
* 
*         ERROR EXIT MESSAGES - ISSUED WHEN A SEVERE SYSTEM ERROR 
*         IS DETECTED, FROM WHICH *RECLAIM* CANNOT RECOVER AND
*         PROCEED WITH WHAT IT WAS DOING.  SUCH ERRORS WOULD BE 
*         OPERATOR DROP, SRU LIMIT, UNRECOVERED TAPE ERRORS, ETC. 
* 
*         * CPU ERROR EXIT.                 * 
*         * ARITHMETIC ERROR.               * 
*         * ILLEGAL INSTRUCTION.            * 
*         * PP ABORT.                       * 
*         * CPU ABORT.                      * 
*         * PP CALL ERROR.                  * 
*         * TIME LIMIT.                     * 
*         * TOO MANY LOCAL FILES.           * 
*         * TRACK LIMIT.                    * 
*         * ACCOUNT BLOCK SRU LIMIT.        * 
*         * FORCED ERROR.                   * 
*         * OPERATOR DROP.                  * 
*         * OPERATOR RERUN.                 * 
*         * OPERATOR KILL.                  * 
*         * SUBSYSTEM ABORT.                * 
*         * EXTENDED MEMORY PARITY ERROR.   * 
*         * CPU PARITY ERROR.               * 
*         * TERMINAL USER HUNG UP.          * 
*         * SYSTEM ABORT.                   * 
*         * OPERATOR OVERRIDE.              * 
*         * JOB STEP SRU LIMIT.             * 
          TITLE  COMMON DECKS.
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMCCMD 
*CALL     COMCMAC 
          QUAL   MTX
*CALL     COMSMTX 
          QUAL   *
*CALL     COMSPFM 
*CALL     COMSPFS 
*CALL     COMSRPV 
*CALL     COMSSFM 
          QUAL   TFM
*CALL     COMSTFM 
          QUAL   *
          TITLE  ASSEMBLY CONSTANTS.
          SPACE  4,10 
****      ASSEMBLY CONSTANTS. 
  
  
 VER      MICRO  1,,*5.0*    CURRENT VERSION OF *RECLAIM* 
  
 CFBUFL   EQU    1001B       MERGESORT BUFFER LENGTH
 DIRBUFL  EQU    1001B       *NUMBERS*, MERGESORT BUFFER LENGTH 
 IBUFL    EQU    201B        INPUT BUFFER LENGTH
 NEWBUFL  EQU    3001B       DATABASE OUT BUFFER LENGTH 
 OBUFL    EQU    201B        OUTPUT BUFFER LENGTH 
 OLDBUFL  EQU    1001B       DATA BASE IN BUFFER LENGTH 
 RLDBUFL  EQU    1001B       *OPLDF* BUFFER LENGTH
 TFBUFL   EQU    30061B      PRIMARY DUMP FILE BUFFER LENGTH
 TNBUFL   EQU    1001B       *UPDATES* BUFFER LENGTH
 WSAL     EQU    1000B       WORKING STORAGE BUFFER LENGTH
  
 AFBUFL   EQU    DIRBUFL     FIRST MERGESORT SCRATCH BUFFER LENGTH
 BFBUFL   EQU    TNBUFL      SECOND MERGESORT SCRATCH BUFFER LENGTH 
 MFBUFL   EQU    TFBUFL      *COMPACT* DUMP FILE BUFFER LENGTH
 SFBUFL   EQU    NEWBUFL     LENGTH OF SCRATCH BUFFER FOR LOAD/COPY 
  
 CATBUFL  EQU    NWCE+1      CATLIST BUFFER LENGTH
*         *PRMITBWC MUST BE A MULTIPLE OF TWO AND AT LEAST TWO WORDS
*         LESS THAN THE LENGTH OF A DISK PRU. 
  
 PRMITBWC EQU    62          NUMBER OF PERMIT WORDS IN A FULL BLOCK 
  
 PRMITBL  EQU    1+2+PRMITBWC  PERMIT BLOCK LENGTH
 TCATBFL  EQU    NWCE*3      TRUE LENGTH OF CATBUF
 CLSBUFL  EQU    NWCE*100+1  FILE *CATLIST* BUFFER LENGTH 
  
 DBEL     EQU    4           DATA BASE ENTRY LENGTH 
 DCW      EQU    30000B      DUMMY TAPE BLOCK CONTROL WORD
 ITEMSIZ  EQU    DBEL+2      SIZE OF ENTRIES HANDLED IN MERGESORT 
 MFETSIZ  EQU    6           FET SIZE FOR MERGESORT FILES 
 OLENGTH  EQU    8           OUTPUT LINE LENGTH 
 PRUSIZE  EQU    100B        SIZE OF DISK SECTOR IN WORDS 
 ROLLFBS  EQU    12          MAXIMUM ROLLOUTS BEFORE TAPE UNLOAD
 TFETSIZ  EQU    16          FET SIZE FOR TAPES 
 UDBEL    EQU    5           UPDATE DATA BASE ENTRY LENGTH
 WRITTEN  EQU    TFETSIZ     FET OFFSET FOR WRITTEN FLAG
 CRVSN    EQU    WRITTEN+1   FET OFFSET FOR CURRENT REEL VSN
 TFLAGS   EQU    CRVSN+1     FET OFFSET FOR CHARACTERISTICS FLAGS 
 INITREQ  EQU    TFLAGS+1    FET OFFSET FOR INITIAL REQUEST FLAG
 TRING    EQU    INITREQ+1   FET OFFSET FOR WRITE RING FLAG 
 TMSV     EQU    TRING+1     FET OFFSET FOR MASS STORAGE FLAG 
 TTNV     EQU    TMSV+1      FET OFFSET FOR VSN VARIABLE
 TDNV     EQU    TTNV+1      FET OFFSET FOR NAME VARIABLE 
 TDFV     EQU    TDNV+1      FET OFFSET FOR LFN VARIABLE
 TFC      EQU    TDFV+1      FET OFFSET FOR CURRENT FILE COUNT
 TRC      EQU    TFC+1       FET OFFSET FOR CURRENT RECORD COUNT
 CFN      EQU    TRC+1       FET OFFSET FOR CURRENT RMS FILE NAME 
 TFETVSN  EQU    9           FET VSN LOCATION FOR LABEL MACRO 
  
 PTR      EQU    MFETSIZ     PASCAL-LIKE FILE POINTER RELATIVE LOCATION 
 EOF      EQU    PTR+ITEMSIZ END-OF-FILE FLAG RELATIVE LOCATION 
  
 WRIF$    EQU    0           DEFINE DATA TRANSFER FLAG
  
 NDMPWD   EQU    777B        NUMBER OF WORDS IN DUMP TEXT TABLE 
 PFTABL   EQU    999         MAXIMUM FILE NAMES FOR PF=*
****
          TITLE  FILE FORMATS.
          SPACE  4,10 
*         FILE FORMATS. 
 DATABASE SPACE  4,20 
**        DATABASE. 
* 
*         THE DATABASE CONSISTS OF 4-WORD RECORDS, EACH CONTAINING
*         DATA FOR ONE DUMPED PERMANENT FILE.  THESE 4-WORD ENTRIES 
*         ARE SORTED BY USER NAME, PERMANENT FILE NAME, LAST
*         MODIFICATION DATE AND LAST DUMP DATE.  THE DATABASE MAY 
*         CONTAIN DUMP DATA FOR MORE THAN ONE USER NAME.  IF SO, DATA 
*         FOR EACH USER IS A SEPARATE SYSTEM RECORD, SO THAT A LIST 
*         OF USERS CAN BE GENERATED VIA *CATALOG* OR *ITEMIZE*.  THE
*         LAST PART OF THE DATABASE IS AN *OPLD* DIRECTORY, AS USED 
*         BY *MODIFY*, *LIBEDIT*, AND *GTR*.  EACH USER IN THE
*         DATABASE HAS AN ENTRY IN THE DIRECTORY, POINTING TO 
*         ITS RELATIVE OFFSET WITHIN THE DATABASE (RELATIVE PRU 
*         NUMBER).  THE FORMAT OF A 4-WORD DUMP ENTRY IS AS FOLLOWS-- 
* 
*T ID     42/ USER NAME, 18/ UNUSED 
*T,ID+1   42/ PERMANENT FILE NAME,18/ DUMP DATE 
*T,ID+2   42/ DUMP FILE NAME, 18/ LM DATE 
*T,ID+3   1/ DEL,5/ ULEN,6/ FTYP,12/ TFLGS,6/ FNUM,12/ RNUM,18/ LLEN
* 
*         *LM DATE* - DATE FILE WAS LAST MODIFIED.
* 
*         *DEL* - DELETE FLAG.
* 
*         *ULEN* - UPPER 5 BITS OF THE LENGTH OF PF IN PRUS.
* 
*         *FTYP* - FILE TYPE (DIRECT OR INDIRECT).
* 
*         *FNUM* - NUMBER OF FILE THAT PF RESIDES ON TAPE.
* 
*         *RNUM* - EXACT RECORD NUMBER ON FILE OF PF RESIDENCE. 
* 
*         *LLEN* - LOWER 18 BITS OF THE LENGTH OF PF IN PRUS. 
* 
*         *TFLGS* - TAPE REQUEST FLAGS FOR THIS FILE-S DUMP SET.
*                1/ MASS STORAGE DUMP FLAG (BIT 11).
*                1/ LABELED TAPE FLAG      (BIT 10).
*                1/ FOREIGN TAPE FLAG      (BIT 9). 
*                2/ TAPE DEVICE TYPE       (BITS 8-7).
*                1/ 0.                     (BIT 6). 
*                3/ TAPE DENSITY           (BITS 5-3).
*                3/ TAPE FORMAT            (BITS 2-0).
* 
* 
*         NOTE   A DATABASE MUST BE SORTED BY THE FOLLOWING KEYS--
* 
*                1 - USER NAME. 
*                2 - PERMANENT FILE NAME. 
*                3 - LM DATE. 
*                4 - DUMP DATE. 
 NUMBERS  SPACE  4,10 
**        VSN INDEX.
* 
*         THE VSN INDEX IS A PART OF THE DATABASE. IT OCCUPIES THE
*         LAST SYSTEM RECORD BEFORE THE *OPLD* RECORD, AND APPEARS TO 
*         MANY *RECLAIM* ROUTINES AS JUST ANOTHER USER RECORD. HOWEVER, 
*         EACH ENTRY IN THE VSN INDEX REPRESENTS A REEL OF A DUMP 
*         TAPE SET. THE 4-WORD ENTRIES CONTAIN INFORMATION WHICH LETS 
*         *RECLAIM* DETERMINE WHICH REEL OF A SET IS TO BE MOUNTED TO 
*         RETRIEVE A PARTICULAR FILE FROM THAT DUMP SET.
* 
*T,ID     42/ 7L.VSNDX., 18/0 
*T,ID+1   36/ SETVSN, 24/0
*T,ID+2   36/ CURVSN, 24/0
*T,ID+3   12/ 0, 12/ TFLGS, 6/ FNUM, 12/ RNUM, 18/0 
* 
*         *SETVSN* - THIS VSN IDENTIFIES THE DUMP TAPE SET. IT IS 
*                NORMALLY THE VSN OF THE FIRST REEL OF THE SET. 
* 
*         *CURVSN* - THIS IS THE ACTUAL VSN OF THE REEL REPRESENTED 
*                BY THE VSN INDEX ENTRY, AS DETERMINED BY A *FILINFO* 
*                KEY 4 REQUEST AFTER EACH FILE DUMP.
* 
*         *TFLGS* - TAPE REQUEST FLAGS FOR THIS DUMP SET.  *TFLGS*
*                   IS STORED ONLY IN THE FIRST RECORD OF THE SET.
* 
*                1/ MASS STORAGE DUMP FLAG (BIT 11).
*                1/ LABELED TAPE FLAG      (BIT 10).
*                1/ FOREIGN TAPE FLAG      (BIT 9). 
*                2/ TAPE DEVICE TYPE       (BITS 8-7).
*                1/ 0.                     (BIT 6). 
*                3/ TAPE DENSITY           (BITS 5-3).
*                3/ TAPE FORMAT            (BITS 2-0).
* 
*         *FNUM* - THE FILE NUMBER OF THE DUMP BEING PROCESSED AT 
*                THE TIME THIS REEL WAS ASSIGNED. ZERO FOR THE FIRST
*                REEL OF A SET. 
* 
*         *RNUM* - THE RECORD NUMBER OF THE DUMP BEING PROCESSED AT 
*                THE TIME THIS REEL WAS ASSIGNED. ZERO FOR THE FIRST
*                REEL OF A SET. 
* 
* 
* 
*         NOTE   VSN INDEX RECORDS ARE SORTED AS FOLLOWS--
* 
*                1 - SET VSN. 
*                2 - FILE NUMBER. 
*                3 - RECORD NUMBER. 
          SPACE  4,10 
**        NUMBERS.
* 
*         THE NUMBERS FILE IS USED BY THE *COMPACT*, *DUMP*, *REMOVE*,
*         AND *UPDATE* DIRECTIVES.  IT CONTAINS THE VSN-S OF THE
*         TAPES USED FOR THE DUMP.
* 
*T,NUMB   42/ DUMP FILE NAME,18/0 
 CF       SPACE  4,15 
**        CF. 
* 
*         THE *CF* FILE IS THE SCRATCH FILE REQUIRED FOR THE *COPY* 
*         AND *COMPACT* DIRECTIVES, WHICH IS SORTED EXTERNALLY. 
* 
*T,CF     42/ DUMP FILE NAME,6/ FNUM,12/ REC NUM
*T,CF+1   42/ PERMANENT FILE NAME,6/ FTYP,12/ REQ FLGS
*T,CF+2   60/ DATABASE ENTRY FIRST WORD 
*T,CF+3   60/ DATABASE ENTRY SECOND WORD
*T,CF+4   60/ DATABASE ENTRY THIRD WORD 
*T,CF+5   60/ DATABASE ENTRY FOURTH WORD
 UPDATES  SPACE  4,15 
**        UPDATES.
* 
*         *UPDATES* IS USED IN THE *COMPACT*, *DUMP*, *REMOVE, AND
*         *UPDATE* DIRECTIVES.  IT HAS 5-WORD RECORDS FOR THE FILES 
*         TO BE ADDED TO THE *RECLAIM* DATABASE.  IT HAS THE FORMAT-- 
* 
*T,ID     60/ DATABASE ENTRY FIRST WORD 
*T,ID+1   60/ DATABASE ENTRY SECOND WORD
*T,ID+2   60/ DATABASE ENTRY THIRD WORD 
*T,ID+3   60/ DATABASE ENTRY FOURTH WORD
*T,ID+4   42/ FAMILY,18/ 0
          TITLE  PROGRAMMING NOTES. 
 NOTES    SPACE  4,30 
**        PROGRAMMING NOTES.
* 
*         1.  DEBUGGING CODE IS EMBEDDED WITHIN *RECLAIM* TO MAKE 
*         TESTING EASIER.  ONE INSTANCE OF SUCH USE IS IN ROUTINE 
*         *RNT* (REQUEST NEXT TAPE), WHICH ASSEMBLES EITHER A *LABEL* 
*         MACRO OR A *RECALL* MACRO.  THE DEBUGGING CODE IS TURNED ON 
*         BY USING THE *ML* PARAMETER ON THE COMPASS COMMAND.  A
*         TYPICAL SEQUENCE OF CODE IS-- 
*                DEBUG    IFC    EQ,$DEBUG$"MODLEVEL"$
*                     ....REGULAR CODE....
*                DEBUG    ELSE
*                     ....DEBUGGING CODE....
*                DEBUG    ENDIF 
*         THIS CONVENTION SHOULD BE FOLLOWED FOR ANY OTHER DEBUGGING
*         OR TESTING CODE.  THEN TO ASSEMBLE THE DEBUG CODE, USE
*         *ML=DEBUG* ON THE *COMPASS* COMMAND.
* 
*         2.  PROGRAM FLOW.  *RECLAIM* HAS ONE MAIN LOOP WHICH CRACKS 
*         DIRECTIVES, SETS UP TABLES, AND JUMPS TO A PARTICULAR 
*         DIRECTIVE PROCESSOR THROUGH A JUMP TABLE.  EACH DIRECTIVE 
*         PROCESSOR RETURNS TO THE MAIN LOOP THROUGH TAG *MAIN8* IF 
*         ANY OUTPUT HAS BEEN GENERATED (I.E. NORMAL RETURN). 
*         OTHERWISE RETURN IS THROUGH TAG *MAIN* IF A GIVEN DIRECTIVE 
*         WAS IGNORED.
          TITLE  SYMBOL DEFINITIONS.
          SPACE  4,10 
****      SYMBOL DEFINITIONS. 
  
  
*         DATA BASE WORD OFFSET DEFINITIONS.
  
 DBUNM    EQU    0           USER NAME
 DBUUI    EQU    0           USER INDEX 
 DBPFN    EQU    1           PERMANENT FILE NAME
 DBDDT    EQU    1           DUMP DATE
 DBXSV    EQU    1           SET VSN - VSN INDEX
 DBTNO    EQU    2           TAPE NUMBER FOR FILE RESIDENCE 
 DBLMO    EQU    2           LAST MODIFICATION DATE OF FILE 
 DBXCV    EQU    2           CURRENT VSN - VSN INDEX
 DBFLG    EQU    3           SPECIAL FLAGS
 DBFTY    EQU    3           FILE TYPE (D/I)
 DBRFL    EQU    3           TAPE REQUEST FLAGS 
 DBFNO    EQU    3           FILE NUMBER ON TAPE
 DBRNO    EQU    3           RECORD NUMBER OF FILE RESIDENCE
 DBLEN    EQU    3           LENGTH OF PERMANENT FILE 
 DBXFR    EQU    3           FILE AND RECORD NUMBERS - VSN INDEX
 UDBFAM   EQU    4           FAMILY NAME IN *UPDATES* INPUT RECORD
  
*         OUTPUT LINE DEFINITIONS.
  
 LPFN     EQU    0           PERMANENT FILE NAME
 LFTY     EQU    0           FILE TYPE
 LLMO     EQU    1           LAST MOD 
 LDDT     EQU    2           DUMP DATE
 LLEN     EQU    3           LENGTH 
 LUNM     EQU    4           USER NAME
 LTNO     EQU    5           TAPE NUMBER
 LRNO     EQU    6           RECORD NUMBER
 LFNO     EQU    6           FILE NUMBER ON TAPE
 LEND     EQU    7           TERMINATOR 
****
          TITLE  GENERAL MACRO DEFINITIONS. 
          SPACE  4,10 
*         GENERAL MACRO DEFINITIONS.
 ABORT    SPACE  4,15 
**        ABORT - ABORT PROGRAM.
* 
*         ABORT  MSG
* 
*         ENTRY  *MSG* = FWA OF ERROR MESSAGE TO BE ISSUED TO THE 
*                        DAYFILE.  IF OMITTED, NO MESSAGE IS ISSUED.
*                *NAP* = *NA* PARAMETER VALUE.
* 
*         EXIT   OPTIONAL MESSAGE ISSUED TO DAYFILE.
*                *RECLAIM* ABORTED (OR TERMINATED NORMALLY IF *NA*).
* 
*         USES   X - 1. 
*                A - 1. 
* 
*         MACROS ENDRUN, MESSAGE, SYSTEM. 
  
  
          PURGMAC  ABORT
  
 ABORT    MACRO  MSG
          LOCAL  NOBOMB 
          MACREF ABORT
          IFC    NE,$MSG$$,2
          R=     X1,MSG 
          MESSAGE X1,3,R
          SA1    NAP
          NZ     X1,NOBOMB
          SYSTEM ABT,R
 NOBOMB   ENDRUN
 ABORT    ENDM
 BREAK    SPACE  4,15 
**        BREAK - PROCESS INTERACTIVE PROGRAM INTERRUPTS. 
* 
*         BREAK  REG
* 
*         ENTRY  *REG* = ALTERNATE REGISTER TO BE DESTROYED BY
*                        *BREAK* MACRO.  IF OMITTED, X1 IS USED.
* 
*         EXIT   TO *PBC* IF TERMINAL INTERRUPT INITIATED.
* 
*         USES   X - 1 (OR X.REG).
*                A - 1 (OR A.REG).
  
  
          PURGMAC  BREAK
  
 BREAK    MACRO  REG
          MACREF BREAK
          IFC    NE,$REG$$
          SA_REG BREAK
          NZ     X_REG,PBC   IF INTERRUPT INITIATED 
          ELSE
          SA1    BREAK
          NZ     X1,PBC      IF INTERRUPT INITIATED 
          ENDIF 
 BREAK    ENDM
 CLEAR    SPACE  4,15 
**        CLEAR - CLEAR FET POINTERS. 
* 
*         CLEAR  FET
* 
*         ENTRY  *FET* = FWA OF FET TO BE CLEARED.  IF OMITTED (X2) 
*                        IS ASSUMED TO CONTAIN THE FET ADDRESS. 
* 
*         EXIT   FET POINTERS *IN* AND *OUT* SET TO *FIRST*.
* 
*         USES   X - 1, 6.
*                A - 1, 6.
  
  
          PURGMAC  CLEAR
  
 CLEAR    MACRO  FET
          MACREF CLEAR
          IFC    EQ,$FET$$
          RECALL X2 
          SA1    X2+B1       FIRST
          ELSE
          RECALL FET
          SA1    FET+B1      FIRST
          MX6    12          CLEAR *DT* FIELD 
          BX6    -X6*X1 
          SA6    A1 
          ENDIF 
          SX6    X1 
          SA6    A1+B1       FIRST INTO IN
          SA6    A6+B1       IN INTO OUT
 CLEAR    ENDM
 COPYBLK  SPACE  4,15 
**        COPYBLK - COPY DATA INTO A DUMP TAPE BLOCK. 
* 
*         COPYBLK  WC,FS,SHORT
* 
*         ENTRY  *WC* = WORD COUNT TO COPY INTO TAPE BLOCK. 
*                *FS* = FREE SPACE IN TAPE BLOCK. 
*                *SHORT* = FLAG INDICATING IF THIS TAPE BLOCK SHOULD
*                          BE AN EOR OR EOF BLOCK-- 
*                        .EQ. 0 IF THIS IS A NORMAL DATA BLOCK. 
*                        .LT. 0 IF THE LAST PRU READ WAS A SHORT PRU. 
* 
*         USES   X - 1, 2, 3. 
* 
*         CALLS  WRB. 
  
  
          PURGMAC COPYBLK 
  
 COPYBLK  MACRO  WC,FS,SHORT
          MACREF COPYBLK
          R=     X1,WC
          R=     X2,FS
          R=     X3,SHORT 
          RJ     WRB
 COPYBLK  ENDM
 INDEX    SPACE  4,15 
**        INDEX - GENERATE INDEXED TABLE WITH 4-WORD MESSAGES.
* 
*ADDR     INDEX  I,MSG
* 
*         ENTRY  *ADDR* = FWA OF TABLE, IF PRESENT. 
*                *I* = TABLE INDEX. 
*                *MSG* = MESSAGE TEXT (DOES NOT CONTAIN ASTERISKS). 
* 
*         EXIT   4-WORD TABLE ENTRY GENERATED AT I*4+ADDR.
* 
*         THIS MACRO IS A MODIFIED VERSION OF *INDEX* FROM *COMPMAC*. 
  
  
          PURGMAC  INDEX
  
          MACRO  INDEX,ADDR,I,MSG 
          IFC    NE,$ADDR$$ 
 ADDR     BSS    0
 .2       SET    ADDR 
          ELSE   4
          ORG    I+I+I+I+.2 
          IFC    NE,$MSG$$,1
          DATA   C*MSG* 
          BSS    0
          ENDM
 OPTION   SPACE  4,20 
**        OPTION - EXPAND SELECTED DIRECTIVE KEYWORD. 
* 
*         *OPTION* GENERATES THE *COMCARM* ARGUMENT TABLE, THE DEFAULT
*         VALUE TABLE, AND THE ARGUMENT VARIABLE TABLE FOR EACH KEYWORD 
*         THAT CAN BE USED ON A *RECLAIM* DIRECTIVE.
* 
*         OPTION  KW,DEF,CVT,ASV,WC 
* 
*         ENTRY  *KW* =  OPTION ENTERED BY USER.
*                *DEF* = DEFAULT. 
*                *CVT* = REQUIRED CONVERSION. 
*                *ASV* = ADDRESS OF ASSUMED VALUE.
*                *WC* = WORD COUNT OF VALUE.
* 
*         EXIT   *KWA* = ARGUMENT PROCESSOR EQUIVALENCE TABLE ADDRESS.
*                *KWD* = DEFAULT VALUE TABLE ADDRESS. 
*                *KWV* = VARIABLE TABLE ADDRESS.
  
  
          PURGMAC  OPTION 
  
 OPTION   MACRO  KW,DEF,CVT,ASV,WC
          MACREF OPTION 
  
 ARMTAB   RMT 
 KW_A     VFD    12/0L_KW    KEYWORD
          IFC    NE,$ASV$$
          VFD    18/ASV      FOR NON-EQUIVALENCED INPUT VARIABLES 
          ELSE   1
          VFD    18/=0       VALUE EXPECTED BY ARGUMENT PROCESSOR 
  
          VFD    3/4         33B = 0
  
          ECHO   1,MODE=(JDATE,OCTAL,DECIMAL,FILETY,TAPEPO,SPFILL)
 .MODE    SET    0
 .CVT     SET    1
          VFD    1/.JDATE,1/.OCTAL,1/.DECIMAL 
          VFD    1/.FILETY,1/.TAPEPO,1/.SPFILL
  
          IFC    EQ,$WC$$ 
          VFD    3/1
          ELSE   1
          VFD    3/WC 
  
          VFD    18/KW_V
 ARMTAB   RMT 
  
 DEFAULT  RMT 
 KW_D     VFD    60/DEF 
 DEFAULT  RMT 
  
 VARIABL  RMT 
          IFC    EQ,$WC$$ 
 KW_V     BSSZ   1
          ELSE   1
 KW_V     BSSZ   WC 
 VARIABL  RMT 
 OPTION   ENDM
          TITLE  MERGESORT MACRO DEFINITIONS. 
          SPACE  4,10 
*         MERGESORT MACRO DEFINITIONS.
 REWRYTE  SPACE  4,15 
**        REWRYTE - REWIND FILE AND PREPARE FOR WRITING.
* 
*         REWRYTE  FILE 
* 
*         ENTRY  *FILE* = FET ADDRESS OF FILE TO REWIND AND WRITE.
* 
*         EXIT   FILE REWOUND, EOF FLAG SET ON. 
* 
*         USES   X - 2. 
* 
*         CALLS  RWR. 
  
  
          PURGMAC  REWRYTE
  
 REWRYTE  MACRO  FILE 
          MACREF REWRYTE
          R=     X2,FILE
          RJ     RWR
 REWRYTE  ENDM
 RESET    SPACE  4,15 
**        RESET - REWIND FILE AND PREPARE FOR READING.
* 
*         RESET  FILE 
* 
*         ENTRY  *FILE* = FET ADDRESS OF FILE TO REWIND AND READ. 
* 
*         EXIT   FILE REWOUND AND PARTIALLY READ. 
*                EOF FLAG SET IF FILE IS EMPTY. 
* 
*         USES   X - 2. 
* 
*         CALLS  RST. 
  
  
          PURGMAC  RESET
  
 RESET    MACRO  FET
          MACREF RESET
          R=     X2,FET 
          RJ     RST
 RESET    ENDM
 GETITEM  SPACE  4,15 
**        GETITEM - GET AN ITEM FROM A FILE.
* 
*         GETITEM  FET,ITEM 
* 
*         ENTRY  *FET* = FET ADDRESS OF FILE. 
*                *ITEM* = ITEM DESTINATION ADDRESS. 
* 
*         EXIT   VALUE MOVED. 
*                EOF FLAG SET IF NEXT READ FAILS. 
* 
*         USES   X - 0, 5.
* 
*         CALLS  GIT. 
  
  
          PURGMAC  GETITEM
  
 GETITEM  MACRO  FET,ITEM 
          MACREF GETITEM
          R=     X0,FET 
          R=     X5,ITEM
          RJ     GIT
 GETITEM  ENDM
 PUTITEM  SPACE  4,15 
**        PUTITEM - WRITE ITEM TO FILE. 
* 
*         PUTITEM  FET,ITEM 
* 
*         ENTRY  *FET* = FET ADDRESS OF FILE. 
*                *ITEM* = ADDRESS OF ITEM TO WRITE. 
* 
*         EXIT   ITEM WRITTEN TO FILE.
* 
*         USES   X - 2, 5.
* 
*         CALLS  PIT. 
  
  
          PURGMAC  PUTITEM
  
 PUTITEM  MACRO  FET,ITEM 
          MACREF PUTITEM
          R=     X2,FET 
          R=     X5,ITEM
          RJ     PIT
 PUTITEM  ENDM
 COPITEM  SPACE  4,15 
**        COPITEM - COPY ITEM FROM ONE FILE TO ANOTHER. 
* 
*         COPITEM  FILEX,FILEY
* 
*         ENTRY  *FILEX* = FET ADDRESS OF FILE TO READ FROM.
*                *FILEY* = FET ADDRESS OF FILE TO WRITE TO. 
* 
*         EXIT   ITEM COPIED. 
*                *EORUN* SET IF ITEM COPIED WAS END OF A RUN. 
* 
*         USES   X - 2, 5.
* 
*         CALLS  CIT. 
  
  
          PURGMAC  COPITEM
  
 COPITEM  MACRO  FILEX,FILEY
          MACREF COPITEM
          R=     X2,FILEX 
          R=     X5,FILEY 
          RJ     CIT
 COPITEM  ENDM
 COPYRUN  SPACE  4,15 
**        COPYRUN - COPY RUN OF ENTRIES BETWEEN FILES.
* 
*         COPYRUN  FILEX,FILEY
* 
*         ENTRY  *FILEX* = FET ADDRESS OF FILE TO READ FROM.
*                *FILEY* = FET ADDRESS OF FILE TO WRITE TO. 
* 
*         EXIT   RUN COPIED FROM *FILEX* TO *FILEY*.
* 
*         USES   X - 2, 5.
* 
*         CALLS  CRN. 
  
  
          PURGMAC  COPYRUN
  
 COPYRUN  MACRO  FILEX,FILEY
          MACREF COPYRUN
          R=     X2,FILEX 
          R=     X5,FILEY 
          RJ     CRN
 COPYRUN  ENDM
          TITLE  ARGUMENT TABLES. 
          SPACE  4,10 
*         ARGUMENT TABLES.
 OPTIONS  SPACE  4,10 
*         OPTIONS - OPTIONS LIST FOR ARGUMENT PROCESSING. 
  
  
          ORG    110B 
 ORIG     BSS    0           PROGRAM ORIGIN 
  
  
 OPTIONS  BSS    0                OPTIONS TABLE 
          OPTION AA,0,JDATE       ACCESSED AFTER DATE 
          OPTION AB,0,JDATE       ACCESSED BEFORE DATE
          OPTION AD,0,JDATE       LAST ACCESS DATE
          OPTION CF,0LNTAPE,0,OPNTAPE  COMPACT LOCAL FILE NAME
          OPTION CN,0,0           COMPACT PERMANENT FILE NAME 
          OPTION CT,0,0           COMPACT TAPE VSN
          OPTION DA,0,JDATE       DUMPED AFTER DATE 
          OPTION DB,0,JDATE       DUMPED BEFORE DATE
          OPTION DD,0,JDATE       DUMP DATE 
          OPTION DE,0,0,-NOEQV    FILES WHICH HAVE BEEN DELETED 
          OPTION DF,0LTAPE,0,OPTAPE  LOCAL DUMP FILE NAME 
          OPTION DT,0,0           DEVICE TYPE ( MT/NT/CT/AT/MS )
          OPTION EX,0LNO,0,OPYES  REVERSE SELECTION CRITERIA
          OPTION GT,0,DECIMAL     FILE SIZE GREATER THAN
          OPTION FN,0             PROCESS LOCAL FILE NAME FIRST 
          OPTION FI,0,DECIMAL     FILE POSITION 
          OPTION LT,0,DECIMAL     FILE SIZE LESS THAN 
          OPTION LV,0,0,-NOEQV    LATEST VERSION OF A FILE
          OPTION MA,0,JDATE       MODIFIED AFTER
          OPTION MB,0,JDATE       MODIFIED BEFORE 
          OPTION MD,0,JDATE       LAST MODIFICATION 
          OPTION NA,0,0,-NOEQV    NO ABORT OPTION 
          OPTION NF,0L0,DECIMAL   NUMBER OF FILES TO BE SELECTED
          OPTION NN,0             NEW FILE NAME 
          OPTION OV,0,0,-NOEQV    OVERWRITE FLAG FOR COMPACTING 
          OPTION PF,0             PERMANENT FILE NAME 
          OPTION PO,0LU,TAPEPO    *PO* OPTION FOR TAPE REQUESTS 
          OPTION RC,0,DECIMAL     RECORD POSITION 
          OPTION RP,0LNO,0,OPYES  REPLACE OPTION
          OPTION RS,0             FILE RESIDENCE
          OPTION TY,0,FILETY      FILE TYPE (DIRECT OR INDIRECT)
  
*         START OF PRIVILEGED ARGUMENTS.
  
          OPTION AS,0LNO,0,OPYES  PRESERVE ALTERNATE STORAGE DATA 
          OPTION D,0,0            TAPE DENSITY FOR DUMP 
          OPTION DN,0,0           DUMP FILE NAME
          OPTION EI,1L#,0,NOEQV   DUMP AT END OF INFORMATION
          OPTION F,0,0            TAPE FORMAT 
          OPTION FT,0,0,-NOEQV    FOREIGN TAPE FLAG 
          OPTION MT,0,0,-NOEQV    TAPE DEVICE TYPE
          OPTION NT,0,0,-NOEQV    TAPE DEVICE TYPE
          OPTION PW,0,0           TMS TAPE PASSWORD 
          OPTION TO,0,0           TMS TAPE OWNER
          OPTION TN,0,0           TAPE NUMBER 
          OPTION UI,0,OCTAL       USER INDEX (COPY/LIST/LOAD WITH TN) 
          OPTION UN,0             USER NAME 
 ARMTAB   SPACE  4,10 
*         ARMTAB - TABLE OF ARGUMENT PROCESSER POINTERS FOR *COMCARM*.
  
  
 ARMTAB   BSS    0           ARGUMENT TABLE 
 ARMTAB   HERE
 ARMTABL  EQU    *-ARMTAB    SET TABLE LENGTH 
 PRIVARG  EQU    ASA         START PRIVILEGED ARGUMENTS AT ALT. STG.
 DEFAULT  SPACE  4,10 
*         DEFAULT - TABLE OF DEFAULT VALUES FOR *COMCARM*.
  
  
 DEFAULT  BSS    0           DEFAULT VALUES TABLE 
 DEFAULT  HERE
 VARIABL  SPACE  4,10 
*         VARIABL - TABLE OF VARIABLES FOR *COMCARM*. 
  
  
 VARIABL  BSS    0           VARIABLE TABLE 
 VARIABL  HERE
          TITLE  DIRECTIVES/OPTIONS TABLES. 
 TDIR     SPACE  4,10 
*         TDIR - TABLE OF DIRECTIVES. 
  
  
 TDIR     BSS    0           *COMCARM* EQUIVALENCE TABLE
          VFD    42/0LLIST,18/LIST
          VFD    42/0LCOPY,18/COPY
          VFD    42/0LDELETE,18/DELETE
          VFD    42/0LDUMP,18/DUMP
          VFD    42/0LRESET,18/DELETE 
          VFD    42/0LLOAD,18/LOAD
          VFD    42/0LSET,18/SET
          VFD    42/0LCOMPACT,18/COMPACT
          VFD    42/0LEND,18/END
          VFD    42/0LREMOVE,18/REMOVE
          VFD    42/0LUPDATE,18/UPDATE
          VFD    42/0LQUIT,18/END 
          CON    0
 TDTV     SPACE  4,10 
*         TDTV - DEVICE TYPE VALUES.
  
 TDTV     BSS    0           DEVICE TYPE VALUES 
  
*         ALL TAPE DEVICE TYPES MUST APPEAR FIRST.
  
          QUAL   MTX
 MT       VFD    48/0LMT,3/0,2/DVMT,1/0,3/0,3/TFI  7-TRACK REEL TAPE
 NT       VFD    48/0LNT,3/0,2/DVNT,1/0,3/0,3/TFI  9-TRACK REEL TAPE
          VFD    48/0LCT,3/0,2/DVCT,1/0,3/D380,3/TFI  CARTRIDGE TAPE
          VFD    48/0LAT,3/0,2/DVAT,1/0,3/D380,3/TFI  ACS CARTRIDGE 
          QUAL   *
 TDTET    EQU    *           END OF TAPE DEVICE TYPE VALUES 
 DTMS     VFD    24/0LMS,36/0  MASS STORAGE 
 TDTMX    EQU    *           END OF DEVICE TYPE VALUES
  
 DTMT     EQU    /MTX/MT
 DTNT     EQU    /MTX/NT
 TDEN     SPACE  4,10 
*         TDEN - TAPE DENSITIES.
  
  
 TDEN     BSS    0           TAPE DENSITIES 
          QUAL   MTX
          VFD    48/0LHI,3/0,2/DVMT,1/0,3/D05,3/TFI  7-TRACK REEL TAPE
          VFD    48/0LLO,3/0,2/DVMT,1/0,3/D02,3/TFI  7-TRACK REEL TAPE
          VFD    48/0LHY,3/0,2/DVMT,1/0,3/D08,3/TFI  7-TRACK REEL TAPE
          VFD    48/0LHD,3/0,2/DVNT,1/0,3/D08,3/TFI  9-TRACK REEL TAPE
          VFD    48/0LPE,3/0,2/DVNT,1/0,3/D16,3/TFI  9-TRACK REEL TAPE
          VFD    48/0LGE,3/0,2/DVNT,1/0,3/D62,3/TFI  9-TRACK REEL TAPE
          VFD    48/0LCE,3/0,2/DVCT,1/0,3/D380,3/TFI  CARTRIDGE TAPE
          VFD    48/0LAE,3/0,2/DVAT,1/0,3/D380,3/TFI  ACS CARTRIDGE 
          QUAL   *
          CON    0           END OF DENSITY TABLE 
 TFMT     SPACE  4,10 
*         TFMT - TAPE FORMATS.
  
  
 TFMT     BSS    0           TAPE FORMATS 
          DATA   0LI
          DATA   0LSI 
          DATA   0LF
          DATA   0LS
          DATA   0LL
          DATA   0LLI 
 TFMTL    EQU    *-TFMT      NUMBER OF TAPE FORMATS 
          TITLE  OUTPUT HEADINGS. 
          SPACE  4,10 
*         OUTPUT HEADINGS.
  
  
 HEAD1    DATA   1L1
 HEADER   DATA   10H RECLAIM V
 VERSION  VFD    18/3H"VER",42/7H    OP=
 OPTION   DATA   10H
 USER     DATA   3LUN=
 DATE     DATA   10H
 TIME     DATA   10H
 HEAD1.0  DATA   10H     PAGE 
 PAGE     CON    0
  
          DATA   30H PFN  TYPE LAST MOD  DUMP DATE
 HEAD2    DATA   8L  LENGTH 
          DATA   20HSERNAME    TAPE   FI
          DATA   8L REC 
  
 HEADER0  EQU    *-HEADER 
 HLENGTH  CON    0           HEADING LENGTH 
  
 HEADER1  DATA   8L 
 HEADER2  DATA   10H        FI
          DATA   10HLES PROCES
          DATA   0LSED. 
          DATA   8L 
  
 HEADER4  EQU    *-HEADER1
  
 HEADER5  DATA   10H     NO FI
  
 HEADER6  DATA   8L    NONE 
  
 BLANKS   DATA   10H           TEN BLANKS 
          TITLE  VARIABLES. 
          SPACE  4,10 
*         GLOBAL VARIABLES. 
  
  
 ACCESS   BSSZ   1           PRIVILEGED USER FLAG 
 BLOKHED  BSS    1           TAPE BLOCK CONTROL WORD SCRATCH
 BMSG     BSS    3           B-DISPLAY MESSAGE AREA 
 BREAK    BSSZ   1           TERMINAL DISABLE ADDRESS 
  
 CATSKL   BSSZ   4           DUMMY PFC SKELETON FOR DUMPING LOCAL FILES 
          VFD    6/FCPR,6/PTRD,48/0 
          DATA   0
          VFD    3/RSNP,3/BRNO,6/0,48/0 
          BSSZ   9
  
 CCIN     BSSZ   1           *Z* INPUT PARAMETER FLAG 
 COPTION  BSSZ   1           CURRENT SELECTED OPTION
 DBDEFLG  BSS    1           DATABASE DEFINED FLAG
 DBE      BSSZ   UDBEL       DATA BASE ENTRY
 DBNAM    BSS    1           DATABASE FILE NAME 
 DBPN     BSS    1           DATABASE PACK NAME 
 DBPW     BSSZ   1           DATABASE PASSWORD
 DBUN     BSS    1           DATABASE USER NAME 
 DUMPDT   BSSZ   1           TODAY-S DATE IN PACKED JULIAN
 DUMPLOC  DATA   0           FLAG FOR DUMPING LOCAL FILE
 DUMPNUM  DATA   0           PREVIOUS DUMP FILE POSITION
 EOIFLG   BSS    1           FLAG EOI FOR COPY (NO DATABASE)
 EOR      BSSZ   1           EOR FLAG FOR READING FROM BATCH INPUT
 EORWORD  DATA   0           EOR SECTOR TRAILER WORD
 EOFWORD  VFD    12/17B,48/0 EOF SECTOR TRAILER WORD
 EORUN    DATA   0           FLAG FOR END OF RUN IN MERGESORT 
  
 FIBK     VFD    42/0LTAPE,6/FIBKL,12/1  *FILINFO* DATA BLOCK 
 FIBSTA   BSSZ   1           STATUS 
 FIBEST   BSSZ   1           EST ORDINAL
 FIBLEN   BSSZ   2           FILE LENGTH
 FIBVSN   VFD    54/0,6/4    VSN
 FIBDEN   VFD    54/0,6/2    DENSITY
 FIBKL    EQU    *-FIBK      LENGTH OF *FILINFO* DATA BLOCK 
  
 HDRJDT   DATA   0           *PFDUMP* HEADER DATE CONVERTED TO JULIAN 
  
 HDRCTL   VFD    42/0LPFDUMPR,9/1,9/HDRSZ 
 HDRPFD   VFD    36/0LPFDUMP,24/0        DUMP HEADER ID 
          VFD    42/0LREEL,18/1 
          VFD    42/0LMASK,18/377B       ALLOW ANY USER INDEX 
 HDRDT    BSSZ   1                       DUMP DATE * YY/MM/DD.* 
 HDRTM    BSSZ   1                       DUMP TIME * HH.MM.SS.* 
 FAMILY   BSSZ   1                       USER-S FAMILY
 HDRPN    BSSZ   1                       PACK NAME / DEVICE TYPE
 HDRL     EQU    *-HDRPFD 
          BSSZ   /COMSPFS/AFLBL-HDRL
 HDRSZ    EQU    *-HDRPFD 
  
 IDT      DATA   1           TERMINAL INPUT ASSIGNMENT FLAG 
 INDXLEN  BSSZ   1           LENGTH OF OPLD INDEX 
 INDXNAM  BSSZ   2           USER NAME/PRU COUNT WORKING STORAGE AREA 
 JOBORIG  BSSZ   1           JOB ORIGIN INFORMATION 
 LAD      BSSZ   1           LAST ACCESS DATE FROM PFC IF AVAILABLE 
 LDFN     CON    0LZZZZZG2   SCRATCH FILE LFN FOR *LOAD* PROCESSING 
 LINDFP   DATA   10H RECLAIM:   DAYFILE PREFIX FOR DIRECTIVE LINE 
 LINE     BSSZ   9           INPUT LINE ARRAY 
 LN       DATA   0           LINE NUMBER COUNTER REGISTER 
 LOADFLG  DATA   0           BATCH LOAD FLAG
  
 LOF      DATA   3           LENGTH OF LIST-OF-FILES
          VFD    42/0LOUTPUT,18/O  L.O.F. ENTRY FOR *OUTPUT*
          CON    0           L.O.F. TERMINATOR
  
 LOFPTR   VFD    12/0,18/LOF,30/1    L.O.F. POINTER WORD
  
 MEMORY   DATA   0
 MLPP     CON    LINP        MAXIMUM LINES PER PAGE 
 MRFILE   DATA   0           MOST RECENT FILE PROCESSED 
 MRUSER   DATA   0           MOST RECENT USER PROCESSED 
 MSV      BSS    1           MASS STORAGE VARIABLE
 NAP      DATA   0           NO ABORT PARAMETER FLAG
 NFP      DATA   0           NUMBER OF FILES PROCESSED
 NHV      DATA   0           HEADER OPTION VARIABLE 
 NOEQV    DATA   0L<[][]>    NON-EQUIVALENCED VARIABLE FLAG 
 NOBREAK  DATA   0           FLAG FOR PROCESSING/IGNORING BREAKS
 NLVIFLG  BSS    1           SET DATABASE JUST CREATED FLAG 
 NOPRU    BSS    1           FULL PRU FLAG
 NRUNS    DATA   0           TOTAL RUNS FOR A GIVEN MERGESORT PASS
 NVV      DATA   0           DUMP FILE *NO VALIDATION* VARIABLE 
 ODT      DATA   1           TERMINAL OUTPUT ASSIGNMENT POINTER 
 OLINE    BSSZ   OLENGTH     OUTPUT LINE
 OPLDH    DATA   77000016000000000000B
 OPNO     DATA   1LN
 OPNTAPE  DATA   5LNTAPE
 OPTAPE   DATA   4LTAPE 
 OPYES    DATA   1LY
 PFCNT    BSS    1           COUNTER FOR PFTAB POSITION 
 PG       DATA   0           PAGE NUMBER COUNTER REGISTER 
 PPFLAG   BSSZ   1           PPF CALLED FLAG
 PRUHEAD  VFD    6/0,18/PRUSIZE,36/0  BLANK PRU HEADER
 RBPF     DATA   0           REPRIEVE BYPASS FLAG 
 RDT      BSS    1           RESIDENCE DEVICE TYPE FOR DATABASE 
 RECSET   DATA   0           CHARACTER SET MODE CHANGED FLAG
 ROLLTIM  DATA   10          DEFAULT ROLLOUT TIME FOR BUSY FILES
 RPCL     BSS    1           COPY TO CURRENT LOCATION FLAG
 SALVAGE  DATA   0           FLAG FOR RESTORING DATABASE
 SCRFET   BSS    1           SCRATCH FET FILE NAME
 SECTOR   BSS    PRUSIZE+2   PRU BUFFER 
 SITEDB   DATA   0           *USERDB* VALUE IF *S* COMMAND PARAMETER
 SAVEBUF  BSS    1           TEMPORARY STORAGE USED IN *DFT*
 SORR     BSS    ITEMSIZ     SORT RECORD AREA 
 TMSTAT   BSS    1           INDICATE TMS STATUS
 TAPDFLT  BSS    0           TAPE DEFAULT VALUES
          QUAL   MTX
          VFD    51/0,2/DVNT,1/0,3/0,3/TFI
          QUAL   *
 TNN      BSSZ   1           NUMBER OF OCCURRENCES OF *TN*
 TRAILER  VFD    45/0,15/77000B  END-OF-DUMP CONTROL WORD 
 UNLOAD   DATA   0           TMS FORCED UNLOAD FLAG 
 UPE      BSSZ   UDBEL       UPDATE ENTRY 
 USERDB   DATA   1HU         FLAG INDICATING USER DATABASE ACCESS 
 VSNR     BSSZ   UDBEL       VSN INDEX UPDATE RECORD
 VSNCV    BSS    1           CURRENT VSN FOR MULTIREEL
 VSNDX    DATA   0L.VSNDX.   DUMMY USER NAME FOR VSN INDEX
 VSNFR    BSS    1           FILE AND RECORD FOR MULTIREEL
 VSNSV    BSS    1           SET VSN FOR MULTIREEL
  
 PFAC     BSSZ   1           ALTERNATE CATLIST
 PFNAM    BSSZ   1           PERMANENT FILE NAME
 PFCAT    BSSZ   1           FILE CATEGORY
 PFPERM   BSSZ   1           PERMISSION MODE
 PFUSER   BSSZ   1           USER NAME
 PFPASS   BSSZ   1           FILE PASSWORD
 PFUCW    BSSZ   1           USER CONTROL WORD
 PFDT     BSSZ   1           DEVICE TYPE
 PFSS     BSSZ   1           SUBSYSTEM
          TITLE  ERROR MESSAGES.
***       ERROR MESSAGES. 
          SPACE  4,10 
 EREI     DATA   C* DUMP FILE MALFUNCTION - EOI ENCOUNTERED.* 
 ERFM     DATA   C* DUMP FILE MALFUNCTION - FILE NAME MISMATCH.*
 ERFT     DATA   C* DUMP FILE MALFUNCTION - FILE TRUNCATED.*
 ERPL     DATA   C* DUMP FILE MALFUNCTION - POSITION LOST.* 
 ERUP     DATA   C* DUMP FILE MALFUNCTION - UNRECOGNIZABLE PFC.*
 ERND     DATA   C* NO DATA FOUND FOR USER NAME.* 
 LDNG     DATA   C* SEE DAYFILE - UNABLE TO LOAD XXXXXXX.*
 ERTN     DATA   C* TN OR DN MUST BE SPECIFIED.*
          TITLE  MAIN LOOP. 
 MAIN     SPACE  4,15 
**        MAIN - MAIN LOOP. 
* 
*         *MAIN* MOVES DEFAULTS INTO THE VARIABLE TABLE, READS
*         THE INPUT LINE AND JUMPS TO THE DIRECTIVE SPECIFIED.
* 
*         ENTRY  NONE.
* 
*         EXIT   TO DIRECTIVE PROCESSOR.
*                TO *END* IF EOR/EOF ENCOUNTERED ON INPUT.
* 
*         ERROR  TO *ABT* IF NON-INTERACTIVE JOB GETS DIRECTIVE ERROR.
* 
*         CALLS  ARM, CUP, CVP, POP, USB. 
* 
*         MACROS BREAK, MESSAGE, READ, READC, WRITEC, WRITEW. 
  
  
 MAIN8    RJ     CUP         CLEAN UP PROCESSING
  
*         PRESET VARIABLE TABLE BY MOVING *DEFAULT* TABLE INTO IT.
  
 MAIN     SB4    ARMTABL-1   END OF TABLE 
 MAIN1    SA1    DEFAULT+B4  MOVE DEFAULT VALUE TO VARIABLE TABLE 
          BX6    X1 
          SA6    VARIABL+B4 
          SB4    B4-B1
          PL     B4,MAIN1    IF MORE TO PRESET
  
*         READ LINE FROM INPUT FILE.
  
          SA1    IDT
          NZ     X1,MAIN1.1  IF NOT TERMINAL INPUT
          WRITEC O,MAINB     * ENTER DIRECTIVE.*
          READ   I,R
 MAIN1.1  READC  I,LINE,9 
          BX6    X1          SAVE EOR STATUS
          SA6    EOR
          NZ     X6,END      IF EOR FOUND 
          BREAK  2           PROCESS BREAK KEY
          SA1    ODT         CHECK FOR TERMINAL OUTPUT FILE 
          ZR     X1,MAIN2    IF A TERMINAL OUTPUT FILE
          SA1    LN 
          ZR     X1,MAIN1.2  IF NO OUTPUT 
          WRITEC O,(=C*1*)   ISSUE PAGE EJECT 
 MAIN1.2  WRITEW O,BLANKS,1  ISSUE SPACES TO MOVE LINE TO THE RIGHT 
          WRITEC O,LINE,9    COPY DIRECTIVE TO LISTING FILE 
  
*         CRACK INPUT LINE. 
  
 MAIN2    MESSAGE  LINDFP,3,R  PLACE DIRECTIVE IN DAYFILE 
          SX6    B0+         CLEAR PFN TABLE
          SA6    PFTAB
          SA6    PFCNT       CLEAR POINTER TO PFTAB 
          SA6    NNTAB       CLEAR NEW NAME TABLE 
          SA6    PPFLAG 
          SA6    MSV         CLEAR MASS STORAGE FLAG
          SA6    TF+TTNV     CLEAR TAPE VSN IN DUMP FET 
          SA6    MF+TTNV     CLEAR TAPE VSN IN COMPACT FET
          SB2    LINE        UNPACK LINE
          RJ     USB
          SX6    X6+B1       APPEND TERMINATOR TO INPUT LINE
          SA6    A6 
          SX6    1R.
          SA6    B7+B1
          RJ     POP         PICK OUT DIRECTIVE VERB
          SA6    COPTION     SAVE VERB
          ZR     B6,MAIN3    IF NO PARAMETERS 
          NG     B6,MAIN6    IF NO TERMINATOR FOUND 
          NG     B5,MAIN6    IF EXCESS PARAMETERS FOUND 
          SA0    B6          SET LWA IN STRING BUFFER 
          SB3    ARMTAB      ADDRESS OF ARGUMENT TABLE
          RJ     ARM         MULTIPLE WORD ARGUMENT TABLE 
          NZ     X1,MAIN6    IF ERROR 
 MAIN3    RJ     CVP         CONVERT PARAMETERS IN EQUIVALENCE TABLE
  
*         SEARCH TABLE FOR DIRECTIVE. 
  
          MX0    42 
          SA1    COPTION     GET OPTION 
          SA2    TDIR        START OF DIRECTIVE TABLE 
 MAIN4    BX3    X0*X2
          ZR     X3,MAIN6    IF UNIDENTIFIABLE DIRECTIVE
          BX3    X1-X3
          ZR     X3,MAIN5    IF DIRECTIVE FOUND 
          SA2    A2+B1
          EQ     MAIN4       CHECK NEXT DIRECTIVE 
  
*         PRESET PAGE/LINE/NUMBER OF FILES COUNTS.
*         (X2) = DIRECTORY TABLE WORD.  (X0) = 42 BIT MASK. 
  
 MAIN5    SA1    VSNDX
          BX6    X0*X1
          SA6    A1          INITIALIZE VSN INDEX ID/POINTER
          SA6    VSNR        SET VSN INDEX ID INTO VSN RECORD 
          SX6    B0+
          SA6    LN 
          SA6    NFP
          SA6    MRUSER      LAST USER NAME PROCESSED 
          SA6    MRFILE      LAST PERMANENT FILE PROCESSED
          SA6    PG 
          SA6    TNN         OCCURRENCES OF TAPE NUMBER 
          SA6    DBDEFLG     CLEAR DATABASE DEFINED FLAG
          SA6    BMSG        CLEAR B-DISPLAY MESSAGE AREA 
          BX1    -X0*X2      GET DIRECTIVE PROCESSOR ADDRESS
          SB3    X1 
          JP     B3          JUMP TO PROCESSOR
  
*         PROCESS DIRECTIVE ERRORS. 
  
 MAIN6    MESSAGE  MAINA,3   * DIRECTIVE ARGUMENT ERROR.* 
          WRITEC O,MAINA
 MAIN7    SA1    IDT         CHECK FOR TERMINAL INPUT 
          ZR     X1,MAIN     IF A TERMINAL THEN REPROMPT
          EQ     ABT         ABORT *RECLAIM*
  
  
 MAINA    DATA   C* DIRECTIVE ARGUMENT ERROR.*
 MAINB    DATA   C* ENTER DIRECTIVE.* 
          TITLE  PROCESS *COMPACT* DIRECTIVE. 
 COMPACT  SPACE  4,20 
**        COMPACT - PROCESS *COMPACT* DIRECTIVE.
* 
*         *COMPACT* WRITES A NEW DUMP TAPE FROM AN OLD ONE, REMOVING
*         ANY DELETED OR UNSELECTED FILES IN THE PROCESS.  *COMPACT*
*         EITHER REQUESTS A SECOND TAPE AND WRITES THE NEW DUMP THERE,
*         OR IT COPIES THE COMPACTED DUMP BACK OVER THE OLD TAPE. 
* 
*         ENTRY  NONE.
* 
*         EXIT   DELETED FILES REMOVED.  DATABASE UPDATED.
* 
*         USES   X - ALL. 
*                A - ALL. 
* 
*         CALLS  CBR, CEI, LCV, LVI, MDL, PDB, PDF, POT, RDB, RNT, SBU, 
*                SFC, SRT, UDV, UII, UPD, ZTB.
* 
*         MACROS MESSAGE, MOVE, READ, READW, REWIND, SKIPF, SKIPFF, 
*                UNLOAD, WRITEC, WRITEF, WRITEO, WRITER, WRITEW.
  
  
 COMPACT  BSS    0           ENTRY
  
*         CHECK FOR REQUISITE VSN.
  
          SA1    TF+TTNV     CHECK FOR A VSN
          NZ     X1,CMP1     IF A VSN WAS GIVEN 
          MESSAGE  ERTN,3    * TN OR DN MUST BE SPECIFIED.* 
          WRITEC O,ERTN 
          EQ     MAIN8       RETURN TO MAIN LOOP
  
 CMP1     BX6    X1          PRESET OLD VSN FOR *NUMBERS* FILE
          SA6    CMPD 
          SA1    OVV
          NZ     X1,CMP2     IF *OV* OPTION SELECTED
          SA1    MF+TTNV
          NZ     X1,CMP2     IF *CT* OR *CN* OPTION SELECTED
          MESSAGE  CMPA,3    * CT, CN OR OV KEYWORD NOT PRESENT.* 
          WRITEC O,CMPA 
          EQ     MAIN8       RETURN TO MAIN LOOP
  
 CMP2     SX7    PTRD        SET READ MODE FOR ATTACH 
          SA1    PDBC        POINT TO WORKING USERNAME LOCATION 
          BX5    X5-X5       SET UP TO ABORT IF ATTACH FAILS
          BX1    X1-X1       SET UP TO SCAN THE ENTIRE DATABASE 
          RJ     PDB         POSITION DATABASE
          SX6    B0+         CLEAR COUNT OF FILES PROCESSED 
          SA6    NFP
          SX6    377777B     SET FILE COUNT LIMIT 
          RJ     SFC
          UNLOAD OPLDF
          UNLOAD UPDATES
          UNLOAD NUMBERS
          REWIND CF,R 
          WRITE  OPLDF,*
          WRITE  UPDATES,*
          WRITE  NUMBERS,*
          WRITE  CF,* 
  
*         READ DATABASE ENTRY.
  
 CMP3     RJ     RDB         READ A DATABASE ENTRY
          NZ     X1,CMP4     IF NO MORE VALID ENTRIES 
          SA2    DBE+DBFNO   ENTRY WORD WITH TAPE POSITION
          MX0    -18
          AX2    18          RIGHT JUSTIFY TAPE POSITION
          BX6    -X0*X2      ISOLATE TAPE POSITION
          WRITEO CF          WRITE TAPE POSITION AS SORT KEY
          WRITEO CF          WRITE JUNK AS SECOND WORD OF SORT ENTRY
          WRITEW CF,DBE,DBEL WRITE DATABASE ENTRY INTO SORT ENTRY 
          EQ     CMP3        LOOP FOR ANOTHER ENTRY 
  
*         PROCESS END OF VALID DATABASE ENTRIES.
  
 CMP4     UNLOAD DB,R 
          SA5    NFP
          ZR     X5,CMP20    IF NO FILES TO COPY
          WRITER CF,R        FLUSH OUT THE SORT FILE
          REWIND CF,R 
          SX5    X5-1        CHECK IF ONLY ONE FILE TO COPY 
          ZR     X5,CMP5     IF ONLY ONE FILE 
          RJ     SRT         SORT ENTRIES BY TAPE POSITION
 CMP5     READ   CF,R        START UP READ ON SORTED FILE 
          READW  CF,CMPB,ITEMSIZ  GET FIRST ITEM
  
*         READY TO REQUEST TAPE.
  
          SA1    OVV
          SA3    CMPC+DBRFL  GET WORD WITH TAPE FLAGS 
          LX3    12 
          MX6    -12         SET OUTPUT FLAGS SAME AS INPUT 
          AX3    48 
          BX6    -X6*X3 
          SA6    MF+TFLAGS
          BX7    X1          PRESET FOR RING REQUIRED ON OLD DUMP 
          ZR     X1,CMP6     IF NOT OVERWRITING OLD DUMP
          SX7    B1          SET RING REQUIRED ON OLD DUMP
 CMP6     SA7    TF+TRING    SET INPUT DUMP RING STATUS 
          NG     X3,CMP9     IF NOT A TAPE DUMP 
          SX5    B0+         ABORT IF DATABASE NOT FOUND
          SX7    PTRD        SET READ MODE FOR DATABASE ATTACH
          RJ     LVI         LOCATE VSN INDEX 
          SA1    OVV
          NZ     X1,CMP9     IF OVERWRITING OLD DUMP
          NZ     X6,CMP7     IF NO VSN INDEX
          SA1    MF+TTNV
          SA3    MF+TMSV
          NZ     X3,CMP7     IF COMPACTING TO MASS STORAGE
          RJ     LEF         LOCATE EXISTING TAPE FLAGS 
 CMP7     SX6    X6+         ISOLATE EXISTING FLAGS 
          SA4    MF+TFLAGS   GET DEFAULT VALUES 
          ZR     X6,CMP8     IF NO EXISTING TAPE FLAGS
          SA1    EIV
          BX4    X6          DEFAULT TO EXISTING FLAGS
          NZ     X1,CMP8     IF DUMPING AT *EOI*
          BX6    X6-X6       CLEAR EXISTING FLAGS FOR *BOI* DUMP
 CMP8     SX5    MF 
          RJ     BTF         BUILD TAPE FLAGS FOR COMPACTED DUMP
 CMP9     SA3    CMPC+DBRFL  TAPE FLAGS FROM DUMP RECORD
          LX3    -36
          SA2    CMPB        DESIRED FILE/RECORD
          SA1    OVV
          ZR     X1,CMP10    IF NOT OVERWRITING OLD DUMP
          SX2    10001B      OVERWRITING - MUST GET FIRST REEL
 CMP10    SA1    TF+TTNV     DUMP VSN OR FILE NAME
          RJ     LCV         LOCATE CURRENT VSN 
          SA2    OVV
          SX5    MF          SET OUTPUT TAPE FET ADDRESS
          ZR     X2,CMP11    IF NOT OVERWRITING ORIGINAL DUMP 
          SX6    1
          SA6    FILENUM     RESET *MF* FILE COUNTER
          SA6    RECNUM      RESET *MF* RECORD COUNTER
          SA6    MF+TRING    INDICATE WRITE OPERATION 
          SA1    MF+TDFV
          RJ     MDL         MAKE THE SCRATCH FILE LOCAL
          REWIND MF,R 
          EQ     CMP13       BEGIN COPYING
  
 CMP11    RJ     ROD         REQUEST AND POSITION OUTPUT TAPE 
          SA3    MF+TMSV
          SA1    MF+TFETVSN 
          ZR     X3,CMP12    IF COMPACTING TO TAPE
          SA1    MF+TDNV
 CMP12    BX6    X1 
          SA6    CMPD        SAVE NEW VSN FOR DATABASE ENTRIES
  
*         REPEAT COPY ONE FILE UNTIL SORT FILE EMPTY. 
  
 CMP13    SA2    CMPC+DBFNO 
          SA3    FILENUM     OUTPUT FILE COUNT
          SA4    RECNUM      OUTPUT RECORD COUNT
          MX0    -18         MASK FOR FILE/RECORD NUMBERS 
          LX0    18 
          BX6    X0*X2       CLEAR OLD TAPE POSITION
          LX3    12          POSITION NEW FILE COUNT
          BX3    X3+X4       MERGE FILE AND RECORD NUMBERS
          LX3    18 
          BX6    X6+X3       INSERT NEW TAPE POSITION 
          SA1    MF+TFLAGS
          MX0    -12         MASK FOR TAPE FLAGS
          LX0    36 
          BX6    X0*X6       CLEAR OLD TAPE FLAGS 
          LX1    36 
          BX6    X1+X6       MERGE IN NEW FLAGS 
          SA6    A2          REWRITE POSITION WORD
          SA2    CMPC+DBTNO  WORD WITH VSN
          SA3    CMPD        GET CORRECT VSN
          MX0    42 
          LX6    59-47
          NG     X6,CMP14    IF PERMANENT FILE FLAG SET 
          MX0    36          SET MASK FOR TAPE VSN
 CMP14    BX6    -X0*X2      SAVE BOTTOM OF VSN WORD
          BX3    X0*X3
          BX6    X3+X6       INSERT NEW VSN 
          SA6    A2          REWRITE VSN WORD IN ENTRY
          SA0    CMPC 
          RJ     POT         SHOW FILE BEING PROCESSED
          SA5    CMPB 
          RJ     PDF         POSITION DUMP FILE 
          NG     X5,CMP21    IF DUMP FILE POSITION ERROR
  
*         READY TO DO THE COPY. 
  
          SX0    TF          SET INPUT FILE FET ADDRESS 
          SX5    MF          SET OUTPUT FILE FET ADDRESS
          RJ     CBR         COPY ONE RECORD
          NZ     X1,CMP21    IF DUMP FILE POSITION ERROR
          SA1    OVV
          NZ     X1,CMP15    IF OVERWRITING ORIGINAL DUMP 
          RJ     UDV         UPDATE OUTPUT DUMP VSN 
 CMP15    SA1    CRC
          SX6    X1+B1       INCREMENT INPUT FILE RECORD COUNT
          SA6    A1 
          SA4    RECNUM      OUTPUT FILE RECORD COUNT 
          SX7    X4+B1       INCREMENT OUTPUT FILE RECORD COUNT 
          SA7    A4 
          WRITEW OPLDF,CMPC,UDBEL 
          SA1    RECNUM      CHECK OUTPUT RECORD COUNTER
          SX2    7777B       MAXIMUM FILES PER TAPE FILE
          IX2    X2-X1       COMPUTE  (MAXIMUM - ACTUAL)
          NZ     X2,CMP16    IF HAVE NOT REACHED LIMIT
          SA3    FILENUM     OUTPUT FILE COUNTER
          SX6    1
          SX7    X3+1        INCREMENT FILE COUNTER 
          SA6    A1          RESET OUTPUT RECORD COUNTER
          SA7    A3 
          WRITEW MF,TRAILER,1 
          WRITEF MF,R 
          SA1    OVV
          NZ     X1,CMP16    IF OVERWRITING ORIGINAL DUMP 
          SX5    MF          POINT TO OUTPUT DUMP FET 
          RJ     UDV         UPDATE DUMP VSN
 CMP16    READW  CF,CMPB,ITEMSIZ  GET NEXT ENTRY
          ZR     X1,CMP13    IF ANOTHER ENTRY THEN HANDLE IT
          SA1    RECNUM      OUTPUT RECORD COUNTER
          SX1    X1-1        CHECK IF WAS JUST RESET
          ZR     X1,CMP17    IF COUNTER WAS RESET JUST ABOVE
          WRITEW MF,TRAILER,1 
          WRITEF MF,R 
          SA1    OVV
          NZ     X1,CMP17    IF OVERWRITING ORIGINAL DUMP 
          SX5    MF          POINT TO OUTPUT DUMP FET 
          RJ     UDV         UPDATE DUMP VSN
 CMP17    UNLOAD DB,R 
          UNLOAD CF 
          REWIND TF,R 
          SA1    OVV         OVERWRITE FLAG 
          ZR     X1,CMP18    IF NO OVERWRITE
          READ   TF,R        ENSURE INITIAL REEL MOUNTED
          REWIND TF,R 
          REWIND MF,R 
          SX0    MF          SET INPUT FET ADDRESS
          SX5    TF          SET OUTPUT FET ADDRESS 
          SA1    TF+TTNV     SET OUTPUT VSN FOR OVERWRITE 
          RJ     CEI         COPY WHOLE COMPACTED FILE OVER TAPE
          UNLOAD MF 
          EQ     CMP19       JOIN WITH NEW TAPE CASE
  
*         WROTE A NEW TAPE. 
  
 CMP18    SX5    MF          SET TAPE FET ADDRESS 
          RJ     RNT         RESERVE AND UNLOAD COMPACTED TAPE
          SX6    B0+         SET DUMP/COMPACT FILE POSITIONS UNKNOWN
          SA6    CFC
          SA6    CRC
          SA6    FILENUM
          SA6    RECNUM 
  
*         READY TO CLEAN UP AND RETURN. 
  
 CMP19    WRITER OPLDF,R
          WRITER  NUMBERS,R 
          RJ     SBU         SORT BY USER 
          UNLOAD OPLDF,R
          SX5    B0+         FLAG ABORT ON DATABASE ATTACH
          RJ     UPD         UPDATE DATABASE
          EQ     MAIN8       RETURN TO MAIN LOOP
  
*         NO FILES PROCESSED. 
  
 CMP20    MESSAGE  CMPF,3    * NO FILES SELECTED - NO ACTION TAKEN.*
          WRITEC O,CMPF 
          EQ     MAIN8       RETURN TO MAIN LOOP
  
*         FILE NOT FOUND WHERE EXPECTED.
  
 CMP21    UNLOAD DB,R 
          UNLOAD CF 
          UNLOAD MF 
          UNLOAD OPLDF
          UNLOAD NUMBERS
          SX5    TF 
          SX1    B0+
          RJ     RNT         UNLOAD DUMP FILE IF TAPE 
          SA1    TF+TDNV     PUT DUMP VSN OR FILE NAME INTO MESSAGE 
          RJ     ZTB
          MX0    18 
          SA1    CMPG+3 
          BX1    X0*X1
          LX6    42 
          BX6    -X0*X6 
          BX6    X1+X6
          SA6    A1 
          WRITEC O,CMPG 
          SA1    NAP
          NZ     X1,MAIN8    IF NO ABORT SELECTED 
          EQ     MAIN7       ABORT *RECLAIM* IF NOT INTERACTIVE 
  
  
 CMPA     DATA   C* CT, CN OR OV KEYWORD NOT PRESENT.*
 CMPB     BSSZ   ITEMSIZ-DBEL 
 CMPC     BSSZ   UDBEL       UPDATE ENTRY SIZE
 CMPD     DATA   0           CORRECT VSN FOR NEW DATABASE ENTRIES 
 CMPF     DATA   C* NO FILES SELECTED - NO ACTION TAKEN.* 
 CMPG     DATA   C* SEE DAYFILE - UNABLE TO COMPACT XXXXXXX.* 
          TITLE  PROCESS *COPY* DIRECTIVE.
 COPY     SPACE  4,20 
**        COPY - PROCESS *COPY* DIRECTIVE.
* 
*         ENTRY  PARAMETERS FROM COMMAND LINE IN *ARMTAB*.
*                ENTERED AT *CPY1* FROM LOAD. 
* 
*         EXIT   SPECIFIED FILES COPIED TO DISK.
* 
*         ERROR  TO *ABT* IF FILE COPY ERRORS AND *NA* NOT SPECIFIED. 
* 
*         USES   X - ALL. 
*                A - 0, 1, 2, 3, 5, 6, 7. 
* 
*         CALLS  CDF, CTF, PDB, PDF, POT, RDB, RNT, SFC, SRT, UPD, ZTB. 
* 
*         MACROS BREAK, MESSAGE, READ, READW, REWIND, SKIPF, SKIPFF,
*                WRITEC, WRITEO, WRITER, WRITEW, UNLOAD.
  
  
 COPY     BSS    0           ENTRY
          SA1    =10H COPYING,     SET UP B-DISPLAY MESSAGE 
          BX6    X1 
          SA6    BMSG 
          SX6    B0+         COPY FLAG
 CPY1     SA6    LOADFLG     SAVE LOAD/COPY STATUS
          BX7    X7-X7
          SX6    B1 
          SA7    TF+TRING 
          SA7    CPYA        CLEAR *COPY* TAPE FLAGS
          SA6    LVV         ENSURE ONLY LATEST VERSION PROCESSED 
          SX6    7777B       SET MAXIMUM FILES PROCESSED
          RJ     SFC         SET FILE COUNT 
          SA4    TAPDFLT     TAPE DEFAULTS FOR *BTF*
          SX5    TF 
          SX6    B0+         IGNORE EXISTING TAPE FLAGS 
          RJ     BTF         BUILD TAPE FLAGS 
          SA1    DV 
          ZR     X1,CPY2     IF DENSITY NOT SPECIFIED 
          SA6    CPYA        SAVE TAPE FLAGS FOR LATER USE
 CPY2     SA1    DBNAM       DATA BASE NAME 
          NZ     X1,CPY6     IF DATA BASE SPECIFIED 
  
*         PROCESS WITH NO DATABASE
  
          SA1    TF+TTNV     TAPE NAME VARIABLE 
          NZ     X1,CPY3     IF *TN* OR *DN* WAS GIVEN
          MESSAGE  ERTN,3    * TN OR DN MUST BE SPECIFIED.* 
          WRITEC O,ERTN 
          EQ     MAIN8       RETURN TO MAIN LOOP
  
 CPY3     SX5    TF 
          RJ     RNT         REQUEST NEW TAPE 
          REWIND TF,R 
          SA1    PFV         PERMANENT FILE VARIABLE
          SA2    FNV         LOCAL FILE VARIABLE
          BX2    X2+X1
          SX6    B1 
          SA6    CFC         RESET FILE NUMBER COUNTER
          SX6    B0+
          SA6    CRC         RESET RECORD NUMBER COUNTER
          ZR     X2,CPY4     IF PF OR NF NOT SET
          RJ     PPF         PROCESS PERMANENT FILE NAMES 
  
*         CLEAR 6 WORD ENTRY FOR CTF CALL 
  
 CPY4     SX6    B0+
          SA6    SORR 
          SA6    A6+B1
          SA6    A6+B1
          SA6    A6+B1
          SA6    A6+B1
          SA6    A6+B1
          SA6    EOIFLG      CLEAR EOI ON DUMP FLAG 
          SA1    CRC
          SX6    X1+B1       INCREMENT RECORD COUNTER 
          MX0    -12
          BX6    -X0*X6 
          SA6    A1 
          NZ     X6,CPY5     IF NOT A PSEUDO FILE POINT 
          SA1    CFC
          SX6    X6+B1
          SA6    A1 
 CPY5     SA5    SORR 
          RJ     CTF
          SA1    EOIFLG      EOI ON DUMP ENCOUNTERED FLAG 
          NZ     X1,MAIN8    IF EOI ENCOUNTERED THEN CLEAR UP 
          EQ     CPY4        LOOP FOR NEXT ENTRY
  
 CPY6     SA1    UNV
          SA2    TF+TTNV
          BX5    X1          SET DB CREATION MODE VIA UN OPTION 
          ZR     X2,CPY7     IF TN WAS NOT ENTERED
          SA1    PDBC        POINT TO WORKING USER NAME LOCATION
          SX1    B0+         SET UP TO SCAN THE ENTIRE DATABASE 
 CPY7     SX7    PTRD 
          RJ     PDB         POSITION DATA BASE 
  
*         WRITE FILE OF DATABASE ENTRIES TO PROCESS.
  
          WRITE  CF,*        PRESET WRITE FUNCTION
 CPY8     RJ     RDB         READ ENTRY FROM DATA BASE
          NZ     X1,CPY10    IF NO MORE 
          BREAK              CHECK FOR INTERRUPT
          SA1    DBE+DBPFN   EXTRACT FILE NAME
          BX6    X0*X1
          SA1    DBE+DBFTY
          LX1    24 
          BX2    -X0*X1 
          BX6    X2+X6
          SA6    SORR 
          LX1    18 
          BX6    -X0*X1 
          SA2    DBE+DBFLG   WORD WITH TAPE FLAGS 
          LX2    59-47
          NG     X2,CPY9     IF PERMANENT FILE FLAG SET 
          MX0    36          SET MASK FOR TAPE VSN
 CPY9     SA1    DBE+DBTNO   GET TN 
          BX1    X0*X1
          BX6    X1+X6
          WRITEO CF 
          WRITEW CF,SORR,1
          WRITEW CF,DBE,DBEL
          EQ     CPY8        LOOP FOR NEXT ENTRY
  
 CPY10    UNLOAD DB,R 
          SA1    NFP
          NZ     X1,CPY11    IF THERE ARE FILES TO COPY/LOAD
          SA1    USERDB 
          ZR     X1,MAIN8    IF NOT A USER DATABASE 
          SA1    TF+TTNV
          ZR     X1,MAIN8    IF NO *TN* PARAMETER 
          SA1    TNN         OCCURRENCES OF TN ON DATABASE
          NZ     X1,MAIN8    IF VSN FOUND ON DATABASE 
          NG     X1,MAIN8    IF VSN FOUND FOR OTHER USER NAME 
          SA1    UNV
          ZR     X1,MAIN8    IF UN=0 WAS SPECIFIED
          RJ     CDF         CREATE DATABASE FILE 
          SA1    TNN
          ZR     X1,MAIN8    IF NO FILES ADDED TO DATA BASE 
          SX5    -1          FLAG DEFINE ONLY 
          RJ     UPD         UPDATE DATABASE
          SA1    LOADFLG
          BX6    X1          SET COPY 
          EQ     CPY1        RESTART THIS COPY
  
 CPY11    WRITER CF,R 
          REWIND CF,R 
          RJ     SRT         MERGE SORT THE ENTRIES 
          READ   CF 
          SX5    B0+         ABORT IF DATABASE NOT FOUND
          SX7    PTRD        SET READ MODE FOR DATABASE ATTACH
          RJ     LVI         LOCATE VSN INDEX 
  
*         WHILE NOT EOF(CF) DO ONE ENTRY. 
  
 CPY12    BREAK 
          READW  CF,SORR,ITEMSIZ
          NZ     X1,CPY14    IF END OF RECORD/FILE/INFO 
          SA0    SORR+2      ADDRESS OF DATABASE ENTRY
          RJ     POT         TELL WHAT FILE WE ARE DOING
          SA1    SORR 
          SA2    CPYA 
          SA3    A1+B1       GET TAPE FLAGS 
          ZR     X2,CPY13    IF DENSITY NOT SPECIFIED 
          BX6    X2-X3
          SX5    4400B       CHECK DISK/TAPE AND NT/MT
          BX6    X5*X6
          NZ     X6,CPY13    IF DISK/TAPE OR NT/MT MISMATCH 
          BX3    X2          SUBSTITUTE SPECIFIED FLAGS 
 CPY13    BX2    X1          GET FILE AND RECORD NUMBER INTO X2 
          RJ     LCV         LOCATE CURRENT VSN, REQUEST TAPE 
          SA5    SORR 
          RJ     PDF         POSITION DUMP FILE 
          NG     X5,CPY15    IF AN ERROR HAS OCCURRED 
          SA5    SORR 
          RJ     CTF
          SA1    CRC         INCREMENT CURRENT RECORD COUNT 
          SX6    X1+B1
          SA6    A1 
          SX5    TF 
          RJ     UFV         UPDATE FET VSN 
          EQ     CPY12       PROCESS NEXT ENTRY 
  
 CPY14    UNLOAD CF,R 
          UNLOAD DB,R        UNLOAD DATABASE
          EQ     MAIN8       RETURN TO MAIN LOOP
  
*         COPY ABORT. 
  
 CPY15    REWIND TF,R 
  
*         BUILD ERROR MESSAGE.
  
          SA1    SORR+1 
          MX0    42 
          BX1    X0*X1       FILE NAME
          RJ     ZTB         CONVERT BINARY ZEROES TO BLANKS
          MX0    42 
          SA1    LDNG+3 
          BX6    X0*X6       EXTRACT TOP SEVEN CHARACTERS 
          BX1    -X0*X1      BOTTOM OF MESSAGE
          BX6    X6+X1       MERGE PIECES TOGETHER
          SA6    LDNG+3 
  
*         CHECK RA+0 TO SEE IF WE TOOK AN ERROR EXIT OR FELL
*         THROUGH FROM *CPY15*.  IF THERE WAS NO ERROR EXIT THEN
*         ENSURE TAPE AND VARIABLES SHOW -EOR- ON TAPE. 
  
          SA2    B0          FETCH RA+0 
          AX2    24          IGNORE SENSE SWITCHES, IF ANY
          NZ     X2,CPY17    IF THERE WAS AN ERROR EXIT THEN STOP NOW 
          WRITEC O,LDNG      * SEE DAYFILE - UNABLE TO LOAD XXXXXXX.* 
          RJ     ILC         INCREMENT LINE COUNT 
          MX0    -7          WIDTH OF *CIO* FUNCTION CODE 
          SA1    TF 
          LX0    2           SKIP BINARY/CODED AND COMPLETE BITS
          BX1    -X0*X1      EXTRACT FUNCTION CODE/STATUS 
          SX1    X1-17B      POS. IF EOR/EOF, NEG. IF COMPLETE READ 
          PL     X1,CPY16    IF READ HIT AN EOR/EOF 
          SKIPF  TF,1,R      SKIP TO END OF CURRENT RECORD
 CPY16    SA1    CRC         CURRENT RECORD COUNT 
          SX6    X1+B1       INCREMENT RECORD COUNT 
          SA6    A1          JUST IN CASE *NA* SET
          SA1    NAP
          NZ     X1,CPY12    IF NO ABORT PARAMETER SELECTED 
 CPY17    UNLOAD CF 
          EQ     ABT         ABORT *RECLAIM*
  
  
 CPYA     BSS    1           STORAGE FOR SPECIFIED TAPE FLAGS 
          TITLE  PROCESS *DELETE*/*RESET* DIRECTIVES. 
 DELETE   SPACE  4,20 
**        DELETE - PROCESS *DELETE*/*RESET* DIRECTIVES. 
* 
*         ENTRY  *COPTION* INDICATES *DELETE* OR *RESET* DIRECTIVE. 
* 
*         EXIT   *DELETE*/*RESET* COMPLETE. 
* 
*         USES   X - 0, 1, 2, 3, 5, 6, 7. 
*                A - 0, 1, 2, 3, 5, 6, 7. 
*                B - 4. 
* 
*         CALLS  CRI, PDB, POT, SFC.
* 
*         MACROS CLEAR, READ, REWRITE, REWRITER.
  
  
 DELETE   BSS    0           ENTRY
          SX7    PTWR        SET WRITE MODE FOR ATTACH
          SX5    B0+         FLAG ABORT IF ATTACH FAILS 
          SA1    UNV         SET FOR CURRENT USER NAME
          RJ     PDB         POSITION DATA BASE 
          PL     X5,DLT1     IF USER RECORD FOUND 
          MESSAGE  ERND,3    * NO DATA FOUND FOR USER NAME.*
          WRITEC O,ERND 
          EQ     MAIN8       RETURN TO MAIN LOOP
  
 DLT1     SX6    B1 
          ZR     X5,DLT2     IF USERNAME NOT SELECTION CRITERION
          BX6    X5          SAVE RANDOM ADDRESS OF USER
 DLT2     SA6    DLTA        SAVE RANDOM INDEX
          SX6    377777B     SET DEFAULT FILE COUNT 
          RJ     SFC         SET FILE COUNT 
          SX6    B0+
          SA6    DLTC 
          SA6    DLTB 
          SA6    LAD
          SA5    PFV
          MX6    -1 
          LX5    6
          SA6    DLTD 
          SX5    X5-1R* 
          NZ     X5,DLT4     IF NO PF=* 
          RJ     PPF         PROCESS PERMANENT FILES
          EQ     DLT4        CHECK FOR EOI ON DATABASE
  
*         SAVE RANDOM INDEX FROM PREVIOUS READ. 
  
 DLT3     CLEAR  DB          CLEAR FET POINTERS 
          MX0    30 
          SA1    DB+6 
          BX6    X0*X1       CURRENT RANDOM INDEX 
          LX6    30 
          SA6    DLTA 
          READ   DB,R 
  
*         CHECK FOR EOI ON DATABASE.
  
 DLT4     SA5    DB 
          LX5    59-9 
          NG     X5,DLT14    IF HIT EOI 
          SX6    B0          RESET DELETE COUNT FOR CURRENT BUFFER
          SA6    DLTC 
          LX5    9-59        MOVE FET FIRST WORD BACK IN PLACE
          MX0    -6 
          BX5    -X0*X5      EXTRACT BUFFER FULL/EOR/EOF STATUS 
          SX6    X5-17B      .GT. 0 IF SHORT PRU, .LT. 0 IF BUFFER FULL 
          SA6    DLTD        SAVE RESULT FOR REWRITE
          SA1    DB+3        OUT
          SX6    X1-DBEL
          SA6    DLTB        ADDRESS OF CURRENT RECORD BEING READ 
  
*         CHECK FOR EMPTY READ -- I.E. DISK ERROR.
  
          SA2    DB+2        IN 
          BX1    X1-X2
          ZR     X1,DLT3     IF EMPTY READ
  
*         IF *RESET* SET DELETE VARIABLE TO FOOL *CRI*. 
  
          SA1    COPTION
          SA2    =0LRESET 
          BX6    X1-X2
          NZ     X6,DLT5     IF *DELETE* DIRECTIVE* 
          SX6    B1+
          SA6    DEV
 DLT5     SA1    DLTB 
          SA2    DB+2        IN 
          SX6    X1+DBEL
          IX2    X6-X2
          PL     X2,DLT14    IF CURRENT BUFFER EXHAUSTED
          SA6    A1 
          SA0    X6          KEEP *CRI* HAPPY 
          SX5    -1          PRESET EXIT FLAG 
          MX0    42 
          SA1    X6 
          SA2    OPLDH       OPLD HEADER
          BX2    X1-X2
          BX1    X0*X1       USER NAME
          ZR     X2,DLT14    IF OPLD RECORD (NO MORE USER NAMES)
          SA2    VSNDX       VSN INDEX IDENTIFIER 
          BX2    X1-X2
          ZR     X2,DLT14    IF VSN INDEX (NO MORE USER NAMES)
          SA2    UNV
          ZR     X2,DLT6     IF UN=0 IN EFFECT
          BX2    X0*X2       STRIP PRU COUNT
          BX1    X1-X2
          NZ     X1,DLT14    IF DONE PROCESSING SELECTED USER NAME
 DLT6     RJ     CRI         CHECK CRITERIA 
  
*         IF *CRI* RETURNS A NONZERO RESULT (CRITERIA NOT MET) THE
*         RESULT MAY BE NEGATIVE.  THIS MUST BE REMOVED FOR THE 
*         TEST AT *DLT17*.
  
          SX1    B0+
          IX5    X5+X1       REMOVE ANY NEGATIVE ZERO, JUST IN CASE 
          CX5    X5          MAKE POSSIBLY NEGATIVE RESULT POSITIVE 
          NZ     X5,DLT5     IF CURRENT RECORD DOES NOT MEET CRITERIA 
  
*         DECIDE WHETHER *RESET* OR *DELETE* WAS CALLED.
  
          SA3    DEV         IF SET -- RESET OPTION CALLED
          MX7    1           PRESET DELETE BIT
          SA1    A0+DBFLG 
          NZ     X3,DLT7     IF RESET 
          NG     X1,DLT5     IF FILE DELETED PREVIOUSLY 
          BX7    X7+X1       SET DELETE FLAG
          EQ     DLT8        CHECK FILE LIMIT 
  
 DLT7     PL     X1,DLT5     IF FILE NOT DELETED
          BX7    -X7*X1      CLEAR DELETE FLAG
  
  
*         CHECK FILE LIMIT/INCREMENT FILE COUNT.
  
 DLT8     SA2    PFV
          LX2    6
          SX2    X2-1R* 
          NZ     X2,DLT12    IF NOT PF=*
          SA2    PFTAB-1
          MX0    42 
          SA3    A0+DBPFN 
          BX3    X0*X3
 DLT9     SA2    A2+B1
          ZR     X2,DLT10    IF END OF PFTAB TABLE
          BX6    X0*X2
          BX6    X6-X3
          NZ     X6,DLT9     IF NOT CORRECT FILE IN TABLE 
          SA3    DEV         DELETE FLAG
          ZR     X1,DLT11    IF NOT *RESET* 
          SA3    EXV         EXCEPTION PROCESSING FLAG
          ZR     X3,DLT11    IF NOT EXCEPTION PROCESSING
          IX5    X5-X5       CLEAR ALL DONE FLAG
          EQ     DLT14       DO NOT PROCESS THIS FILE 
  
 DLT10    SA3    DEV         DELETE FLAG
          ZR     X3,DLT12    IF NOT *RESET* 
          SA3    EXV         EXCEPTION FLAG 
          NZ     X3,DLT12    IF NOT EXCEPTION PROCESSING
          IX5    X5-X5       CLEAR ALL DONE FLAG
          EQ     DLT14       DO NOT PROCESS THIS FILE 
  
 DLT11    BX2    -X0*X2 
          SA3    NFP
          SX6    X3+1 
          IX3    X6-X2
          SA2    NFV
          IX2    X2-X3
          SX2    X2-1 
          NG     X2,DLT14    IF FILE LIMIT EXCEEDED FOR THIS FILE 
          EQ     DLT13       INCREMENT FILE COUNT 
  
 DLT12    SA2    NFV
          SA3    NFP
          SX6    X3+1 
          IX5    X2-X6
          NG     X5,DLT14    IF FILE LIMIT EXCEEDED -- EXIT FLAG SET
 DLT13    SA6    A3 
          SX6    B1          SET CURRENT BUFFER DELETE/RESET FLAG 
          SA6    DLTC 
  
*         SET DELETE/RESET FLAG.
  
          SA7    A1 
          RJ     POT         PROCESS OUTPUT 
          EQ     DLT5        CONTINUE BUFFER PROCESSING 
  
*         REWRITE CURRENT BUFFER IF RECORDS TO BE CHANGED.
  
 DLT14    SA1    DLTC        DELETE FLAG FOR CURRENT BUFFER 
          SB4    X1 
          ZR     B4,DLT17    IF NO DELETES FOR THIS BUFFER
  
*         PREPARE REWRITE - MOVE PREVIOUS RANDOM REWRITE VALUE
*         AND SET REWRITE BIT IN FET+6. 
  
          SA1    DLTA 
          SX6    B1 
          LX6    29 
          BX6    X6+X1
          SA6    DB+6 
  
*         REWRITE CURRENT BUFFER -- IF EOR STATUS PERFORM *REWRITER*. 
  
          SA1    DLTD 
          PL     X1,DLT15    IF A SHORT PRU 
          REWRITE  DB,R 
          EQ     DLT16       REJOIN WITH REWRITER 
  
*         SHORT PRU TO REWITE.
  
 DLT15    REWRITER  DB,R
          SX6    -1 
          SA6    DLTD        RESET TO FULL PRU JUST IN CASE 
  
*         CLEAR RANDOM REWRITE BIT. 
  
 DLT16    SA1    DB+6 
          MX0    30 
          BX6    X0*X1
          SA6    A1 
 DLT17    NG     X5,MAIN8    IF ALL DONE
          EQ     DLT3        READ NEXT BUFFER 
  
  
 DLTA     DATA   0           PREVIOUS RANDOM INDEX ON DATABASE
 DLTB     DATA   0           ADDRESS OF CURRENT RECORD BEING READ 
 DLTC     DATA   0           DELETE FLAG FOR CURRENT BUFFER 
 DLTD     DATA   -1          DEFAULT FULL PRU REWRITE 
          TITLE  PROCESS *DUMP* DIRECTIVE.
 DUMP     SPACE  4,20 
**        DUMP - PROCESS *DUMP* DIRECTIVE.
* 
*         ENTRY  NONE.
* 
*         EXIT   FILES DUMPED TO TAPE.
* 
*         ERROR  TO *ABT* IF TAPE ALREADY HAS 63 DUMPS ON IT. 
* 
*         USES   X - ALL. 
*                A - 0, 1, 2, 3, 5, 6, 7. 
* 
*         CALLS  ADB, BTF, CDF, CDR, CRI, CVT, DFT, POT,
*                RNT, SDE, SFC, UPD.
* 
*         MACROS BREAK, CATLIST, CLEAR, MESSAGE, READ, READO, REWIND, 
*                SKIPFF, UNLOAD, WRITEC, WRITEF, WRITER, WRITEW.
  
  
 DUMP     BSS    0           ENTRY
          SA1    =10H DUMPING,     SET UP B-DISPLAY MESSAGE 
          BX6    X1 
          SA6    BMSG 
          SX6    7777B       MAXIMUM FILES DUMPED PER DIRECTIVE 
          RJ     SFC         SET FILE COUNT LIMIT 
          SA1    USERDB 
          NZ     X1,DMP1     IF A USER DATABASE 
          SA1    ACCESS 
          NZ     X1,DMP1     IF A PRIVILEGED USER 
          MESSAGE  DMPA,3    * DUMP DENIED FOR SPECIFIED DATABASE.* 
          WRITEC O,DMPA 
          EQ     MAIN        RETURN TO MAIN LOOP
  
 DMP1     SA1    TF+TMSV     MASS STORAGE VARIABLE
          NZ     X1,DMP2     IF DUMP FILE IS MASS STORAGE 
          SA1    TF+TTNV     TAPE NAME VARIABLE 
          NZ     X1,DMP2     IF TN SPECIFIED
          MESSAGE  ERTN,3    * TN OR DN MUST BE SPECIFIED.* 
          WRITEC O,ERTN 
          EQ     MAIN        RETURN TO MAIN LOOP
  
 DMP2     SX7    PTWR        SET TO ATTACH DATA BASE IN WRITE MODE
          SX5    -1          SET TO CREATE DATA BASE IF NOT FOUND 
          RJ     LVI         SET DATABASE IN WRITE MODE AT VSN INDEX
          NZ     X6,DMP3     IF NO VSN INDEX
          SA1    TF+TTNV
          SA3    TF+TMSV
          RJ     LEF         LOCATE EXISTING TAPE FLAGS 
 DMP3     SX6    X6+
          SA4    TAPDFLT     SET DEFAULT TAPE FLAGS 
          ZR     X6,DMP4     IF NO EXISTING TAPE FLAGS
          SA1    EIV
          BX4    X6          DEFAULT TO EXISTING FLAGS
          NZ     X1,DMP4     IF DUMPING AT *EOI*
          BX6    X6-X6       CLEAR EXISTING FLAGS FOR *BOI* DUMP
 DMP4     SX5    TF 
          RJ     BTF         BUILD TAPE FLAGS 
          SA1    PFV         PERMANENT FILE VARIABLE
          SA2    FNV         LOCAL FILE VARIABLE
          IX6    X1+X2
          ZR     X6,DMP5     IF NOT PART OF CRITERIA
          RJ     PPF         PROCESS PERMANENT FILE CRITERIA
 DMP5     WRITE  OPLDF,*     PRESET WRITE FUNCTION
          SA0    DBE
          MX6    0
          SA6    CAT+CFPN    CLEAR CATLIST FILE NAME
 DMP6     SA1    PFTAB
          ZR     X1,DMP9     IF NO PERMANENT FILE LIST
          SA1    EXV
          NZ     X1,DMP9     IF EXCEPTION PROCESSING IN EFFECT
          SA2    PFCNT       GET PFTAB POINTER
          SA1    PFTAB+X2    PFTAB(PFCNT) 
          ZR     X1,DMP21    IF ALL FILES PROCESSED 
          MX0    42 
          BX6    -X0*X1 
          BX1    X0*X1       ISOLATE FILE NAME
          LX6    58          POSITION TO LOCAL FILE FLAG
          PL     X6,DMP8     IF FILE NOT LOCAL
          SA2    CATSKL 
          BX2    -X0*X2      ISOLATE USER INDEX 
          BX6    X1+X2       MERGE FILE NAME AND USER INDEX 
          SA6    CATBUF 
          SA2    FIBK 
          BX2    -X0*X2 
          BX6    X1+X2
          SA6    A2+         SET FILE NAME INTO *FILINFO* BUFFER
          FILINFO  FIBK 
          SA1    FIBLEN      GET FILE LENGTH IN SECTORS 
          MX0    24 
          BX6    X0*X1
          SA1    TYV         TYPE VARIABLE
          LX1    6
          SX2    X1-1RI 
          ZR     X2,DMP7     IF FILE IS TO BE INDIRECT
          SX2    4000B       DIRECT FLAG
          BX6    X2+X6
 DMP7     SA6    CATBUF+FCLF  SAVE FILE SIZE AND TYPE 
          MOVE   NWCE-2,CATSKL+2,CATBUF+2  MOVE REST OF DUMMY PFC 
          EQ     DMP11       PROCESS CATLIST INFORMATION
  
 DMP8     BX6    X1 
          SA6    CATBUF      SAVE FILE NAME 
          SX0    4+1         SET *SA* AND *EP* BITS IN FET
          LX0    44 
          SA1    CAT+B1      FET +1 
          BX6    X0+X1
          SA6    A1 
          CATLIST  CAT,CATBUF 
          MOVE   NWCE,CLSBUF,CATBUF  MOVE TO WORKING BUFFER 
          CLEAR  CAT
          SA2    CAT+1       CLEAR *SA* AND *EP* BITS 
          SX0    4+1
          LX0    44 
          BX6    -X0*X2 
          SA6    A2+
          SA1    CAT         CHECK FOR ERRORS 
          MX0    8
          LX0    17-59       POSITION MASK FOR ERROR CODE FIELD 
          BX2    X0*X1
          ZR     X2,DMP11    IF NO ERROR
          SA1    PFCNT       POINTER IN PFTAB 
          SX6    X1+B1
          SA6    A1          INCREMENT COUNTER
          EQ     DMP6        PROCESS NEXT ENTRY 
  
 DMP9     CATLIST  CAT       FILL *CATLIST* BUFFER
  
 DMP10    READW  CAT,CATBUF,NWCE  READ CATALOG ENTRY
          ZR     X1,DMP11    IF ENTRY AVAILABLE 
          SX1    X1+2 
          ZR     X1,DMP21    IF END OF CATALOG
          EQ     DMP9        REFILL BUFFER
  
 DMP11    SA3    CATBUF 
          RJ     CDR         CREATE DATABASE RECORD FROM CATLIST
          SA5    RSV
          ZR     X5,DMP14    IF FILE RESIDENCE NOT SPECIFIED
          LX5    59-4        CHECK FOR DISK RESIDENCE 
          PL     X5,DMP12    IF DISK RESIDENCE NOT SPECIFIED
          MX0    -12
          SA1    CATBUF+FCBT
          LX0    12 
          BX1    -X0*X1 
          NZ     X1,DMP14    IF DISK RESIDENT 
 DMP12    LX5    59-3-59+4   CHECK FOR CARTRIDGE RESIDENCE
          MX0    -36
          PL     X5,DMP13    IF CARTRIDGE RESIDENCE NOT SPECIFIED 
          SA1    CATBUF+FCAA
          BX0    -X0*X1 
          LX1    59-48
          ZR     X0,DMP13    IF NOT CARTRIDGE RESIDENT
          PL     X1,DMP14    IF CARTRIDGE COPY NOT OBSOLETE 
 DMP13    LX5    59-20-59+3 
          MX0    -24
          PL     X5,DMP15    IF RESIDENCE CRITERIA NOT MET
          SA1    CATBUF+FCTV
          BX1    -X0*X1 
          ZR     X1,DMP15    IF RESIDENCE CRITERIA NOT MET
 DMP14    RJ     CRI         CHECK CRITERIA 
          ZR     X5,DMP16    IF CRITERIA MET
 DMP15    SA1    PFTAB       PERMANENT FILE TABLE 
          ZR     X1,DMP10    IF NO FILES SPECIFIED
          SA1    EXV
          NZ     X1,DMP10    IF EXCEPTION PROCESSING IN EFFECT
          SA1    PFCNT       POINTER TO CURRENT FILE IN PFTAB 
          SX6    X1+B1       INCREMENT POINTER
          SA6    A1 
          EQ     DMP6        GET NEXT FILE NAME 
  
 DMP16    SA1    NFV         NUMBER OF FILES PROCESSED
          SA2    NFP         NUMBER OF FILES PROCESSED
          SX6    X2+1 
          IX5    X1-X6
          NG     X5,DMP21    IF USER LIMIT EXCEEDED 
          SX1    7777B       MAXIMUM FILES DUMPED AT ONCE 
          IX5    X1-X6       COMPUTE  (MAXIMUM-ACTUAL)
          NG     X5,DMP21    IF IMPOSED FILE LIMIT EXCEEDED 
          NZ     X2,DMP17    IF TAPE ALREADY ASSIGNED 
          SX5    TF 
          RJ     ROD         REQUEST AND POSITION DUMP
          SA1    DBE+DBFNO
          SA2    CFC         GET ACTUAL POSITION FOR DATABASE ENTRY 
          SA3    CRC
          MX0    -30         MASK FOR TAPE FLAGS, FILE AND RECORD 
          LX0    18          POSITION MASK FOR FLAGS, FILE AND RECORD 
          BX1    X0*X1       REMOVE ANY DEBRIS
          LX2    30          POSITION FILE NUMBER 
          LX3    18          POSITION RECORD NUMBER 
          BX6    X2+X3       MERGE FILE AND RECORD NUMBERS
          SA2    TF+TFLAGS   GET TAPE FLAGS, WHICH MAY HAVE CHANGED 
          BX6    X1+X6
          LX2    36 
          BX6    X2+X6       MERGE IN NEW TAPE FLAGS
          SA6    A1+
 DMP17    RJ     DFT         DUMP FILE TO TAPE
          NZ     X1,DMP20    IF ERROR IN DUMPING FILE 
          SX5    TF 
          RJ     UDV         UPDATE DUMP VSN
          SA1    CRC
          SX6    X1+B1
          SA6    A1          UPDATE RECORD NUMBER 
          SA1    NFP
          SX6    X1+B1
          SA6    A1          UPDATE NUMBER OF FILES PROCESSED 
          MX0    42 
          SA1    NNV         NEW NAME VARIABLE
          BX6    X0*X1
          NZ     X6,DMP18    IF NO NEW NAME 
          SA1    DBE+DBUNM   NNTAB OFFSET 
          BX6    -X0*X1 
          ZR     X6,DMP19    IF NO NEW NAME 
          SA1    X6 
          BX6    X0*X1
 DMP18    SA1    DBE+DBPFN   GET THE OLD FILE NAME
          BX1    -X0*X1      MASK OFF DUMP DATE 
          BX6    X6+X1       NEW PFN AND DUMP DATE
          SA6    A1 
 DMP19    SA1    TF+TTNV     GET VSN IN CASE ASSIGNED BY TMS
          MX0    42 
          BX6    X0*X1       ISOLATE VSN
          SA1    DBE+DBTNO   VSN IN DATABASE RECORD 
          BX1    -X0*X1      CLEAR THE VSN FIELD
          BX6    X1+X6       MERGE IN SET VSN 
          SA6    A1 
          WRITEW OPLDF,A0,UDBEL 
          SX6    1           IGNORE BREAKS
          SA6    NOBREAK
          RJ     POT
          SX6    B0+         DEAL WITH BREAKS AGAIN 
          SA6    NOBREAK
          SA1    BREAK
          NZ     X1,DMP21    IF USER INTERRUPT FLAG SET 
 DMP20    SA1    PFTAB       PERMANENT FILE TABLE 
          ZR     X1,DMP10    IF FILE NAME NOT PART OF CRITERIA
          SA1    EXV
          NZ     X1,DMP10    IF EXCEPTION PROCESSING IN EFFECT
          EQ     DMP6        PROCESS NEXT FILE
  
 DMP21    SA1    NFP         CHECK NUMBER OF FILES DUMPED 
          ZR     X1,DMP23    IF NOTHING DUMPED DO NOT UPDATE DATA BASE
          WRITEW TF,TRAILER,B1  END-OF-DUMP CONTROL WORD
          WRITEF TF,R 
          SX5    TF 
          RJ     UDV         UPDATE DUMP VSN
          WRITER OPLDF,R     CLOSE OFF DATABASE UPDATE FILE 
          WRITER  NUMBERS,R  CLOSE OFF TAPE NUMBERS FILE
          RJ     SDE         SORT DATABASE RECORDS
          CLEAR  NEW
          UNLOAD OPLDF,R
          SA1    EIV         CHECK IF EOI DUMP
          ZR     X1,DMP22    IF AN INITIAL DUMP 
          SA1    DBDEFLG
          ZR     X1,DMP22    IF DATABASE WAS NOT DEFINED
          RJ     CDF         CREATE UPDATES FOR WHOLE TAPE
          SX5    B0+         SET ABORT IF ATTACH FAILS
 DMP22    RJ     UPD         UPDATE DATABASE
 DMP23    MX6    2           SET END OF INFORMATION INDICATOR 
          LX6    1
          SA6    CRC
          EQ     MAIN8       RETURN TO MAIN LOOP
  
  
 DMPA     DATA   C* DUMP DENIED FOR SPECIFIED DATABASE.*
          TITLE  PROCESS *END* DIRECTIVE. 
 END      SPACE  4,15 
**        END - PROCESS *END* DIRECTIVE.
* 
*         ENTRY  NONE.
* 
*         EXIT   TAPE UNLOADED. 
*                OUTPUT BUFFER FLUSHED. 
*                * RECLAIM COMPLETE.* ISSUED TO DAYFILE.
*                *RECLAIM* TERMINATED.
* 
*         USES   X - 1, 5.
* 
*         CALLS  RNT. 
* 
*         MACROS ENDRUN, MESSAGE, WRITER. 
  
  
 END      BSS    0           ENTRY
          SA1    TF+TFLAGS   CURRENT TAPE FLAGS 
          LX1    59-11
          NG     X1,END1     IF MASS STORAGE FILE 
          SX5    TF          SET TAPE FET ADDRESS 
          SX1    B0+         FLAG ONLY UNLOAD TAPE
          RJ     RNT         RESERVE TAPE IF NECESSARY AND UNLOAD 
 END1     SA1    RECSET 
          ZR     X1,END2     IF CHARACTER SET MODE NOT CHANGED
          CSET   RESTORE     RESTORE ORIGINAL CHARACTER SET MODE
 END2     WRITER O,R
          MESSAGE  ENDA,3    * RECLAIM COMPLETE.* 
          ENDRUN
  
  
 ENDA     DATA   C* RECLAIM COMPLETE.*
          TITLE  PROCESS *LIST* DIRECTIVE.
 LIST     SPACE  4,15 
**        LIST - PROCESS *LIST* DIRECTIVE.
* 
*         ENTRY  NONE.
* 
*         EXIT   LIST PRODUCED. 
*                INFORMATION RECOVERY ATTEMPTED FOR *TN* IF NOT FOUND 
*                IN DATABASE. 
* 
*         USES   X - 1, 5, 6, 7.
*                A - 0, 1.
* 
*         CALLS  CDF, PDB, POT, RDB, SFC, UPD.
  
  
 LIST     BSS    0           ENTRY
  
*         POSITION FOR DATABASE READING.
  
          SA1    DBNAM
          ZR     X1,LST3     IF NO DATA BASE
          SA1    UNV
          SA2    TF+TTNV
          BX5    X1          SET DB CREATION MODE VIA UN OPTION 
          ZR     X2,LIST0    IF TN WAS NOT ENTERED
          SA1    PDBC        POINT TO WORKING USER NAME LOCATION
          SX1    B0+         SET UP TO SCAN THE ENTIRE DATABASE 
 LIST0    SX7    PTRD 
          RJ     PDB         POSITION DATABASE
          SX6    377777B     SET FILE COUNT 
          RJ     SFC
  
*         PRINT NEXT DATABASE ENTRY MEETING SPECIFIED CRITERIA. 
  
 LST1     RJ     RDB         READ NEXT DATABASE ENTRY 
          NZ     X1,LST2     IF ALL DONE
          SA0    DBE         PROCESS OUTPUT 
          RJ     POT
          EQ     LST1        READ NEXT ENTRY
  
*         CHECK IF NOTHING FOUND IN DATABASE FOR SPECIFIED *TN*.
  
 LST2     SA1    NFP
          NZ     X1,MAIN8    IF SOME FILES LISTED 
          SA1    USERDB 
          ZR     X1,MAIN8    IF NOT A USER DATABASE 
          SA1    TF+TTNV
          ZR     X1,MAIN8    IF NO *TN* PARAMETER 
          SA1    TNN         OCCURRENCES OF SPECIFIED TN ON DATABASE
          NZ     X1,MAIN8    IF TN FOUND AT LEAST ONCE
          NG     X1,MAIN8    IF VSN FOUND FOR OTHER USER NAME 
          SA1    UNV
          ZR     X1,MAIN8    IF UN=0 WAS SPECIFIED
  
*         NO FILES FOR SPECIFIED *TN* ON DATABASE.  ATTEMPT RECOVERY. 
  
          RJ     CDF         CREATE DATABASE FILE 
          SA1    TNN
          ZR     X1,MAIN8    IF NO FILES ADDED TO DATA BASE 
          SX5    -1          FLAG DEFINE ONLY FOR UPD 
          RJ     UPD         UPDATE DATABASE
          EQ     LIST        RESTART *LIST* COMMAND 
  
*         LIST FILES ON DUMP FILE ONLY
  
 LST3     RJ     CDF
          EQ     MAIN8       RETURN 
          TITLE  PROCESS *LOAD* DIRECTIVE.
 LOAD     SPACE  4,10 
**        LOAD - PROCESS *LOAD* DIRECTIVE.
* 
*         ENTRY  NONE.
* 
*         EXIT   TO *CPY1* TO PROCESS LOAD. 
* 
*         USES   X - 6. 
  
  
 LOAD     BSS    0           ENTRY
          SA1    =10H LOADING,     SET UP B-DISPLAY MESSAGE 
          BX6    X1 
          SA6    BMSG 
          SX6    B1          *LOAD* FLAG
          EQ     CPY1        PROCESS *LOAD* 
          TITLE  PROCESS *REMOVE* DIRECTIVE.
 REMOVE   SPACE  4,15 
**        REMOVE - PROCESS *REMOVE* DIRECTIVE.
* 
*         ENTRY  NONE.
* 
*         EXIT   TAPE REMOVED FROM DATABASE.
* 
*         USES   X - 1, 5, 7. 
*                A - 1, 7.
* 
*         CALLS  UPD. 
* 
*         MACROS MESSAGE, WRITEC, WRITER, WRITEW. 
  
  
 REMOVE   BSS    0           ENTRY
  
*         ENSURE *TN* SPECIFIED.
  
          MX0    6*6         MASK FOR TAPE VSN
          SA1    TF+TMSV
          ZR     X1,RMV0     IF MASS STORAGE DUMP NOT SPECIFIED 
          MX0    7*6         MASK FOR MASS STORAGE FILE NAME
 RMV0     SA1    TF+TTNV
          NZ     X1,RMV1     IF TAPE NUMBER SPECIFIED 
          MESSAGE  ERTN,3    * TN OR DN MUST BE SPECIFIED.* 
          WRITEC O,ERTN 
          EQ     MAIN        RETURN TO MAIN LOOP
  
*         VALIDATE ACCESS TO THIS DATABASE. 
  
 RMV1     BX6    X0*X1
          SA1    USERDB 
          NZ     X1,RMV2     IF A USER DATABASE SPECIFIED 
          SA1    ACCESS 
          NZ     X1,RMV2     IF USER HAS PRIVILEGES 
          MESSAGE  RMVB,3    * REMOVE DENIED FOR SPECIFIED DATABASE.* 
          WRITEC O,RMVB 
          EQ     MAIN        RETURN TO MAIN LOOP
  
 RMV2     WRITEO NUMBERS     TAPE NUMBER TO REMOVE
          WRITER NUMBERS,R
          SX5    B0+         FLAG ABORT IF ATTACH FAILS 
          RJ     UPD         UPDATE DATABASE
          EQ     MAIN8       RETURN TO MAIN LOOP
  
  
 RMVB     DATA   C* REMOVE DENIED FOR SPECIFIED DATABASE.*
          TITLE  PROCESS *SET* DIRECTIVE. 
 SET      SPACE  4,15 
**        SET - PROCESS *SET* DIRECTIVE.
* 
*         ENTRY  (A0) = ADDRESS OF FIRST PARAMETER IN STRING BUFFER.
* 
*         EXIT   DEFAULT OPTIONS RESET. 
* 
*         USES   X - 0, 1, 2, 6.
*                A - 1, 6.
*                B - 2, 3, 4, 6.
* 
*         CALLS  ARM. 
  
  
 SET      BSS    0           ENTRY
  
*         ZERO OUT VARIABLE TABLE.
  
          SX6    B0+
          SB3    VARIABL     BEGINNING OF VARIABLE TABLE
          SB4    ARMTABL-1   LENGTH OF TABLE
 SET1     SA1    B3+B4       CLEAR NEXT VARIABLE
          SA6    A1 
          SB4    B4-B1
          GE     B4,B0,SET1  IF MORE IN TABLE TO CLEAR
  
*         PROCESS ARGUMENTS.
  
          SB3    ARMTAB 
          SB6    A0 
          RJ     ARM         PROCESS DIRECTIVE ARGUMENTS
          SB2    DEFAULT     BEGINNING OF DEFAULT TABLE 
          SB3    VARIABL
          SB4    ARMTABL-1   END OF TABLE 
  
*         CHECK NEXT OPTION.
  
 SET2     SA1    B3+B4       CURRENT TABLE ENTRY
          ZR     X1,SET6     IF WORD OF ALL ZEROES
  
*         CHECK FOR DISPLAY CODE ZERO.
  
          MX0    -6 
          SB6    11D
 SET3     SB6    B6-B1
          ZR     B6,SET5     IF FULL WORD COMPLETED 
          BX2    -X0*X1 
          SX2    X1-1R0 
          NZ     X2,SET4     IF INCOMING CHARACTER NOT DISPLAY ZERO 
          SX1    X1-33B 
 SET4     LX1    6
          EQ     SET3        CHECK NEXT CHARACTER 
  
 SET5     BX6    X1          PUT CONTENTS OF OPTION INTO DEFAULT TABLE
          SA6    B2+B4
 SET6     SB4    B4-B1       DECREMENT TABLE
          GE     B4,B0,SET2  IF MORE TO CHECK 
          EQ     MAIN        RETURN TO MAIN LOOP
          TITLE  PROCESS *UPDATE* DIRECTIVE.
 UPDATE   SPACE  4,15 
**        UPDATE - PROCESS *UPDATE* DIRECTIVE.
* 
*         ENTRY  FILE *UPDATES* CONTAINS ENTRIES TO ADD TO DATABASE.
*                FILE *NUMBERS* CONTAINS TAPE VSN-S.
* 
*         EXIT   UPDATE COMPLETE. 
* 
*         USES   X - 5. 
* 
*         CALLS  UPD. 
* 
*         NOTE   UPDATES FILE MUST BE SORTED. 
  
  
 UPDATE   BSS    0           ENTRY
          SX5    -1          FLAG DEFINE DATABASE IF POSSIBLE 
          RJ     UPD         UPDATE DATABASE
          EQ     MAIN8       RETURN TO MAIN LOOP
          TITLE  PRIMARY SUBROUTINES. 
 ABT      SPACE  4,10 
**        ABT - ABORT PROCESSING. 
* 
*         ENTRY  SOME ERROR DETECTED. 
* 
*         EXIT   ALL FILES RETURNED.
*                ERROR MESSAGES ISSUED. 
*                *RECLAIM* ABORTED. 
* 
*         MACROS ABORT, MESSAGE, UNLOAD, WRITEC, WRITER.
  
  
 ABT      BSS    0           ENTRY
          SX6    1           SET EOR ON INPUT FLAG
          SA6    EOR
          SA1    RPVBLK+3    GET THE REPRIEVE ERROR CODE
          MX0    48 
          BX1    -X0*X1 
          ZR     X1,ABT1     IF NO ERROR EXIT 
  
*         ISSUE ERROR MESSAGE.
  
          SA1    RPVBLK+3    GET ERROR CODE 
          MX0    -12
          BX1    -X0*X1      ISOLATE ERROR CODE 
          SB1    1           JUST IN CASE 
          SB2    B1+B1       BUILD SHIFT COUNT
          LX0    X1,B2       COMPUTE WORD OFFSET OF MESSAGE 
          SX0    X0+ABTA     SET MESSAGE ADDRESS
          MESSAGE  X0,3      ISSUE ERROR MESSAGE
          WRITEC O,X0 
  
*         SET COMPLETE BITS IN FETS.
  
          SA1    TF 
          SA2    DB 
          SA3    UPDATES
          SA4    NUMBERS
          SX5    1
          BX6    X1+X5
          BX7    X2+X5
          SA6    A1 
          SA7    A2 
          BX6    X3+X5
          BX7    X4+X5
          SA6    A3 
          SA7    A4 
          SA1    NEW
          SA2    CF 
          SA3    MF 
          SA4    SF 
          BX6    X1+X5
          BX7    X2+X5
          SA6    A1 
          SA7    A2 
          BX6    X3+X5
          BX7    X4+X5
          SA6    A3 
          SA7    A4 
  
*         UNLOAD ALL FILES (EXCEPT LOCAL FILE BEING DUMPED).
  
          SA1    DUMPLOC
          NZ     X1,ABT0     IF A LOCAL FILE WAS BEING DUMPED 
          UNLOAD  NEW 
 ABT0     UNLOAD CF 
          UNLOAD  MF
          UNLOAD  SF
          UNLOAD  NUMBERS 
          UNLOAD  UPDATES 
          UNLOAD  DB
  
*         ABORT *RECLAIM*.
  
 ABT1     SA1    RECSET 
          ZR     X1,ABT2     IF CHARACTER SET MODE NOT CHANGED
          CSET   RESTORE     RESTORE ORIGINAL CHARACTER SET MODE
 ABT2     WRITER O,R
          ABORT  ABTB        * RECLAIM ABORTED.*
  
  
 ABTA     INDEX              ERROR EXIT MESSAGES
          INDEX  /COMSRPV/NTEC,( NORMAL TERMINATION.                 )
          INDEX  /COMSRPV/TLEC,( TIME LIMIT.                         )
          INDEX  /COMSRPV/EEEC,( CPU ERROR EXIT.                     )
          INDEX  /COMSRPV/PPEC,( PP ABORT.                           )
          INDEX  /COMSRPV/CPEC,( CPU ABORT.                          )
          INDEX  /COMSRPV/PCEC,( PP CALL ERROR.                      )
          INDEX  /COMSRPV/ODEC,( OPERATOR DROP.                      )
          INDEX  /COMSRPV/OKEC,( OPERATOR KILL.                      )
          INDEX  /COMSRPV/RREC,( OPERATOR RERUN.                     )
          INDEX  /COMSRPV/ECEC,( EXTENDED MEMORY PARITY ERROR.       )
          INDEX  /COMSRPV/RCEC,( JOB HUNG IN AUTO RECALL.            )
          INDEX  /COMSRPV/MLEC,( MASS STORAGE LIMIT.                 )
          INDEX  /COMSRPV/SREC,( I/O LIMITS EXCEEDED.                )
          INDEX  /COMSRPV/TIEC,( TERMINAL INTERRUPT.                 )
          INDEX  /COMSRPV/TIEC+1  END OF TABLE
 ABTB     DATA   C* RECLAIM ABORTED.* 
 ADB      SPACE  4,25 
**        ADB - ATTACH DATABASE.
* 
*         ENTRY  (X7) = ATTACH MODE.
*                (X5) = 0 IF *RECLAIM* IS TO ABORT IF ATTACH FAILS. 
*                (X5) .NE. 0 IF *ADB* IS TO ATTEMPT TO DEFINE THE 
*                       DATABASE SHOULD THE ATTACH FAIL.
*                       CHECKED ONLY IF *TN* SPECIFIED. 
* 
*         EXIT   DATABASE ATTACHED. 
*                (X5) = 0 IF ATTACH WORKED. 
*                (X5) .NE. 0 IF DEFINED (UNCHANGED FROM ENTRY VALUE). 
* 
*         ERROR  TO *ABT* IF ATTACH FAILED AND NO RECOVERY. 
* 
*         USES   X - 0, 1, 2, 3, 5, 6, 7. 
*                A - 1, 2, 6, 7.
* 
*         MACROS ATTACH, BREAK, DEFINE, MESSAGE, RECALL, ROLLOUT, 
*                WRITEC, WRITER.
* 
*         DEFINE (X5) = FLAG FOR DEFINING DATABASE WHEN NOT FOUND.
  
  
 ADB10    SA1    DB+1        CLEAR *SA* BIT 
          SX6    1
          LX6    46 
          BX6    -X6*X1 
          SA6    A1+
  
 ADB      SUBR               ENTRY/EXIT 
          SA7    ADBD        ACCESS MODE
          SX6    ROLLFBS     MAXIMUM ROLLOUTS BEFORE TAPE UNLOAD
          SA6    ADBH 
 ADB1     SA1    DB+1 
          SX6    4+1         SET *SA* AND *EP* BITS 
          LX6    44 
          BX6    X6+X1
          SA6    A1+
          SA1    DBNAM       GET DATABASE NAME
          NZ     X1,ADB1.1   IF DATABASE .NE. 0 
          SX5    B0+         ACT LIKE ATTACH WORKED 
          EQ     ADB10       CLEAR *SA* BIT AND RETURN
  
 ADB1.1   ATTACH DB,DBNAM,DBUN,DBPW,ADBD,DBPN,RDT  ATTACH DATABASE
  
*         CHECK ERROR CODE RETURNED FROM *PFM*. 
  
          SA1    DB 
          SX0    X1 
          AX0    10 
          NZ     X0,ADB2     IF ATTACH FAILED 
          SX5    B0+         SET ATTACH SUCCESSFUL
          EQ     ADB10       CLEAR *SA* BIT AND RETURN
  
*         ATTACH FAILED.  CHECK *PFM* STATUS. 
  
 ADB2     SX3    X0-/ERRMSG/FBS  CHECK FOR FILE BUSY
          ZR     X3,ADB5     IF BUSY
          SX3    X0-/ERRMSG/PFA  CHECK FOR PF UTILITY ACTIVE
          ZR     X3,ADB5     IF ACTIVE
          SX3    X0-/ERRMSG/FNF  CHECK FOR FILE NOT FOUND 
          SA1    USERDB 
          NZ     X3,ADB7     IF FILE FOUND BUT SOME OTHER STATUS
          NZ     X1,ADB3     IF A USER DATABASE 
          MESSAGE  ADBA,3    * CONTACT CUSTOMER SERVICES...*
          WRITEC O,ADBA 
          EQ     ABT         ABORT *RECLAIM*
  
*         ATTEMPT TO DEFINE THE DATABASE FILE IF NECESSARY. 
  
 ADB3     ZR     X5,ADB4     IF RECLAIM IS TO ABORT 
          SA1    TF+TTNV
          ZR     X1,ADB4     IF *TN* NOT SPECIFIED
          SA2    DBUN 
          NZ     X2,ADB4     IF ALTERNATE USER DATABASE 
          SA2    DBNAM
          ZR     X2,ADB10    IF DB=0 (PROCESS WITHOUT DATABASE) 
  
*         DEFINE DATABASE FILE. 
  
          MESSAGE  ADBB,3    * DATABASE NOT FOUND...* 
          WRITEC O,ADBB 
          DEFINE DB,DBNAM,DBPW,,RDT,,,DBPN
          SA1    DB          CHECK *PFM* STATUS 
          SX1    X1 
          AX1    10 
          NZ     X1,ADB4     IF ERROR DEFINING DATABASE 
          SX6    B1 
          SA6    DBDEFLG     SET DATABASE DEFINED FLAG
          EQ     ADB10       CLEAR *SA* BIT AND RETURN WITH (X5) INTACT 
  
*         ATTACH FAILED - ABORT *RECLAIM*.
  
 ADB4     MESSAGE  ADBC,3    * USER DATABASE MISSING.*
          WRITEC O,ADBC 
          RJ     ABT         ABORT *RECLAIM*
  
*         DISPLAY *WAITING* MESSAGE IF IAOT AND OUTPUT IS TT EQUIPMENT. 
  
 ADB5     BREAK 
          SA1    JOBORIG     ORIGIN TYPE
          SX1    X1-IAOT     TIMESHARING ORIGIN TYPE
          NZ     X1,ADB6     IF NOT INTERACTIVE USER
          SA1    ODT         TERMINAL OUTPUT STATUS POINTER 
          NZ     X1,ADB6     IF OUTPUT NOT ASSIGNED TO TERMINAL 
          WRITEC O,ADBE      * WAITING FOR DATABASE NON-BUSY.*
          RJ     ILC         INCREMENT LINE COUNT 
          WRITER O,R
          WRITE  X2,*        PRESET FUNCTION IN FET 
  
*         PF TEMPORARILY UNAVAILABLE - WAIT A BIT AND TRY AGAIN.
*         UNLOAD DUMP TAPE IF THERE IS AN EXTREMELY LONG WAIT,
*         AS THIS COULD INDICATE A POSSIBLE DEADLOCK SITUATION. 
  
 ADB6     SX6    X0-/ERRMSG/PFA 
          NZ     X6,ADB6.1   IF NOT FILE BUSY 
          SA1    ADBH 
          ZR     X1,ADB6.1   IF TAPE ALREADY UNLOADED 
          SX6    X1-1        DECREMENT RETRY COUNT
          SA6    A1+
          NZ     X6,ADB6.1   IF NOT TIME TO UNLOAD TAPE 
          SA2    TF+TFETVSN 
          AX2    18 
          SX1    B0 
          ZR     X2,ADB6.1   IF NO TAPE ASSIGNED
          SX5    TF 
          RJ     RNT         UNLOAD THE TAPE
          SX6    B0+         SET FILE POSITION UNKNOWN
          SA6    CFC
          SA6    CRC
          SA6    FILENUM
          SA6    RECNUM 
 ADB6.1   ROLLOUT  ROLLTIM   WAIT FOR PF FREE 
          RECALL             WAIT FOR ROLLOUT COMPLETION IF TERMINAL
          BREAK 
          EQ     ADB1        ACQUIRE THE FILE AGAIN 
  
*         ABORT -- ERROR BEYOND PROGRAM CONTROL.  (X1) = (USERDB).
  
 ADB7     NZ     X1,ADB9     IF USER DATABASE 
          MESSAGE  ADBF,3    * CONTACT CUSTOMER SERVICES -- DB ERROR.*
          WRITEC O,ADBF 
          EQ     ABT         ABORT *RECLAIM*
  
 ADB9     MESSAGE  ADBG,3    * ERROR IN ATTACHING USER DATABASE.* 
          WRITEC O,ADBG 
          RJ     ABT         ABORT *RECLAIM*
  
  
 ADBA     DATA   C* CONTACT CUSTOMER SERVICES -- DB MISSING.* 
 ADBB     DATA   C* DATABASE NOT FOUND -- DEFINING NEW ONE.*
 ADBC     DATA   C* USER DATABASE MISSING.* 
 ADBD     DATA   0           PF ATTACH MODE 
 ADBE     DATA   C* WAITING FOR DATABASE NON-BUSY.* 
 ADBF     DATA   C* CONTACT CUSTOMER SERVICES -- DB ERROR.* 
 ADBG     DATA   C* ERROR IN ATTACHING USER DATABASE.*
 ADBH     BSS    1           FILE BUSY ROLLOUT COUNT
 ADBM     BSSZ   3           ERROR RETURNED BY *PFM*
 BTF      SPACE  4,15 
**        BTF - BUILD TAPE FLAGS. 
* 
*         ENTRY  (X4) = TAPE FLAG DEFAULT VALUES. 
*                (X5) = FET ADDRESS ASSOCIATED WITH TAPE FLAGS. 
*                (X6) = EXISTING TAPE FLAGS.
* 
*         EXIT   ((X5)+TFLAGS) = TAPE FLAGS.
*                (X6) = TAPE FLAGS. 
* 
*         ERROR  TO *MAIN* IF TAPE OPTION ERRORS OR MISMATCH. 
* 
*         USES   X - 0, 1, 2, 3, 6. 
*                A - 1, 2, 6. 
* 
*         MACROS MESSAGE, WRITEC. 
  
  
 BTF      SUBR               ENTRY/EXIT 
          SA1    X5+TMSV     MASS STORAGE VARIABLE FOR THIS FET 
          SX3    B0+         INITIALIZE TAPE PARAMETERS MASK
          ZR     X1,BTF1     IF NOT MASS STORAGE
          MX6    1
          LX6    11-59       SET *MASS STORAGE RESIDENT* INDICATOR
 BTF1     SA6    X5+TFLAGS   MASS STORAGE FLAG OR EXISTING TAPE FLAGS 
          NZ     X1,BTFX     IF MASS STORAGE, RETURN
          SA1    TMSTAT 
          SA2    FTV
          SX6    2S9         PRESET FOR LABELED TAPE
          ZR     X1,BTF1.1   IF *TMS* NOT ACTIVE
          ZR     X2,BTF1.1   IF *FT* NOT SPECIFIED
          SX6    X6+1S9      SET *FOREIGN TAPE* FLAG
  
*         CHECK TAPE DENSITY. 
  
 BTF1.1   SA1    DV          TAPE DENSITY 
          ZR     X1,BTF3     IF NO DENSITY SPECIFIED
          SX3    70B         SET MASK FOR DENSITY 
          SA2    TDEN 
 BTF2     BX0    X1-X2
          AX0    36 
          ZR     X0,BTF4     IF MATCHING DENSITY
          SA2    A2+1 
          NZ     X2,BTF2     IF MORE DENSITIES TO CHECK 
          MESSAGE  BTFA,3    * INCORRECT TAPE DENSITY.* 
          WRITEC O,BTFA 
          EQ     MAIN        RETURN TO MAIN LOOP
  
*         SET DENSITY, DEVICE TYPE BASED ON *DT*, *MT* OR *NT* VALUES.
  
 BTF3     SA1    DTV
          ZR     X2,BTF3.2   IF *DT* NOT SPECIFIED
          SA2    TDTV        SEARCH DEVICE TYPE VALUES TABLE
 BTF3.1   BX0    X1-X2
          AX0    36 
          ZR     X0,BTF3.3   IF CORRECT VALUE 
          SA2    A2+1 
          SX0    A2-TDTET 
          NZ     X0,BTF3.1   IF MORE TAPE DEVICES TO CHECK
 BTF3.2   SA1    MTV         CHECK *MT* VARIABLE
          SA2    DTMT 
          NZ     X1,BTF3.3   IF 7-TRACK TAPE SPECIFIED
          SA1    NTV         CHECK *NT* VARIABLE
          SA2    DTNT 
          NZ     X1,BTF3.3   IF 9-TRACK SPECIFIED 
          SX2    X4+         USE DEFAULT VALUES 
          EQ     BTF4        CONTINUE CHECKING
  
 BTF3.3   SX3    X3+700B     SET MASK FOR DEVICE TYPE 
 BTF4     SX1    7
          SX2    X2+         REMOVE SEARCH ARGUMENT FROM SELECTION
          BX0    X1*X4
          NZ     X0,BTF4.1   IF DEFAULT FORMAT GIVEN
          BX0    X1*X2       DEFAULT TO FORMAT FROM SELECTION 
 BTF4.1   BX2    -X1*X2      REMOVE FORMAT FROM SELECTION 
          BX6    X2+X6       SET TAPE DEVICE TYPE, DENSITY
  
*         CHECK TAPE FORMAT.
  
          SA1    FV          FORMAT VARIABLE
          ZR     X1,BTF6     IF FORMAT NOT SPECIFIED
          SX3    X3+7B       SET MASK FOR FORMAT
          SX0    B0+
 BTF5     SA2    X0+TFMT
          BX2    X1-X2
          ZR     X2,BTF6     IF MATCHING TAPE FORMAT
          SX0    X0+1 
          SX2    X0-TFMTL 
          NG     X2,BTF5     IF MORE FORMATS TO CHECK 
          SX2    BTFB        * INCORRECT TAPE FORMAT.*
          EQ     BTF7        ISSUE MESSAGE AND RETURN TO MAIN LOOP
  
*         SET FLAGS INTO *TFLAGS* FOLLOWING FET AND EXIT. 
  
 BTF6     BX6    X0+X6
          SA1    X5+TFLAGS   CHECK EXISTING TAPE FLAGS
          SA6    A1 
          ZR     X1,BTFX     IF NO EXISTING TAPE FLAGS
          BX0    X1-X6
          BX0    X3*X0
          ZR     X0,BTFX     IF EXISTING TAPE FLAGS MATCH 
          SX2    BTFC        * TAPE DENSITY/DEVICE/FORMAT MISMATCH.*
 BTF7     MESSAGE  X2,3      ISSUE APPROPRIATE ERROR MESSAGE
          WRITEC O,X2 
          EQ     MAIN        RETURN TO MAIN LOOP
  
  
 BTFA     DATA   C* INCORRECT TAPE DENSITY.*
 BTFB     DATA   C* INCORRECT TAPE FORMAT.* 
 BTFC     DATA   C* TAPE DENSITY/DEVICE/FORMAT MISMATCH.* 
 CBR      SPACE  4,15 
**        CBR - COPY BINARY RECORD. 
* 
*         *CBR* COPIES ONE SYSTEM LOGICAL RECORD FROM ONE FILE
*         TO ANOTHER. 
* 
*         ENTRY  (X0) = ADDRESS OF INPUT FILE FET.
*                (X5) = ADDRESS OF OUTPUT FILE FET. 
*                (CMPC+DBPFN) = NAME OF DESIRED FILE RECORD TO COPY.
* 
*         EXIT   (X1) = 0 IF RECORD COPIED. 
*                (X1) = 1 IF RECORD NOT FOUND.
* 
*         USES   X - 1, 2, 3, 6.
*                A - 2, 3, 6. 
* 
*         MACROS MESSAGE, READ, READW, RECALL, WRITER, WRITEW.
  
  
  
 CBR      SUBR               ENTRY/EXIT 
          RECALL X0          WAIT FOR PREVIOUS ACTIVITY TO STOP 
          RECALL X5 
          READ   X0,R        START UP THE READ ON THE INPUT FILE
          WRITE  X5,*        SET WRITE FUNCTION 
          READW  X0,WSA,WSAL
          NG     X1,CBR3     IF NOT A COMPLETED TRANSFER
          SA3    WSA         EXAMINE CATALOG CONTROL WORD 
          SX6    X3-11000B   CHECK FOR NORMAL *PFC* 
          AX6    9
          SX2    ERUP        * DUMP FILE MALFUNC - UNRECOGNIZABLE PFC.* 
          NZ     X6,CBR4     IF NOT A VALID CATALOG RECORD
          SA2    CMPC+DBPFN 
          BX6    X2-X3
          AX6    18 
          SX2    ERFM        * DUMP FILE MALFUNC - FILE NAME MISMATCH.* 
          NZ     X6,CBR4     IF NOT THE RIGHT FILE NAME 
          NZ     X1,CBR2     IF RECORD SMALLER THAN BUFFER
  
*         MOVE AN ENTIRE BUFFER IF POSSIBLE.
  
 CBR1     WRITEW X5,WSA,WSAL
          READW  X0,WSA,WSAL
          ZR     X1,CBR1     IF COMPLETED TRANSFER
  
*         FOUND AN EOR/EOF/EOI. 
  
 CBR2     RECALL X5          LET OTHER WRITE FINISH 
          SX1    B6          SET LWA OF DATA IN BUFFER
          WRITEW X5,WSA,X1-WSA  MOVE LAST BIT OF RECORD 
          WRITER X5,R        COMPLETE THE WRITTEN RECORD
          SX1    B0+         INDICATE COPY SUCCESSFUL 
          EQ     CBRX        RETURN 
  
 CBR3     SX6    X1+2 
          SX2    ERPL        * DUMP FILE MALFUNCTION - POSITION LOST.*
          NZ     X6,CBR4     IF NOT AT END OF INFORMATION 
          SX2    EREI        * DUMP FILE MALFUNC - EOI ENCOUNTERED.*
 CBR4     MESSAGE  X2,3,R 
          SX1    B1 
          EQ     CBRX        RETURN WITH ERROR INDICATION 
 CDF      SPACE  4,15 
**        CDF - CREATE DATABASE FILE. 
* 
*         ENTRY  NONE.
* 
*         EXIT   SORTED UPDATE RECORDS READY FOR UPDATE.
* 
*         ERROR  TO *ABT* IF TAPE HAS NO VALID DUMP ON IT.
* 
*         USES   X - ALL. 
*                A - 0, 1, 2, 3, 5, 6, 7. 
* 
*         CALLS  CCE, CDR, CRI, CTJ, CVH, POT, RNT, SDE, UDV, UII, ZTB. 
* 
*         MACROS BREAK, CLEAR, MESSAGE, READSKP, RECALL, REWIND,
*                UNLOAD, WRITEC, WRITER, WRITEW.
  
  
 CDF      SUBR               ENTRY/EXIT 
          SX6    777         FLAG TAPE RECOVERY FOR *CDR* 
          SA6    SALVAGE
          SA1    JOBORIG     JOB ORIGIN TYPE
          SX1    X1-IAOT
          NZ     X1,CDF1     IF NOT INTERACTIVE SKIP MESSAGES 
          WRITEC O,CDFA      * NO FILES FOUND FOR VSN * 
          WRITEC O,CDFB      * WAITING FOR REQUESTED TAPE * 
          WRITER O,R
          WRITE  X2,*        PRESET FUNCTION IN FET 
 CDF1     BX6    X6-X6
          SX7    B1 
          SA6    CRC         CLEAR RECORD COUNT 
          SA7    CFC         SET FILE COUNT 
          SA6    HDRJDT      CLEAR DUMP DATE
          UNLOAD NUMBERS,R
          UNLOAD UPDATES,R
          UNLOAD OPLDF,R
          WRITE  NUMBERS,*
          WRITE  UPDATES,*
          WRITE  OPLDF,*
          RECALL TF 
          SA1    TF+TMSV     MASS STORAGE VARIABLE
          ZR     X1,CDF1.1   IF NOT MASS STORAGE
          MX6    1
          LX6    11-59       SET *MASS STORAGE RESIDENT* INDICATOR
          SA6    TF+TFLAGS
 CDF1.1   SX6    B0+
          SA6    TF+TRING    FLAG DON-T CARE ABOUT WRITE RING 
          SA1    TF+TTNV
          SX5    TF          SET TAPE FET ADDRESS 
          RJ     RNT         REQUEST NEW TAPE 
          BREAK 
          RJ     CVH         CHECK FOR VALID DUMP HEADER
          NZ     X1,CDF8     IF TAPE HAS NO VALID DUMP
          SA0    DBE         DATA ENTRY ADDRESS 
          SA1    TF+TTNV
          SX5    TF          FET ADDRESS
          RJ     UII         WRITE INITIAL VSN INDEX RECORD 
  
*         READ RECORD UNTIL EOI.
  
 CDF2     CLEAR  TF          RESET FET POINTERS FOR READSKP 
          READSKP TF,0,R
          BREAK 
          SA1    CRC         INCREMENT RECORD COUNT 
          SX6    X1+B1
          MX0    -12
          BX6    -X0*X6 
          SA6    A1 
          NZ     X6,CDF3     IF NOT A PSEUDO FILE POINT 
          SA1    CFC
          SX6    X1+B1       INCREMENT FILE NUMBER
          SA6    A1 
 CDF3     SX5    TF 
          RJ     UDV         UPDATE DUMP VSN
          SA1    TF+2        IN POINTER 
          SA2    A1+B1       OUT
          IX1    X1-X2
          NZ     X1,CDF4     IF NOT AN EMPTY RECORD - PROBABLY A PFC
          SA1    TF 
          LX1    59-9        LEFT JUSTIFY EOI BIT 
          NG     X1,CDF7     IF END-OF-TAPE - ALL DONE
          LX1    -59+9       MOVE BACK TO ORIGINAL POSITION 
          MX0    -10
          BX1    -X0*X1      ISOLATE STATUS BITS
          SX1    X1-33B      COMPARE WITH 1033B(EOI), 33B(EOF)
          NG     X1,CDF6     IF EOR ENCOUNTERED 
          NZ     X1,CDF7     IF EOI ENCOUNTERED 
  
*         EOF ENCOUNTERED, SO INCREMENT RECORD/FILE COUNTS. 
  
          SA1    CRC
          ZR     X1,CDF2     IF PSEUDO FILE POINT JUST PROCESSED
          BX6    X6-X6
          SA6    A1 
          SA1    CFC         INCREMENT FILE COUNT 
          SX6    X1+B1
          SA6    A1 
          EQ     CDF2        LOOP FOR NEXT FILE 
  
*         PROCESS RECORD. 
  
 CDF4     SA1    TFBUF
          SX2    X1-11000B   CHECK FOR NORMAL *PFC* 
          AX2    9
          ZR     X2,CDF4.2   IF A VALID CATALOG HEADER
          SA2    HDRPFD 
          BX2    X1-X2
          AX2    24 
          ZR     X2,CDF4.1   IF *PFDUMP* OR CURRENT *RECLAIM* HEADER
          SA2    =7LRECLAIM 
          BX2    X1-X2
          AX2    18 
          NZ     X2,CDF2     IF NOT INTERIM *RECLAIM* HEADER
 CDF4.1   SA5    /COMSPFS/DAAL+TFBUF+1  SAVE DUMP DATE
          RJ     CTJ         CONVERT TO JULIAN
          SA6    HDRJDT 
          EQ     CDF2        GET NEXT RECORD
  
*         PROCESS PFC.
  
 CDF4.2   MX0    -9 
          BX1    -X0*X1      EXTRACT LENGTH OF THIS TABLE 
          SX1    X1-NWCE     COMPARE WITH PFC SIZE
          ZR     X1,CDF5     IF SIZE IS CORRECT 
          SX4    TFBUF+1
          RJ     CCE         CONVERT CATALOG ENTRY TO CORRECT FORMAT
 CDF5     SA1    UIV
          ZR     X1,CDF5.1   IF *UI* NOT SPECIFIED
          SA2    TFBUF+FCUI+1 PFC USER INDEX
          MX0    -18
          BX0    -X0*X2 
          BX1    X0-X1
          NZ     X1,CDF2     IF NOT THE SPECIFIED USER INDEX
 CDF5.1   SA1    TNN         INCREMENT DATABASE ADDITIONS FROM TAPE 
          SX6    X1+B1
          SA6    A1 
          SA3    TFBUF+1     FW OF PFC HEADER 
          RJ     CDR         CREATE DATABASE RECORD 
          SA1    DBNAM
          NZ     X1,CDF6     IF DATA BASE SET 
          RJ     CRI         CHECK CRITERIA 
          NZ     X5,CDF2     IF CRITERIA DOES NOT MATCH 
          RJ     POT
          SA1    NFP         NUMBER OF FILES PROCESSED
          SX6    X1+B1
          SA6    A1 
          EQ     CDF2        GET NEXT PFC FROM TAPE 
  
*         WRITE UNSORTED UPDATE RECORD. 
  
 CDF6     SA1    DBNAM       DATABASE NAME
          ZR     X1,CDF2     IF NO DATABASE NAME
          WRITEW OPLDF,A0,UDBEL 
          EQ     CDF2        GET NEXT PFC 
  
*         EOI ENCOUNTERED.  SORT DATABASE RECORDS.
  
 CDF7     SA1    DBNAM       DATABASE NAME
          ZR     X1,CDFX     IF NO DATABASE NAME
          MX6    2           SET EOI INDICATOR AND RECORD COUNT 
          LX6    1
          SA1    CFC
          SA6    CRC
          SX7    X1-1        DECREMENT FILE COUNT 
          SA7    A1 
          WRITER OPLDF,R
          WRITER NUMBERS,R
          SA1    TNN
          NZ     X1,CDF7.0   IF ANY FILES FOR THE DATABASE
          UNLOAD OPLDF,R
          UNLOAD NUMBERS,R
          EQ     CDFX        RETURN 
  
 CDF7.0   RJ     SDE         SORT DATABASE ENTRIES
          MX0    24D
          SA1    TF+TTNV
          SA2    TF+TMSV
          SA3    =10H ADDING TA 
          ZR     X2,CDF7.1   IF TAPE FILE 
          SA3    =10H ADDING FI 
 CDF7.1   BX6    X3 
          SA6    CDFC 
          RJ     ZTB         CONVERT ZEROS TO BLANKS
          SA1    TF+TMSV
          SA2    =2CPE
          ZR     X1,CDF7.2   IF TAPE FILE 
          SA2    =2CLE
 CDF7.2   MX1    -48
          LX6    41-59
          BX6    -X1*X6 
          BX6    X6+X2
          SA6    CDFC+1 
          MESSAGE   CDFC,3   * ADDING TAPE VVVVVV  TO DATABASE.*
*         MESSAGE   CDFC,3   * ADDING FILE FFFFFFF TO DATABASE.*
          WRITEC O,CDFC 
          MX0    42 
          SA1    UNV         CURRENT USER NAME
          BX6    X0*X1
          SA6    A1          CLEAR USER ADDRESS ON DATABASE 
          SX6    B0          RESUME NORMAL DATABASE CREATION
          SA6    SALVAGE
          EQ     CDFX        RETURN 
  
*         TAPE DOES NOT CONTAIN A DUMP. 
  
 CDF8     MESSAGE  CDFD,3    * NO VALID DUMP ON TAPE.*
          WRITEC  O,CDFD
          EQ     ABT         ABORT *RECLAIM*
  
  
 CDFA     DATA   C* NO FILES FOUND FOR SPECIFIED DUMP FILE. * 
 CDFB     DATA   C* REQUESTING DUMP FILE. * 
 CDFC     DATA   C* ADDING TAPE         TO DATABASE.* 
 CDFD     DATA   C* NO VALID DUMP FOUND ON DUMP FILE. * 
 CDR      SPACE  4,15 
**        CDR - CREATE DATABASE RECORD. 
* 
*         ENTRY  (A0) = ADDRESS OF RECORD BUFFER. 
*                (A3) = FWA OF CATLIST/PFC BUFFER.
*                (X5) = RECORD COUNT OF FILE ON TAPE. 
*                (SALVAGE) = DATABASE RECOVERY FLAG.
*                (HDRJDT) = DUMP DATE FROM HEADER IF NON-ZERO.
* 
*         EXIT   ((A0)) = DATABASE RECORD CREATED FROM PFC. 
*                (LAD) = LAST ACCESS DATE FROM PFC. 
* 
*         USES   X - 0, 1, 2, 5, 6. 
*                A - 1, 2, 6. 
* 
*         CALLS  CVD. 
  
  
 CDR      SUBR               ENTRY/EXIT 
          MX0    42          SAVE USER NAME IN DATABASE RECORD
          SA1    UNV
          BX6    X0*X1
          SA6    A0+DBUNM    FIRST WORD OF DATABASE RECORD
          SA1    DUMPDT      CURRENT DATE IN PACKED JULIAN
          SA2    SALVAGE
          ZR     X2,CDR1     IF NORMAL DATABASE RECORD CREATION 
          SA1    HDRJDT 
          NZ     X1,CDR1     IF DUMP DATE FROM HEADER 
          SA1    A3+FCPW
          BX1    -X0*X1      GET DUMP DATE FROM TAPE PFC
 CDR1     SA2    A3+FCFN     FILE NAME + USER INDEX 
          BX6    X0*X2
          BX6    X6+X1
          SA6    A0+DBPFN    SECOND WORD OF DATABASE RECORD 
          SA2    A3+FCPW     SAVE PASSWORD
          BX6    X0*X2
          BX6    X6+X1       MERGE DUMP DATE
          SA6    A2          SAVE DUMP DATE IN PFC
          SA1    A3+FCMD     LAST MODIFICATION DATE 
          AX1    18 
          BX5    -X0*X1 
          RJ     CVD
          SA1    TF+TTNV     TAPE NUMBER
          MX2    42 
          BX1    X2*X1       ISOLATE DUMP FILE NAME 
          BX6    X6+X1
          SA6    A0+DBTNO    THIRD WORD OF DATABASE RECORD
          SA1    A3+FCBS     DIRECT/INDIRECT FLAG (ON SECTOR COUNT) 
          LX1    24 
          MX0    -24
          BX2    -X0*X1 
          LX1    24 
          SX6    1RI
          PL     X1,CDR2     IF AN INDIRECT ACCESS FILE 
          SX6    1RD
 CDR2     LX6    12 
          SA1    TF+TFLAGS   TAPE FLAGS BUILT BY *BTF*
          BX6    X1+X6
          LX6    6
          SA1    CFC         DUMP FILE FILE NUMBER
          BX6    X1+X6
          LX6    12 
          SA1    CRC         DUMP FILE RECORD NUMBER
          BX1    -X0*X1      REMOVE POSSIBLE EOI INDICATOR (BIT 59) 
          BX6    X1+X6
          LX6    18 
          MX1    -18         SPLIT OFF UPPER 5 BITS OF FILE SIZE
          BX1    X1*X2       UPPER 5 BITS OF FILE SIZE
          BX2    X2-X1       LOWER 18 BITS OF FILE SIZE 
          BX6    X2+X6       MERGE LOWER 18 BITS INTO DATABASE RECORD 
          LX1    59-23
          BX6    X1+X6       MERGE UPPER 5 BITS INTO DATABASE RECORD
          SA6    A0+DBFLG    FOURTH WORD OF DATABASE
          SA1    FAMILY      THE CURRENT FAMILY 
          BX6    X1 
          SA6    A0+UDBFAM   THE FAMILY NAME
          SA1    A3+FCAD     LAST ACCESS DATE FROM PFC
          AX1    18 
          BX5    -X0*X1 
          RJ     CVD
          SA6    LAD
          EQ     CDRX        RETURN 
 CEI      SPACE  4,15 
**        CEI - COPY A FILE TO END-OF-INFORMATION.
* 
*         *CEI* COPIES AN ENTIRE FILE TO ANOTHER.  COPYING STARTS 
*         AT THE CURRENT POSITION FOR BOTH THE INPUT AND OUTPUT 
*         FILES, SO THE CALLER MUST REWIND BOTH FILES WHEN NECESSARY. 
* 
*         ENTRY  (X0) = ADDRESS OF INPUT FILE FET.
*                (X5) = ADDRESS OF OUTPUT FILE FET. 
*                (X1) = SET VSN FOR OUTPUT FILE.
* 
*         EXIT   EOI FOUND ON INPUT FET.  FILE COPIED.
*                (CFC) = CORRECT FILE COUNT FOR DUMP FILE.
*                (CRC) = END OF DUMP INDICATOR. 
* 
*         USES   X - 1, 6.
*                A - 0, 1, 6. 
* 
*         CALLS  UDV, UII.
* 
*         MACROS RECALL, READ, READW, WRITE, WRITEF, WRITER, WRITEW.
  
  
 CEI      SUBR               ENTRY/EXIT 
          RJ     UII         WRITE INITIAL VSN INDEX RECORD 
          SX6    1
          SA6    CFC         INITIALIZE FILE NUMBER 
          SA6    CRC         INITIALIZE RECORD NUMBER 
          RECALL X0          WAIT COMPLETION OF PREVIOUS ACTIVITY 
          RECALL X5 
 CEI1     READ   X0,R        REPEAT READ UNTIL EOI
          WRITE  X5,* 
 CEI2     READW  X0,WSA,WSAL WHILE NOT EOR/EOF/EOI MOVE A CHUNK 
          NZ     X1,CEI3     IF NOT *TRANSFER COMPLETE* 
          RECALL X5          WAIT FOR ALL QUIET 
          WRITEW X5,WSA,WSAL
          EQ     CEI2        LOOP FOR ANOTHER CHUNK 
  
*         EOR/EOF/EOI FOUND.
  
 CEI3     SX1    X1+B1
          NG     X1,CEI5     IF END OF INFORMATION
          SA0    X1 
          RECALL X5          WAIT FOR ALL QUIET 
          SX1    B6          SET LWA OF DATA IN BUFFER
          WRITEW X5,WSA,X1-WSA
          SX1    A0 
          ZR     X1,CEI4     IF EOF RATHER THAN EOR 
          WRITER X5,R 
          RJ     UDV         UPDATE DUMP VSN
          SA1    CRC
          SX6    X1+1 
          SA6    A1          INCREMENT RECORD NUMBER
          EQ     CEI1        LOOP FOR NEXT RECORD 
  
*         END OF FILE FOUND.
  
 CEI4     WRITEF X5,R 
          RJ     UDV         UPDATE DUMP VSN
          SA1    CFC
          SX6    X1+1 
          SA6    A1          INCREMENT FILE NUMBER
          SX6    1
          SA6    CRC         INITIALIZE RECORD NUMBER 
          EQ     CEI1        LOOP FOR NEXT THING AFTER EOF
  
*         END-OF-INFORMATION FOUND. 
  
 CEI5     MX6    2           SET END OF DUMP INDICATOR
          LX6    1
          SA6    CRC
          SA1    CFC         ADJUST FILE POSITION 
          SX6    X6-1 
          SA6    A1 
          EQ     CEIX        RETURN 
 CFJ      SPACE  4,10 
**        CFJ - CONVERT FROM JULIAN (BINARY) TO DISPLAY *YYMMDD*. 
* 
*         ENTRY  (X1) = BINARY JULIAN DATE. 
* 
*         EXIT   (X6) = DISPLAY CODE DATE.
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 4. 
* 
*         CALLS  CDD. 
  
  
 CFJ      SUBR               ENTRY/EXIT 
  
*         ISOLATE YEAR IN X1. 
  
          SX4    1000 
          BX2    X4 
          BX3    X1          SAVE JULIAN DATE 
          IX1    X1/X2       YYDDD / 1000 = YEAR
          IX4    X1*X4
          IX3    X3-X4       REMAINDER = DDD
  
*         COMPUTE MONTH IN X2.
  
          MX7    58          CHECK FOR LEAP YEAR
          BX7    -X7*X1      IS YEAR DIVISIBLE BY 4 
          SX2    12 
 CFJ1     SX2    X2-1 
          SA4    MONTH+X2 
          NZ     X7,CFJ2     IF NOT A LEAP YEAR 
          LX4    30 
 CFJ2     SX4    X4 
          IX6    X3-X4
          NG     X6,CFJ1     IF NOT THIS MONTH
          SX2    X2+B1
  
*         ISOLATE DAY IN X3.
  
          IX3    X3-X4
          SX3    X3+B1
  
*         BUILD FINAL RESULT. 
  
          SX1    X1+100      BIAS TO ACCOMODATE YEARS .GE. 2000 
          SX6    10000
          IX1    X1*X6       YY*10000 
          SX6    100
          IX6    X2*X6       MM*100 
          IX1    X1+X6       YY + MM
          IX1    X1+X3       YYMM + DD
          RJ     CDD         CONVERT TO DECIMAL DISPLAY 
  
*         INSERT SLASHES. 
  
          SX2    1R/
          MX7    -12D 
          LX4    18          YY 
          BX6    -X7*X4 
          LX6    6           /
          BX6    X2+X6
          LX4    12          MM 
          BX1    -X7*X4 
          LX6    12 
          BX6    X1+X6
          LX6    6           /
          BX6    X2+X6
          MX7    48          DD 
          LX4    12 
          BX1    -X7*X4 
          LX1    12 
          LX6    24 
          BX6    X1+X6
          SX1    2R          INSERT 2 SPACES
          BX6    X1+X6
          LX6    54          POSITION FINAL RESULT
          EQ     CFJX        RETURN 
  
  
 MONTH    BSS    0
          VFD    30/001,30/001         JANUARY
          VFD    30/032,30/032         FEBRUARY 
          VFD    30/061,30/060         MARCH
          VFD    30/092,30/091         APRIL
          VFD    30/122,30/121         MAY
          VFD    30/153,30/152         JUNE 
          VFD    30/183,30/182         JULY 
          VFD    30/214,30/213         AUGUST 
          VFD    30/245,30/244         SEPTEMBER
          VFD    30/275,30/274         OCTOBER
          VFD    30/306,30/305         NOVEMBER 
          VFD    30/336,30/335         DECEMBER 
 COE      SPACE  4,10 
**        COE - CALCULATE OPLD ENTRY. 
* 
*         ENTRY  (X2) = FET OF RANDOM FILE. 
* 
*         EXIT   OPLD ENTRY CREATED.
* 
*         USES   X - 0, 1, 3, 5, 6. 
*                A - 1, 3, 6. 
* 
*         MACROS WRITEW.
  
  
 COE      SUBR               ENTRY/EXIT 
          BX5    X2 
          SA1    INDXLEN
          NZ     X1,COE1     IF INDEX HAS BEEN CREATED
  
*         CREATE INDEX RECORD.
  
          SX6    2
          SA6    A1          SAVE INDEX LENGTH
          SX6    B1 
          SA6    INDXNAM+1
          WRITEW OPLDF,INDXNAM,2
          EQ     COE2        SAVE RANDOM INDEX
  
 COE1     SX6    X1+2 
          SA6    A1          INCREASE INDEX LENGTH
          WRITEW OPLDF,INDXNAM,2
  
*         SAVE RANDOM INDEX.
  
 COE2     SA3    X5+6        GET RANDOM INDEX 
          LX3    30 
          MX0    30 
          BX6    -X0*X3      EXTRACT PRU ADDRESS
          SX6    X6+B1
          SA6    INDXNAM+1
          EQ     COEX        RETURN 
 CRF      SPACE  4,15 
**        CRF - CHECK RESERVED FILE NAMES.
* 
*         ENTRY  (X6) = FILE NAME TO BE CHECKED AGAINST RESERVED LIST.
*                (TF) = LFN IN USE FOR DUMP FILE. 
* 
*         EXIT   (X6) = 0 IF FILE NAME IS IN RESERVED LIST. 
*                (X6) = FILE NAME IF NOT IN RESERVED LIST.
* 
*         USES   X - 0, 1, 3, 6, 7. 
*                A - 1, 3, 7. 
*                B - 3. 
* 
*         CALLS  IMI. 
  
  
 CRF      SUBR               ENTRY/EXIT 
          SA1    TF          GET CURRENT DUMP FILE LFN
          SA3    CRFA-1      SET UP FOR RESERVED FILE NAME CHECK
          MX0    42 
          BX7    X0*X1
          SA7    A3+1        SET DUMP FILE LFN INTO TABLE 
 CRF1     SA3    A3+1        CHECK NEXT RESERVED NAME 
          ZR     X3,CRFX     IF ALL RESERVED NAMES CHECKED
          BX3    X3-X6
          NZ     X3,CRF1     IF NO MATCH
          MX7    6
 CRF2     LX7    -6 
          BX3    X6*X7
          NZ     X3,CRF2     IF END OF FILE NAME NOT REACHED
          SA3    =8L........
          BX7    X3*X7
          BX7    X6+X7
          SA7    CRFB+4 
          SB3    CRFB 
          SA1    COPTION
          RJ     IMI         ISSUE RESERVED FILE MESSAGE
          SX6    B0+         INDICATE RESERVED FILE NAME MATCH
          EQ     CRFX        RETURN 
  
  
 CRFA     BSS    0           RESERVED FILE NAME TABLE 
          DATA   0LTAPE      (REPLACED BY CURRENT DUMP FILE LFN)
          DATA   0LINPUT
          DATA   0LOUTPUT 
          DATA   0LZZZZZG0
          DATA   0LZZZZZG1
          DATA   0LZZZZZG2
          DATA   0LZZZZZG3
          DATA   0LZZZZZG4
          DATA   0LZZZZZG5
          DATA   0LZZZZZG6
          DATA   0LZZZZZG7
          DATA   0LZZZZZG8
          DATA   0LZZZZZG9
          CON    0           END OF RESERVED FILE NAME TABLE
 CRFB     DATA   C* !!!! NOT ALLOWED OF RESERVED FILE NAME XXXXXXX.*
 CRI      SPACE  4,15 
**        CRI - CRITERIA CHECKER. 
* 
*         ENTRY  (A0) = STARTING ADDRESS OF 4 WORD ENTRY. 
*                (LAD) = LAST ACCESS DATE FROM PFC. 
*                      = 0 IF PFC NOT AVAILABLE.
* 
*         EXIT   (X5) = 0 IF CURRENT RECORD MEETS CRITERIA. 
* 
*         USES   X - ALL. 
*                A - 1, 2, 5, 6, 7. 
*                B - 2. 
* 
*         CALLS  PFN. 
  
  
 CRI      SUBR               ENTRY/EXIT 
          SA1    UNV         CHECK USERNAME 
          ZR     X1,CRI0.4   IF *UN=0* OPTION 
          SA2    A0+DBUNM 
          MX0    42 
          BX1    X1-X2
          BX1    X0*X1
          ZR     X1,CRI0.4   IF SPECIFIED USER NAME 
          SA5    A0+DBFLG    FIND TYPE OF DUMP
          SA2    TF+TMSV     GET MASS STORAGE FLAG FOR DUMP 
          LX5    59-47
          ZR     X2,CRI0.1   IF LOOKING FOR TAPE
          PL     X5,CRI19    IF A TAPE DUMP 
          EQ     CRI0.2      CHECK DUMP FILE
  
 CRI0.1   NG     X5,CRI19    IF A MASS STORAGE DUMP 
          MX0    36          SET MASK FOR TAPE VSN
 CRI0.2   SA1    TF+TTNV
          SA2    A0+DBTNO 
          BX5    X1-X2
          BX5    X0*X5
          NZ     X5,CRI19    IF NOT SAME TAPE 
          SA1    TNN
          SA2    COPTION
          NZ     X1,CRI0.3   IF VSN OCCURS UNDER CURRENT USER 
          MX6    -0          MARK VSN FOUND FOR OTHER USER
          SA6    A1 
  
*         FOR *COMPACT* DIRECTIVES FOR A SPECIFIC USER NAME, ALL FILES
*         ON THE DUMP FILE FOR OTHER USER NAMES MUST BE SELECTED. 
  
 CRI0.3   SA1    =0LCOMPACT 
          BX1    X1*X2
          NZ     X1,CRI19    IF NOT PROCESSING *COMPACT*
          EQ     CRI22       CHECK EXCEPTION PROCESSING 
  
*         CHECK FOR DELETED FILES.
  
 CRI0.4   SA5    DEV         DELETED FILE VARIABLE
          SA1    A0+DBFLG 
          PL     X1,CRI1     IF FILE HAS NOT BEEN DELETED 
          NZ     X5,CRI2     IF USER PROCESSING DELETED FILES ONLY
          EQ     CRI19       DELETED FILE ENCOUNTERED 
  
 CRI1     NZ     X5,CRI19    IF PROCESSING ONLY DELETED FILES 
  
*         IS LATEST VERSION OPTION SET. 
  
 CRI2     SA5    TF+TTNV     TAPE NUMBER VARIABLE 
          ZR     X5,CRI2.2   IF DUMP NAME/VSN NOT SELECTED
          SA1    A0+DBFLG    WORD WITH TAPE FLAGS 
          LX1    59-47
          MX0    42 
          SA2    TF+TMSV
          PL     X1,CRI2.0   IF A TAPE DUMP 
          NZ     X2,CRI2.1   IF LOOKING FOR MASS STORAGE DUMP 
          EQ     CRI19       NO MATCH - WRONG TYPE OF DUMP
  
 CRI2.0   NZ     X2,CRI19    IF LOOKING FOR MASS STORAGE DUMP 
          MX0    36 
 CRI2.1   SA1    A0+DBTNO    DUMP FILE NAME/VSN ON DATABASE 
          BX5    X1-X5
          BX5    X0*X5
          NZ     X5,CRI19    IF NO MATCH
          SA1    TNN         NUMBER OF TIMES SPECIFIED VSN ENCOUNTERED
          SX6    X1+B1
          SA6    A1          INCREMENT COUNT
 CRI2.2   SA1    A0+DBPFN    PERMANENT FILE NAME ON DATABASE
          MX0    42 
          SA2    LVV         LATEST VERSION VARIABLE
          ZR     X2,CRI3     IF LATEST VERSION NOT PART OF CRITERIA 
          SA5    MRUSER      LAST USER NAME PROCESSED 
          SA2    A0+DBUNM 
          BX4    X0*X2
          BX7    X0*X1
          BX5    X4-X5
          NZ     X5,CRI3     IF LAST USER NAME NOT EQUAL CURRENT
          SA5    MRFILE      LAST PERMANENT FILE PROCESSED
          BX5    X7-X5
          ZR     X5,CRI19    IF FILE NAME EQUAL TO LAST ONE PROCESSED 
  
*         CHECK PERMANENT FILE NAME.
  
 CRI3     SA5    TF+TMSV     MASS STORAGE VARIABLE
          ZR     X5,CRI3.0   IF NOT MASS STORAGE DUMP 
          SA2    TF+TDNV     DUMP NAME VARIABLE 
          BX2    X1-X2
          BX2    X0*X2
          ZR     X2,CRI19    IF DUMPING TO THE DUMP FILE
 CRI3.0   SA5    PFV         PERMANENT FILE VARIABLE
          SA4    FNV
          BX5    X5+X4
          ZR     X5,CRI5     IF NOT SET 
          BX2    X1-X5
          BX2    X0*X2
          ZR     X2,CRI5     IF A MATCH 
  
*         CHECK FOR PF=*. 
  
          LX5    6
          SX5    X5-1R* 
          NZ     X5,CRI19    IF NOT PF=*
          SA5    PFTAB       CHECK IF PFN TABLE IS NOT EMPTY
          NZ     X5,CRI3.1   IF PFN TABLE IS OCCUPIED 
          RJ     PPF         PROCESS PERMANENT FILE LIST
          SA1    A0+DBPFN    DATABASE ENTRY PFN 
          MX0    6*7
 CRI3.1   SA5    PFTAB-1
          BX1    X0*X1
 CRI4     SA5    A5+B1
          ZR     X5,CRI19    IF END OF TABLE
          BX6    X0*X5
          BX2    X6-X1
          NZ     X2,CRI4     IF FILE NAME NOT IN TABLE
          SX1    A5-PFTAB    *NNTAB* OFFSET 
          SX1    X1+NNTAB    POSITION IN *NNTAB*
          SA2    X1          NEW NAME ADDRESS 
          ZR     X2,CRI5     IF NO NEW FILE NAME
          SA2    A0+DBUNM    WORD 1 OF DATABASE ENTRY 
          BX2    X0*X2
          BX1    -X0*X1 
          BX7    X2+X1       42/UN,18/NEW NAME ADDR 
          SA7    A2          WORD 1 OF DATABASE ENTRY 
  
*         CHECK LAST MODIFICATION DATE. 
  
 CRI5     SA5    MDV         LAST MODIFICATION
          SA1    A0+DBLMO 
          BX1    -X0*X1 
          ZR     X5,CRI6     IF *MD* NOT SPECIFIED
          BX5    X1-X5
          NZ     X5,CRI19    IF NO MATCH
  
*         CHECK MODIFIED AFTER DATE.
  
 CRI6     SX1    X1-70000 
          PL     X1,CRI6.1   IF YEAR .LT. 2000
          SX1    X1+100000
 CRI6.1   SA5    MAV         MODIFIED AFTER 
          ZR     X5,CRI7     IF NOT SET 
          SX5    X5-70000 
          PL     X5,CRI6.2   IF YEAR .LT. 2000
          SX5    X5+100000
 CRI6.2   IX5    X5-X1
          PL     X5,CRI19    IF MODIFY DATE .LE. SPECIFIED DATE 
  
*         CHECK MODIFIED BEFORE DATE. 
  
 CRI7     SA5    MBV         MODIFIED BEFORE
          ZR     X5,CRI8     IF NOT SET 
          SX5    X5-70000 
          PL     X5,CRI7.1   IF YEAR .LT. 2000
          SX5    X5+100000
 CRI7.1   IX5    X1-X5
          PL     X5,CRI19    IF MODIFY DATE .GE. REQUESTED
  
*         CHECK LAST ACCESS DATE. 
  
 CRI8     SA1    LAD
          SA5    ADV         LAST ACCESS
          ZR     X1,CRI9     IF LAST ACCESS DATE NOT AVAILABLE
          BX1    -X0*X1 
          ZR     X5,CRI8.0   IF *AD* NOT SPECIFIED
          BX5    X1-X5
          NZ     X5,CRI19    IF NO MATCH
  
*         CHECK ACCESSED AFTER DATE.
  
 CRI8.0   SX1    X1-70000 
          PL     X1,CRI8.1   IF YEAR .LT. 2000
          SX1    X1+100000
 CRI8.1   SA5    AAV         ACCESSED AFTER 
          ZR     X5,CRI8.3   IF NOT SET 
          SX5    X5-70000 
          PL     X5,CRI8.2   IF YEAR .LT. 2000
          SX5    X5+100000
 CRI8.2   IX5    X5-X1
          PL     X5,CRI19    IF ACCESS DATE .LE. SPECIFIED DATE 
  
*         CHECK ACCESSED BEFORE DATE. 
  
 CRI8.3   SA5    ABV         ACCESSED BEFORE
          ZR     X5,CRI9     IF NOT SET 
          SX5    X5-70000 
          PL     X5,CRI8.4   IF YEAR .LT. 2000
          SX5    X5+100000
 CRI8.4   IX5    X1-X5
          PL     X5,CRI19    IF ACCESS DATE .GE. SPECIFIED DATE 
  
*         CHECK FILE TYPE.
  
 CRI9     SA5    TYV         FILE TYPE
          ZR     X5,CRI10    IF NOT A MATCH CRITERION 
          MX2    1
          SA1    A0+DBFTY 
          LX1    12 
          MX3    -6 
          BX1    -X3*X1 
          LX5    6
          BX5    X1-X5
          NZ     X5,CRI19    IF NO MATCH
  
*         CHECK DUMP DATE.
  
 CRI10    SA5    DDV         DUMP DATE
          SA1    A0+DBDDT 
          BX1    -X0*X1 
          ZR     X5,CRI11    IF NOT SET 
          BX5    X5-X1
          NZ     X5,CRI19    IF NO MATCH
  
*         CHECK DUMPED BEFORE DATE. 
  
 CRI11    SX1    X1-70000 
          PL     X1,CRI11.1  IF YEAR .LT. 2000
          SX1    X1+100000
 CRI11.1  SA5    DBV         DUMPED BEFORE
          ZR     X5,CRI12    IF NOT SET 
          SX5    X5-70000 
          PL     X5,CRI11.2  IF YEAR .LT. 2000
          SX5    X5+100000
 CRI11.2  IX5    X1-X5
          PL     X5,CRI19    IF DATE GREATER THAN REQUESTED 
  
*         CHECK DUMPED AFTER DATE.
  
 CRI12    SA5    DAV         DUMPED AFTER 
          ZR     X5,CRI13    IF NOT SET 
          SX5    X5-70000 
          PL     X5,CRI12.1  IF YEAR .LT. 2000
          SX5    X5+100000
 CRI12.1  IX5    X5-X1
          PL     X5,CRI19    IF DATE LESS THAN REQUESTED
  
*         CHECK LESS THAN FIELD.
  
 CRI13    SA5    LTV         FILE SIZE LESS THAN
          SA1    A0+DBLEN 
          BX1    -X0*X1 
          ZR     X5,CRI14    IF NOT SET 
          IX5    X5-X1
          NG     X5,CRI19    IF SIZE TOO BIG
          ZR     X5,CRI19    IF SAME VALUE AS THAT ISSUED BY USER 
  
*         CHECK GREATER THAN FIELD. 
  
 CRI14    SA5    GTV         FILE SIZE GREATER THAN 
          NG     X5,CRI15    IF *GT=0* SELECTED 
          ZR     X5,CRI16    IF *GT* OPTION OMITTED 
 CRI15    IX5    X5-X1
          PL     X5,CRI19    IF SIZE TOO SMALL
          ZR     X5,CRI19    IF SAME VALUE AS THAT ISSUED BY USER 
  
*         CHECK RECORD NUMBER.
  
 CRI16    SA1    RCV         RECORD NUMBER VARIABLE 
          SA2    A0+DBLEN 
          AX2    18 
          ZR     X1,CRI17    IF NOT SET 
          MX0    -12D 
          BX5    -X0*X2 
          BX5    X5-X1
          NZ     X5,CRI19    IF RC ON DATABASE .NE. RCV 
  
*         CHECK FILE NUMBER.
  
 CRI17    SA1    FIV         FILE NUMBER VARIABLE 
          ZR     X1,CRI18    IF NOT SET 
          MX0    -6 
          AX2    12D
          BX5    -X0*X2 
          BX5    X5-X1
          NZ     X5,CRI19    IF FILE POSITION ON DB .NE. FIV
          ZR     X1,CRI20    IF NOT SET 
  
*         CHECK LATEST VERSION. 
  
 CRI18    SA1    LVV         LATEST VERSION VARIABLE
          SA1    A0+DBUNM 
          MX0    42 
          BX6    X0*X1
          SA1    A0+DBPFN 
          BX7    X0*X1
          SA6    MRUSER 
          SA7    MRFILE 
          EQ     CRI20       DONT SET ERROR FLAG
  
*         MATCH CRITERIA WERE NOT MET.
  
 CRI19    SX5    B1          CRITERIA UNMET STATUS
          EQ     CRI22       CHECK FOR EXCEPTION PROCESSING 
  
*         SET FILE SELECTED FLAG IF PF IS PART OF CRITERIA
  
 CRI20    SA1    PFTAB       PERMANENT FILE TABLE 
          SA2    PPFLAG      VERIFY FILE NAME IS PART OF CRITERIA 
          BX5    X5-X5       SET CRITERIA MET STATUS
          BX1    X1+X2
          ZR     X1,CRI22    IF FILE NAME NOT PART OF CRITERIA
          SA2    A0+DBPFN 
          MX0    6*7
          BX2    X0*X2
          SA1    PFTAB-1
 CRI21    SA1    A1+B1
          ZR     X1,CRI19    IF END OF FILE LIST
          BX3    X0*X1
          BX3    X2-X3
          NZ     X3,CRI21    IF NO MATCH
          SX6    B1 
          BX6    X6+X1       SET FILE SELECTED FLAG IN BIT ZERO 
          SA6    A1          SAVE IN PFTAB
  
*         CHECK FOR CRITERIA EXCEPTION PROCESSING 
  
 CRI22    SA1    EXV         EXCEPTION VARIABLE 
          ZR     X1,CRIX     IF NO EXCEPTION PROCESSING 
          SX1    B1 
          BX5    X1-X5       REVERSE ZERO/NON-ZERO EXIT CONDITION 
          EQ     CRIX        RETURN 
 CTF      SPACE  4,20 
**        CTF - COPY *PFDUMP* FILE TO DISK AND REMOVE CONTROL WORDS.
* 
*         ENTRY  (A5) = ADDRESS OF 6-WORD SORT RECORD.
* 
*         EXIT   FILE COPIED TO DISK. 
* 
*         ERROR  TO *ABT* IF INCORRECT DATA TYPE. 
* 
*         USES   X - ALL. 
*                A - 1, 2, 3, 4, 5, 6, 7. 
*                B - 5. 
* 
*         CALLS  CCE, CDR, CRF, CRI, CTJ, ICF, ILC, POT, PPB, ZTB.
* 
*         MACROS MEMORY, MESSAGE, PURGE, READ, READW, RECALL, SAVE, 
*                SKIPF, UNLOAD, WRITE, UNLOAD, WRITEW, WRITECW. 
  
  
 CTF      SUBR               ENTRY/EXIT 
          RECALL TF 
          SX6    TFBUF       RESET TAPE BUFFER POINTERS 
          SA6    X2+2 
          SA6    A6+B1
          READ   X2,R 
          READW  X2,WSA,B1   READ 1ST WORD OF FILE
          BX6    X1          SAVE READ STATUS FOR LATER EXAMINATION 
          SA6    CTFA 
          SX6    PRMITB      FLAG NO PERMITS
          SA6    CTFPLWA
          SA1    LDFN        PRESET SCRATCH FILE NAME 
          SA2    LOADFLG
          MX0    42          SET LFN IN COPY OUTPUT FET 
          BX6    X1 
          NZ     X2,CTF1     IF A LOAD USE SCRATCH NAME 
          SA1    DBNAM       DATABASE NAME
          ZR     X1,CTF1.1   IF NOT USING DATABASE
          SA1    A5+B1
          SA2    NNV         NEW NAME VARIABLE
          BX6    X0*X1
          NZ     X2,CTF0     IF ALTERNATE LFN/PFN SPECIFIED 
          SA2    A1+B1       WORD 3 OF SORTED RECORD
          BX1    -X0*X2 
          BX2    X6 
          ZR     X1,CTF0     IF NO NEW NAME 
          SA2    X1 
 CTF0     BX6    X0*X2       NEW FILE NAME
          RJ     CRF         CHECK RESERVED FILE NAMES
          ZR     X6,CTF15    IF A RESERVED FILE NAME
          RJ     ICF         INITIALIZE COPY FET
          EQ     CTF1.1      CONTINUE PROCESSING
  
 CTF1     SA1    SF          GET CODE/STATUS
          BX1    -X0*X1 
          BX6    X1+X6
          SA6    A1 
 CTF1.0   UNLOAD SF,R        PREVENT ANY *PFM* ERRORS 
          WRITECW  SF,R      PRESET *WRITECW* FUNCTION
 CTF1.1   SA1    CTFA        CHECK INITIAL READ STATUS
          ZR     X1,CTF2     IF DATA ENCOUNTERED
          SA2    DBNAM
          NZ     X2,CTF1.2   IF NOT DB=0
          SX3    X1+2        CHECK FOR EOI ON FILE
          ZR     X3,CTF2.2   IF EOI ON FILE 
          SX3    X1+B1       CHECK FOR EOF ON FILE
          NZ     X3,CTF16    IF NOTE EOF ON READ
          SA1    CRC
          ZR     X1,CTF16    IF PSEUDO FILE POINT JUST PROCESSED
          BX6    X6-X6       RESET RECORD NUMBER
          SA6    A1 
          SA2    CFC         INCREMENT FILE COUNTER 
          SX6    X2+B1
          SA6    A2 
          EQ     CTF16       TRY AGAIN
  
 CTF1.2   MESSAGE  EREI,3,R  * DUMP FILE MALFUNC - EOI ENCOUNTERED.*
          EQ     CTF15       FINISH UP
  
 CTF2     SA1    TFBUF       READ CATALOG CONTROL WORD
          SX2    X1-11000B   CHECK FOR NORMAL *PFC* 
          AX2    9
          ZR     X2,CTF2.3   IF VALID CATALOG CODE
          SA2    DBNAM       DATABASE NAME
          NZ     X2,CTF2.1   IF USING DATABASE - ERROR
          SA2    HDRPFD 
          BX2    X1-X2
          AX2    24 
          ZR     X2,CTF2.0   IF *PFDUMP* OR CURRENT *RECLAIM* HEADER
          SA2    =7LRECLAIM 
          BX2    X1-X2
          AX2    18 
          NZ     X2,CTF16    IF NOT INTERIM *RECLAIM* HEADER
 CTF2.0   READW  TF,WSA+1,HDRSZ 
          SA5    /COMSPFS/DAAL+WSA+1  GET DUMP DATE FROM HEADER 
          RJ     CTJ         CONVERT TO JULIAN
          SA6    HDRJDT 
          EQ     CTF16       GO ON TO NEXT RECORD 
  
 CTF2.1   MESSAGE  ERUP,3,R  * DUMP FILE MALFUNC - UNRECOGNIZABLE PFC.* 
          EQ     CTF15       FINISH UP
  
 CTF2.2   SX6    B1+
          SA6    EOIFLG      SET EOIFLG FOR COPY
          EQ     CTFX        RETURN 
  
 CTF2.3   SA2    DBNAM
          ZR     X2,CTF3     IF NO DATA BASE
          SA2    A5+B1       VERIFY FILE NAME 
          BX2    X2-X1
          MX0    42 
          BX2    X0*X2
          ZR     X2,CTF3     IF FILE NAME MATCHES OK
          MESSAGE  ERFM,3,R  * DUMP FILE MALFUNC - FILE NAME MISMATCH.* 
          EQ     CTF15       FINISH UP
  
 CTF3     BX6    X6-X6       CLEAR PREVIOUS PERMIT TABLE
          SA6    PRMITB 
          EQ     CTF5        PROCESS THIS RECORD
  
*         GET NEXT TAPE BLOCK HEADER. 
  
 CTF4     READW  TF,WSA,B1   READ CONTROL WORD
          NZ     X1,CTF9.9   IF NO MORE DATA
 CTF5     MX0    -9 
          SA1    WSA
          BX5    X1 
          BX1    -X0*X1      EXTRACT LENGTH 
          SB5    X1          READ IN REMAINDER OF CATALOG IMAGE BLOCK 
          LX5    48 
          MX0    -3 
          BX3    -X0*X5      EXTRACT CODE 
  
*         DETERMINE CURRENT BLOCK TYPE. 
  
          SX2    X3-1 
          NZ     X2,CTF6     IF NOT *CATALOG* BLOCK HEADER
          READW  TF,WSA+1,B5
          ZR     X1,CTF5.0   IF PFC BLOCK IS CORRECT SIZE 
          MESSAGE  ERUP,3,R  * DUMP FILE MALFUNC - UNRECOGNIZABLE PFC.* 
          EQ     CTF15       FINISH UP
  
 CTF5.0   LX5    12          EXTRACT SIZE OF THIS BLOCK 
          MX0    -9 
          BX5    -X0*X5 
          SX5    X5-NWCE     COMPARE WITH PFC SIZE
          ZR     X5,CTF5.1   IF SIZE IS CORRECT 
          SX4    WSA+1       FWA OF PFC 
          RJ     CCE         CONVERT PFC TO CORRECT FORMAT
 CTF5.1   SA3    DBNAM
          NZ     X3,CTF5.6   IF A DATA BASE 
          SA1    UIV
          ZR     X1,CTF5.2   IF *UI* NOT SPECIFIED
          SA2    TFBUF+FCUI+1 PFC USER INDEX
          MX0    -18
          BX0    -X0*X2 
          BX1    X0-X1
          NZ     X1,CTF16    IF NOT THE SPECIFIED USER INDEX
 CTF5.2   SA0    SORR+2      SET TO DUMMY DATABASE ENTRY
          SA3    TFBUF+1     FWA OF PFC ENTRY INFO
          SX5    B1 
          RJ     CDR         CREATE DATA BASE RECORD
          SX5    B0+
          RJ     CRI         CHECK THE CRITERIA 
          NZ     X5,CTF16    IF CRITERIA DOES NOT MATCH 
          RJ     POT         PRINT OUT FILE BEING PROCESSED 
          SA1    NFP         NUMBER OF FILES PROCESSED COUNTER
          SX6    X1+1 
          SA6    A1          INCREMENT FILE PROCESSED COUNTER 
  
*         SET UP FIRST TWO WORDS IN SIX WORD ENTRY
  
          MX0    42 
          SA1    A0+DBPFN    GET PF 
          BX6    X0*X1
          BX7    X6 
          SA1    LOADFLG     CHECK IF LOAD OR COPY
          NZ     X1,CTF5.5   IF A LOAD
          SA2    NNV         NEW NAME VARIABLE
          NZ     X2,CTF5.4   IF NEW NAME SPECIFIED
          BX2    X7          RESET FILE NAME
          SA1    PFV         PERMANENT FILE VARIABLE
          ZR     X1,CTF5.4   IF NO FILE NAMES 
          SX3    -1          PRESET COUNTER 
 CTF5.3   SX3    X3+1        INCREMENT COUNTER
          SA1    PFTAB+X3    FILE NAME TABLE ENTRY
          ZR     X1,CTF5.4   IF END OF TABLE
          BX4    X0*X1       ISOLATE FILE NAME
          BX4    X6-X4
          NZ     X4,CTF5.3   IF PFNS DO NOT MATCH 
          SA2    NNTAB+X3    CORRESPONDING ADDRESS IN NNTAB 
          NZ     X2,CTF5.4   IF NEW NAME SPECIFIED
          BX2    X6 
 CTF5.4   BX6    X0*X2
          RJ     CRF         CHECK RESERVED FILE NAMES
          ZR     X6,CTF15    IF A RESERVED FILE NAME
          RJ     ICF         INITIALIZE COPY FET
          SA2    SF          RESTORE FILE NAME
          BX6    X0*X2
 CTF5.5   SA1    A0+DBFTY 
          LX1    24 
          BX2    -X0*X1 
          BX6    X6+X2       WORD TWO OF SIX WORD ENTRY 
          SA6    SORR+1 
          LX1    18 
          BX6    -X0*X1 
          SA1    A0+DBTNO    GET TN 
          BX1    X0*X1
          BX6    X1+X6
          SA6    SORR 
          SA5    A6          SET POINTER FOR SIX WORD ENTRY 
 CTF5.6   RJ     MFP         MAKE FILE PERMANENT
          NZ     X1,CTF15    IF AN ERROR CREATING FILE
          WRITECW  SF,*      PRESET WRITE FUNCTION
          EQ     CTF4        GET NEXT TAPE BLOCK HEADER 
  
*         MOVE PERMIT BLOCK TO PERMITS HOLDING TABLE. 
  
 CTF6     SX2    X3-2 
          NZ     X2,CTF7     IF NOT *PERMIT* BLOCK HEADER 
          SA1    MEMORY      GET CURRENT FIELD LENGTH 
          SA4    CTFPLWA     GET CURRENT PERMIT BUFFER LWA
          SB5    B5-NWPH     DISCOUNT PERMIT HEADER 
          AX1    30 
          SX6    X4+B5       COMPUTE NEW PERMIT BUFFER LWA
          SA6    A4 
          IX7    X1-X6       CHECK BUFFER LWA AGAINST FIELD LENGTH
          SX7    X7-8 
          PL     X7,CTF6.1   IF SUFFICIENT MEMORY TO HOLD PERMITS 
          ERRNG  64-PRMITBWC PERMIT BLOCK WORD COUNT TOO LARGE
          SX6    X1+100B     INCREASE FIELD LENGTH
          LX6    30 
          SA6    MEMORY 
          MEMORY CM,MEMORY,R
 CTF6.1   SX0    X4          SKIP PERMIT HEADER 
          READW  TF,X4,NWPH 
          LX5    12          RESTORE WORD COUNT 
          MX1    -9 
          BX1    -X1*X5 
          SB5    X1-NWPH
          READW  TF,X0,B5    READ PERMITS TO BUFFER 
          NZ     X1,CTF13    IF PFC MISMATCH
          EQ     CTF4        GET NEXT TAPE BLOCK HEADER 
  
 CTF7     SX0    X3-3        CHECK FOR DATA CONTROL WORD
          ZR     X0,CTF8     IF A DATA BLOCK
          READW  TF,WSA,B5   SKIP EXTRANEOUS TAPE BLOCK 
          NZ     X1,CTF13    IF TRANSFER NOT NORMAL ISSUE ERROR 
          EQ     CTF4        GET NEXT TAPE BLOCK HEADER 
  
 CTF8     LX5    3           RIGHT JUSTIFY BLOCK TYPE 
          MX0    -3          ISOLATE PLAIN/EOR/EOF/EOI CODE 
          BX3    -X0*X5 
          SX6    PRUSIZE     PRESET PRU FREE SPACE COUNTER
          SA6    CTFD 
          SX1    B0+
          SX3    X3-4        CHECK FOR SYSTEM SECTOR
          NZ     X3,CTF9     IF NOT A SYSTEM SECTOR BLOCK 
          READW  TF,WSA,B5   SKIP SYSTEM SECTOR BLOCK 
          NZ     X1,CTF13    IF SKIP FAILED THEN ISSUE ERROR
 CTF8.1   READW  TF,WSA,1    READ DATA BLOCK HEADER 
  
*         PICK TAPE BLOCKS APART INTO PRU-S AND WRITE THEM TO DISK. 
  
 CTF9     NZ     X1,CTF9.9   IF NO MORE DATA
          SA1    WSA
          MX0    -9          ISOLATE TAPE BLOCK LENGTH
          BX6    -X0*X1 
          SA6    CTFB        SAVE BLOCK WORD COUNT
          MX0    -3          POSITION AND ISOLATE DATA BLOCK TYPE 
          AX1    9
          BX7    -X0*X1 
          SA7    CTFC        SAVE TYPE
          SA2    CTFD        PRU FREE SPACE COUNTER 
          SX3    X2-PRUSIZE 
          ZR     X3,CTF9.3   IF ALL FREE SPACE
          IX3    X6-X2       COMPUTE TAPE BLOCK SIZE - FREE SPACE 
          PL     X3,CTF9.2   IF BLOCK SIZE .GE. FREE SPACE
          ZR     X6,CTF9.3   IF TAPE BLOCK IS EMPTY 
          SX5    SECTOR+PRUSIZE  SET LWA+1 OF SECTOR
          IX5    X5-X2       COMPUTE FWA OF SECTOR FREE SPACE 
          READW  TF,X5,X6    MOVE TAPE BLOCK INTO SECTOR
          EQ     CTF9.5      JOIN WITH FS > WC
  
*         THERE IS DATA IN *SECTOR* FROM THE PREVIOUS TAPE BLOCK, AND 
*         THE CURRENT TAPE BLOCK IS BIGGER THAN THE CURRENT FREE SPACE. 
  
 CTF9.2   SX5    SECTOR+PRUSIZE  LWA+1 OF SECTOR
          IX5    X5-X2       FWA OF FREE SPACE
          SB5    X2          REMEMBER FREE SPACE SIZE 
          READW  TF,X5,B5    FILL SECTOR
          SA4    CTFB        BLOCK WORD COUNT 
          SA2    CTFD        SECTOR FREE SPACE
          IX6    X4-X2       COMPUTE NEW WC = WC - FS 
          SX7    PRUSIZE
          SA6    A4 
          SA7    A2          RESET TO FULL FREE SPACE 
          SX5    X7          SET AMOUNT TO COPY 
          RJ     WRS         WRITE SECTOR TO DISK 
  
*         NOW *SECTOR* IS EMPTY, AND THERE STILL MAY BE DATA LEFT IN
*         THE TAPE BLOCK TO BREAK APART INTO PRU-S. 
  
 CTF9.3   SA4    CTFB        CURRENT BLOCK WORD COUNT 
          SX3    X4-PRUSIZE  CHECK FOR LESS THAN A FULL PRU 
          NG     X3,CTF9.4   IF LESS THAN A SECTOR LEFT TO COPY 
          READW  TF,SECTOR,PRUSIZE  MOVE A WHOLE PRU
          SX5    PRUSIZE     SET AMOUNT TO WRITE OUT
          RJ     WRS         WRITE SECTOR TO DISK 
          SA4    CTFB        UPDATE WORD COUNT
          SX6    X4-PRUSIZE  SUBTRACT AMOUNT JUST WRITTEN 
          SA6    A4 
          EQ     CTF9.3      LOOP FOR NEXT FULL SECTOR
  
 CTF9.4   ZR     X4,CTF9.6   IF TAPE BLOCK IS NOW EMPTY 
          READW  TF,SECTOR,X4  COPY TAIL END OF BLOCK 
 CTF9.5   SA4    CTFB 
          SA2    CTFD 
          IX6    X2-X4       COMPUTE NEW FS = FS - WC 
          SA3    CTFC        DATA BLOCK TYPE
          SA6    A2 
          SX2    X3-1        CHECK FOR EOR BLOCK
          NZ     X2,CTF12    IF NOT EOR 
          SX7    PRUSIZE
          IX5    X7-X6       COMPUTE SIZE OF SHORT PRU
          SA7    A2          RESET FREE SPACE 
          RJ     WRS         WRITE SHORT PRU TO DISK
          EQ     CTF8.1      JOIN WITH EMPTY BLOCK CASE 
  
 CTF9.6   SA3    CTFC        DATA BLOCK TYPE
          SX2    X3-1        CHECK FOR EOR BLOCK
          NZ     X2,CTF9.7   IF NOT EOR BLOCK 
          SX5    B0+         WRITE ZERO-LENGTH PRU TO DISK
          RJ     WRS
          EQ     CTF8.1      JOIN WITH EOF AND EOI CASES
  
 CTF9.7   SX2    X3-2        CHECK FOR EOF BLOCK
          NZ     X2,CTF9.8   IF NOT EOF BLOCK 
          WRITEW SF,PRUHEAD,1  WRITE EOF SECTOR 
          WRITEW SF,EOFWORD,1 
          EQ     CTF8.1      JOIN WITH EOI CASE 
  
 CTF9.8   SX2    X3-3        CHECK FOR EOI BLOCK
          NZ     X2,CTF12    IF NOT EOI BLOCK 
          WRITECW  SF,R      FLUSH CIRCULAR BUFFER
          WRITE  SF,*        SET WRITE FUNCTION 
          SA5    CTFB        LEFTOVER WORD COUNT
          ZR     X5,CTF10    IF NOTHING LEFT TO COPY
          READW  TF,WSA,X5
          WRITEW SF,WSA,X5
          WRITE  SF,R        FLUSH LAST OF FILE 
          EQ     CTF10       CLEAN UP AND RETURN
  
*         HIT EOR/EOF/EOI ON TAPE.
  
 CTF9.9   NG     X1,CTF12.1  IF EOF OR EOI WHEN EOR EXPECTED
 CTF10    WRITECW  SF,R      FLUSH CIRCULAR BUFFER
          SA1    LOADFLG
          ZR     X1,CTFX     IF A COPY
          SX2    1RI
          BX3    X2-X1       COMPARE WITH DATABASE TYPE 
          NZ     X3,CTF11    IF NOT AN INDIRECT ACCESS FILE 
          SA1    SF 
          MX0    -8          WIDTH OF *PFM* ERROR CODE
          LX0    17-7        POSITION TO LOCATION IN FET
          BX6    X0*X1       CLEAR ANY PREVIOUS CODE
          SA6    A1 
          SA1    A1+B1
          SX0    4+1         SET *SA* AND *EP* BITS 
          LX0    44 
          BX6    X0+X1
          MX0    12          CLEAR THE *DT* FIELD 
          BX6    -X0*X6 
          SA6    A1 
          SAVE   SF,PFNAM,PFPASS,PFUCW,PFCAT,PFPERM,,,,PFSS,,,,,,PFAC 
          SA2    SF+1 
          SX0    4+1         CLEAR *SA* AND *EP* BITS 
          LX0    44 
          BX6    -X0*X2 
          SA6    A2 
          SA1    A2-B1
          SX1    X1          EXAMINE BOTTOM 18 BITS 
          AX1    10          RIGHT JUSTIFY *PFM* ERROR CODE 
          NZ     X1,CTF15    IF AN ERROR SAVING FILE
 CTF11    RJ     PPB         PROCESS PERMIT BLOCK 
          UNLOAD SF,R 
          EQ     CTFX        RETURN 
  
 CTF12    ZR     X3,CTF8.1   IF DATA TYPE IS NOT 5 OR 6 OR 7
 CTF12.1  MESSAGE  ERFT,3,R  * DUMP FILE MALFUNC - FILE TRUNCATED.* 
          EQ     CTF13.1     FINISH UP
  
 CTF13    MESSAGE  ERUP,3,R  * DUMP FILE MALFUNC - UNRECOGNIZABLE PFC.* 
 CTF13.1  SA1    LOADFLG
          ZR     X1,CTF15    IF A COPY
          SX2    1RI
          BX3    X2-X1
          ZR     X3,CTF14    IF AN INDIRECT FILE
          PURGE  SF 
 CTF14    UNLOAD SF,R 
 CTF15    MX0    42 
          SA1    A5+B1       ENTRY WORD WITH PFN
          BX1    X0*X1
          RJ     ZTB         CONVERT BINARY ZEROES TO BLANKS
          MX0    42 
          SA1    LDNG+3 
          BX6    X0*X6
          BX1    -X0*X1 
          BX6    X6+X1       INSERT NAME IN MESSAGE 
          SA6    LDNG+3 
          WRITEC O,LDNG      * SEE DAYFILE - UNABLE TO LOAD XXXXXXX.* 
          RJ     ILC         INCREMENT LINE COUNT 
  
*         SKIP FORWARD IF NOT AT EOR/EOI. 
  
 CTF16    SA1    TF          CHECK STATUS 
          MX0    -18
          BX1    -X0*X1 
          SX1    X1-13B 
          NZ     X1,CTFX     IF ALREADY AT EOR/EOF/EOI
          SKIPF  TF,,R
          EQ     CTFX        RETURN 
  
  
 CTFA     BSS     1          INITIAL DUMP FILE STATUS 
 CTFB     BSS     1          BLOCK WORD COUNT 
 CTFC     BSS     1          DATA BLOCK TYPE
 CTFD     BSS     1          PRU FREE SPACE COUNTER 
 CTFPLWA  DATA   0           LWA OF PERMIT BUFFER 
 CTJ      SPACE  4,15 
**        CTJ - CONVERT DISPLAY DATE TO BINARY JULIAN DATE. 
* 
*         ENTRY  (X5) = DISPLAY DATE   36/0LYYMMDD,24/0.
*                       OR FORMATTED   * YY/MM/DD.*.
*         EXIT   (X6) = BINARY JULIAN DATE. 
*                (X6) = 0 IF CONVERSION ERROR.
* 
*         USES   X - 1, 2, 3, 4, 5, 6, 7. 
*                A - 4. 
*                B - 7. 
* 
*         CALLS  DXB. 
  
  
 CTJ2     SX6    B0+         SET ERROR STATUS 
  
 CTJ      SUBR               ENTRY/EXIT 
          MX4    -24
          BX2    -X4*X5 
          ZR     X2,CTJ0     IF YYMMDD FORMAT 
          MX4    12          CONVERT * YY/MM/DD.* FORMAT
          LX5    6
          BX3    X4*X5       ISOLATE YY 
          LX5    18 
          BX2    X4*X5       ISOLATE MM 
          LX5    18 
          BX5    X4*X5       ISOLATE DD 
          LX5    -12
          BX5    X5+X2       MERGE TO MMDD
          LX5    -12
          BX5    X5+X3       MERGE TO YYMMDD
 CTJ0     SB7    B1+
          RJ     DXB         CONVERT (DECIMAL) DISPLAY TO BINARY
          NZ     X4,CTJ2     IF AN ERROR IN DATE
  
*         EXTRACT YEAR AND STORE IN X1. 
  
          SX7    10000
          BX1    X6 
          BX2    X7 
          IX1    X1/X2       DIVIDE JULIAN DATE BY 10000
          IX2    X1*X7
          IX6    X6-X2       GET REMAINDER AND STORE IN X6
  
*         EXTRACT MONTH AND STORE IN X2.
  
          SX7    100
          BX2    X6 
          BX3    X7 
          IX2    X2/X3       DIVIDE REMAINDER BY 100
  
*         EXTRACT DAY AND STORE IN X3.
  
          IX3    X2*X7       GET REMAINDER AND STORE IN X3
          IX3    X6-X3
  
*         GET NUMBER OF DAYS IN FULL MONTHS.
  
          SA4    MONTH-1+X2 
          MX7    -2          CHECK FOR LEAP YEAR
          BX6    -X7*X1 
          NZ     X6,CTJ1     IF NOT A LEAP YEAR 
          LX4    30 
  
*         BUILD FINAL RESULT. 
  
 CTJ1     SX4    X4-1 
          SX2    1000 
          IX6    X1*X2       YEAR*1000
          IX6    X4+X6       ADD ON DAYS FOR FULL MONTHS
          IX6    X3+X6       ADD ON DAYS FOR PARTIAL MONTH
          EQ     CTJX        RETURN 
 CUP      SPACE  4,15 
**        CUP - CLEAN UP AFTER DIRECTIVE PROCESSING.
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
* 
*         USES   X - 0, 1, 2, 5, 6. 
*                A - 1, 2, 5, 6.
*                B - 3. 
* 
*         CALLS  CDD, IMI.
* 
*         MACROS BREAK, CLEAR, MESSAGE, UNLOAD, WRITEC, WRITEW. 
  
  
 CUP      SUBR               ENTRY/EXIT 
          CLEAR  DB 
          UNLOAD DB,R 
          CLEAR  UPDATES
          CLEAR  NUMBERS
          SX6    B0+         REMOVE DEBRIS OF PREVIOUS DUMP 
          SA6    INDXLEN
          SA6    INDXNAM
          SA6    INDXNAM+1
          SA6    NEW+6
          SA6    CAT+6
          SA6    DB+6 
          SA6    UPE
          SA6    DBE
          MX2    13 
          SA1    DB+1 
          BX6    -X2*X1      REMOVE DEVICE TYPE AND RANDOM BIT
          SA6    A1+
          SA1    CAT         REMOVE EOI CODE
          MX2    6*7
          BX6    X2*X1
          SX5    3
          BX6    X6+X5
          SA6    A1 
  
  
*         WARN USER OF FILES SPECIFIED BUT NOT PROCESSED
  
          MX0    42 
          MX6    0
          SA6    PFCNT       CLEAR PFTAB POINTER
          SA6    CUPB        CLEAR FLAG WORD
 CUP0     SA2    PFCNT
          SA1    PFTAB+X2    PFTAB(PFCNT) 
          ZR     X1,CUP0.1   IF END OF LIST 
          SX6    X2+B1
          SA6    PFCNT       INCREMENT COUNTER
          BX6    X1 
          LX6    59          POSITION TO SELECTED FLAG
          NG     X6,CUP0     IF FILE WAS SELECTED 
          SA6    CUPB        NOTE THAT A FILE WAS MISSED
          BX1    X0*X1       EXTRACT THE FILE NAME
          SB3    CUPA        * FILE NOT FOUND OR FAILED CRITERIA.*
          RJ     IMI         ISSUE MESSAGE INSERTING NAME 
          RJ     ILC         INCREMENT LINE COUNT 
          EQ     CUP0        PROCESS NEXT FILE
  
*         RESET BREAK CONDITION.
  
 CUP0.1   SA2    NFP         NUMBER OF FILES PROCESSED
          BX6    X6-X6
          SA1    BREAK
          SA6    A1 
          NZ     X1,CUPX     IF USER HAS INTERRUPTED
          SA1    EOR
          NZ     X1,CUP4     IF EOR/EOF ENCOUNTERED ON INPUT
  
*         CHECK FOR NO HEADER -- LO=N -- REQUEST. 
  
          SA1    NHV         HEADER OPTION VARIABLE 
          ZR     X1,CUP1     IF EXIT HEADER WANTED
          NZ     X2,CUP4     IF AT LEAST ONE FILE HAS BEEN PROCESSED
          WRITEC O,HEADER6
          EQ     CUP4        FINISH UP OUTPUT PROCESSING
  
*         DISPLAY EXIT MESSAGE. 
  
 CUP1     SA5    HEADER2
          ZR     X2,CUP2     IF NO FILES PROCESSED
          BX1    X2 
          RJ     CDD         CONVERT TO DECIMAL 
          LX6    18 
          MX0    42 
          BX6    X0*X6
          BX1    -X0*X5 
          BX6    X1+X6
          EQ     CUP3        SAVE FILE COUNT AND ISSUE MESSAGE
  
 CUP2     SA1    HEADER5     NO FILES PROCESSED 
          BX6    X1 
 CUP3     SA6    A5 
          WRITEW O,HEADER1,HEADER4  FILES PROCESSED COUNT 
          MESSAGE HEADER2,3 
 CUP4     BREAK 
          SA1    NAP
          NZ     X1,CUPX     IF NO ABORT PARAMETER SELECTED 
          SA1    NAV
          NZ     X1,CUPX     IF NO ABORT OPTION SELECTED
          SA1    CUPB 
          NZ     X1,MAIN7    IF ANY FILES WERE MISSED 
          EQ     CUPX        RETURN 
  
  
 CUPA     DATA   C*   FILE NOT FOUND OR FAILED CRITERIA - !!!!!!!.* 
 CUPB     BSS    1           FILE MISSED FLAG 
 CVD      SPACE  4,10 
***       CVD - CONVERT PACKED DATE TO BINARY JULIAN DATE.
* 
*         ENTRY  (X5) = 42/0,18/BIASED BINARY DATE
* 
*         EXIT   (X6) = BINARY JULIAN DATE. 
* 
*         USES   X - 0, 1, 2, 3, 4, 5, 6. 
*                A - 4. 
  
  
 CVD      SUBR               ENTRY/EXIT 
  
*         EXTRACT YEAR AND STORE IN X1. 
  
          MX4    -6 
          BX3    -X4*X5      DD 
          LX5    -6 
          BX2    -X4*X5      MM 
          LX5    -6 
          BX1    -X4*X5      YY 
          SX1    X1-30
          PL     X1,CVD1     IF YEAR .GE. 2000
          SX1    X1+100      UNBIAS YEAR
  
*         GET NUMBER OF DAYS IN FULL MONTHS.
  
 CVD1     SA4    MONTH-1+X2 
          SX4    X4-1 
  
*         CHECK FOR LEAP YEAR.
  
          MX0    58D         SET MASK FOR 3 BITS
          BX6    -X0*X1      SEE IF YEAR DIVISIBLE BY 4 
          NZ     X6,CVD4     IF NOT A LEAP YEAR 
          BX0    -X0         CHECK FOR JANUARY OR FEBRUARY
          IX6    X2-X0       SUBTRACT 3 FROM MONTH
          NG     X6,CVD4     IF JANUARY OR FEBRUARY 
          SX4    X4+B1
  
*         BUILD FINAL RESULT. 
  
 CVD4     SX2    1000D
          IX6    X1*X2       YEAR*1000
          IX6    X4+X6       ADD ON DAYS FOR FULL MONTHS
          IX6    X3+X6       ADD ON DAYS FOR PARTIAL MONTH
          EQ     CVDX        RETURN 
 CVH      SPACE  4,15 
**        CVH - CHECK FOR VALID DUMP HEADER.
* 
*         CVH EXAMINES THE ASSIGNED DUMP TAPE FOR A VALID HEADER. 
* 
*         ENTRY  (X5) = FET ADDRESS OF ASSIGNED TAPE. 
* 
*         EXIT   (X1) = 0 IF FIRST RECORD ON TAPE IS A DUMP HEADER. 
*                (X1) .NE. 0 IF FIRST RECORD IS NOT A DUMP HEADER.
*                TAPE IS REWOUND. 
* 
*         USES   X - 1. 
*                A - 1. 
*                B - 2. 
* 
*         MACROS READ, READO, REWIND. 
  
  
 CVH      SUBR               ENTRY/EXIT 
          REWIND X5,R 
          SB2    B0+         PRESET VALID 
          SA1    NVV
          NZ     X1,CVH2     IF NOT VALIDATING DUMP FILE
          READ   X5,R 
          READO  X5          READ FIRST WORD AT BOI 
          NZ     X1,CVH1     IF NOT *TRANSFER COMPLETE* 
          SX1    X6-11000B   COMPARE WITH CATALOG CONTROL WORD
          AX1    9           IGNORE SIZE FIELD
          ZR     X1,CVH1     IF MATCHED PFC CONTROL WORD
          SA1    HDRPFD 
          BX1    X6-X1       COMPARE WITH PFDUMP LABEL HEADER 
          AX1    24          IGNORE POSSIBLE CATALOG TRACK COUNT
          ZR     X1,CVH1     IF *PFDUMP* OR CURRENT *RECLAIM* HEADER
          SA1    =7LRECLAIM  COMPARE WITH INTERIM *RECLAIM* HEADER
          BX1    X6-X1
          AX1    18 
  
*         (X1) = VALID OR INVALID FLAG. 
  
 CVH1     SB2    X1          SAVE VALID/INVALID INDICATION
          REWIND X5,R 
 CVH2     SX1    B2+
          EQ     CVHX        RETURN 
 CVP      SPACE  4,30 
**        CVP - CONVERT PARAMETERS. 
* 
*         *CVP* CONVERTS DISPLAY CODE VARIABLES TO BINARY VALUES BASED
*         ON BITS SET IN THE *ARMTAB* WORD FOR EACH PARAMETER-- 
*                BIT 26 - JULIAN DATE TO BE CONVERTED.
*                BIT 25 - OCTAL TO BE CONVERTED.
*                BIT 24 - DECIMAL TO BE CONVERTED.
*                BIT 23 - SET OPTION BITS FOR *TY* OPTION.
*                BIT 22 - SET OPTION BITS FOR *PO* OPTION.
*                BIT 21 - SPACE FILL TAPE NUMBER. 
*         DISPLAY CODE *0* IS CONVERTED TO BINARY 0.
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
* 
*         ERROR  TO *MAIN7* IF PARAMETER ERROR. 
* 
*         USES   X - 0, 1, 2, 3, 4, 5, 6. 
*                A - 1, 2, 3, 4, 5, 6.
*                B - 2, 6, 7. 
* 
*         CALLS  CTJ, CVS, DXB, ZTB.
* 
*         MACROS MESSAGE, WRITEC. 
  
  
 CVP      SUBR               ENTRY/EXIT 
          MX0    6
          SA1    RPV         REPLACE,VARIABLE 
          SA2    OPNO        NO OPTION
          BX1    X0*X1       ISOLATE OPTION 
          BX6    X2-X1
          SA6    A1          SET OPTION VARIABLE
          LX1    6
          SX6    X1-1RC 
          SA6    RPCL        SET COPY TO CURRENT LOCATION FLAG
          SA1    EXV         EXCEPTION VARIABLE 
          BX1    X0*X1
          BX6    X2-X1
          SA6    A1          SET EXCEPTION VARIABLE 
          SA1    ASV         ALTERNATE STORAGE VARIABLE 
          BX1    X0*X1
          BX6    X2-X1
          SA6    A1          SET ALTERNATE STORAGE VARIABLE 
          SA1    EIV         ZERO *EIV* IF *EI=NO* ON DIRECTIVE 
          BX1    X0*X1
          BX6    X1-X2
          ZR     X6,CVP1     IF *EI=NO* SPECIFIED 
          SA2    =1L#        CHECK FOR DEFAULT
          BX6    X1-X2
          NZ     X6,CVP1     IF NOT *NO* AND NOT DEFAULT ASSUME *YES* 
          SA2    COPTION
          SA1    =0LCOMPACT 
          BX6    X1-X2       *COMPACT* DEFAULT IS *NO*, ALL OTHER *YES* 
 CVP1     SA6    EIV
          MX6    60 
          SA1    DTV         *DT* OPTION
          ZR     X1,CVP2     IF *DT* NOT SPECIFIED
          SA2    DTMS 
          BX2    X1-X2
          AX2    36 
          NZ     X2,CVP3     IF NOT MASS STORAGE DEVICE TYPE
          SX6    B1+         EXPLICIT MASS STORAGE SELECTION
          SA6    MSV
          EQ     CVP4        CONTINUE 
  
 CVP2     SA1    DV          *D* OPTION 
          SA2    MTV         *MT* OPTION
          BX2    X1+X2
          SA1    NTV         *NT* OPTION
          BX2    X1+X2
 CVP3     ZR     X2,CVP4     IF *D*/*MT*/*NT* OPTIONS NOT SELECTED
          SA6    MSV
 CVP4     SA1    COPTION
          SA2    =0LCOMPACT 
          BX5    X1-X2
          SA1    TNV         TAPE NAME VARIABLE 
          ZR     X5,CVP5     IF DIRECTIVE IS *COMPACT*
          SA5    MSV         GET MASS STORAGE INDICATOR 
 CVP5     NZ     X1,CVP6     IF TAPE NAME SET 
          SA2    DNV         DUMP NAME VARIABLE 
          SA1    DFV         DEFAULT FILE NAME
          ZR     X2,CVP6     IF DUMP NAME NOT SET 
          BX1    X2 
          NG     X5,CVP6     IF EXPLICIT TAPE OR DENSITY OPTION SET 
          SX5    B1          MASS STORAGE IMPLIED 
 CVP6     BX6    X1 
          SX1    X5+         ABSOLUTE VALUE OF MASS STORAGE INDICATOR 
          BX1    X1+X2
          ZR     X1,CVP7     IF NO DUMP NAME AND NOT MASS STORAGE 
          SA6    TF+TTNV     SET DUMP VSN VARIABLE
 CVP7     SA6    TF+TDNV     SET DUMP NAME VARIABLE 
          NZ     X5,CVP8     IF MASS STORAGE DUMP 
          SA1    TF+TTNV
          ZR     X1,CVP8     IF NO *TN* OR *DN* SUPPLIED
          RJ     CVS         BLANK FILL VSN AND CHECK FOR *SCRATCH* 
          SA6    TF+TTNV
          SA1    DFV
          BX6    X1 
 CVP8     SA6    TF+TDFV     SET DUMP LFN 
          SA1    CTV         COMPACT TAPE NAME
          SX6    X5 
          BX2    X1          PRESET NON-ZERO IF *CTV* NON-ZERO
          SA6    TF+TMSV     STORE DUMP FILE MASS STORAGE FLAG
          SA5    MSV
          NZ     X1,CVP9     IF COMPACT TAPE NAME SET 
          SA2    CNV         COMPACT DUMP NAME
          SA1    CFV         DEFAULT COMPACT FILE NAME
          ZR     X2,CVP9     IF COMPACT DUMP NAME NOT SET 
          BX1    X2 
          NG     X5,CVP9     IF EXPLICIT TAPE OR DENSITY OPTION SET 
          SX5    B1+         MASS STORAGE IMPLIED 
 CVP9     BX6    X1 
          SX1    X5+         ABSOLUTE VALUE OF MASS STORAGE INDICATOR 
          BX1    X1+X2
          ZR     X1,CVP10    IF NO COMPACT NAME AND NOT MASS STORAGE
          SA6    MF+TTNV     SET COMPACT VSN VARIABLE 
 CVP10    SA6    MF+TDNV     SET COMPACT DUMP NAME VARIABLE 
          NZ     X5,CVP11    IF MASS STORAGE COMPACT
          SA1    MF+TTNV
          ZR     X1,CVP11    IF NO *CT* OR *CN* SUPPLIED
          RJ     CVS         BLANK FILL VSN AND CHECK FOR *SCRATCH* 
          SA6    MF+TTNV
          SA1    CFV
          BX6    X1 
 CVP11    SA6    MF+TDFV     STORE COMPACT LFN
          SX6    X5 
          SA6    MF+TMSV     STORE COMPACT MASS STORAGE FLAG
          SB6    ARMTABL
  
*         PROCESS NEXT PARAMETER. 
  
 CVP12    SB6    B6-B1
          NG     B6,CVP26    IF END OF TABLE ENCOUNTERED
          SA5    VARIABL+B6  CHECK NEXT VALUE 
          ZR     X5,CVP12    IF NO OPTION 
  
*         CHECK FOR DISPLAY CODE ZERO.
  
          BX1    X5 
          MX0    6
          BX6    X0*X1       ISOLATE LEFTMOST CHARACTER 
          LX6    6           RIGHT JUSTIFY CHARACTER
          SX6    X6-1R0      COMPARE WITH A ZERO
          NZ     X6,CVP13    IF THIS IS NOT A DISPLAY CODE ZERO 
  
*         MAKE PROVISION FOR VARIABLES THAT MAY START 
*         WITH A DISPLAY CODE ZERO AS THE FIRST CHARACTER.
  
          LX1    6
          BX6    X0*X1
          NZ     X6,CVP13    IF NOT JUST DISPLAY CODE ZERO
          SX1    A5          CHECK FOR *PF* AND *FN* OPTIONS
          SX2    PFV
          BX2    X1-X2
          ZR     X2,CVP13    IF *PF* OPTION 
          SX2    FNV
          BX2    X1-X2
          ZR     X2,CVP13    IF *FN* OPTION 
          SX2    NNV
          BX2    X1-X2
          NZ     X2,CVP15.1  IF NOT *NN* OPTION 
  
*         CHECK FOR 7 CHARACTER FILE NAME.
  
 CVP13    MX0    -18
          BX1    -X0*X5      CHECK FOR TOO MANY CHARACTERS
          NZ     X1,CVP25    IF MORE THAN SEVEN CHARACTERS ENTERED
  
*         CHECK CONVERSION BITS.  SET (X1) = CONVERSION FLAGS.
  
          SA1    ARMTAB+B6   GET CORRESPONDING TABLE ENTRY
  
*         CHECK FOR JULIAN DATE.
  
          LX1    59-26
          PL     X1,CVP14    IF NOT JULIAN DATE 
          ZR     X5,CVP25    IF DATE EQUAL ZERO 
          BX1    X5 
          RJ     CTJ         CONVERT DATE TO BINARY JULIAN
          ZR     X6,CVP25    IF ERROR IN ASSEMBLY 
          SA6    A5          SAVE CONVERTED DATE
          EQ     CVP12       PROCESS NEXT ENTRY 
  
*         CHECK FOR OCTAL FIELD.
  
 CVP14    LX1    59-25-59+26
          PL     X1,CVP16    IF NOT OCTAL CONVERSION
          SB7    B0          SET OCTAL CONVERSION FOR *DXB* 
  
*         CONVERT FIELD TO BINARY.
  
 CVP15    RJ     DXB         CONVERT DECIAML/OCTAL TO BINARY
          NZ     X6,CVP15.2  IF NOT EXPLICIT ZERO VALUE 
 CVP15.1  SX2    GTV
          SX5    A5 
          BX5    X2-X5
          NZ     X5,CVP15.2  IF NOT THE *GT* OPTION 
          MX6    -0          SET TO NEGATIVE ZERO 
 CVP15.2  SA6    A5          SET BINARY VALUE INTO CONVERSION TABLE 
          EQ     CVP12       PROCESS NEXT ENTRY 
  
*         CHECK FOR DECIMAL FIELD.
  
 CVP16    LX1    59-24-59+25
          PL     X1,CVP17    IF NOT DECIMAL CONVERSION
          SB7    1           INDICATES DECIMAL BASE 
          EQ     CVP15       CONVERT TO BINARY
  
*         CHECK FOR *TY* OPTION.
  
 CVP17    MX0    -6 
          SX6    B0+
          LX1    59-23-59+24
          PL     X1,CVP20    IF NOT *TY* OPTION 
 CVP18    LX5    6
          BX2    -X0*X5 
          ZR     X2,CVP19    IF LAST CHARACTER
          MX1    1
          SB2    X2 
          LX1    B2 
          BX6    X6+X1
          EQ     CVP18       ASSEMBLE NEXT BIT
  
 CVP19    SX2    1S9+1S4     ENSURE ONLY *I* OR *D* BITS ON 
          LX2    -1          BIT NUMBER = CHARACTER - 1 
          BX2    -X2*X6 
          NZ     X2,CVP25    IF BAD CHARACTER 
          EQ     CVP12       GET NEXT PARAMETER 
  
*         CONVERT CHARACTER STRING TO TURN ON BITS IN WORD
*         FOR *PO* OPTION ON TAPE REQUEST.
  
 CVP20    LX1    59-22-59+23
          PL     X1,CVP23    IF NOT *PO* OPTION 
          SA2    CVPA        SET DEFAULT PROCESSING OPTIONS 
          BX6    X2 
 CVP21    LX5    6           EXTRACT 1 CHARACTER
          BX2    -X0*X5 
          ZR     X2,CVP22    IF END OF PARAMETERS 
          SA4    CVPB 
          SB2    X2 
          AX4    X4,B2
          LX4    -1 
          PL     X4,CVP25    IF NOT LEGAL OPTION
          CX4    X4 
          SA2    CVPB+X4     MERGE VALUE FOR THIS CHARACTER 
          BX6    X6+X2
          EQ     CVP21       PROCESS NEXT CHARACTER 
  
 CVP22    MX0    -36         MERGE PROCESSING OPTIONS 
          BX2    -X0*X6      EXTRACT LOWER BITS TO BE DESELECTED
          BX6    X0*X6       EXTRACT UPPER BITS TO BE SELECTED
          LX2    36 
          BX6    -X2*X6      FINAL OPTION SELECTION 
          EQ     CVP24       SAVE PROCESSING OPTIONS
  
*         CHECK FOR PARAMETERS REQUIRING SPACE FILL.
  
 CVP23    LX1    59-21-59+22
          PL     X1,CVP12    IF NOT SPACE FILL
          BX1    X5 
          RJ     ZTB         CONVERT BINARY ZEROES TO BLANKS
 CVP24    SA6    A5          SAVE VALUE 
          EQ     CVP12       PROCESS NEXT PARAMETER 
  
*         PROCESS INCORRECT PARAMETER VALUE.
  
 CVP25    MESSAGE  CVPC,3    * INCORRECT ARGUMENT VALUE.* 
          WRITEC O,CVPC 
          EQ     MAIN7       PROCESS ERROR
  
  
*         CONVERT FILE RESIDENCE OPTION.
  
 CVP26    SA5    RSV
          ZR     X5,CVP26.3  IF FILE RESIDENCE NOT SPECIFIED
          SX0    77B
          SX6    B0+
 CVP26.1  LX5    6
          BX2    X0*X5
          ZR     X2,CVP26.2  IF LAST CHARACTER
          MX1    1
          SB2    X2+B1
          LX1    B2 
          BX6    X6+X1
          EQ     CVP26.1     ASSEMBLE NEXT BIT
  
 CVP26.2  SA2    CVPE        ENSURE *C*, *D* AND/OR *T* ONLY
          BX1    -X2*X6 
          NZ     X1,CVP25    IF BAD CHARACTER(S)
          SA6    A5+
 CVP26.3  SA1    MSV
          NZ     X1,CVPX     IF PROCESSING A MASS STORAGE DUMP FILE 
          SA1    TMSTAT 
          NZ     X1,CVPX     IF TMS IS ACTIVE 
          SA1    FTV
          SX6    2RFT        SET UP FOR *FT* IN MESSAGE 
          NZ     X1,CVP27    IF *FT* WAS USED 
          SX6    2RPW        SET UP FOR *PW* IN MESSAGE 
          SA2    PWV
          NZ     X2,CVP27    IF *PW* WAS USED 
          SA3    TOV
          ZR     X3,CVPX     IF *TO* NOT USED 
          SX6    2RTO        INSERT *TO* KEYWORD IN MESSAGE 
 CVP27    SA1    CVPD 
          MX0    -12
          LX6    42 
          LX0    42 
          BX1    X0*X1       REMOVE PREVIOUS KEYWORD
          BX6    X6+X1       INSERT OPTION ID 
          SA6    A1 
          MESSAGE  CVPD,3    * XX OPTION INCORRECT - TMS NOT ACTIVE.* 
          WRITEC O,CVPD 
          EQ     MAIN7       PROCESS ERROR
  
  
 CVPA     DATA   1S41        DEFAULT PROCESSING OPTIONS (U) 
  
 CVPB     DATA   51070742B   MASK BITS FOR OPTIONS (WURNMLHGFEA)
          DATA   1S40        W OPTION 
          DATA   1S41        U OPTION 
*         DATA   1S45        S OPTION    (OP=S NOT ALLOWED) 
          DATA   1S39        R OPTION 
*         DATA   1S46        P OPTION    (OP=P NOT ALLOWED) 
          DATA   1S37        N OPTION 
          DATA   1S43        M OPTION 
          DATA   1S7         L OPTION 
*         DATA   1S47        I OPTION    (OP=I NOT ALLOWED) 
          DATA   1S6         H OPTION 
          DATA   1S42        G OPTION 
          DATA   1S5         F OPTION 
          DATA   1S38        E OPTION 
          DATA   1S36        A OPTION 
  
 CVPC     DATA   C* INCORRECT ARGUMENT VALUE.*
 CVPD     DATA   C* XX OPTION INCORRECT - TMS NOT ACTIVE.*
 CVPE     CON    1S20+1S4+1S3      MASK FOR *RS* VALUES (TDC) 
 CVS      SPACE  4,20 
**        CVS - CHECK VSN FOR SCRATCH.
* 
*         CVS COMPARES THE VSN TO *SCRATCH* AND *0* AND CONVERTS IT TO
*         BLANKS IF IT MATCHES.  OTHERWISE THE VSN IS BLANK FILLED AND
*         TRUNCATED TO SIX CHARACTERS.  IF *TMS* IS ACTIVE AND THE *FT* 
*         OPTION WAS NOT SELECTED, *PVZ* IS CALLED TO INSERT DISPLAY
*         CODE ZEROES PRECEDING THE FIRST DIGIT OF SHORT VSN-S. 
* 
*         ENTRY  (X1) = THE VSN VARIABLE AS SUPPLIED BY THE USER. 
* 
*         EXIT   (X6) = THE SIX CHARACTER BLANK FILLED VSN - ALL BLANKS 
*                       IF THE ORIGINAL VALUE WAS *SCRATCH* OR *0*. 
* 
*         USES   X - 0, 1, 2, 6.
*                A - 2, 6.
* 
*         CALLS  PVZ, ZTB.
  
 CVS      SUBR               ENTRY/EXIT 
          SA2    =7LSCRATCH 
          MX0    42 
          BX2    X1-X2
          BX2    X0*X2
          ZR     X2,CVS1     IF VSN IS *SCRATCH*
          SA2    =1L0 
          BX2    X1-X2
          NZ     X2,CVS2     IF VSN IS NOT *0*
 CVS1     BX1    X1-X1       CLEAR VSN
          SX6    B0          FORCE DUMP AT BEGINNING OF INFORMATION 
          SA6    EIV
 CVS2     RJ     ZTB         CONVERT BINARY ZEROES TO BLANKS
          MX0    36 
          BX6    X0*X6
          SA2    TMSTAT 
          ZR     X2,CVSX     IF *TMS* NOT ACTIVE
          SA2    FTV
          NZ     X2,CVSX     IF NOT A *TMS* TAPE
          RJ     PVZ         PAD VSN WITH DISPLAY ZEROES
          EQ     CVSX        RETURN 
 CVT      SPACE  4,15 
**        CVT - CHECK FOR VALID DUMP TAPE.
* 
*         CVT EXAMINES THE ASSIGNED DUMP FILE FOR A VALID DUMP. 
* 
*         ENTRY  (X5) = FET ADDRESS OF ASSIGNED DUMP FILE.
* 
*         EXIT   (X1) = 0 IF TAPE HAS AT LEAST ONE GOOD DUMP OR USER
*                            SELECTED THE NO VALIDATION PARAMETER.
*                            TAPE IS POSITIONED BEFORE FIRST EOF. 
*                (X1) .NE. 0 IF TAPE HAS NO GOOD DUMPS. 
*                            TAPE IS REWOUND. 
* 
*         USES   X - 1, 2.
*                A - 1, 2.
* 
*         CALLS  CVH
* 
*         MACROS BKSP, READ, READO, REWIND, SKIPFF. 
  
  
 CVT      SUBR               ENTRY/EXIT 
          RJ     CVH         CHECK FOR VALID HEADER 
          NZ     X1,CVTX     IF NO VALID HEADER 
          SA2    NVV
          NZ     X2,CVTX     IF NO VALIDATION WANTED
          SKIPFF X5,1,R      SKIP FORWARD TO AN EOF 
          SA1    X5 
          LX1    59-9        LEFT JUSTIFY EOI BIT 
          NG     X1,CVT1     IF HIT EOI THEN FINISH 
          BKSP   X5,R        BACKSPACE OVER EOF 
          BKSP   X5,R        BACKSPACE OVER POSSIBLE END-OF-DUMP
          SA1    X5 
          LX1    59-3        LEFT JUSTIFY EXTRA *REWIND* STATUS BIT 
          NG     X1,CVT1     IF *REWIND* STATUS THEN FINISH 
          READ   X5,R 
          READO  X5          GET A WORD FROM THE RECORD 
          NZ     X1,CVT1     IF TRANSFER NOT COMPLETE 
          SA2    TRAILER     END-OF-DUMP WORD 
          BX1    X6-X2       COMPARE INPUT WORD WITH END-OF-DUMP
          NZ     X1,CVT1     IF NOT AN END-OF-DUMP WORD 
          READO  X5          GET SECOND WORD OF RECORD
          SX1    X1-1        COMPARE STATUS WITH *EOR ENCOUNTERED*
          ZR     X1,CVTX     IF EOR (VALID DUMP TAPE) 
  
*         NOT A VALID DUMP TAPE - EXIT WITH (X1) NON-ZERO.
  
 CVT1     REWIND X5,R 
          SX1    B1+         FLAG NOT VALID DUMP TAPE 
          EQ     CVTX        RETURN 
 DFT      SPACE  4,15 
**        DFT - DUMP FILE TO TAPE.
* 
*         ENTRY  CATLIST OF FILE IN *CATBUF*. 
* 
*         EXIT   (X1) = 0 IF NO DUMP ERRORS.
*                (X1) .NE. 0 IF FILE ATTACH/GET FAILED. 
*                FILE DUMPED TO TAPE. 
* 
*         USES   X - ALL. 
*                A - 1, 2, 3, 4, 6, 7.
*                B - 3. 
* 
*         CALLS  CRF, ILC, IMI. 
* 
*         MACROS ATTACH, BKSP, CATLIST, CLEAR, COPYBLK, CRF, GET, 
*                PDATE, READCW, READO, REWIND, WRITE, WRITEO, WRITER, 
*                WRITEW, UNLOAD.
  
  
 DFT      SUBR               ENTRY/EXIT 
          SX6    DCW         INITIALIZE TAPE BLOCK CONTROL WORD 
          SA6    BLOKHED
          WRITE  TF,*        SET WRITE FUNCTION 
          SX6    011000B
          SX1    NWCE        LENGTH OF THE PFC
          BX6    X1+X6
          SA1    CATBUF 
          MX0    42 
          BX1    X0*X1
          BX6    X1+X6
          SA6    PRMITH 
          SA1    ASV         ALTERNATE STORAGE VARIABLE 
          SA2    NNV         NEW NAME VARIABLE
          NZ     X1,DFT0.0   IF PRESERVING ALTERNATE STORAGE DATA 
          SX6    B0+         CLEAR ALTERNATE STORAGE DATA 
          SA6    CATBUF+FCAA
          SA6    CATBUF+FCTV
 DFT0.0   BX2    X0*X2       MASK NEW NAME
          NZ     X2,DFT0.1   IF NEW NAME FROM *NN* OPTION 
          SA1    DBE+DBUNM
          BX6    -X0*X1      GET NEW NAME POINTER 
          ZR     X6,DFT0.2   IF NO NEW NAME SPECIFIED 
          SA1    X6          GET NEW NAME FROM FILE NAME LIST 
          BX2    X0*X1
 DFT0.1   SA1    CATBUF+FCFN CATLIST FILE NAME
          BX6    -X0*X1      EXTRACT USER INDEX 
          BX6    X6+X2       UN + UI
          SA6    A1 
          SA2    PRMITH      PLACE NEW NAME IN *PRMITH* 
          BX2    -X0*X2 
          BX6    X0*X6
          BX6    X6+X2
          SA6    A2 
          BX6    X1          SAVE OLD *CATBUF* ENTRY
          SA6    SAVEBUF
          WRITEW TF,PRMITH,NWCE+1 
          SA1    SAVEBUF     RESTORE OLD CATBUF ENTRY 
          BX6    X1 
          SA6    CATBUF+FCFN
          EQ     DFT0.3      CONTINUE 
  
 DFT0.2   WRITEW TF,PRMITH,NWCE+1 
 DFT0.3   SA1    PFTAB       PERMANENT FILE TABLE 
          ZR     X1,DFT0.4   IF NOT PROCESSING LOCAL FILES
          SA2    PFCNT
          SA1    PFTAB+X2    PFTAB(PFCNT) 
          SX6    X2+B1       INCREMENT COUNTER
          SA6    A2 
          BX2    X1 
          LX2    58          POSITION TO LOCAL FILE FLAG
          PL     X2,DFT0.4   IF FILE IS NOT LOCAL 
          MX0    42 
          BX6    X0*X1
          RJ     CRF         CHECK RESERVED FILE NAMES
          ZR     X6,DFT2.1   IF RESERVED FILE NAME
          SA1    NEW
          BX7    X1          SAVE SCRATCH FET NAME
          SA7    SCRFET 
          BX1    -X0*X1      LOWER 18 BITS
          BX6    X6+X1
          SA6    A1          SET FILE NAME IN FET 
          BX6    X0*X1       CLEAR LOWER 18 BITS
          SA1    A1+8        FET+8
          BX1    -X0*X1      LOWER 18 BITS
          BX6    X6+X1
          SA6    A1          SET PFN IN FET 
          REWIND NEW,R
          SX6    B1          FLAG *DFT* IS DUMPING A LOCAL FILE 
          SA6    DUMPLOC
          EQ     DFT2        CHECK FOR PFM ERRORS 
  
 DFT0.4   SA1    CATBUF+FCRI
          MX0    24 
          BX6    X0*X1
          ZR     X6,DFT0     IF FILE HAS NO PERMITS 
          SA1    CATBUF+FCUI
          MX0    -18
          BX2    -X0*X1 
          LX2    12 
          BX6    X2+X6
          BX7    X0*X1
          SA7    A1 
          SA6    PRMITB+1 
          PDATE  PRMITB+2 
 DFT0.5   CLEAR  NEW         RESET FET POINTERS 
          CATLIST  NEW,CATBUF,,M  GET SOME PERMITS
          SA1    NEW+2       COMPUTE PERMIT WORD COUNT
          SA2    A1+B1
          IX5    X1-X2
          BX0    X2          INITIALIZE BUFFER POINTER
          SX6    20000B+PRMITBWC+2  SET PERMIT BLOCK HEADER 
          SA6    PRMITB 
 DFT0.6   SX5    X5-PRMITBWC REDUCE REMAINING WORD COUNT
          ZR     X5,DFT0.7   IF FULL BLOCK LEFT 
          NG     X5,DFT0.7   IF LESS THAN A FULL BLOCK
          WRITEW TF,PRMITB,3 WRITE PERMIT BLOCK HEADER
          WRITEW TF,X0,PRMITBWC  WRITE PERMIT BLOCK 
          SX0    X0+PRMITBWC ADVANCE BUFFER POINTER 
          EQ     DFT0.6      LOOP FOR ANOTHER BLOCK 
  
 DFT0.7   SX5    X5+PRMITBWC COMPUTE BLOCK WORD COUNT 
          SX6    X5+20000B+2
          SA1    NEW         CHECK END OF PERMITS (EOI) FLAG
          SX2    1000B
          BX2    X2*X1
          BX6    X6+X2       TREAT EOI FLAG AS PERMIT LAST BLOCK FLAG 
          SA6    PRMITB      SET PERMIT BLOCK HEADER
          WRITEW TF,PRMITB,3 WRITE PERMIT BLOCK HEADER
          WRITEW TF,X0,X5    WRITE PERMIT BLOCK 
          SA1    NEW
          LX1    59-9 
          PL     X1,DFT0.5   IF MORE PERMITS
  
 DFT0     CLEAR  NEW         RESET BUFFER POINTERS
          SA1    NEW+1       SET *SA* BIT IN FET
          MX6    1
          LX6    46-59
          BX6    X6+X1
          SA6    A1 
          SA1    CATBUF      ENSURE PERMANENT FILE NAME IN FET
          MX6    42 
          BX6    X6*X1
          SA6    NEW+10B
          SA1    CATBUF+FCBS
          LX1    59-11
          NG     X1,DFT1     IF A DIRECT ACCESS FILE
          GET    NEW
          EQ     DFT2        CHECK *PFM* STATUS 
  
 DFT1     ATTACH NEW,,,,R 
 DFT2     SA1    NEW+1       CLEAR *SA* BIT 
          MX6    1
          LX6    46-59
          BX6    -X6*X1 
          SA6    A1 
          SA1    NEW         CHECK *PFM* ERROR CODE 
          AX1    10 
          MX0    -8 
          BX1    -X0*X1 
          ZR     X1,DFT3     IF NO ERROR
          SA1    CATBUF      GET FILE NAME
          MX6    42 
          BX1    X1*X6
          SB3    DFTA        * CANNOT ATTACH/GET FILE - FILE SKIPPED.*
          RJ     IMI         ISSUE MESSAGE INSERTING NAME 
          RJ     ILC         INCREMENT LINE COUNT 
 DFT2.1   WRITER TF,R 
          BKSP   TF,R 
          SX1    B1+         FLAG ERROR CONDITION 
          EQ     DFTX        RETURN 
  
 DFT3     SX7    DCW         INITIALIZE TAPE BLOCK CONTROL WORD 
          SA7    BLOKHED
          SX5    NDMPWD      SET TAPE BLOCK FREE SPACE COUNTER
          READCW NEW,0,R     START READING PRU-S
          READO  NEW         GET FIRST PRU CONTROL WORD 
          ZR     X1,DFT4     IF NOT IMMEDIATE EOI (SOMETHING IN FILE) 
          SX6    DCW         DUMMY TAPE BLOCK CONTROL WORD
          SX1    3000B       EOI FLAG PLUS ZERO WORD COUNT
          BX6    X6+X1       CREATE EOI CONTROL WORD
          WRITEO TF          WRITE EOI TAPE BLOCK 
          EQ     DFT11       JOIN WITH NON-EMPTY CASE 
  
 DFT4     MX0    -24         WIDTH OF PRU-S BYTE COUNT FIELD
          SX3    5           BYTES IN A CYBER WORD
          BX2    -X0*X6      ISOLATE BYTE COUNT 
          IX6    X2/X3       COMPUTE WORD COUNT OF PRU (B7 DESTROYED) 
          SX7    X6-PRUSIZE  CHECK FOR A SHORT PRU
          SA6    DFTB        REMEMBER WORD COUNT
          SA7    DFTC        REMEMBER SHORT PRU FLAG
          ZR     X6,DFT5     IF WORD COUNT IS ZERO
          IX1    X6-X5       COMPUTE WORD COUNT - FREE SPACE
          NZ     X1,DFT6     IF WORD COUNT .NE. FREE SPACE
  
*         EITHER THE PRU-S WORD COUNT IS ZERO (EMPTY) OR THE PRU
*         WILL EXACTLY FILL THE FREE SPACE IN THE TAPE BLOCK. 
  
 DFT5     COPYBLK  X6,X6,X7  COPYBLOCK( WC, WC, SHORTPRU )
          SA1    DFTC        GET SHORT PRU COUNT
          NZ     X1,DFT5.1  IF A SHORT PRU
          WRITEW TF,BLOKHED,1  WRITE BLOCK HEADER FOR PLAIN BLOCK 
          SA4    BLOKHED
          MX0    -9 
          BX4    -X0*X4      EXTRACT SIZE OF THE BLOCK
          WRITEW TF,WSA,X4   WRITE PLAIN BLOCK JUST FILLED
 DFT5.1   SX5    NDMPWD      RESET FREE SPACE COUNTER 
          SX6    DCW
          SA6    BLOKHED     RESET HEADER WORD
          EQ     DFT9        JOIN WITH OTHER CASES
  
 DFT6     NG     X1,DFT7     IF PRU WORD COUNT .LT. FREE SPACE
          SX7    1           SET NOT FULL PRU FLAG
          SA7    NOPRU
 DFT6.1   COPYBLK  X5,X5,0   COPYBLOCK( FS, FS, FALSE ) 
          SX7    B0+         CLEAR NOT FULL PRU FLAG
          SA7    NOPRU
          WRITEW TF,BLOKHED,1  WRITE BLOCK HEADER FOR PLAIN BLOCK 
          SA4    BLOKHED
          MX0    -9          WIDTH OF TAPE BLOCK WORD COUNT FIELD 
          BX4    -X0*X4      EXTRACT SIZE OF THIS BLOCK 
          WRITEW TF,WSA,X4   WRITE PLAIN BLOCK JUST FILLED
          SA1    DFTB        PREVIOUS WORD COUNT
          IX6    X1-X5       COMPUTE NEW WC = WC - FS 
          SX7    NDMPWD      FREE SPACE FOR EMPTY TAPE BLOCK
          SA6    A1 
          IX5    X7-X6       COMPUTE NEW FS = NDMPWD - NEW WC 
          SX7    DCW         RESET TAPE BLOCK CONTROL WORD
          SA7    BLOKHED
          SA3    DFTC        CURRENT SHORT PRU FLAG 
          COPYBLK  X6,NDMPWD,X3  COPYBLOCK( WC, NDMPWD, SHORTPRU )
          SA1    DFTC        SHORT PRU FLAG 
          ZR     X1,DFT9     IF NOT A SHORT PRU 
          SX5    NDMPWD      RESET FREE SPACE COUNTER 
          EQ     DFT9        JOIN WITH OTHER CASES
  
*         PRU WILL FIT IN CURRENT FREE SPACE IN BLOCK.
  
 DFT7     COPYBLK  X6,X5,X7  COPYBLOCK( WC, FS, SHORTPRU )
          SA1    DFTC        SHORT PRU FLAG 
          ZR     X1,DFT8     IF NOT A SHORT PRU 
          SX5    NDMPWD      RESET FREE SPACE COUNTER 
          EQ     DFT9        JOIN WITH OTHER CASES
  
 DFT8     SA2    DFTB        WORD COUNT OF THIS PRU 
          IX5    X5-X2       COMPUTE NEW FS = FS - WC 
 DFT9     READO  NEW         GET NEXT PRU HEADER WORD 
          ZR     X1,DFT4     IF NOT EOI ON PERMANENT FILE 
 DFT10    SA1    BLOKHED
          MX0    -9          ISOLATE SIZE OF PENDING TAPE BLOCK 
          BX5    -X0*X1 
          ZR     X5,DFT11    IF NOT A LEFTOVER BLOCK
          WRITEW TF,BLOKHED,1  WRITE LAST TAPE BLOCK
          WRITEW TF,WSA,X5
 DFT11    WRITER TF,R        FLUSH TAPE 
          SA1    PFCNT       POINTER TO ENTRY IN PFTAB
          SX2    X1-1        DECREMENT COUNT
          NG     X2,DFT12    IF POINTER NOT SET 
          SA1    PFTAB+X2    SET TO CORRECT ENTRY IN PFTAB
          LX1    58          SET TO FILE LOCAL FLAG 
          PL     X1,DFT12    IF NOT LOCAL THEN UNLOAD FILE
          SA1    SCRFET      GET ORIGIONAL SCRATCH FILE NAME
          BX7    X1 
          SA7    NEW         SET FILE NAME IN FET 
          SX7    B0+
          SA7    NEW+8
          SA7    NEW+9
          SA7    DUMPLOC     CLEAR DUMPING LOCAL FILE FLAG
 DFT12    UNLOAD NEW,R
          SX1    B0+
          EQ     DFTX        RETURN 
  
  
 DFTA     DATA   C* CANNOT ATTACH/GET FILE !!!!!!! - FILE SKIPPED.* 
 DFTB     BSS    1           PRU WORD COUNT 
 DFTC     BSS    1           FLAG FOR SHORT PRU/FULL PRU
 ICF      SPACE  4,20 
***       ICF - INITIALIZE COPY FET.
* 
*         INITIALIZES THE *FET* FOR *COPY* OPERATIONS.  CALLED
*         IMMEDIATELY AFTER CALLING *CRF* IF NOT A RESERVED FILE. 
* 
*         ENTRY  (X6) = LFN OF FILE TO WHICH COPY IS TO TAKE PLACE. 
*                (X0) = 42 BIT MASK.
* 
*         EXIT   (X0) UNCHANGED.
*                (X2) = FET ADDRESS.
*                LFN IS STORED IN FET, FILE IS UNLOADED IF
*                NEEDED, REWOUND AND PRESET FOR *WRITECW*.
* 
*         USES   X - 1, 5, 6. 
*                A - 1, 6.
* 
*         MACROS RECALL, REWIND, UNLOAD, WRITECW. 
  
  
 ICF      SUBR               ENTRY/EXIT 
          BX5    X6          PRESERVE COPY LFN
          RECALL SF 
          SA1    X2          STORE THE LFN IN THE COPY FET
          BX1    -X0*X1 
          BX6    X5+X1
          SA6    A1 
          SA1    RPV         REPLACE OPTION 
          NZ     X1,ICF1     IF REPLACE OPTION SPECIFIED
          UNLOAD X2          UNLOAD IN CASE FILE IS DIRECT ACCESS 
          EQ     ICF2        PRESET AND EXIT
  
 ICF1     SA1    RPCL        CHECK FOR COPY TO CURRENT LOCATION 
          ZR     X1,ICF2     IF COPY TO CURRENT LOCATION SPECIFIED
          REWIND X2 
 ICF2     WRITECW  X2,*      PRESET *WRITECW* FUNCTION
          EQ     ICFX        RETURN 
 IMI      SPACE  4,20 
**        IMI - ISSUE MESSAGE INSERTING NAME. 
* 
*         *IMI* ISSUES A MESSAGE AFTER INSERTING A NAME INTO IT.
* 
*         ENTRY  (X1) = NAME TO BE INSERTED INTO MESSAGE. 
*                (B3) = ADDRESS OF MESSAGE TO BE ISSUED.  MESSAGE MUST
*                       BE FORMATTED WITH *!* CHARACTERS WHERE THE NAME 
*                       IS TO BE INSERTED, AND ONLY THERE.
* 
*         EXIT   MESSAGE ISSUED TO DAYFILE AND OUTPUT.
* 
*         USES   X - 1, 6.
*                A - 1, 6.
*                B - 2, 3, 5. 
* 
*         CALLS  SNM. 
* 
*         MACROS MESSAGE, WRITEC. 
  
 IMI      SUBR               ENTRY/EXIT 
          SB2    1R!
          SB5    -B3         INDICATE BUILD MESSAGE IN ASSEMBLY AREA
          SB3    IMIA 
          RJ     SNM         SET NAME INTO MESSAGE
          MESSAGE  IMIA,3 
          WRITEC O,IMIA 
          SA1    LN          INCREMENT OUTPUT LINE COUNT
          SX6    X1+B1
          SA6    A1 
          EQ     IMIX        RETURN 
  
  
 IMIA     BSS    8           MESSAGE ASSEMBLY AREA
 ILC      SPACE  4,10 
**        ILC - INCREMENT LINE COUNT. 
* 
*         ILC INCREMENTS THE LIST OUTPUT LINE COUNT.
* 
*         EXIT   (X1) = OLD VALUE OF LINE COUNT.
*                (X6) = NEW VALUE OF LINE COUNT.
*                (LN) = NEW VALUE OF LINE COUNT.
* 
*         USES   X - 1, 6.
*                A - 1, 6.
  
  
 ILC      SUBR               ENTRY/EXIT 
          SA1    LN 
          SX6    X1+B1
          SA6    A1 
          EQ     ILCX        RETURN 
 LCV      SPACE  4,25 
**        LCV - LOCATE CURRENT VSN AND REQUEST DUMP INPUT TAPE. 
* 
*         LCV SEARCHES THE VSN INDEX RECORD TO FIND THE VSN OF THE
*                REEL WHICH CONTAINS THE PARTICULAR FILE TO BE LOADED,
*                THEN REQUESTS THAT REEL FOR PROCESSING.
* 
*         ENTRY  (X1) = SET VSN/PFN(59-18) OF FILE TO LOCATE. 
*                (X2) = FILE(17-12), RECORD(11-0) OF FILE TO LOCATE.
*                (X3) = TAPE FLAGS, RIGHT JUSTIFIED.
*                (CFC) = CURRENT FILE POSITION OF DUMP FILE.
*                            (ZERO IF FIRST FILE TO BE LOADED)
*                (CRC) = CURRENT RECORD POSITION WITHIN FILE. 
*                            (IF (CFC).NE.0)
* 
*         EXIT   (VSNCV) = CURRENT VSN/PFN OF DUMP FILE.
*                (VSNFR) = FILE/RECORD INDEX OF CURRENT VSN/PFN.
*                (CFC) = NEW FILE POSITION OF DUMP FILE.
*                (CRC) = NEW RECORD POSITION WITHIN FILE. 
* 
*         USES   X - 0, 1, 2, 3, 5, 6, 7. 
*                A - 1, 2, 3, 6, 7. 
* 
*         CALLS  RNT. 
* 
*         MACROS READW, REWIND. 
  
 LCV      SUBR               ENTRY/EXIT 
          MX6    -18
          BX6    -X6*X2 
          SA6    LCVB        SAVE FILE AND RECORD 
          MX6    -12
          BX6    -X6*X3 
          SA6    TF+TFLAGS   SAVE TAPE FLAGS
          LX6    59-11
          NG     X6,LCV6     IF NOT TAPE DUMP FILE
          MX0    6*6
          BX6    X0*X1
          SA6    LCVA        SAVE SEARCH VSN
 LCV1     SA1    LCVA 
          LX1    7*6         RIGHT JUSTIFY SEARCH VSN 
          SA2    DBE+DBXSV
          MX6    6*6
          BX2    X2*X6
          LX2    7*6         RIGHT JUSTIFY DATABASE SET VSN 
          IX2    X1-X2
          LX1    3*6         RESTORE SEARCH VSN POSITION
          NG     X2,LCV5     IF DATABASE SET VSN IS HIGHER
          ZR     X2,LCV3     IF VSNS ARE EQUAL
 LCV2     READW  DB,DBE,DBEL READ NEXT DATABASE ENTRY 
          NZ     X1,LCV4     IF NO MORE DATABASE ENTRIES
          EQ     LCV1        CONTINUE SEARCH
  
 LCV3     SA3    LCVB        SEARCH FILE AND RECORD 
          SA2    DBE+DBXFR
          LX2    17-35
          MX0    -18
          BX7    -X0*X2      STARTING FILE AND RECORD THIS VSN
          IX2    X7-X3
          PL     X2,LCV5     IF SEARCH FILE STARTS ON PREVIOUS REEL 
          SA7    VSNFR       SAVE STARTING FILE AND RECORD NUMBERS
          BX7    X1 
          SA7    VSNSV       SAVE SET VSN 
          BX7    X7-X7
          SA1    DBE+DBXCV
          SA7    LCVC        FLAG VSN IS IN VSN INDEX 
          BX6    X1*X6
          SA6    VSNCV       SAVE VSN OF THIS REEL
          EQ     LCV2        READ NEXT DB ENTRY 
  
 LCV4     MX6    6*6
          SA6    DBE+DBXSV   END OF DATABASE FLAG 
          SA1    LCVA        RESTORE SEARCH VSN 
 LCV5     SA2    VSNSV
          SA3    CFC
          BX2    X1-X2
          NZ     X2,LCV7     IF NOT SAME SET VSN
          ZR     X3,LCV5.2   IF INITIAL FILE LOAD 
          SA2    LCVC 
          BX2    X1-X2
          ZR     X2,LCV5.1   IF VSN IS NOT IN VSN INDEX 
          SA1    VSNCV       DESIRED CURRENT VSN
          SA2    TF+CRVSN    PREVIOUS VSN 
          BX2    X1-X2
          NZ     X2,LCV8     IF VSN CHANGE
 LCV5.1   SA2    CRC
          NG     X2,LCV5.2   IF AT END OF INFORMATION FOLLOWING DUMP
          LX3    12 
          BX3    X2+X3       CURRENT FILE/RECORD POSITION 
          SA2    LCVB        DESIRED FILE/RECORD POSITION 
          IX2    X2-X3
          PL     X2,LCVX     IF RIGHT VSN POSITIONED CORRECTLY
 LCV5.2   SA1    TMSTAT      FORCE UNLOAD/RE-REQUEST IF TMS ACTIVE
          SA2    TF+TFLAGS
          LX2    59-11       MASS STORAGE DUMP FILE FLAG
          BX6    -X2*X1      ONLY FORCE UNLOAD FOR TAPES
          SA1    FTV
          ZR     X1,LCV5.3   IF NOT A NON-*TMS* TAPE
          SX6    B0+         NO FORCED UNLOAD FOR NON-*TMS* TAPES 
 LCV5.3   SA6    UNLOAD 
          EQ     LCV8        PROCESS THE REQUEST
  
 LCV6     SA2    TF+CFN      PREVIOUS FILE NAME 
          MX6    7*6
          BX2    X1-X2
          BX2    X6*X2
          SA3    CFC
 LCV7     BX6    X1*X6
          SA6    VSNSV       SAVE SET VSN = SEARCH VSN
          SA6    VSNCV       SAVE TRUE VSN = SET VSN
          SA6    LCVC        FLAG VSN NOT IN VSN INDEX
          SX6    0           SAVE BEGINNING-OF-SET
          SA6    VSNFR
          ZR     X3,LCV8     IF INITIAL FILE LOAD 
          ZR     X2,LCV5.1   IF DUMP IS CURRENT FILE
* 
*         REQUEST NEW TAPE
* 
 LCV8     SA1    VSNCV       GET VSN OF REEL CONTAINING FILE
          SX5    TF 
          RJ     RNT         REQUEST NEW TAPE 
          SA1    UNLOAD 
          BX6    X6-X6       CLEAR THE FORCED UNLOAD FLAG 
          SA6    A1 
          NZ     X1,LCV8.1   IF UNLOAD/RE-REQUEST WAS FORCED
          REWIND TF,R 
 LCV8.1   BREAK 
          MX0    -12
          SA1    VSNFR
          NZ     X1,LCV9     IF NOT BEGINNING OF SET
          SX1    10001B      BEGINNING OF SET - USE FILE 1 RECORD 1 
 LCV9     BX6    -X0*X1 
          SA6    CRC         SET CURRENT RECORD NUMBER
          LX1    -12
          BX6    -X0*X1 
          SA6    CFC         SET CURRENT FILE NUMBER
          EQ     LCVX        RETURN 
  
  
 LCVA     BSS    1           TEMP FOR SEARCH VSN
 LCVB     BSS    1           TEMP FOR FILE AND RECORD NUMBER
 LCVC     BSS    1           VSN NOT FOUND IN VSN INDEX 
 LEF      SPACE  4,10 
**        LEF - LOCATE EXISTING TAPE FLAGS. 
* 
*         LEF SEARCHES THE VSN INDEX RECORD TO FIND A DESIRED SET VSN,
*                AND EXTRACTS THE EXISTING TAPE FLAGS FOR THAT VSN. 
* 
*         ENTRY  (X1) = SET VSN(59-18) TO LOCATE. 
*                (X3) = MASS STORAGE DUMP INDICATOR.
*                DATABASE POSITIONED AT VSN INDEX RECORD. 
* 
*         EXIT   (X6) = 0, IF VSN NOT FOUND, OR NOT TAPE. 
*                (X6) = EXISTING TAPE FLAGS FOR VSN.
*                DATABASE POSITIONED AT VSN INDEX RECORD. 
* 
*         USES   X - 0, 1, 5, 6.
*                A - 1, 5.
* 
*         MACROS CLEAR, READ, READW.
  
 LEF4     CLEAR  DB 
          SA1    VSNDX       REPOSITION DATABASE TO VSN INDEX 
          MX6    -18
          BX6    -X6*X1 
          SA6    DB+6 
          READ   DB,R 
          AX5    36 
          BX6    X5 
  
 LEF      SUBR               ENTRY/EXIT 
          SX6    B0+         SET FLAGS FOR NOT TAPE DUMP
          NZ     X3,LEFX     IF NOT TAPE DUMP FILE
          MX0    6*6
          BX5    X0*X1
          LX5    7*6         RIGHT JUSTIFY SEARCH VSN 
 LEF1     SA1    DBE+DBXSV
          BX1    X1*X0
          LX1    7*6         RIGHT JUSTIFY DATABASE SET VSN 
          IX1    X5-X1
          ZR     X1,LEF3     IF VSNS ARE EQUAL
          NG     X1,LEF2     IF DATABASE SET VSN IS HIGHER
          READW  DB,DBE,DBEL READ NEXT DATABASE ENTRY 
          ZR     X1,LEF1     IF MORE DATABASE ENTRIES 
 LEF2     SX5    B0+
          EQ     LEF4        EXIT WITH NO TAPE FLAGS
  
 LEF3     SA5    DBE+DBFLG   GET WORD WITH TAPE FLAGS 
          EQ     LEF4        EXIT WITH TAPE FLAGS 
 LVI      SPACE  4,10 
**        LVI - LOCATE VSN INDEX
* 
*         LVI CALLS PDB TO POSITION THE DATABASE TO THE VSN INDEX 
*                RECORD, IF THERE IS ONE. 
* 
*         ENTRY  (X5).LT.0, DEFINE DATABASE IF IT DOES NOT EXIST. 
*                (X5).EQ.0, ABORT IF DATABASE DOES NOT EXIST. 
*                (X5).GT.0, DEFINE AND BUILD DATABASE IF NECESSARY. 
*                (X7) = READ/WRITE MODE FOR DATABASE ATTACH.
* 
*         EXIT   DATABASE ATTACHED IN SPECIFIED MODE, POSITIONED TO VSN 
*                INDEX IF ONE EXISTS. 
*                (VSNSV) = 0. 
*                (DBE+DBXSV) = 0 IF THERE IS A VSN INDEX. 
*                (DBE+DBXSV) = 777777777777000000B IF NO VSN INDEX. 
*                (X6) = (DBE+DBXSV).
* 
*         USES   X - 1, 6.
*                A - 1, 6.
* 
*         CALLS  PDB. 
  
 LVI      SUBR               ENTRY/EXIT 
          SA1    VSNDX       TAPE VSN INDEX IDENTIFIER
          RJ     PDB         POSITION DATABASE TO TAPE VSN INDEX
          SX6    B0+
          SA6    VSNSV       PRESET STARTING SAVED SET VSN
          PL     X5,LVI1     IF VSN INDEX WAS FOUND 
          MX6    6*6
 LVI1     SA6    DBE+DBXSV   PRESET STARTING INDEX SET VSN
          EQ     LVIX        RETURN 
 MFP      SPACE  4,15 
**        MDL - MAKE DUMP FILE LOCAL. 
* 
*         MDL SETS UP THE DUMP FILE WHEN IT IS A
*         MASS STORAGE FILE.  IF THE FILE IS LOCAL
*         A REWIND IS DONE.  IF THE FILE IS NOT FOUND 
*         AN ERROR MESSAGE IS ISSUED. 
* 
*         ENTRY  (X1) = DESIRED DUMP FILE NAME. 
*                     = 0 IF UNLOAD WANTED. 
*                (X5) = FILE FET ADDRESS. 
*                (RING) = 0 IF NO WRITE IS SPECIFIED. 
*                       = 1 IF WRITE IS REQUIRED. 
* 
*         EXIT   DUMP FILE IS LOCAL OR UNLOADED.
*                (X1) = 0 IF SAME FILE AS PREVIOUSLY ASSIGNED.
*                     = DUMP FILE NAME IF NOT THE SAME FILE.
* 
*         USES   X - 0, 1, 2, 3, 6. 
*                A - 1, 2, 3, 6.
* 
*         MACROS ATTACH, FILINFO, GET, MESSAGE, REWIND, UNLOAD, WRITEC. 
  
  
 MDL      SUBR
          BX6    X1          SAVE FILE NAME IN FET
          SA6    X5+CFPN
          MX0    6*6
          SA2    X5+TFETVSN  GET FET WORD WITH VSN
          SA3    X5+INITREQ  GET INITIAL REQUEST FLAG 
          BX6    X6-X6
          BX2    X0*X2
          SA6    A3          CLEAR THE INITIAL REQUEST FLAG 
          SA6    A2          CLEAR THE VSN WORD 
          NZ     X3,MDL1     IF INITIAL REQUEST 
          ZR     X2,MDL1     IF PREVIOUS FILE WAS MASS STORAGE
 DEBUG    IFC    NE,$DEBUG$"MODLEVEL"$,1
          UNLOAD X5,R        UNLOAD THE FILE
 MDL1     SA1    X5+CFPN
          ZR     X1,MDLX     IF REQUEST WAS FOR UNLOAD ONLY 
          MX0    42 
          BX6    X1*X0
          SA2    X5+CFN      GET CURRENT FILE NAME
          BX2    X0*X2
          BX2    X6-X2
          NZ     X2,MDL2     IF FILE NOT ALREADY PROCESSED
          SX1    B0+         INDICATE SAME FILE 
          EQ     MDLX        RETURN 
  
 MDL2     SA6    A2 
          SA2    FIBK 
          BX2    -X0*X2      LOWER 18 BITS
          BX6    X6+X2
          SA6    A2          FIRST WORD OF *FILINFO* BLOCK
          FILINFO  FIBK 
          SA3    FIBSTA 
          SA2    X5+TRING 
          ZR     X2,MDL4     IF WRITE MODE NOT NEEDED (LIST/LOAD/COPY)
  
*         DOING A DUMP OR COMPACT WITH OVERWRITE. 
  
          ZR     X3,MDL3     IF FILE IS NOT LOCAL 
          AX3    7
          MX0    -2 
          BX6    -X0*X3 
          NZ     X6,MDL3     IF IN WRITE MODE 
          MESSAGE  MDLA,3,R  * DUMP FILE MUST BE IN WRITE MODE *
          SA1    NFP         NUMBER OF FILES PROCESSED
          SX6    X1-1        DECREMENT COUNT
          SA6    A1 
          WRITEC O,MDLA 
          EQ     MAIN8       RETURN 
  
 MDL3     SA1    X5+CFN      CURRENT FILE PROCESSED 
          SA2    X5 
          MX0    42 
          BX2    -X0*X2 
          BX6    X1+X2
          SA6    A2          SAVE FILE NAME IN FET
          EQ     MDL6        REWIND FILE AND RETURN 
  
*         DOING A COPY FROM A DUMP FILE 
  
 MDL4     NZ     X3,MDL3     IF FILE IS LOCAL 
          SA2    X5+1        SET *SA* AND *EP* BITS IN FET
          SX6    4+1
          LX6    44 
          BX6    X2+X6
          SA6    A2 
          SX6    B0          CLEAR FET+7 THRU FET+16
          SA6    X5+7        FET+7
          SA6    A6+B1       FET+8
          SA6    A6+B1       FET+9
          SA6    A6+B1       FET+10 
          SA6    A6+B1       FET+11 
          SA6    A6+B1       FET+12 
          SA6    A6+B1       FET+13 
          SA6    A6+B1       GET+14 
          SA6    A6+B1       FET+15 
          SA6    A6+B1       FET+16 
          SA2    X5+CFN      CURRENT DUMP FILE NAME 
          MX0    42 
          SA1    X5          FET+0
          BX1    -X0*X1      LOWER 18 BITS
          BX6    X2+X1
          SA6    A1          SET LOCAL FILE NAME IN FET 
          SA1    A1+8        FET+8
          BX1    -X0*X1      LOWER 18 BITS
          BX6    X0*X6
          BX6    X6+X1
          SA6    A1 
          ATTACH X5          TRY TO ATTACH THE FILE 
          SA2    X5          FET ADDR 
          SX1    X2 
          AX1    8
          ZR     X1,MDL5     IF FILE ATTACHED 
          MX0    9
          LX0    12 
          BX6    -X0*X2      CLEAR ERROR CODE 
          SA6    X5 
          GET    X5          TRY AND GET THE FILE 
          SA2    X5 
          SX1    X2 
          AX1    8
 MDL5     SA2    X5+1 
          SX6    4+1         CLEAR *SA* AND *EP* BITS 
          LX6    44 
          BX6    -X6*X2 
          SA6    A2+
          ZR     X1,MDL6     IF FILE NOW LOCAL
          MESSAGE  MDLB,3,R  * DUMP FILE NOT FOUND *
          EQ     MAIN8       RETURN 
  
 MDL6     REWIND X5,R 
          SA1    X5+CFPN     RESTORE FILE NAME
          EQ     MDLX        RETURN 
  
  
 MDLA     DATA   C* DUMP FILE MUST BE IN WRITE MODE * 
 MDLB     DATA   C* DUMP FILE NOT FOUND * 
          SPACE  4,10 
**        MFP - MAKE FILE PERMANENT.
* 
*         ENTRY  (A5) = POINTER TO ENTRY CURRENTLY BEING PROCESSED. 
* 
*         EXIT   (X1) = 0 IF NORMAL EXIT
*                (X1) .NE. 0 IF ERROR IN PROCESSING.
* 
*         USES   X - 0, 1, 2, 3, 4, 6, 7. 
*                A - 1, 2, 3, 4, 6, 7.
* 
*         MACROS DEFINE.
  
  
 MFP      SUBR               ENTRY/EXIT 
          SA1    LOADFLG
          ZR     X1,MFPX     IF A COPY
          SA1    NNV         NEW NAME VARIABLE
          NZ     X1,MFP1     IF NEW NAME SET
          MX0    42 
          SA1    A5+2        WORD 3 OF 6 WORD SORTED ENTRY
          BX6    -X0*X1      NEW NAME POINTER 
          ZR     X6,MFP0     IF NO POINTER
          SA1    X6          NEW NAME ENTRY 
          BX1    X0*X1
          EQ     MFP1        SAVE NAME
  
 MFP0     SA1    A5+B1
          BX1    X0*X1       LFN OF FILE BEING COPIED CURRENTLY 
 MFP1     BX6    X1 
          SA6    PFNAM
          SX1    B0          CLEAR FILE NAME FOR *MFP* EXIT CONDITION 
          MX0    6           GET FILE CATEGORY
          SA3    WSA+1+FCCT 
          BX6    X0*X3
          LX6    6
          SA6    PFCAT
          LX3    6           GET PERMISSION MODE
          BX3    X0*X3
          LX3    6
          SX6    X3 
          SA6    PFPERM 
          SA4    WSA+1+FCAP  EXTRACT ALTERNATE CATLIST FLAG 
          LX4    59-46
          MX0    59 
          BX4    -X0*X4 
          SX6    ACNO 
          ZR     X4,MFP1.0   IF NO ALTERNATE CATLIST
          SX6    ACYS        SET ALTERNATE CATLIST,FLAG 
 MFP1.0   SA6    PFAC        SET ALTERNATE CATLIST WORD 
          SA4    WSA+1+FCPW  EXTRACT AND SAVE PASSWORD
          MX0    42 
          BX6    X0*X4
          SA6    PFPASS 
          SA4    WSA+1+FCUC  USER CONTROL WORD
          BX6    X4 
          SA6    PFUCW
          SA4    WSA+1+FCFS  SUBSYSTEM FLAG 
          MX3    6
          LX4    59-53
          BX6    X3*X4
          LX6    6
          SA6    PFSS 
  
*         CHECK IF REPLACE OPTION IS SET
  
          SA1    RPV         REPLACE VARIABLE 
          ZR     X1,MFP1.1   IF NOT REPLACE 
          SA1    PFNAM       PERMANENT FILE NAME
          BX6    X1 
          SA6    SF+8        SET IN FET 
          SA1    PFNAM       FILE BEING PROCESSED 
          MX0    42 
          BX6    X0*X1       SET FILE NAME IN FET 
          SA2    SF          FET ADDRESS
          BX2    -X0*X2 
          BX6    X6+X2
          SA6    A2 
          UNLOAD SF,R        UNLOAD POSSIBLE LOCAL FILE OF SAME NAME
          SA1    SF+1        SET *SA* AND *EP* BITS 
          SX6    4+1
          LX6    44 
          BX6    X6+X1
          SA6    A1 
          MX0    42 
          SA1    LDFN        RESTORE SCRATCH FILE FOR LOADING 
          SA2    SF          FET ADDR 
          BX2    -X0*X2 
          BX6    X0*X1
          BX6    X6+X2
          SA6    A2 
          PURGE  SF          PURGE THE DATA FILE
          SA1    SF+1        CLEAR *SA* AND *EP* BITS 
          SX0    4+1
          LX0    44 
          BX6    -X0*X1 
          SA6    A1 
          SX1    B0          RESET  *MFP* EXIT CONDITION
  
*         CHECK IF THIS IS A DIRECT OR INDIRECT ACCESS FILE.
  
 MFP1.1   SA4    A5+B1       GET FILE TYPE WORD 
          MX0    -6 
          LX4    48 
          BX4    -X0*X4      TYPE 
          SX7    1RI
          BX3    X4-X7
          SA7    LOADFLG
          SA2    SF+1        CLEAR THE DEVICE TYPE IN FET+1 
          MX0    12 
          BX6    -X0*X2 
          SA6    A2 
          ZR     X3,MFPX     IF AN INDIRECT ACCESS FILE 
          SX7    1RD
          SA7    A7 
 MFP4     SA1    SF          CLEAR ANY PREVIOUS *PFM* ERROR CODE
          MX0    -8 
          LX0    17-7 
          BX6    X0*X1
          SA6    A1 
          SX0    4+1         SET *SA* AND *EP* BITS IN FET
          SA1    A1+B1
          LX0    44 
          BX6    X0+X1
          SA6    A1 
          SX6    B0+         CLEAR FET+7 THROUGH FET+15 
          SA6    SF+7 
          SA6    A6+1        FET+8
          SA6    A6+1        FET+9
          SA6    A6+1        FET+10 
          SA6    A6+B1       FET+11 
          SA6    A6+B1       FET+12 
          SA6    A6+B1       FET+13 
          SA6    A6+B1       FET+14 
          SA6    A6+B1       FET+15 
          DEFINE SF,PFNAM,PFPASS,PFUCW,PFDT,PFCAT,PFPERM,,,,,,,,,PFAC 
          SA2    SF+1        CLEAR *SA* AND *EP* BITS 
          SX0    4+1
          LX0    44 
          BX6    -X0*X2 
          SA6    A2 
          SA1    A2-B1       GET *PFM* ERROR CODE 
          SX1    X1 
          AX1    10          EXIT STATUS
          EQ     MFPX        RETURN 
 PBC      SPACE  4,10 
**        PBC -  PROCESS BREAK CONDITION. 
* 
*         ENTRY  INTERRUPTION HAS OCCURED.
* 
*         EXIT   TO MAIN LOOP.
* 
*         MACROS CLEAR. 
  
  
 PBC      BSS    0           ENTRY
          CLEAR  O           CLEAR FET POINTERS 
          EQ     MAIN8       RETURN TO MAIN LOOP
 PDB      SPACE  4,25 
**        PDB - POSITION DATA BASE. 
* 
*         *PDB* POSITIONS THE DATABASE TO THE PRU ADDRESS 
*         OF THE CALLING USER.
* 
*         ENTRY  (X7) = MODE OF DATABASE ATTACH.
*                (X5) = USED ONLY IF THE USER DATABASE IS NOT 
*                       PRESENT AND *TN* HAS BEEN USED. 
*                       = -1 IF *DB* TO BE DEFINED ONLY.
*                       =  0 IF *RECLAIM* IS TO ABORT.
*                       =  1 IF *DB* TO BE DEFINED AND
*                            RECORDS INSERTED.
*                (X1) = USERNAME/ID TO BE LOCATED.
*                (A1) = ADDRESS OF USERNAME/ID WORD.
* 
*         EXIT   (X5).LT.0 = VSN INDEX NOT FOUND IN DATA BASE.
*                (X5).GE.0 = PRU ADDRESS OF CURRENT USERNAME/ID.
* 
*         USES   X - 0, 1, 2, 3, 5, 6, 7. 
*                A - 1, 2, 3, 6, 7. 
*                B - 2. 
* 
*         CALLS  ADB, CDF, UPD. 
* 
*         MACROS BKSP, CLEAR, MESSAGE, READ, SKIPEI, WRITEC.
  
  
 PDB      SUBR               ENTRY/EXIT 
          BX6    X1 
          SA6    PDBC        SAVE USERNAME/ID 
          SX6    A1 
          SA6    PDBD        SAVE LOCATION OF USERNAME/ID 
          SA7    PDBB        SAVE ATTACH MODE 
          RJ     ADB         ATTACH DATABASE
          NG     X5,PDB0     IF NOT REBUILDING DATABASE 
          ZR     X5,PDB0     IF NOT REBUILDING DATABASE 
          RJ     CDF         CREATE DATABASE FILE 
          SX6    B1          SET FLAG SO UPD WONT CALL LVI
          SA6    NLVIFLG
          SX5    B0+         FLAG ABORT IF DATABASE ATTACH FAILS
          RJ     UPD         UPDATE DATABASE
          SA1    PDBB        RETRIEVE ATTACH MODE 
          SX7    X1 
          SX5    B0+         FLAG ABORT IF BAD ATTACH 
          RJ     ADB         ATTACH DATABASE FOR REAL 
 PDB0     SX1    B1          SET RANDOM BIT OF DATABASE FET 
          LX1    47 
          SA2    DB+1 
          BX6    X1+X2
          SA6    A2 
  
*         DETERMINE USER-S POSITION ON DATABASE.
  
          CLEAR  DB 
          BX5    X5-X5       IN CASE UN=0 SPECIFIED 
          SA1    PDBC 
          ZR     X1,PDB5     IF USER NAME NOT PART OF CRITERIA
          MX0    -18
          BX5    -X0*X1      EXTRACT USER RANDOM ADDRESS ON DATA BASE 
          NZ     X5,PDB5     IF OPLD READ PREVIOUSLY
  
 PDB1     SKIPEI DB,R 
          BKSP   DB,1,R 
          READ   DB,R 
          SA1    DB+3        (IN) = FWA OF OPLD 
          SA2    DB+2        END OF OPLD
          IX0    X1-X2
          ZR     X0,PDBX     IF EMPTY READ THEN RETURN TO CALLER
          SA1    X1 
          MX0    12 
          BX0    X0*X1
          LX0    12 
          SX0    X0-7700B 
          NZ     X0,RDB6     IF NOT A 7700 TABLE DATABASE IS CORRUPTED
          SB2    X2 
          AX1    36 
          MX0    -12
          BX1    -X0*X1      LENGTH OF THE 7700 TABLE 
          SX2    A1+2 
          IX3    X2+X1       ADDRESS OF 7000 TABLE
          SA1    X3          GET FIRST WORD OF OPLD ADDRESSES 
 PDB2     SA2    PDBC        USERNAME/ID REQUESTED
          MX0    42 
          BX2    X0*X2
  
*         SEARCH OPLD FOR THIS USER NAME. 
  
 PDB3     BX1    X0*X1       FIND USER NAME 
          BX3    X1-X2
          ZR     X3,PDB4     IF USER FOUND
          SA1    A1+2 
          SX3    A1-B2
          NG     X3,PDB3     IF NOT AT END OF OPLD
          SA1    DB 
          MX2    -7 
          LX2    2
          BX2    -X2*X1      GET *CIO* RESPONSE 
          SX2    X2-20B      COMPARE WITH EOR 
          ZR     X2,PDB5.5   IF EOR ENCOUNTERED 
          CLEAR  DB 
          READ   DB,R 
          SA1    DB+3 
          SA1    X1 
          SA2    DB+2 
          SB2    X2 
          EQ     PDB2        CONTINUE SEARCH
  
 PDB4     SA3    A1+B1       GET THE ADDRESS
          BX5    -X0*X3 
          BX6    X5+X2
          SA1    PDBD 
          SA6    X1          ADDRESS OF USERNAME/ID WORD
  
*         PLACE RANDOM ADDRESS INTO FET.
  
 PDB5     BX6    X5 
          SA6    DB+6 
          CLEAR  DB 
          READ   DB,R 
          EQ     PDBX        RETURN 
  
 PDB5.5   SA1    PDBC        USERNAME/ID REQUESTED
          BX1    X0*X1
          SA2    VSNR        VSN INDEX ID 
          BX1    X1-X2
          NZ     X1,PDB6     IF NOT LOOKING FOR VSN INDEX 
          MX5    59          FLAG IN X5 MEANS NO VSN INDEX
          EQ     PDBX        RETURN 
  
 PDB6     SA1    TF+TTNV
          ZR     X1,PDB7     IF *TN* NOT SPECIFIED
          SX5    -1          NO USER RECORD FOUND 
          EQ     PDBX        RETURN 
  
 PDB7     MESSAGE  ERND,3    * NO DATA FOUND FOR USER NAME.*
          WRITEC O,ERND 
          EQ     MAIN8       RETURN TO MAIN LOOP
  
  
 PDBB     DATA   0           DATABASE ATTACH MODE 
 PDBC     DATA   0           SEARCH USERNAME/ID 
 PDBD     DATA   0           SEARCH USERNAME/ID WORD LOCATION 
 PDF      SPACE  4,20 
**        PDF - POSITION DUMP FILE. 
* 
*         PDF POSITIONS THE DUMP FILE TO THE FILE AND RECORD REQUIRED.
*         USED IN *COPY*, *LOAD*, AND *COMPACT* DIRECTIVE PROCESSING. 
* 
*         ENTRY  (X5) = REQUIRED DUMP FILE NUMBER (BITS 17-12), 
*                       REQUIRED DUMP RECORD NUMBER (BITS 11-0).
*                (CFC) = CURRENT DUMP TAPE FILE NUMBER. 
*                (CRC) = CURRENT DUMP TAPE RECORD NUMBER. 
* 
*         EXIT   (X5) .GE. 0 - DUMP FILE IS POSITIONED AT THE REQUESTED 
*                            RECORD OF THE REQUESTED FILE.
*                (X5) .LT. 0 - DUMP FILE MALFUNCTION (POSITION LOST OR
*                            EOI ENCOUNTERED) OCCURRED - ERROR MESSAGE
*                            HAS BEEN ISSUED TO DAYFILE.
*                (CFC) = UPDATED FILE NUMBER. 
*                (CRC) = UPDATED RECORD NUMBER. 
* 
*         USES   X - 0, 1, 2, 5, 6. 
*                A - 1, 2, 5, 6.
* 
*         CALLS  UFV. 
* 
*         MACROS BREAK, MESSAGE, SKIPF. 
  
  
 PDF      SUBR               ENTRY/EXIT 
          BX6    X5          PRESERVE REQUESTED FILE/RECORD 
          SA6    PDFA 
 PDF1     SA5    PDFA 
          MX0    -18
          BX0    -X0*X5 
          SA1    CFC
          AX0    12 
          IX1    X0-X1
          ZR     X1,PDF6     IF REQUESTED FILE FOUND
          SX2    ERPL        * DUMP FILE MALFUNCTION - POSITION LOST.*
          NG     X1,PDF7     IF ALREADY PAST REQUESTED POINT
 PDF2     SKIPF  TF,1,R      SKIP ONE RECORD AT A TIME
          SA1    TF 
          SX2    EREI        * DUMP FILE MALFUNC - EOI ENCOUNTERED.*
          LX1    59-9 
          NG     X1,PDF7     IF PREMATURE EOI 
          AX1    59-9 
          SX0    X1-273B
          SA1    CRC         RECORD COUNT 
          PL     X0,PDF3     IF END OF FILE ENCOUNTERED 
          ZR     X1,PDF3     IF AT A PSEUDO FILE POINT
          MX0    -12
          SX6    X1+B1       INCREMENT RECORD NUMBER
          BX6    -X0*X6      RECORD NUMBER MODULO 4096
          SA6    A1 
          ZR     X6,PDF4     IF AT A POSSIBLE PSEUDO FILE POINT 
          EQ     PDF2        SKIP NEXT RECORD 
  
 PDF3     SX6    B1          RESET THE RECORD COUNT 
          SA6    A1 
          ZR     X1,PDF5     IF FILE NUMBER ALREADY ADVANCED
 PDF4     SA2    CFC         FILE COUNT 
          SX6    X2+B1       INCREMENT FILE COUNT 
          SA6    A2 
 PDF5     SX5    TF 
          RJ     UFV         UPDATE FET VSN 
          BREAK 
          EQ     PDF1        CHECK IF DESIRED FILE FOUND
  
 PDF6     MX0    -12
          BX0    -X0*X5 
          SA5    CRC
          IX5    X0-X5
          ZR     X5,PDFX     IF ALREADY AT DESIRED RECORD 
          BX6    X0          SET CRC TO RECORD NUMBER AFTER SKIP
          SA6    A5 
          SKIPF  TF,X5,R
          SX5    TF 
          RJ     UFV         UPDATE FET VSN 
          SA5    TF 
          LX5    59-9 
          PL     X5,PDFX     IF NOT EOI 
          SX2    EREI        * DUMP FILE MALFUNC - EOI ENCOUNTERED.*
 PDF7     MESSAGE  X2,3,R    ISSUE APPROPRIATE ERROR MESSAGE
          SX5    -1 
          EQ     PDFX        RETURN WITH ERROR INDICATION 
  
  
 PDFA     BSS    1           REQUESTED FILE/RECORD NUMBER 
 PFN      SPACE  4,15 
**        PFN - PROCESS FILE NAMES. 
* 
*         ENTRY  *PFV* CONTAINS PF PARAMETER VALUE. 
* 
*         EXIT   *PFTAB* UPDATED IF PF=*. 
* 
*         ERROR  TO *ABT* IF FILE NAME ERROR ON NON-INTERACTIVE JOB.
* 
*         USES   X - 0, 1, 2, 5, 6. 
*                A - 1, 2, 5, 6.
*                B - 2. 
* 
*         CALLS  POP, USB.
* 
*         MACROS MESSAGE, READ, READC, WRITEC, WRITEW.
  
  
 PFN      SUBR               ENTRY/EXIT 
          SA1    PFV         CHECK FOR MULTIPLE FILES OPTION
          LX1    6
          SX1    X1-1R* 
          NZ     X1,PFNX     IF NOT PF=*
          SA5    PFTAB
          SX0    B0+
          SA1    CCIN 
          NZ     X1,PFN2     IF CALLED WITH *Z* OPTION
          SA1    IDT
          SX0    B0+
          NZ     X1,PFN2     IF NOT TERMINAL INPUT
          WRITEC O,PFNC      * ENTER FILE NAMES.* 
 PFN1     READ   I,R
 PFN2     READC  I,LINE,9 
          NZ     X1,PFN5     IF END-OF-RECORD FOUND 
          SA1    ODT
          ZR     X1,PFN2.1   IF OUTPUT FILE IS A TERMINAL FILE
          WRITEW O,BLANKS,1  MOVE LINE OVER 
          WRITEC O,LINE,9    COPY LINE OF FILE NAMES TO LISTING 
 PFN2.1   SB2    LINE 
          RJ     USB
          SX6    B7+B1
          SA6    A6 
          SX6    1R.
          SA6    B7+B1
  
*         GET NEXT FILE NAME. 
  
 PFN3     RJ     POP
          NG     B5,PFN8     IF AN ERROR FROM *POP* 
          SX5    X0-PFTABL
          ZR     X5,PFN7     IF TOO MANY FILES
          SX5    X1-1R, 
          ZR     X5,PFN4     IF SEPARATOR IS A COMMA
          ZR     X6,PFN6     IF COMMA AT END OF LINE
          SX5    X1-1R=      IF FILE SUBSTITUTION 
          ZR     X5,PFN3.5
          SA6    A5 
          SX6    B0+
          SA6    A6+B1
          SA6    NNTAB+X0    CLEAR *NNTAB* ENTRY
          EQ     PFNX        RETURN 
  
 PFN3.5   SA6    NNTAB+X0    SAVE NEW FILE NAME 
          RJ     POP         GET THE NEW FILE NAME
          ZR     X6,PFN8     IF NO NEW FILE NAME
          SA6    A5          SAVE OLD FILE NAME 
          SA5    A5+B1       NEXT *PFTAB* ADDRESS 
          SX0    X0+1        INCREMENT COUNTER
          SX5    X1-1R, 
          ZR     X5,PFN3     IF COMMA 
          SX6    B0          SET END OF TABLE 
          SA6    A5 
          SA6    NNTAB+X0    CLEAR *NNTAB* ENTRY
          EQ     PFNX        RETURN 
  
 PFN4     SA6    A5 
          SA5    A5+B1
          SX6    B0+         CLEAR *NNTAB* ENTRY
          SA6    NNTAB+X0 
          SX0    X0+1 
          EQ     PFN3        GET NEXT FILE NAME 
  
*         EOR FOUND ON INPUT. 
  
 PFN5     NZ     X0,PFNX     IF SOME FILES ENTERED
          SX6    B0+
          SA6    PFV         CLEAR PF=* FOR THIS DIRECTIVE
          EQ     PFNX        RETURN 
  
*         COMMA AT END OF LINE. 
  
 PFN6     SA1    IDT         CHECK FOR TERMINAL INPUT 
          SA2    CCIN        *Z* INPUT FLAG 
          IX1    X1+X2       TERMINAL INPUT .OR. *Z* INPUT
          ZR     X1,PFN1     IF A TERMINAL
          EQ     PFN2        NOT A TERMINAL 
  
*         TOO MANY FILES ENTERED. 
  
 PFN7     MESSAGE  PFNA,3    * TOO MANY FILE NAMES IN LIST.*
          WRITEC O,PFNA 
          SA1    IDT
          SA2    CCIN        *Z* INPUT FLAG 
          IX1    X1+X2       TERMINAL INPUT .OR. *Z* INPUT
          ZR     X1,MAIN8    IF A TERMINAL THEN REPROMPT
          RJ     ABT         ABORT *RECLAIM*
  
*         ERROR WHILE CRACKING FILE LIST. 
  
 PFN8     MESSAGE  PFNB,3    * ERROR IN FILE NAME LIST.*
          WRITEC O,PFNB 
          SA1    IDT
          SA2    CCIN        *Z* INPUT FLAG 
          IX1    X1+X2       TERMINAL INPUT .OR. *Z* INPUT
          ZR     X1,MAIN8    IF A TERMINAL THEN REPROMPT
          RJ     ABT         ABORT *RECLAIM*
  
  
 PFNA     DATA   C* TOO MANY FILE NAMES IN LIST.* 
 PFNB     DATA   C* ERROR IN FILE NAME LIST.* 
 PFNC     DATA   C* ENTER FILE NAMES.*
 POT      SPACE  4,20 
**        POT - PROCESS OUTPUT. 
* 
*         *POT* FORMATS THE DATA BASE ENTRY *DBE* EITHER INTO A 
*         6 OR 8 WORD OUTPUT LINE DEPENDING UPON THE CALLING
*         USERS ACCESS PRIVILEGES.  IN ADDITION, IT PRINTS THE
*         APPROPRIATE HEADINGS. 
* 
*         ENTRY  (A0) = STARTING ADDRESS OF 4 WORD RECORD.
* 
*         EXIT   FORMATTED OUTPUT LINE. 
* 
*         USES   X - 0, 1, 2, 3, 4, 5, 6. 
*                A - 1, 2, 5, 6.
*                B - 2. 
* 
*         CALLS  CDD, CFJ, PRH, ZTB.
* 
*         MACROS BREAK, WRITEC. 
  
  
 POT      SUBR               ENTRY/EXIT 
  
*         IF HEADER NOT REQUIRED SKIP IT. 
  
          SA5    NHV         HEADER OPTION VARIABLE 
          NZ     X5,POT2     IF HEADER NOT WANTED 
          SA5    ODT
          RJ     ILC         INCREMENT LINE COUNT 
          ZR     X1,POT1     IF FIRST TIME THROUGH
          ZR     X5,POT2     IF TERMINAL OUTPUT ASSIGNED
          SA2    MLPP        MAXIMUM LINES PER PAGE 
          IX2    X6-X2
          NG     X2,POT2     IF LINE COUNT NOT EXCEEDED 
 POT1     RJ     PRH         PROCESS HEADER 
 POT2     MX0    42 
  
*         EXTRACT LAST MODIFICATION DATE. 
  
          SA5    A0+DBLMO 
          BX1    -X0*X5 
          RJ     CFJ         CONVERT BINARY JULIAN DATE TO DISPLAY
          SA6    OLINE+LLMO 
  
*         DUMP DATE.
  
          MX0    42 
          SA5    A0+DBDDT    DUMP DATE
          BX1    -X0*X5 
          RJ     CFJ         CONVERT BINARY JULIAN DATE TO DISPLAY
          SA6    OLINE+LDDT 
  
*         PERMANENT FILE NAME.
  
          MX0    42D
          SA1    A0+DBPFN 
          BX1    X0*X1
          BX6    X1 
          SA6    BMSG+1      PUT FILE NAME INTO B-DISPLAY MESSAGE 
          RJ     ZTB         CONVERT BINARY ZEROES TO BLANKS
          LX6    54D
          MX0    54D
          BX6    X0*X6
          SA1    A0+DBFTY 
          LX1    12 
          BX1    -X0*X1 
          BX6    X1+X6
          SA6    OLINE+LPFN 
  
*         PF LENGTH.
  
          SA5    A0+DBLEN 
          MX0    -18         GET LOWER 18 BITS OF FILE SIZE 
          BX1    -X0*X5 
          MX0    5           GET UPPER 5 BITS OF FILE SIZE
          LX0    -1 
          BX0    X0*X5
          LX0    24          ALIGN UPPER 5 WITH LOWER 18 BITS 
          BX1    X1+X0       MERGE UPPER 5 WITH LOWER 18 BITS 
          RJ     CDD         CONVERT BINARY CONSTANT TO DISPLAY 
          LX6    18 
          SA6    OLINE+LLEN 
          BX6    X6-X6
          SA1    ACCESS 
          SA2    USERDB 
          BX1    X1+X2
          ZR     X1,POT6     IF NOT PRIVILEGED OR USER DATABASE 
  
*         EXTRACT RECORD/FILE NUMBERS.
  
          MX0    -12
          LX5    42 
          BX1    -X0*X5 
          RJ     CDD         CONVERT TO DISPLAY CODE
          LX6    36 
          BX6    X0*X6
          SA6    OLINE+LRNO 
  
*         USER NAME.
  
          MX0    42 
          SA1    A0+DBUNM 
          BX1    X0*X1
          RJ     ZTB         CONVERT BINARY ZEROES TO BLANKS
          SA6    OLINE+LUNM 
  
*         TAPE NUMBER.
  
          MX4    -6 
          LX5    48 
          BX1    -X4*X5 
          RJ     CDD
          BX5    X6 
          SA1    A0+DBTNO 
          MX0    42 
          SA2    A0+DBFLG    WORD WITH TAPE FLAGS 
          LX2    59-47
          NG     X2,POT3     IF PERMANENT FILE FLAG SET 
          MX0    36          SET MASK FOR TAPE VSN
 POT3     BX1    X0*X1
          RJ     ZTB         CONVERT BINARY ZEROES TO BLANKS
          BX6    X0*X6
          BX5    -X0*X5      FILE NUMBER
          BX6    X5+X6
  
*         APPEND TERMINATOR.
  
 POT6     SA6    OLINE+LTNO 
          WRITEC O,OLINE
          SA1    BMSG        CHECK FOR VERB IN B-DISPLAY MESSAGE
          ZR     X1,POT7     IF NO VERB 
          MESSAGE  BMSG,2,R  TELL WHAT IS BEING DONE IN B-DISPLAY 
 POT7     SA1    NOBREAK     CHECK IF BREAKS ARE IGNORED
          NZ     X1,POTX     IF BREAKS TURNED OFF THEN RETURN 
          BREAK 
          EQ     POTX        RETURN 
 PPB      SPACE  4,15 
**        PPB - PROCESS PERMIT BLOCK. 
* 
*         CHANGE FILE TO SEMI-PRIVATE, RESTORE PERMITS, 
*         THEN CHANGE BACK TO ORIGINAL CATEGORY.
* 
*         ENTRY  NONE.
* 
*         EXIT   FILE HAS PERMISSIONS RESTORED. 
* 
*         USES   X - 0, 1, 2, 5, 6. 
*                A - 1, 2, 6. 
*                B - 3. 
* 
*         MACROS CHANGE, PERMIT.
  
  
 PPB      SUBR               ENTRY/EXIT 
          MX0    42 
          SA2    CTFPLWA
          SX6    X2-PRMITB
          ZR     X6,PPBX     IF NO PERMITS ON FILE
          CHANGE SF,,,,,S    MAKE FILE SEMI-PRIVATE 
          MX5    -3 
          SB3    PRMITB 
 PPB1     SA1    B3 
          SB3    B3+NWPE
          BX6    X0*X1
          SA6    PFUSER      USER NAME FOR THE PERMISSION 
          SA2    A1+1 
          LX2    19 
          NG     X2,PPB2     IF AN ACCOUNTING PERMIT
          LX2    5
          ZR     X6,PPB2     IF NO USER NAME SKIP THIS PERMIT 
          BX6    -X5*X2 
          SA6    PFPERM      THE PERMISSION GRANTED 
          PERMIT SF,PFNAM,PFUSER,PFPERM 
 PPB2     SA2    CTFPLWA
          SX6    B3 
          IX6    X2-X6
          ZR     X6,PPB3     IF END OF PERMITS
          PL     X6,PPB1     IF NOT END OF PERMITS
 PPB3     SX6    B0+         CLEAR USER NAME FROM FET 
          SA6    SF+CFOU
          SA1    PFCAT       RESTORE CATEGORY 
          SX6    X1+40B      ENSURE CATEGORY IS UPDATED 
          SA6    PPBA 
          CHANGE SF,,,,,PPBA
          EQ     PPBX        RETURN 
  
  
 PPBA     BSS    1           CATEGORY TYPE + 40B (FOR *CHANGE*) 
 PPF      SPACE  4,20 
**        PPF - PROCESS PERMANENT FILES.
* 
*         ENTRY  NONE.
* 
*         EXIT   PFTAB CONTAINS THE LIST OF PERMANENT 
*                FILES TO BE PROCESSED. 
* 
*         USES   X - 1, 2, 3, 6.
*                A - 1, 2, 3, 6.
* 
*         CALLS  PFN. 
* 
*         MACROS FILINFO. 
  
  
 PPF4     RJ     PFN         PROCESS FILE NAMES 
  
 PPF5     SX6    B0+         CLEAR POINTER
          SA6    PFCNT
  
 PPF      SUBR               ENTRY/EXIT 
          SX6    B1+
          SA6    PPFLAG      SET PPF CALLED FLAG
          SA1    PFV         PERMANENT FILE VARIABLE
          ZR     X1,PPF1     IF NO PERMANENT FILES
          BX6    X1 
          LX1    6
          SX1    X1-1R* 
          ZR     X1,PPF4     IF PF=*
          SA6    PFTAB       SET FILE NAME
          BX6    X6-X6
          SA6    A6+B1       SET TERMINATOR WORD IN PFTAB 
          EQ     PPF5        RETURN 
  
 PPF1     SA1    FNV
          BX6    X1 
          LX1    6
          SX1    X1-1R* 
          ZR     X1,PPF2     IF  FN=* 
          SA6    PFTAB       SET FILE NAME
          BX6    X6-X6
          SA6    A6+B1       SET TERMINATOR WORD IN PFTAB 
          EQ     PPF3        SEE IF FILE LOCAL
  
 PPF2     SA6    PFV         SET PF=* 
          RJ     PFN         PROCESS FILE NAMES 
 PPF3     SA1    PFCNT
          SA2    PFTAB+X1    PFTAB(PFCNT) 
          ZR     X2,PPF5     IF END OF TABLE
  
*         CHECK TO SEE IF THIS FILE IS LOCAL. 
  
          SA3    FIBK        FIRST WORD OF *FILINFO* BLOCK
          MX1    42 
          BX3    -X1*X3 
          BX6    X2+X3
          SA6    FIBK 
          FILINFO  FIBK 
          SA3    FIBSTA 
          SA1    PFCNT
          SX6    X1+B1       INCREMENT COUNTER
          SA6    A1 
          ZR     X3,PPF3     IF FILE NOT LOCAL
          SA2    PFTAB+X1    CURRENT FILE IN TABLE
          SX6    B1 
          LX6    1
          BX6    X6+X2       SET LOCAL FILE FLAG
          SA6    A2          SAVE IN PFTAB
          EQ     PPF3        GET NEXT ENTRY 
 PRH      SPACE  4,15 
**        PRH - PRINT HEADER. 
* 
*         ENTRY  (X5) = 0 IF OUTPUT ASSIGNED TO TERMINAL. 
* 
*         EXIT   OUTPUT HEADER PRINTED AND RESET PAGE/LINE COUNT. 
* 
*         USES   X - 0, 1, 2, 3, 4, 6.
*                A - 1, 2, 3, 6.
* 
*         CALLS  CDD, ZTB.
* 
*         MACROS WRITEC, WRITEW.
  
  
 PRH      SUBR               ENTRY/EXIT 
  
*         RESET LINE COUNT. 
  
          SX6    4
          SA6    LN 
          SA1    PG 
          NZ     X1,PRH2     IF NOT FIRST TIME THRU 
  
*         USER NAME TO HEADER.
  
          SA1    UNV
          NZ     X1,PRH1     IF USER NAME SET 
          SX1    33B
          LX1    -6 
 PRH1     MX0    42 
          BX1    X0*X1
          LX1    42 
          SA2    USER 
          MX4    18 
          BX2    X4*X2
          BX1    X1+X2
          RJ     ZTB         ZEROES TO BLANKS 
          SA6    A2 
  
*         OPTION SELECTED TO HEADER.
  
          SA1    COPTION
          BX1    X0*X1
          RJ     ZTB         ZEROES TO BLANKS 
          SA6    OPTION 
 PRH2     ZR     X5,PRH3     IF OUTPUT ASSIGNED TO TERMINAL 
  
*         INCREMENT PAGE COUNT. 
  
          SA1    PG          ADVANCE TO NEXT PAGE 
          SX1    X1+B1
          BX6    X1 
          SA6    A1 
          RJ     CDD         CONVERT TO DECIMAL 
          BX6    X0*X4       ADD LINE TERMINATOR
          SA6    PAGE 
          WRITEC O,HEAD1
 PRH3     SA3    HLENGTH
          WRITEW O,HEADER,X3
          WRITEC O,HEADER1   BLANK LINE 
          EQ     PRHX        RETURN 
 PVZ      SPACE  4,15 
**        PVZ - PAD VSN WITH CHARACTER *0*. 
* 
*         ENTRY  (X6) = LEFT JUSTIFIED UNPADDED VSN.
* 
*         EXIT   (X6) = PADDED VSN.  CHARACTER *0* INSERTED 
*                       BEFORE FIRST NUMERIC CHARACTER UNTIL
*                       VSN IS SIX CHARACTERS LONG. 
* 
*         USES   X - 0, 1, 2, 3, 4, 6, 7. 
*                A - 1, 3.
*                B - 2, 3.
  
  
 PVZ      SUBR               ENTRY/EXIT 
          SA3    =1L
          MX0    6           GET LENGTH OF UNPADDED VSN 
          BX2    X6 
          SX4    B0 
 PVZ1     BX1    X0*X6       CHECK FOR CHARACTER
          BX7    X1-X3
          ZR     X7,PVZ2     IF CHARACTER IS A BLANK
          ZR     X1,PVZ2     IF END OF CHARACTERS 
          SX4    X4+B1
          LX6    6
          EQ     PVZ1        CONTINUE 
  
 PVZ2     ZR     X4,PVZX     IF NO CHARACTERS, RETURN 
          SX1    6           GET CORRECT NUMBER OF ZEROS
          IX4    X1*X4
          SB2    X4 
          SB3    B2-6        SET UP MASK
          AX0    B3,X0
          BX2    X0*X2
          SA1    =36R000000 
          AX1    B2 
          SB3    60 
          MX0    -6 
          SX6    B0 
 PVZ3     BX7    X2          SAVE END OF VSN
          LX2    6           CHECK CHARACTER
          BX3    -X0*X2 
          ZR     X3,PVZ4     IF END OF CHARACTERS 
          SX4    X3-1R0 
          PL     X4,PVZ4     IF NUMERIC CHARACTER 
          LX6    6           BUILD FIRST PART OF VSN
          BX6    X6+X3
          BX2    X0*X2
          SB3    B3-6 
          EQ     PVZ3        CHECK NEXT CHARACTER 
  
 PVZ4     SB2    B2-36       ADD ZEROS TO VSN 
          AX6    B2 
          BX6    X6+X1
          BX6    X6+X7       ADD END OF VSN 
          SB3    B3+B2
          LX6    B3 
          EQ     PVZX        RETURN 
 RDB      SPACE  4,20 
**        RDB - READ DATABASE.
* 
*         *RDB* POSITIONS THE DATABASE TO THE NEXT ENTRY WHICH
*         MEETS THE SPECIFIED USER CRITERIA.
* 
*         ENTRY  NONE.
* 
*         EXIT   (X1) = 0 IF ALL CRITERIA MET.
* 
*         ERROR  TO *ABT* IF DATABASE FILE IS CORRUPTED.
* 
*         USES   X - 0, 1, 2, 6.
*                A - 0, 1, 2, 6.
*                B - 5. 
* 
*         CALLS  CRI. 
* 
*         MACROS BREAK, MESSAGE, READ, READW, UNLOAD, WRITEC. 
  
  
 RDB8     SX1    B1+
  
 RDB      SUBR               ENTRY/EXIT 
          SX6    B0+         CLEAR SAVE AREA FOR CRITERIA MATCH 
          SA6    RDBA 
          SA6    LAD
 RDB1     READW  DB,DBE,DBEL
  
*         CHECK FOR EOR/EOF/EOI.
  
          ZR     X1,RDB2     IF SUCCESSFUL READ 
          SA2    PDBC 
          NG     X1,RDBX     IF EOF/EOI ENCOUNTERED 
          NZ     X2,RDBX     IF SCANNING ONLY ONE USER NAME 
          SX2    X1-DBE 
          NZ     X2,RDB6     IF DATABASE CORRUPTED
          READ   DB,R 
          SX6    B1 
          SA6    RDBA 
  
*         CHECK FOR OPLD ON DATABASE. 
  
          SA1    DB+3 
          SA1    X1 
          SA2    OPLDH
          BX2    X1-X2
          ZR     X2,RDBX     IF OPLD ENCOUNTERED
          SA2    VSNR 
          BX2    X1-X2
          ZR     X2,RDBX     IF VSN INDEX ENCOUNTERED 
          EQ     RDB1        READ NEXT ENTRY
  
 RDB2     BREAK 
          SA0    DBE
          SA1    A0+DBUNM    INSURE ZERO FILL IN USER NAME WORD 
          MX0    42 
          BX6    X0*X1
          SA6    A1+
          RJ     CRI         CHECK CRITERIA 
          NZ     X5,RDB1     IF RECORD DOES NOT MEET CRITERIA 
          SA2    PFV
          LX2    6
          SX2    X2-1R* 
          NZ     X2,RDB4     IF NOT PF=*
          SA1    EXV
          NZ     X1,RDB4     IF EXCEPTION PROCESSING
          SA2    PFTAB-1
          MX0    42 
          SA1    DBE+DBPFN
          BX1    X0*X1
 RDB3     SA2    A2+B1
          BX6    X0*X2
          BX6    X1-X6
          NZ     X6,RDB3     IF NOT CORRECT FILE
          BX1    -X0*X2 
          SA2    NFP
          SX6    X2+1 
          IX2    X6-X1
          SA1    NFV
          IX1    X1-X2
          SX1    X1-1 
          NG     X1,RDB1     IF FILE LIMIT EXCEEDED FOR FILE
          EQ     RDB5 
  
*         CHECK FOR FILE LIMIT/INCREMENT FILE COUNT.
  
 RDB4     SA1    NFV
          SA2    NFP
          SX6    X2+1 
          IX2    X1-X6
          NG     X2,RDB8     IF FILE LIMIT EXCEEDED 
 RDB5     SA6    A2 
          BX1    X1-X1       EXIT STATUS
          SA2    RDBA 
          SB5    X2 
          EQ     RDBX        RETURN 
  
*         PROCESS DATABASE ERROR. 
  
 RDB6     UNLOAD DB 
          MESSAGE  RDBB,3    * DATABASE CORRUPTED.* 
          WRITEC O,RDBB 
          EQ     ABT         ABORT *RECLAIM*
  
  
 RDBA     BSSZ   1
 RDBB     DATA   C* DATABASE CORRUPTED.*
 RDU      SPACE  4,15 
**        RDU - READ *UPDATES* FILE.
* 
*         ENTRY  A READ HAS BEEN PERFORMED ON THE *UPDATES*.
* 
*         EXIT   IF (X1) = 0 NEXT RECORD WITH SAME FAMILY IN *UPE*. 
*                IF (X1) .NE. 0 RECORD IS NOT UPDATED.
* 
*         USES   X - 2, 3.
*                A - 2, 3.
* 
*         MACROS READW. 
  
  
 RDU      SUBR               ENTRY/EXIT 
 RDU1     READW  UPDATES,UPE,UDBEL
          NZ     X1,RDUX     IF EOR/EOF/EOI ENCOUNTERED 
          SA2    UPE         CLEAR LAST 18 BITS 
          MX0    42 
          BX6    X0*X2
          SA6    A2 
          SA2    FAMILY 
          SA3    UPE+UDBFAM 
          ZR     X3,RDUX     IF NO FAMILY NAME - ASSUME FAMILY CORRECT
          BX2    X2-X3
          NZ     X2,RDU1     IF FAMILY NOT THE CURRENT FAMILY 
          EQ     RDUX        RETURN 
 RNT      SPACE  4,25 
**        RNT - REQUEST NEW TAPE. 
* 
*         *RNT* REQUESTS TAPES ONLY WHEN NECESSARY.  *RNT* CHECKS 
*         THE CURRENT VSN IN WORD 9 OF THE GIVEN FET ADDRESS AGAINST
*         THE DESIRED VSN IN X1.  IF THEY ARE DIFFERENT IT CLEANS 
*         UP THE FET AND REQUESTS THE NEW TAPE.  IF THE GIVEN VSN 
*         IS NULL (BINARY ZERO), *RNT* ONLY UNLOADS THE TAPE. 
* 
*         ENTRY  (X1) = DESIRED TAPE VSN. 
*                (X1) = 0 IF ONLY UNLOAD NEEDED.
*                (X5) = TAPE FET ADDRESS. 
*                ((X5)+TFLAGS) = TAPE REQUEST FLAGS.  ZERO IF NONE. 
*                ((X5)+TRING) = 1 IF TAPE MUST HAVE A WRITE RING. 
*                             = 0 IF WRITE RING IS NOT NECESSARY. 
* 
*         EXIT   TAPE ASSIGNED OR UNLOADED. 
*                (X1) = 0 IF CORRECT TAPE WAS ALREADY ASSIGNED. 
*                (X1) .NE. 0 IF REQUEST CAUSED CHANGE IN ASSIGNMENT.
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 1, 2, 3, 4, 5, 6.
* 
*         CALLS  BTF. 
* 
*         MACROS BREAK, FILINFO, LABEL, REWIND, UNLOAD. 
  
  
 RNT      SUBR               ENTRY/EXIT 
          SA2    X5+TFLAGS   TAPE FLAGS 
          LX2    59-11
          PL     X2,RNT1     IF DUMP FILE IS TAPE 
          RJ     MDL         PROCESS MASS STORAGE DUMP FILE 
          EQ     RNTX        RETURN 
  
 RNT1     SA2    X5+TFETVSN  GET FET WORD WITH VSN
          MX6    6*6
          SA4    UNLOAD      UNLOAD/RE-REQUEST FLAG 
          BX3    X1-X2       COMPARE VSN-S
          BX3    X6*X3       REMOVE STUFF AT BOTTOM 
          NZ     X3,RNT2     IF VSN-S DO NOT MATCH
          NZ     X4,RNT2     IF UNLOAD/RE-REQUEST REQUIRED
          SA4    X5+8        FET WORD WITH REQUEST FLAGS
          SA3    X5+TRING    RING/NORING FLAG 
          AX4    40          RIGHT JUSTIFY *PO=W* BIT 
          BX4    -X4*X3      NOT( HAD A RING ) .AND. NEED RING
          LX4    -1          LEFT JUSTIFY EXPRESSION RESULT 
          NG     X4,RNT2     IF RING NEEDED AND DO NOT HAVE RING
          SX1    B0+         FLAG SAME TAPE, SAME CONDITIONS
          EQ     RNTX        RETURN 
  
 RNT2     BX0    -X6*X2      PRESERVE LOWER PART OF PRIOR VSN WORD
          BX6    X1*X6       INITIALIZE CURRENT REEL VSN
          SA6    X5+CRVSN 
          BX2    X2-X0       ISOLATE PRIOR VSN
          BX6    X0+X6       MERGE NEW VSN WITH PRESERVED LOWER PART
          SA6    A2+
          MX0    7*6
          SA1    X5+INITREQ 
          SA4    X5          GET PREVIOUS LFN FROM FET
          SA3    X5+TDFV     GET DUMP TAPE LFN
          NZ     X1,RNT3     IF INITIAL REQUEST 
          BX6    X3-X4
          BX6    X0*X6
          ZR     X6,RNT4     IF LFN HAS NOT CHANGED 
          SA6    A1+         FORCE CHECK FOR *VSN* COMMAND
          ZR     X2,RNT3     IF PREVIOUS FILE WAS MASS STORAGE
 DEBUG    IFC    NE,$DEBUG$"MODLEVEL"$,1   OMIT UNLOAD IF DEBUG 
          UNLOAD X5,R        UNLOAD PREVIOUS DUMP TAPE
          SA3    X5+TDFV     GET DUMP TAPE LFN AGAIN
          MX0    7*6
          SA4    X5          GET FET LFN WORD AGAIN 
 RNT3     BX4    -X0*X4      SAVE LOWER BITS OF LFN WORD
          BX3    X0*X3
          BX6    X3+X4       SET CURRENT LFN INTO FET 
          SA6    X5 
          SA1    X5+INITREQ 
          ZR     X1,RNT4     IF NOT INITIAL TAPE REQUEST
  
*         CHECK FOR POSSIBLE *VSN* SYSTEM COMMAND.
  
          SA4    FIBK 
          BX4    -X0*X4      SAVE BOTTOM OF WORD
          BX6    X3+X4       CHANGE NAME IN *FILINFO* BLOCK 
          SA6    A4 
          SX6    B0+         CLEAR INITIAL REQUEST FLAG 
          SA6    A1 
          SA1    DBNAM
          ZR     X1,RNT3.1   IF NOT USING DATABASE
          SA1    X5+TRING 
          ZR     X1,RNT4     IF NO RING REQUIRED (IGNORE PRIOR *VSN*) 
 RNT3.1   FILINFO  FIBK      GET INFO FOR *TAPE*
          SA2    FIBEST      *FILINFO* EST ORDINAL
          MX6    -12
          LX2    12          RIGHT JUSTIFY EST ORDINAL
          BX2    -X6*X2      EXTRACT EST
          SX2    X2-TEEQ     COMPARE WITH *VSN* EQUIPMENT 
          ZR     X2,RNT5     IF PRIOR *VSN* COMMAND DO NOT UNLOAD 
  
*         READY TO UNLOAD TAPE. 
  
 RNT4     BSS    0
 DEBUG    IFC    NE,$DEBUG$"MODLEVEL"$,1  IGNORE *UNLOAD* IF DEBUG
          UNLOAD X5,R 
 RNT5     SX6    B0+
          SA6    X5+CFN      CLEAR MASS STORAGE FILE NAME 
          SA6    X5+WRITTEN  CLEAR TAPE WRITTEN FLAG
          SA2    X5+TFETVSN  CHECK VSN
          MX0    6*6
          BX2    X0*X2
          ZR     X2,RNTX     IF NULL VSN RETURN 
          SA3    X5+TFLAGS   CHECK FOR PRESET REQUEST FLAGS 
          NZ     X3,RNT6     IF FLAGS ALREADY SET 
          SA4    TAPDFLT     TAPE DEFAULTS FOR *BTF*
          RJ     BTF         BUILD FLAGS FROM DIRECTIVE KEYWORDS
          SA3    X5+TFLAGS   GET RESULTS FROM *BTF* 
 RNT6     SA1    POV         USER PROCESSING OPTIONS
          MX0    -3 
          BX6    -X0*X3      GET TAPE FORMAT
          SA4    X5+TRING 
          LX4    39          POSITION RING-REQUIRED TO *PO=R* 
          BX1    -X4*X1      CLEAR *PO=R* IF RING IS SET
          LX4    1           POSITION TO *PO=W* 
          BX1    X1+X4       INSERT POSSIBLE RING-IN BIT
          LX6    30          POSITION TAPE FORMAT 
          SX2    1000B
          BX2    -X2*X3      REMOVE FOREIGN TAPE FLAG 
          BX3    X3-X2       ISOLATE FOREIGN TAPE FLAG
          BX2    X0*X2       ISOLATE DENSITY, TRACKS
          LX2    48          POSITION DENSITY, TRACKS 
          BX6    X6+X1       ADD PROCESSING OPTIONS 
          BX6    X6+X2       ADD DENSITY, TRACKS
          SA6    X5+8        INSERT FLAGS IN TAPE FET 
          SA1    TMSTAT 
          BX7    X7-X7       PRESET FOR NO OWNER
          BX6    X6-X6       PRESET FOR NO PASSWORD 
          ZR     X1,RNT8     IF TMS IS NOT ACTIVE 
          SA1    FTV         FOREIGN TAPE VARIABLE
          SX6    2           PRESET FOREIGN TAPE FLAG BIT 
          NZ     X3,RNT8     IF FOREIGN TAPE FLAG SET 
          NZ     X1,RNT8     IF *FT* OPTION SELECTED
          SA1    X5+TFETVSN 
          SA2    =6L         CHECK FOR BLANK VSN - SCRATCH TAPE REQUEST 
          MX0    36 
          BX1    X1-X2
          BX1    X0*X1
          SX6    400B        SET *RECLAIM* ONLY BIT FOR *TMS* 
          NZ     X1,RNT7     IF NOT SCRATCH TAPE REQUEST
          MESSAGE  RNTC,3 
          WRITEC O,RNTC      * REQUESTING A NEW DUMP TAPE.* 
          WRITER O,R
          SX6    10B         SET FLAG TO RESERVE TAPE 
 RNT7     SA1    TOV         TMS TAPE OWNER 
          SA2    PWV         TMS TAPE PASSWORD
          MX0    42 
          BX1    X0*X1       ISOLATE OWNER
          BX7    X0*X2       ISOLATE TAPE PASSWORD
          BX6    X6+X1
 RNT8     SA6    X5+/TFM/TFUN  INSERT OWNER IN TAPE FET 
          SA7    X5+/TFM/TFPW  ADD PASSWORD TO FET
          BREAK              CHECK FOR USER INTERRUPT BEFORE REQUEST
 DEBUG    IFC    NE,$DEBUG$"MODLEVEL"$
          LABEL  X5          FINALLY DO THE REQUEST 
          SA1    X5+TFETVSN 
          SA2    =6L         CHECK FOR BLANK VSN - SCRATCH TAPE REQUEST 
          MX0    36 
          BX1    X0*X1
          BX2    X1-X2
          NZ     X2,RNTX     IF NOT SCRATCH TAPE REQUEST
          WRITEF X5,R        FORCE VSN TO BE MADE ACCESSIBLE
          SA3    X5          RETRIEVE LFN FROM TAPE FET 
          SA1    FIBK        CHANGE NAME IN *FILINFO* BLOCK 
          MX0    42 
          BX1    -X0*X1      SAVE LOWER 18 BITS 
          BX3    X0*X3
          BX6    X3+X1
          SA6    A1          CHANGE NAME IN *FILINFO* BLOCK 
          FILINFO  FIBK 
          SA2    FIBVSN      VSN IN *FILINFO* BLOCK 
          MX3    6*6
          BX6    X3*X2       EXTRACT TMS ASSIGNED VSN 
          SA6    X5+CRVSN    STORE CURRENT REEL VSN 
          SA6    X5+TTNV     REPLACE TN/CT VARIABLE 
          SA6    X5+TDNV     REPLACE DN/CN VARIABLE 
          SA1    X5+TFETVSN 
          BX3    -X3*X1 
          BX1    X6 
          BX6    X3+X6
          SA6    A1          MERGE VSN INTO FET VSN WORD
 DEBUG    ELSE   1
          RECALL             ISSUE NOOP TO MARK WHERE WE ARE
          EQ     RNTX        RETURN 
  
  
 RNTC     DATA   C* REQUESTING A NEW DUMP TAPE.*
 ROD      SPACE  4,20 
**        ROD - REQUEST OUTPUT DUMP.
* 
*         *ROD* REQUESTS DUMP FILE AND POSITIONS IT EITHER TO *BOI* OR
*         *EOI* DEPENDING UPON WHICH IS REQUIRED. 
* 
*         ENTRY  (X5) = TAPE FET ADDRESS. 
*                ((X5)+TFLAGS) = TAPE REQUEST FLAGS.  ZERO IF NONE. 
*                ((X5)+TRING) = 1 IF TAPE MUST HAVE A WRITE RING. 
*                             = 0 IF WRITE RING IS NOT NECESSARY. 
* 
*         EXIT   DUMP FILE ASSIGNED AND POSITIONED. 
*                (X5+TFC) = CURRENT FILE POSITION.
*                (X5+TRC) = CURRENT RECORD POSITION.
*                TO *ABT* IF TAPE FULL AND *EI=YES*.
*                TO *MAIN8* IF USER DISALLOWS OVERWRITE.
* 
*         USES   X - 0, 1, 3, 4, 6, 7.
*                A - 1, 3, 4, 5, 6. 
* 
*         MACROS BREAK, MESSAGE, READ, READO, REWIND, SKIPF,
*                WRITEC, WRITEF.
  
  
 ROD      SUBR               ENTRY/EXIT 
          SX6    B0+
          SA6    RODA        CLEAR LAST EOR FILE COUNT
 ROD1     SX6    1
          SA1    X5+TTNV     GET VSN FOR REQUEST
          SA6    X5+TRING    FLAG WRITE RING IS REQUIRED
          RJ     RNT         REQUEST NEW TAPE 
          SA3    EIV
          NZ     X1,ROD2     IF TAPE NOT PREVIOUSLY ASSIGNED
          SA1    X5+TFC 
          BX0    X1 
          ZR     X1,ROD2     IF POSITION NOT KNOWN
          SA4    X5+TRC 
          ZR     X3,ROD2     IF DUMP TO BE PLACED AT BOI
          NG     X4,ROD8     IF AT EOI FOLLOWING PREVIOUS DUMP
          SX0    X0-1        ADJUST FROM COPY/LOAD TO DUMP FILE NUMBER
          EQ     ROD4        FIND END OF DUMP TAPE
  
 ROD2     REWIND X5,R 
          ZR     X3,ROD7     IF DUMP TO BE PLACED AT BOI
          RJ     CVT         CHECK FOR VALID DUMP TAPE
          ZR     X1,ROD3     IF VALID DUMP - GO SKIP AS USUAL 
          SX6    B0+         NO VALID DUMP - CLEAR *EI* DUMP FLAG 
          SA6    EIV
          MESSAGE  RODB,3    * UNKNOWN DUMP FILE WILL BE OVERWRITTEN.*
          WRITEC O,RODB 
          SA1    IDT         CHECK FOR TERMINAL INPUT FILE
          NZ     X1,ROD7     IF NOT A TERMINAL THEN OVERWRITE 
          WRITEC O,RODC      * IS THIS OK (YES OR NO)?* 
          READ   I,R         ISSUE QUESTION MARK PROMPT 
          READO  I           GET FIRST WORD OF USER RESPONSE
          LX6    6*2         RIGHT JUSTIFY LEFT TWO CHARACTERS
          SX6    X6-2RNO     COMPARE WITH *NO*
          NZ     X6,ROD7     IF NOT *NO* THEN OVERWRITE TAPE
          SX6    B0+
          SA6    NFP         CLEAR FILES PROCESSED COUNT
          EQ     MAIN8       ABORT THE DIRECTIVE
  
 ROD3     SX4    B0+         INITIALIZE RECORD NUMBER 
 ROD4     SKIPF  X5,1,R 
          SA1    X5 
          LX1    59-9        LEFT JUSTIFY EOI BIT 
          NG     X1,ROD5     IF EOI ENCOUNTERED 
          SX4    X4+B1       COMPUTE RECORDS SKIPPED
          LX1    -59+9
          MX6    -9 
          BX1    -X6*X1 
          SX1    X1-273B
          NG     X1,ROD4     IF JUST EOR - NOT EOF
          SX0    X0+1        COMPUTE FILES SKIPPED
          BREAK 
          SA4    RODA 
          BX4    X4-X0
          ZR     X4,ROD9     IF LAST STATUS WAS EOF 
          SX4    X0-63       COMPARE WITH MAXIMUM DUMP COUNT
          NG     X4,ROD3     IF NOT MAXIMUM DUMPS ALREADY 
          MESSAGE  RODD,3    * FILE CONTAINS 63 DUMPS.  FILE IS FULL.*
          WRITEC O,RODD 
          EQ     ABT         ABORT *RECLAIM*
  
 ROD5     ZR     X4,ROD9     IF LAST STATUS WAS EOF 
          SA1    NVV
          ZR     X1,ROD6     IF VALIDATING DUMP TAPE
          WRITEF X5,R        TERMINATE WITH AN EOF
          SX0    X0+1        INCREMENT FILE COUNT 
          EQ     ROD8        START DUMP WITH CLEAR RECORD COUNT 
  
 ROD6     BX6    X0 
          SA6    RODA        SET LAST EOF FILE COUNT
          SX6    B0 
          SA6    X5+TFC      INDICATE POSITION UNKNOWN
          EQ     ROD1        GO BACK TO BEGINNING OF DUMP TAPE
  
 ROD7     SA1    X5+TTNV     SET VSN
          RJ     UII         WRITE INITIAL VSN INDEX RECORD 
          SX0    B0+         INITIALIZE FILE NUMBER 
 ROD8     SX4    B0+         INITIALIZE RECORD NUMBER 
 ROD9     SX7    X4+2        SET/INCREMENT RECORD NUMBER
          SA7    X5+TRC 
          SX6    X0+B1       SET/INCREMENT FILE NUMBER
          SA6    X5+TFC 
          DATE   HDRDT       GET DATE FOR HEADER
          CLOCK  HDRTM       GET TIME FOR HEADER
          WRITEW X5,HDRCTL,HDRSZ+1  WRITE DUMP HEADER 
          WRITER X5,R 
          SX7    B1+         SET FLAG FOR TAPE WRITTEN ON 
          SA7    X5+WRITTEN 
          RJ     UFV         FIND VSN AFTER POSITIONING 
          SA1    X5+TMSV
          NZ     X1,RODX     IF MASS STORAGE FILE 
          SA1    FIBDEN      GET DENSITY
          MX0    3
          LX1    59-11
          BX6    X0*X1
          SA1    X5+TFLAGS   GET TAPE FLAGS 
          LX1    59-5 
          BX1    -X0*X1      REMOVE OLD DENSITY 
          BX6    X1+X6       MERGE IN NEW DENSITY 
          LX6    5-59 
          SA6    A1 
          EQ     RODX        RETURN 
  
  
 RODA     BSS    1           EOF STATUS/COUNT 
 RODB     DATA   C* UNKNOWN DUMP FILE WILL BE OVERWRITTEN.* 
 RODC     DATA   C* IS THIS OK (YES OR NO)?*
 RODD     DATA   C* DUMP FILE CONTAINS 63 DUMPS.  FILE IS FULL.*
 RPV      SPACE  4,20 
**        RPI - REPRIEVE INTERFACE. 
* 
*         ENTRY  SYSTEM HAS DETECTED AN ERROR CONDITION.
*                (RBPF) .NE. 0  IF ERROR IS TO BE IGNORED.
* 
*         EXIT   TO *ABT* IF A FATAL ERROR HAS OCCURED. 
*                (RBPF) .EQ. 0  IF *RECLAIM* IS NOT ABORTED.
* 
*         USES   X - 0, 1, 6. 
*                A - 1, 6.
* 
*         CALLS  ABT, PBC.
* 
*         MACROS REPRIEVE, RPVBLK.
* 
*         NOTE   THIS IS THE EXIT ADDRESS THE SYSTEM GIVES CONTROL
*                TO WHEN AN ERROR CONDITION HAS BEEN DETECTED.
*                THIS INCLUDES USER BREAKS AND SYSTEM ERRORS. 
  
  
 RPVBLK   RPVBLK RPI         REPRIEVE PARAMETER BLOCK 
  
  
 RPI      BSS    0           ENTRY POINT FOR REPRIEVE CODING
          SB1    1           ENSURE *B1=1*
          SA1    RBPF 
          NZ     X1,RPV2     IF BYPASS FLAG SET 
          MX0    48 
          SA1    RPVBLK+3    GET REPRIEVE ERROR CODE
          BX1    -X0*X1 
          SX1    X1-40B      IF TERMINAL INTERRUPT
          NZ     X1,ABT      IF NOT A TERMINAL INTERRUPT
          SA1    NOBREAK     NO BREAKS ALLOWED
          NZ     X1,RPV1     RESUME PROCESSING
          SA1    RPVBLK+6 
          NZ     X1,ABT      IF INPUT REQUEST AND USER BREAK ABORT
          SA1    RPVBLK+7 
          BX1    -X0*X1      ERROR FLAG 
          SX1    X1-TIET     CHECK FOR TERMINAL INTERRUPT 
          NZ     X1,ABT      IF NOT USER BREAK ONE
 RPV1     SX6    B1          SET INTERUPT FLAG
          SA6    BREAK
 RPV2     SX6    B0+
          SA6    RBPF        CLEAR BYPASS FLAG
          REPRIEVE  RPVBLK,RESUME,233B  RESUME PROCESSING, NO RETURN
 SBU      SPACE  4,20 
**        SBU - SORT BY USER. 
* 
*         *SBU* SORTS THE NEW ENTRIES FOR THE DATABASE BY USERNAME, 
*         FILE NAME AND FILE POSITION BEFORE UPDATING THE DATABASE. 
* 
*         ENTRY  UNSORTED RECORDS ON FILE *OPLDF*.
* 
*         EXIT   SORTED RECORDS ON FILE *UPDATES*.
* 
*         USES   X - 0, 1, 2, 6, 7. 
*                A - 1, 2, 6, 7.
* 
*         CALLS  SDE, SRT.
* 
*         MACROS READ, READW, REWIND, UNLOAD, WRITE, WRITEO, WRITER,
*                WRITEW.
  
  
 SBU      SUBR               ENTRY/EXIT 
          REWIND DB          CLEAR BUFFER 
          REWIND SF          CLEAR BUFFER 
          REWIND OPLDF
          UNLOAD DB          PREVENT ANY PFM ERRORS 
          UNLOAD SF          PREVENT ANY PFM ERRORS 
          WRITE  CF,*        PRESET WRITE FUNCTION
          READ   OPLDF
 SBU1     READW  OPLDF,SBUB,UDBEL 
          NZ     X1,SBU2     IF NO DATA ENCOUNTERED 
          MX0    6*7
          SA1    SBUB+DBUNM  GET THE USER NAME
          SA2    SBUB+DBFNO  GET THE FILE AND RECORD NUMBER 
          BX6    X0*X1       ISOLATE USER NAME
          LX2    0-18 
          BX2    -X0*X2      ISOLATE FILE AND RECORD NUMBER 
          BX6    X6+X2       CREATE SORT KEY
          WRITEO CF          WRITE USER NAME AS SORT KEY
          WRITEW CF,SBUB,UDBEL
          EQ     SBU1        PROCESS NEXT RECORD
  
 SBU2     WRITER CF 
          REWIND CF,R 
          RJ     SRT         SORT BY USER NAME AND FILE/RECORD POSITION 
  
*         MOVE UPDATES SORTED BY USERNAME TO *SF*.
  
          REWIND CF 
          WRITE  SF,*        PRESET WRITE FUNCTION
          SX6    B0+
          SA6    MRUSER      CLEAR CURRENT USER NAME BEING PROCESSED
          SA6    SBUB+DBEL   CLEAR FAMILY ENTRY IN UPDATES TYPE RECORD
          READ   CF 
 SBU3     READW  CF,SBUA,ITEMSIZ
          NZ     X1,SBU4     IF NO MORE DATA
          WRITEW SF,SBUB,UDBEL MOVE UPDATES TYPE RECORD TO *SF* 
          EQ     SBU3        GET NEXT ENTRY 
  
*         NOW SORT *SF* ENTRIES BY PFN, AND DUMP FILE POSITION. 
  
 SBU4     WRITER SF          FLUSH THE BUFFER 
          REWIND OPLDF
          REWIND SF 
          WRITE  DB,*        PRESET WRITE FUNCTION
          WRITE  OPLDF,*     PRESET WRITE FUNCTION
          READ   SF 
 SBU5     READW  SF,SBUB,UDBEL
          NZ     X1,SBU10    IF END OF DATA 
          SA1    SBUB+DBUNM  GET SORT KEY (USER NAME) 
          SA2    MRUSER      GET CURRENT USER NAME BEING PROCESSED
          MX0    42          SET USER NAME MASK 
          BX6    X1-X2
          BX7    X0*X1       ISOLATE USERNAME KEY 
          BX6    X0*X6       ISOLATE CURRENT USER NAME
          SA7    A2+         SAVE NEW CURRENT USER NAME 
          ZR     X6,SBU6     IF USER NAMES ARE THE SAME 
          NZ     X2,SBU7     IF NOT FIRST PASS
 SBU6     WRITEW OPLDF,SBUB,UDBEL 
          EQ     SBU5        GET NEXT RECORD
  
 SBU7     WRITER OPLDF,R
          RJ     SDE         SORT DATABASE ENTRIES
          READ   UPDATES
          SA1    MRUSER 
          ZR     X1,SBU8     IF NO MORE ENTRIES 
          WRITE  OPLDF,*     PRESET WRITE FUNCTION
          WRITEW OPLDF,SBUB,UDBEL  WRITE CURRENT *SF* ENTRY 
  
*         TRANSFER SORTED DATA TO *DB* UNTIL ENTRIES ARE PROCESSED. 
  
 SBU8     READW  UPDATES,SBUB,UDBEL 
          NZ     X1,SBU9     IF NO MORE DATA
          WRITEW DB,SBUB,UDBEL HOLD IN *DB* UNTIL ALL PROCESSED 
          EQ     SBU8        GET NEXT RECORD
  
 SBU9     SA1    MRUSER      CURRENT USER NAME
          ZR     X1,SBU11    IF CLEAR, NO MORE RECORDS
          EQ     SBU5        PROCESS NEXT SET OF RECORDS
  
 SBU10    SX6    B0+         CLEAR CURRENT USER NAME
          SA6    MRUSER 
          RECALL OPLDF
          SA1    OPLDF+2
          SA2    A1+B1
          IX1    X1-X2       IF BUFFER POINTERS IN = OUT
          NZ     X1,SBU7     IF DATA IN BUFFER
 SBU11    REWIND UPDATES
          WRITER DB          FLUSH THE BUFFER 
          REWIND DB 
          WRITE  UPDATES,*   PRESET WRITE FUNCTION
          READ   DB 
 SBU12    READW  DB,SBUB,UDBEL
          NZ     X1,SBU13    IF NO MORE DATA
          WRITEW UPDATES,SBUB,UDBEL 
          EQ     SBU12       GET NEXT RECORD
  
 SBU13    WRITER UPDATES
          UNLOAD DB 
          UNLOAD SF 
          REWIND UPDATES
          EQ     SBUX        RETURN 
  
  
 SBUA     BSS    ITEMSIZ-UDBEL
 SBUB     BSS    UDBEL
 SDE      SPACE  4,40 
**        SDE - SORT DATABASE RECORDS.
* 
*         *SDE* SORTS *OPLDF* RECORDS BY ONE OF TWO KEYS. 
*         NORMAL PFN RECORDS -
*           1. FILE NAME IS PRIMARY SORT KEY IN ASCENDING ORDER.
*           2. FILE POSITION IS SECONDARY IN DESCENDING ORDER.
*              (FILE POSITION KEY IS INVERTED FOR DESCENDING ORDER) 
*         VSN INDEX RECORDS - 
*           1. VSN IS PRIMARY SORT KEY IN ASCENDING ORDER.
*           2. FILE POSITION IS SECONDARY IN ASCENDING ORDER. 
*         *SDE* BUILDS THE ONE WORD KEY, THEN CALLS *SRT* TO PERFORM
*         THE SORT OF UPDATE RECORDS BY THE KEY BEING USED. 
*         THE SORTED RECORDS ARE THEN READ IN AND WRITTEN TO *UPDATES*. 
* 
*         ENTRY  UNSORTED RECORDS ON FILE *OPLDF*.
* 
*         EXIT   SORTED RECORDS ON FILE *UPDATES*.
* 
*         ERROR  TO *ABT* IF 2 RECORDS HAVE SAME POSITION ON TAPE.
* 
*         USES   X - 0, 1, 2, 3, 6. 
*                A - 1, 2, 3. 
* 
*         CALLS  SRT. 
* 
*         MACROS READ, READW, REWIND, UNLOAD, WRITE, WRITEO,
*                WRITER, WRITEW.
  
  
 SDE      SUBR               ENTRY/EXIT 
          REWIND OPLDF,R
          REWIND CF,R 
          REWIND UPDATES,R
          WRITE  CF,* 
          WRITE  UPDATES,*
          READ   OPLDF       START UP READ ON UNSORTED UPDATES
          MX0    6*7         MASK FOR PERMANENT FILE NAME 
  
*         THIS FIRST PART READS EACH ENTRY FROM *OPLDF*, EXTRACTS 
*         FIELDS TO BUILD THE SORT KEY, AND WRITES A CORRESPONDING
*         ENTRY ON *CF*.  WHEN ALL ENTRIES HAVE BEEN COPIED, *SRT*
*         IS CALLED TO SORT THEM IN ASCENDING SEQUENCE BY THE KEY.
  
 SDE1     READW  OPLDF,UPE,UDBEL
          NZ     X1,SDE4     IF EOR FOUND ON UNSORTED FILE
          SA2    UPE+DBUNM
          SA3    VSNR        CHECK FOR VSN INDEX ID 
          BX2    X2-X3
          NZ     X2,SDE2     IF NOT A VSN INDEX RECORD
          SA2    UPE+DBXSV   VSN OF FIRST REEL OF SET 
          SA1    UPE+DBXFR   FILE/RECORD NUMBER OF FIRST FILE 
          MX3    -24
          LX1    -12
          BX1    -X3*X1 
          BX2    X1+X2       MERGE VSN AND FILE/RECORD
          MX3    6           BIAS VSN INDEX RECORDS TO SORT LAST
          LX2    9*6         POSITION VSN/FILE/RECORD 
          EQ     SDE3        WRITE OUT SORT KEY 
  
 SDE2     SA2    UPE+DBPFN   ENTRY WORD WITH PFN
          SA3    UPE+DBFNO   ENTRY WORD WITH FILE/RECORD NUMBER 
          BX2    X0*X2       ISOLATE PFN
          LX3    -18         POSITION FILE/RECORD NUMBER
          BX3    -X3         INVERT FILE/RECORD FOR DESCENDING ORDER
          BX3    -X0*X3      ISOLATE INVERTED FILE/RECORD NUMBER
  
 SDE3     BX6    X2+X3       MERGE PARTS OF KEY 
          WRITEO CF          WRITE SORT KEY FOR THIS ENTRY
          WRITEW CF,UPE,UDBEL  WRITE REST OF THIS ENTRY 
          ERRNZ  ITEMSIZ-UDBEL-1  SIZE CHECK FOR SORT RECORD
          EQ     SDE1        LOOP TO HANDLE NEXT RECORD 
  
 SDE4     WRITER CF          FLUSH MERGESORT FILE 
          UNLOAD OPLDF
          RJ     SRT         SORT RECORDS BY KEY
          READ   CF 
  
*         COPY SORTED RECORDS TO *UPDATES*. 
  
 SDE5     READW  CF,SDEB,ITEMSIZ
          NZ     X1,SDE6     IF EOR/EOF/EOI REACHED 
          WRITEW UPDATES,SDEC,UDBEL 
          EQ     SDE5        GET NEXT RECORD
  
 SDE6     UNLOAD CF 
          WRITER UPDATES
          REWIND UPDATES,R
          EQ     SDEX        RETURN 
  
  
 SDEB     BSS    1           TEMP AREA FOR SORT ENTRY 
 SDEC     BSS    ITEMSIZ-1   TEMP AREA FOR UPDATE AND SORT ENTRY
 SFC      SPACE  4,10 
**        SFC - SET FILE COUNT. 
* 
*         ENTRY  (X6) = DEFAULT FILE LIMIT FOR CALLING OPTION.
* 
*         EXIT   FILE COUNT SET.
* 
*         USES   X - 1, 6.
*                A - 1, 6.
  
  
 SFC      SUBR               ENTRY/EXIT 
          SA1    NFV
          NZ     X1,SFCX     IF FILE LIMIT SET BY USER
          SA6    A1 
          EQ     SFCX        RETURN 
 SRT      SPACE  4,20 
**        SRT - MERGE SORT OF 6-WORD ENTRIES. 
* 
*         *SRT* SORTS THE 6-WORD ENTRIES ON FILE *CF* BASED 
*         ON THE FIRST WORD OF EACH ENTRY, USED AS AN UNSIGNED, 60-BIT
*         NUMERIC SORT KEY.  THE ALGORITHM USED IS TAKEN
*         FROM N. WIRTH, *ALGORITHMS + DATA STRUCTURES = PROGRAMS*, 
*         PRENTICE-HALL, PP. 97-98. 
* 
*         ENTRY  *CF* CONTAINS AT LEAST ONE ENTRY.
*                SORT KEY IS THE FIRST WORD OF EACH ENTRY.
* 
*         EXIT   SORTED ENTRIES ON *CF*.
* 
*         USES   X - 1, 2, 6. 
*                A - 1, 6.
* 
*         CALLS  DTR, MRG.
* 
*         MACROS RESET, UNLOAD, REWIND, REWRYTE, WRITER.
  
  
 SRT      SUBR               ENTRY/EXIT 
  
*         REPEAT DISTRIBUTE/MERGE PASSES. 
  
 SRT1     REWRYTE  AF 
          REWRYTE  BF 
          RESET  CF 
          RJ     DTR         DISTRIBUTE RUNS FROM C ONTO A AND B
          WRITER AF,R 
          WRITER BF,R 
          RESET  AF 
          RESET  BF 
          REWRYTE  CF 
          SX6    B0+         INITIALIZE COUNT OF RUNS FOR THIS PASS 
          SA6    NRUNS
          RJ     MRG         MERGE RUNS FROM A AND B ONTO C 
          WRITER CF,R 
          SA1    NRUNS
          SX2    B1 
          IX1    X1-X2
          NZ     X1,SRT1     IF NOT A SINGLE RUN YET
          UNLOAD AF 
          UNLOAD BF 
          REWIND CF,R 
          EQ     SRTX        RETURN 
 UDV      SPACE  4,20 
**        UDV - UPDATE DUMP VSNS IN DATABASE
* 
*         UDV CHECKS THE CURRENT VSN OF THE DUMP FILE.
*                IF THE VSN HAS CHANGED, THE VSN IN FET+CRVSN 
*                IS UPDATED AND A VSN INDEX RECORD IS WRITTEN 
*                TO THE OPLDF FILE TO UPDATE THE DATA BASE. 
* 
*         ENTRY  (X5) = FET ADDRESS OF DUMP FILE TO CHECK.
* 
*         EXIT   (X2).LT.0   FILE IS NOT A TAPE FILE. 
*                (X2).EQ.0   VSN HAS NOT CHANGED. 
*                (X2).GT.0   VSN CHANGED, FET+CRVSN CONTAINS NEW VSN
*                            AND VSN INDEX RECORD HAS BEEN WRITTEN. 
* 
*         USES   X - 1, 2, 3, 5, 6
*                A - 1, 2 
* 
*         CALLS  UFV
  
 UDV      SUBR               ENTRY/EXIT 
          SA2    DBNAM
          ZR     X2,UDVX     IF NO DATA BASE
          RJ     UFV         UPDATE FET VSN 
          NG     X2,UDVX     IF NOT A TAPE FILE 
          ZR     X2,UDVX     IF VSN DID NOT CHANGE
          SA6    VSNR+DBXCV  SAVE NEW VSN (X6) IN DB RECORD 
          WRITEO  NUMBERS 
          SA1    X5+TTNV     SET VSN ORIGINALLY SPECIFIED 
          MX6    6*6
          BX6    X1*X6
          SA6    VSNR+DBXSV  SAVE SET VSN IN CASE DUMPING AT EOI
          SA1    X5+TFC 
          LX1    12 
          SA2    X5+TRC 
          BX6    X1+X2       MERGE FILE AND RECORD NUMBER 
          LX6    18 
          SA6    VSNR+DBXFR  SAVE BEGINNING FILE AND RECORD ON VSN
          WRITEW OPLDF,VSNR,UDBEL 
          SX2    1           INDICATE VSN INDEX RECORD WRITTEN
          EQ     UDVX        RETURN 
          SPACE  4,10 
**        UFV - UPDATE FET VSN
* 
*         UFV CHECKS THE CURRENT VSN OF THE DUMP FILE 
*                AND UPDATES THE VSN IN FET+CRVSN.
* 
*         ENTRY  (X5) = FET ADDRESS OF FILE TO BE CHECKED.
* 
*         EXIT   (X2).LT.0   FILE IS NOT A TAPE FILE. 
*                (X2).EQ.0   VSN HAS NOT CHANGED. 
*                (X2).GT.0   VSN CHANGED, FET+CRVSN CONTAINS NEW VSN. 
*                (X5) = FET ADDRESS.
*                (X6) BITS 59-24 = CURRENT VSN, IF (X2).GE.0. 
* 
*         USES   X - 1, 2, 3, 5, 6. 
*                A - 1, 2, 5. 
* 
*         MACROS FILINFO
  
 UFV      SUBR               ENTRY/EXIT 
          MX3    7*6
          SA1    X5          GET LFN FROM FET 
          BX6    X3*X1
          SA1    FIBK        GET FIRST WORD OF *FILINFO* BLOCK
          BX1    -X3*X1      REMOVE THE LFN 
          BX6    X1+X6       MERGE IN NEW LFN 
          SA6    A1 
          FILINFO  FIBK 
          SA2    X5+TFLAGS   GET TAPE FLAGS 
          LX2    59-11
          NG     X2,UFVX     IF SPECIFIED AS MASS STORAGE 
 DEBUG    IFC    NE,$DEBUG$"MODLEVEL"$
          SA2    FIBVSN 
 DEBUG    ELSE
          SA2    X5+CRVSN    FOR DEBUG FORCE THE SAME VSN 
 DEBUG    ENDIF 
          LX2    59-5        CHECK IF THIS IS A TAPE
          NG     X2,UFVX     IF NOT A TAPE
          LX2    5-59 
          MX3    6*6
          BX6    X3*X2       ISOLATE CURRENT VSN
          SA2    X5+CRVSN    GET PREVIOUS VSN 
          BX2    X2-X6
          ZR     X2,UFVX     IF NO CHANGE OF VSN
          SA6    A2 
          SX2    B1+         INDICATE VSN CHANGED TO CALLER 
          EQ     UFVX        RETURN 
 UII      SPACE  4,15 
**        UII - UPDATE FOR INITIAL VSN INDEX RECORD.
* 
*         UII WRITES THE DATA BASE UPDATE ENTRY FOR THE FIRST 
*                REEL OF A DUMP FILE. 
* 
*         ENTRY  (X1) = VSN OF FIRST REEL OF SET. 
*                (X5) = FET ADDRESS OF DUMP FILE. 
* 
*         EXIT   OPLDF UPDATE RECORD FOR VSN INDEX WRITTEN. 
* 
*         USES   X - 1, 3, 6. 
*                A - 1, 3, 6. 
* 
*         CALLS  UFV. 
  
 UII      SUBR               ENTRY/EXIT 
          SA3    DBNAM       CHECK IF USING A DATA BASE 
          ZR     X3,UIIX     IF NOT USING DATA BASE 
          SA3    X5+TFLAGS   GET TAPE FLAGS 
          LX3    59-11
          PL     X3,UII1     IF A TAPE DUMP 
          LX3    47-59       SET TAPE FLAGS, FIRST-OF-SET FILE/RECORD 
          BX6    X3 
          SA6    VSNR+DBXFR 
          MX3    7*6
          BX6    X3*X1       ISOLATE DUMP FILE NAME 
          EQ     UII3        WRITE TO *NUMBERS* 
  
 UII1     MX3    6*6
          BX6    X3*X1
          SA6    VSNR+DBXSV  SAVE AS SET VSN
          SA6    VSNR+DBXCV  SAVE AS CURRENT VSN
          RJ     UFV         UPDATE FET VSN 
          NG     X2,UII2     IF NOT A TAPE FILE 
          SA6    VSNR+DBXCV  SAVE TRUE VSN
          SA1    FIBDEN      GET DENSITY
          MX3    3
          LX1    59-11
          BX6    X3*X1
          SA1    X5+TFLAGS   GET TAPE FLAGS 
          LX1    59-5 
          BX1    -X3*X1      REMOVE OLD DENSITY 
          BX6    X1+X6       MERGE IN NEW DENSITY 
          LX6    5-59 
          SA6    A1 
          LX6    36          SET TAPE FLAGS, FIRST-OF-SET FILE/RECORD 
          SA6    VSNR+DBXFR 
 UII2     WRITEW OPLDF,VSNR,UDBEL 
          SA1    VSNR+DBXCV 
          BX6    X1 
 UII3     WRITEO  NUMBERS    WRITE TO *NUMBERS* FILE
          EQ     UIIX        RETURN 
          SPACE 4,10
**        UPD - UPDATE DATABASE.
* 
*         ENTRY  (X5) = ATTACH MODE FOR *ADB*.
*                (COPTION) = DIRECTIVE. 
*                FILE *UPDATES* CONTAINS UPDATE ENTRIES 
*                TO ADD TO THE DATABASE.
*                FILE *NUMBERS* CONTAINS TAPE VSN-S.
* 
*         EXIT   UPDATE COMPLETE. 
* 
*         USES   X - ALL. 
*                A - 0, 1, 2, 3, 4, 5, 6. 
*                B - 7. 
* 
*         CALLS  ADB, COE, POT, RDU, WOR. 
* 
*         MACROS ABORT, CLEAR, MESSAGE, READ, READW, REWIND,
*                UNLOAD, WRITE, WRITER, WRITEW. 
* 
*         NOTE   UPDATES FILE MUST BE SORTED. 
  
  
 UPD      SUBR               ENTRY/EXIT 
          SX7    PTWR        SET WRITE MODE FOR DATABASE ATTACH 
          SA1    NLVIFLG     SET IF DATABASE JUST CREATED IN PDB
          ZR     X1,UPD.1    IF DATBASE NOT JUST CREATED
          MX6    0
          SA6    NLVIFLG     CLEAR FLAG 
          RJ     ADB         ATTACH THE DATABASE
          EQ     UPD.2       RESUME NORMAL PROCESSING 
  
 UPD.1    RJ     LVI         ATTACH DATABASE, LOCATE VSN INDEX
 UPD.2    REWIND NEW,R       PRESET NON WRITE *CIO* FUNCTION
          WRITE  NEW,*
          SX6    B0 
          SA6    NEW+6
          SA1    NEW+1       SET RANDOM BIT IN FET
          MX0    1
          LX0    47-59
          BX6    X0+X1
          SA6    A1 
          REWIND OPLDF,R
          WRITE  OPLDF,*     PRESET NON-WRITE *CIO* FUNCTION
          REWIND NUMBERS,R
          READ   NUMBERS,R
          SA1    NUMBERS+2   GET LENGTH OF FILE 
          SA2    A1+B1
          IX1    X1-X2
          BX6    X6-X6
          SA6    DIRBUF+X1   SET ZERO WORD AT END OF DATA IN BUFFER 
          NZ     X1,UPD0     IF TAPE NUMBER FILE NOT EMPTY
          SA2    USERDB      USER DATABASE FLAG 
          NZ     X2,UPD1     IF USER DATABASE 
          MESSAGE  UPDA,3    * TAPE NUMBER FILE EMPTY.* 
          EQ     UPD1        PROCESS UPDATES
  
 UPD0     SA2    COPTION
          SA3    =0LREMOVE
          BX2    X2-X3
          ZR     X2,UPD1     IF PROCESSING *REMOVE* OPTION
          SA2    DBE+DBXSV
          MX0    6*6
          BX2    X0*X2
          ZR     X2,UPD1     IF NO VSN INDEX FOUND
          BX5    X1          PRESERVE COUNT OF ENTRIES IN X5
 UPD0.1   READW  DB,DBE,DBEL  GET NEXT VSN INDEX ENTRY
          NZ     X1,UPD1     IF NO MORE VSN INDEX 
          SA1    DBE+DBXCV
          SA2    DIRBUF-1 
 UPD0.2   SA2    A2+B1       GET NEXT *NUMBERS* ITEM
          ZR     X2,UPD0.1   IF END OF *NUMBERS* LIST 
          BX2    X1-X2
          NZ     X2,UPD0.2   IF NO MATCH TO CURRENT VSN ENTRY 
          SA1    DBE+DBXSV
          BX6    X1+X5       MERGE LIST SIZE AND SET VSN
          SA6    A2          REPLACE *NUMBERS* ITEM 
          SX5    X5-1 
          NZ     X5,UPD0.1   IF UNMATCHED *NUMBERS* ITEMS LEFT
 UPD1     REWIND  DB,R
          REWIND UPDATES,R
          READ   UPDATES
          RJ     RDU         READ *UPDATES* FILE
 UPD2     READ   DB,R 
          SA3    DB 
          MX0    -7 
          LX0    2
          BX3    -X0*X3      GET *CIO* RESPONSE 
          SX3    X3-30B      CHECK FOR EOI/EOF
          ZR     X3,UPD13    IF EOF/EOI ENCOUNTERED IMMEDIATELY 
          SA3    DB+3 
          SA4    A3-B1       CHECK FOR EMPTY RECORD 
          IX4    X4-X3
          ZR     X4,UPD2     IF EMPTY RECORD
          SA3    X3 
          SA4    OPLDH
          BX4    X3-X4
          ZR     X4,UPD13    IF OPLD RECORD FOUND 
  
*         SAVE USER NAME. 
  
          MX0    42 
          BX6    X0*X3
          SX3    2
          BX6    X3+X6
          SA6    INDXNAM
 UPD3     READW  DB,DBE,DBEL
  
*         CHECK FOR EOR/EOF/EOI.
  
          ZR     X1,UPD6     IF SUCCESSFUL READ WITH NO SPECIAL STATUS
          NG     X1,UPD14    IF EOF OR EOI
          SX2    X1-DBE      COMPUTE LENGTH OF READ 
          ZR     X2,UPD4     IF EOR ENCOUNTERED 
          SB2    X1 
          EQ     B2,B6,UPD14 IF INCOMPLETE READ -- EOI
          EQ     ABT1        ABORT *RECLAIM*
  
 UPD4     SA1    DBE         DATABASE ENTRY 
          SA2    UPE         UPDATE ENTRY 
          MX0    42 
          BX3    X1-X2       COMPARE USERS
          BX3    X0*X3       REMOVE POSSIBLE JUNK BITS 17-0 
          NZ     X3,UPD5     UPDATE RECORDS NOT FOR USER NAME 
          WRITEW NEW,UPE,DBEL 
          RJ     RDU
          ZR     X1,UPD4     IF NOT END OF UPDATES
          SX6    B0 
          SA6    UPE
 UPD5     SA1    NEW+2       EXAMINE IN POINTER 
          SA2    NEW+3       OUT POINTER
          IX1    X1-X2
          NZ     X1,UPD5.1   IF DATA IN BUFFER TO BE WRITTEN
          SA4    NEW
          MX0    -7          WIDTH OF *CIO* FUNCTION CODE 
          LX0    2           SKIP BINARY/CODED, COMPLETE BITS 
          BX4    -X0*X4      EXTRACT *CIO* FUNCTION CODE
          SX4    X4-14B      CHECK FOR *WRITE* CODE 
          NZ     X4,UPD2     IF NO DATA WRITTEN RECENTLY
 UPD5.1   WRITER NEW,R
          WRITE  NEW,*       RESET WRITE FUNCTION 
          RJ     COE
          JP     UPD2        READ NEXT RECORD 
  
 UPD6     MX0    36 
          SA1    DBE+DBUNM   CHECK FOR VSN INDEX ENTRY
          SA2    VSNR 
          BX2    X1-X2
          NZ     X2,UPD6.0   IF NOT A VSN INDEX ENTRY 
          SA1    DBE+DBXSV
          EQ     UPD6.1      SEARCH *NUMBERS* LIST
  
 UPD6.0   SA1    DBE+DBTNO   TAPE VSN/LAST MOD
          SA3    DBE+DBFLG   WORD WITH TAPE FLAGS 
          LX3    59-47
          PL     X3,UPD6.1   IF PERMANENT FILE FLAG NOT SET 
          MX0    42          MASK FOR PERMANENT FILE NAME 
 UPD6.1   BX1    X0*X1       EXTRACT VSN
          MX0    42          MUST MASK 7 CHAR FOR *NUMBERS* LIST
          SA3    DIRBUF-1 
 UPD7     SA3    A3+B1
          ZR     X3,UPD8     IF END OF TABLE - WRITE OLD ENTRY ON *NEW* 
          BX4    X0*X3       TAPE NUMBER
          BX4    X4-X1
          NZ     X4,UPD7     IF NO MATCH
          ZR     X2,UPD3     IF MATCH IS TO VSN INDEX RECORD
          SA1    COPTION
          SA2    =0LREMOVE
          BX3    X1-X2
          NZ     X3,UPD3     IF NOT *REMOVE*
  
*         DELETE CURRENT RECORD -- INCREMENT FILE COUNT.
  
          SA1    NFP
          SX6    X1+1 
          SA6    A1 
          SA0    DBE
          RJ     POT         PROCESS OUTPUT 
          EQ     UPD3        CONTINUE 
  
 UPD8     SA1    UPE
          ZR     X1,UPD9     NO UPDATE ENTRIES LEFT 
  
*         CHECK USER NAMES. 
  
          SA2    DBE
          MX0    42 
          BX1    X0*X1
          LX1    42 
          BX2    X0*X2
          LX2    42 
          IX3    X2-X1
          NG     X3,UPD9     IF DATABASE .LT. UPDATE - WRITE DATABASE 
          NZ     X3,UPD10    IF DATABASE .GT. UPDATE - WRITE UPDATE 
  
*         CHECK PERMANENT FILE NAME OR VSN OF SET.
  
          SA1    A1+B1
          BX1    X0*X1
          LX1    42 
          SA2    A2+B1
          BX2    X0*X2
          LX2    42 
          IX3    X2-X1
          NG     X3,UPD9     IF DATABASE .LT. UPDATE - WRITE DATABASE 
          NZ     X3,UPD12    IF DATABASE .GT. UPDATE - WRITE UPDATE 
  
*         CHECK IF VSN INDEX UPDATE RECORD
  
          SA3    UPE+DBUNM
          SA4    VSNR        VSN INDEX ID 
          BX3    X3-X4
          NZ     X3,UPD8.5   IF NOT VSN INDEX DATA
  
*         CHECK FILE AND RECORD POSITIONS.
  
          SA1    UPE+DBXFR
          LX1    -18
          BX1    -X0*X1 
          SA2    DBE+DBXFR
          LX2    -18
          BX2    -X0*X2 
          IX3    X2-X1
          NG     X3,UPD9     IF DATABASE .LT. UPDATE - WRITE DATABASE 
          EQ     UPD3        DATABASE .GE. UPDATE - BYPASS DATABASE 
  
*         CHECK DUMP DATE.
  
 UPD8.5   SA1    A1 
          BX1    -X0*X1 
          SX1    X1-70000 
          PL     X1,UPD8.6   IF UPDATE YEAR .LT. 2000 
          SX1    X1+100000
 UPD8.6   SA2    A2 
          BX2    -X0*X2 
          SX2    X2-70000 
          PL     X2,UPD8.7   IF DATABASE YEAR .LT. 2000 
          SX2    X2+100000
 UPD8.7   IX3    X2-X1
          NG     X3,UPD12    IF DATABASE .LT. UPDATE - WRITE UPDATE 
          NZ     X3,UPD9     IF DATABASE .GT. UPDATE - WRITE DATABASE 
  
*         CHECK TAPE NUMBER.
  
          SA1    UPE+DBTNO
          SA2    DBE+DBTNO
          BX1    X0*X1
          BX2    X0*X2
          BX1    X1-X2
          NZ     X1,UPD12    IF TAPE NUMBERS NOT EQUAL WRITE UPDATE 
  
*         CHECK FLAG WORD (DBE+3).
  
          SA1    A1+B1
          SA2    A2+B1
          BX1    X1-X2
          NZ     X1,UPD12    IF WORD 4 NOT THE SAME - WRITE UPDATE
          SA1    EIV
          NZ     X1,UPD12    IF DUMPING TO END OF TAPE
  
*         A DUPLICATE ENTRY - DISREGARD UPDATE ENTRY. 
  
          RJ     RDU
          ZR     X1,UPD9     IF NOT END OF UPDATE ENTRIES 
          SX6    B0 
          SA6    UPE
 UPD9     WRITEW NEW,DBE,DBEL 
          EQ     UPD3        CONTINUE 
  
 UPD10    WRITEW NEW,UPE,DBEL 
          SA5    UPE
          BX5    X0*X5
          RJ     RDU
          ZR     X1,UPD11    IF NOT END OF UPDATE ENTRIES 
          SX6    B0 
          SA6    UPE
 UPD11    SA1    UPE
          BX1    X0*X1
          BX3    X1-X5
          ZR     X3,UPD10    UPDATE ENTRIES FOR SAME USER NAME
          BX6    X0*X5       MASK OUT USER NAME OF RECORD 
          SX1    2
          BX6    X1+X6
          SA6    INDXNAM     SAVE USER NAME 
          WRITER NEW,R
          WRITE  NEW,*       RESET WRITE FUNCTION 
          RJ     COE         CREATE OPLD ENTRY
          MX0    42 
          SA1    DBE
          BX6    X0*X1
          SX1    2
          BX6    X6+X1
          SA6    INDXNAM     SAVE THE NEW RECORD NAME 
          EQ     UPD8        PROCESS NEXT UPDATE ENTRY
  
 UPD12    WRITEW NEW,UPE,DBEL 
          RJ     RDU
          ZR     X1,UPD8     IF NOT END OF UPDATE ENTRIES 
          SX6    B0 
          SA6    UPE
          EQ     UPD8        PROCESS NEXT UPDATE ENTRY
  
 UPD13    SA1    UPE
          BX6    X1 
          SA6    DBE
          MX0    42 
          BX6    X0*X6
          SX1    2
          BX6    X1+X6
          SA6    INDXNAM
 UPD14    SA1    UPE
          ZR     X1,UPD17    IF NO UPDATE RECORDS LEFT
 UPD15    SA1    DBE
          SA2    UPE
          BX1    X2-X1
          MX0    42 
          BX1    X0*X1
          ZR     X1,UPD16    IF SAME USER NAME
          WRITER NEW,R
          WRITE  NEW,*       RESET WRITE FUNCTION 
          RJ     COE
          SA1    UPE
          MX0    42 
          BX6    X0*X1
          SA6    DBE
          SX1    2
          BX6    X1+X6
          SA6    INDXNAM
 UPD16    WRITEW NEW,UPE,DBEL 
          RJ     RDU
          ZR     X1,UPD15    IF NOT END OF UPDATES
          WRITER NEW,R
          WRITE  NEW,*       RESET WRITE FUNCTION 
          RJ     COE
 UPD17    RJ     WOR
          REWIND NEW,R
          READ   NEW,R
          REWIND DB,R 
          WRITE  DB,*        PRESET WRITE FUNCTION
 UPD18    READW  NEW,WSA,WSAL 
          SX0    X1 
          SB7    B6-WSA 
          WRITEW DB,WSA,B7
          ZR     X0,UPD18    IF NO EOR/EOF/EOI
          NG     X0,UPD19    IF NOT AN EOR
          READ   NEW,R
          WRITER DB,R 
          WRITE  DB,*        RESET WRITE FUNCTION 
          EQ     UPD18       LOOP 
  
 UPD19    UNLOAD DB,R 
          UNLOAD NEW,R
          SA1    NEW+1       REMOVE RANDOM BIT FROM *NEW* 
          MX0    13 
          BX6    -X0*X1 
          SA6    A1 
  
*         UNLOAD NUMBERS/UPDATES UNLESS *UPDATE* OPTION CALLED. 
  
          SA3    COPTION     LAST OPTION ENTERED BY USER
          SA2    =0LUPDATE
          BX2    X3-X2
          ZR     X2,UPDX     IF UPDATE OPTION THEN RETURN 
          UNLOAD UPDATES,R
          UNLOAD NUMBERS,R
          CLEAR  NUMBERS     CLEAR FET POINTERS --- NUMBERS 
          EQ     UPDX        RETURN 
  
  
 UPDA     DATA   C* TAPE NUMBER FILE EMPTY.*
 UPDB     DATA   C* DATABASE CORRUPTED.*
 WOR      SPACE  4,15 
**        WOR - WRITE OPLD RECORD.
* 
*         ENTRY  OPLD WRITTEN ON *OPLDF*. 
* 
*         EXIT   OPLD RECORD WRITTEN. 
* 
*         USES   X - 0, 1, 6. 
*                A - 1, 6.
*                B - 7. 
* 
*         MACROS READ, READW, REWIND, UNLOAD, WRITER, WRITEW. 
  
  
 WOR      SUBR               ENTRY/EXIT 
          WRITER OPLDF,R
          REWIND OPLDF,R
          WRITEW NEW,OPLDH,1
          SA1    DB+CFPN     GET FILE NAME
          MX0    42 
          BX6    X0*X1
          SA6    INDXNAM
          SA6    CATBUF 
          SA1    DATE 
          LX1    6
          BX6    X1 
          SA6    A6+B1
  
*         SET UP THE 7000 TABLE HEADER. 
  
          SA1    INDXLEN
          SX1    X1+2 
          MX0    3
          BX6    X1+X0
          SA6    CATBUF+16B 
          WRITEW NEW,CATBUF,17B 
  
*         READ THE OPLD TABLE AND WRITE IT. 
  
          READ   OPLDF
 WOR1     READW  OPLDF,WSA,WSAL 
          BX0    X1 
          SB7    B6-WSA 
          WRITEW NEW,WSA,B7 
          ZR     X0,WOR1     NOT END OF OPLD ENTRIES
  
*         WRITE THE OPLD ENTRY WORD.
  
          SA1    INDXNAM
          SX6    10B
          BX6    X1+X6
          SA6    A1          REPLACE OPLD ENTRY 
          WRITEW NEW,INDXNAM,2
          WRITER NEW,R
          UNLOAD OPLDF
          EQ     WORX        RETURN 
 WRB      SPACE  4,25 
**        WRB - WRITE PARTIAL TAPE BLOCK. 
* 
*         *WRB* COPIES A SPECIFIED NUMBER OF WORDS FROM THE PERMANENT 
*         FILE BEING DUMPED TO THE CURRENT TAPE BLOCK BEING BUILT.
*         OPTIONALLY IT WILL ALSO WRITE THE CURRENT TAPE BLOCK TO 
*         THE TAPE WHEN A SHORT PRU HAS BEEN READ.
* 
*         ENTRY  (X1) = WORD COUNT OF DATA TO MOVE. 
*                (X2) = SIZE OF FREE SPACE IN TAPE BLOCK. 
*                (X3) = SHORT PRU FLAG--
*                     .EQ. 0 IF FULL PRU. 
*                     .LT. 0 IF SHORT PRU.
* 
*         EXIT   DATA COPIED INTO FREE SPACE IN TAPE BLOCK. 
*                IF (X3) WAS NEGATIVE, THE TAPE BLOCK IS WRITTEN. 
* 
*         USES   X - 0, 1, 4, 6, 7. 
*                A - 1, 4, 6, 7.
*                B - 3. 
* 
*         MACROS READO, READW, WRITEO, WRITEW.
  
  
 WRB      SUBR               ENTRY/EXIT 
          SA4    BLOKHED     CURRENT TAPE BLOCK CONTROL WORD
          MX0    -9          WIDTH OF BLOCK SIZE
          BX6    -X0*X4      ISOLATE CURRENT BLOCK SIZE 
          IX6    X6+X1       COMPUTE NEW BLOCK SIZE 
          BX7    X0*X4       EXTRACT REST OF CONTROL WORD 
          BX7    X7+X6       INSERT NEW SIZE
          SA7    A4 
          SX6    X3          REMEMBER SHORT PRU FLAG
          SA6    WRBA 
          SB3    X1          REMEMBER WORD COUNT
          SX1    WSA+NDMPWD  LWA+1 OF TAPE BLOCK BUFFER 
          IX4    X1-X2       COMPUTE FWA OF FREE SPACE IN TAPE BLOCK
          READW  NEW,X4,B3   MOVE (WC) WORDS INTO FREE SPACE
          SA4    NOPRU       CHECK TO SEE IF NOT A FULL PRU 
          NZ     X4,WRBX     IF NOT FULL PRU
          READO  NEW         GET PRU END CONTROL WORD 
          MX0    12          WIDTH OF LEVEL NUMBER FIELD
          SA4    WRBA 
          ZR     X4,WRBX     IF WAS A FULL PRU THEN RETURN
          BX6    X0*X6       ISOLATE LEVEL NUMBER OF PRU
          ZR     X6,WRB1     IF EOR LEVEL 
          SX4    2           EOF TAPE BLOCK FLAG
          EQ     WRB2        JOIN WITH EOR CASE 
  
 WRB1     SX4    1           EOR TAPE BLOCK 
 WRB2     SA1    BLOKHED
          LX4    9           POSITION DATA BLOCK TYPE 
          BX6    X1+X4       INSERT DATA BLOCK TYPE 
          WRITEO TF          WRITE TAPE BLOCK CONTROL WORD
          SA4    BLOKHED
          MX0    -9 
          BX4    -X0*X4      ISOLATE BLOCK SIZE 
          SX6    DCW         RESET TAPE BLOCK CONTROL WORD
          SA6    A4 
          WRITEW TF,WSA,X4   WRITE TAPE BLOCK 
          EQ     WRBX        RETURN 
  
  
 WRBA     BSS    1           SHORT PRU FLAG PARAMETER 
 WRS      SPACE  4,15 
**        WRS - WRITE SECTOR BOUNDED BY CONTROL WORDS.
* 
*         *WRS* WRITES A PRU TO THE FILE BEING LOADED, BOUNDED BY 
*         CONTROL WORDS.
* 
*         ENTRY  (X5) = AMOUNT OF DATA TO WRITE FROM *SECTOR*.
* 
*         EXIT   SECTOR WRITTEN.
* 
*         USES   X - 2, 3, 4, 6.
*                A - 3. 
* 
*         MACROS WRITEO, WRITEW.
  
  
 WRS      SUBR               ENTRY/EXIT 
          SX2    5           NUMBER OF BYTES IN A WORD
          IX4    X2*X5       COMPUTE BYTE COUNT OF PRU
          SA3    PRUHEAD     BLANK PRU HEADER 
          BX6    X3+X4       BUILD PRU HEADER WITH BYTE COUNT 
          WRITEO SF 
          ZR     X5,WRS1     IF NO DATA IN PRU
          WRITEW SF,SECTOR,X5  WRITE DATA 
 WRS1     WRITEW SF,EORWORD,1  WRITE EOR LEVEL WORD 
          EQ     WRSX        RETURN 
          TITLE  SECONDARY SUBROUTINES. 
 CIT      SPACE  4,15 
**        CIT - COPY ONE ITEM FROM ONE FILE TO ANOTHER. 
* 
*         ENTRY  (X2) = ADDRESS OF FET TO READ FROM.
*                (X5) = ADDRESS OF FET TO WRITE TO. 
* 
*         EXIT   ITEM COPIED. 
*                *EORUN* SET IF ITEM COPIED WAS END OF A RUN. 
* 
*         USES   X - 1, 2, 3, 5, 6, 7.
*                A - 1, 2, 3, 5, 6, 7.
* 
*         MACROS  GETITEM, PUTITEM. 
  
 CIT2     NG     X1,CIT1     IF NEXT ITEM .LT. COPIED ITEM
  
 CIT      SUBR               ENTRY/EXIT 
          SX6    X2          SAVE X FET ADDRESS 
          SX7    X5          SAVE Y FET ADDRESS 
          SA6    CITA 
          SA7    CITB 
          GETITEM  X2,CITC
          SA5    CITB 
          PUTITEM  X5,CITC
          SA2    CITA 
          SA1    X2+EOF      CHECK STATUS OF THIS FILE
          NZ     X1,CIT1     IF EOF(X)
          SA1    X2+PTR 
          SA3    CITC 
          SX6    B0+         CLEAR END OF RUN FLAG
          SA6    EORUN
          BX6    X1-X3
          IX1    X1-X3
          PL     X6,CIT2     IF SAME SIGN (NO OVERFLOW POSSIBLE)
          PL     X3,CITX     IF NEXT ITEM .GT. COPIED ITEM
 CIT1     SX6    B1+         SET END OF RUN FLAG
          SA6    EORUN
          EQ     CITX        RETURN 
  
  
 CITA     BSS    1           INPUT FET ADDRESS
 CITB     BSS    1           OUTPUT FET ADDRESS 
 CITC     BSS    ITEMSIZ     BLOCK FOR HOLDING COPIED ENTRY 
 CRN      SPACE  4,15 
**        CRN - COPY RUN OF ENTRIES BETWEEN FILES.
* 
*         ENTRY  (X2) = FET READ FROM.
*                (X5) = FET WRITTEN TO. 
* 
*         EXIT   RUN COPIED FROM X2 FILE TO X5 FILE.
* 
*         USES   X - 1, 2, 5, 6, 7. 
*                A - 1, 2, 5, 6, 7. 
* 
*         MACROS  COPITEM.
  
  
 CRN      SUBR               ENTRY/EXIT 
          SX6    X2          SAVE INPUT FET ADDRESS 
          SX7    X5          SAVE OUTPUT FET ADDRESS
          SA6    CRNA 
          SA7    CRNB 
  
*         REPEAT COPYING ITEMS UNTIL END-OF-RUN.
  
 CRN1     SA2    CRNA 
          SA5    CRNB 
          COPITEM  X2,X5
          SA1    EORUN
          ZR     X1,CRN1     IF NOT END OF RUN BEING COPIED 
          EQ     CRNX        RETURN 
  
  
 CRNA     BSS    1           INPUT FET ADDRESS
 CRNB     BSS    1           OUTPUT FET ADDRESS 
 DTR      SPACE  4,15 
**        DTR - DISTRIBUTE RUNS FROM C ONTO A AND B.
* 
*         ENTRY  ALL ENTRIES ARE ON *CF*. 
*                ALL THREE FILES ARE READY TO GO. 
* 
*         EXIT   RUNS ARE DISTRIBUTED EVENLY BETWEEN *AF* AND *BF*. 
* 
*         USES   X - 1, 3.
*                A - 1, 3.
* 
*         MACROS  COPYRUN.
  
  
 DTR      SUBR               ENTRY/EXIT 
  
*         REPEAT COPY RUNS UNTIL EOF(C).
  
 DTR1     COPYRUN  CF,AF
          SA1    CF+EOF 
          NZ     X1,DTR2     IF EOF(C)
          COPYRUN  CF,BF
          SA1    CF+EOF 
 DTR2     ZR     X1,DTR1     IF NOT EOF(C)
          EQ     DTRX        RETURN 
 GIT      SPACE  4,20 
**        GIT - GET AN ITEM FROM A FILE.
* 
*         *GIT* PERFORMS A PASCAL-LIKE READ FROM A FILE INTO
*         A SPECIFIED LOCATION.  THIS INVOLVES MOVING THE 
*         CURRENT FILE POINTER VALUE INTO THE LOCATION AND
*         READING THE NEXT ENTRY FROM THE FILE INTO THE POINTER.
* 
*         ENTRY  (X0) = FET ADDRESS.
*                (X5) = ITEM DESTINATION ADDRESS. 
*                FILE POINTER HAS DESIRED ENTRY, OR BAD VALUE 
*                IF THE FILE IS AT EOF. 
* 
*         EXIT   VALUE MOVED. 
*                EOF FLAG SET IF NEXT READ FAILS. 
* 
*         USES   X - 6. 
*                A - 6. 
* 
*         MACROS  MOVE, READW.
  
  
 GIT      SUBR               ENTRY/EXIT 
          MOVE   ITEMSIZ,X0+PTR,X5
          READW  X0,X0+PTR,ITEMSIZ
          SX6    X1+         SET EOF FLAG APPROPRIATELY 
          SA6    X2+EOF 
          EQ     GITX        RETURN 
 MRG      SPACE  4,20 
**        MRG - MERGE PHASE OF MERGESORT. 
* 
*         *MRG* IS THE LOGICAL COMPLEMENT OF ROUTINE *DTR*.  *MRG*
*         MERGES ALL THE RUNS DISTRIBUTED ONTO *AF* AND *BF* AND
*         WRITES THEM ON *CF*.
* 
*         ENTRY  *AF* AND *BF* HAVE ITEM RUNS.
* 
*         EXIT   *AF* AND *BF* ARE EMPTY. 
*                *CF* CONTAINS ALL RUNS.
*                NUMBER OF RUNS IS APPROXIMATELY CUT IN HALF. 
* 
*         USES   X - 1, 2, 3, 6.
*                A - 1, 2, 3, 6.
* 
*         CALLS  MRN. 
* 
*         MACROS COPYRUN. 
  
  
 MRG      SUBR               ENTRY/EXIT 
  
*         WHILE NOT EOF(A) AND EOF(B) DO MERGERUN.
  
 MRG1     SA2    AF+EOF 
          SA3    BF+EOF 
          CX2    X2 
          CX3    X3 
          IX2    X2+X3       EOF(A) OR EOF(B) 
          NZ     X2,MRG2     IF EITHER AT EOF THEN STOP 
          RJ     MRN         MERGE ONE RUN ONTO C 
          SA1    NRUNS
          SX6    1
          IX6    X1+X6       INCREMENT COUNT OF RUNS
          SA6    A1 
          EQ     MRG1        LOOP FOR NEXT RUN TO MERGE 
  
*         COPY REST OF A ONTO C.
  
 MRG2     SA2    AF+EOF 
          NZ     X2,MRG3     IF EOF(A) THEN STOP
          COPYRUN  AF,CF
          SA1    NRUNS
          SX6    1
          IX6    X1+X6       INCREMENT COUNT OF RUNS
          SA6    A1 
          EQ     MRG2        LOOP FOR NEXT RUN TO COPY
  
*         COPY REST OF B ONTO C.
  
 MRG3     SA3    BF+EOF 
          NZ     X3,MRGX     IF EOF(B) THEN RETURN
          COPYRUN  BF,CF
          SA1    NRUNS       INCREMENT COUNT OF RUNS
          SX6    1
          IX6    X1+X6
          SA6    A1 
          EQ     MRG3        LOOP FOR NEXT RUN TO COPY
 MRN      SPACE  4,15 
**        MRN - MERGE ONE RUN FROM A AND B ONTO C.
* 
*         ENTRY  AT LEAST ONE RUN IS ON *AF* AND ON *BF*. 
* 
*         EXIT   ONE FEWER RUN ON *AF* AND *BF*.
*                ONE MORE RUN ON *CF*.
* 
*         USES   X - 1, 3, 4. 
*                A - 1, 3, 4. 
* 
*         MACROS  COPITEM, COPYRUN. 
  
  
 MRN      SUBR               ENTRY/EXIT 
  
*         REPEAT COPYING ITEMS UNTIL END-OF-RUN.
  
 MRN1     SA3    AF+PTR 
          SA4    BF+PTR 
          BX1    X3-X4
          IX3    X4-X3
          PL     X1,MRN3     IF SAME SIGN (NO OVERFLOW POSSIBLE)
          NG     X4,MRN4     IF A.KEY  .LT.  B.KEY
  
*         A.KEY .GT. B.KEY. 
  
 MRN2     COPITEM  BF,CF
          SA1    EORUN
          ZR     X1,MRN1     IF NOT END OF RUN ON B 
          COPYRUN  AF,CF
          EQ     MRNX        RETURN 
  
 MRN3     NG     X3,MRN2     IF A.KEY  .GT.  B.KEY
  
*         A.KEY .LE. B.KEY. 
  
 MRN4     COPITEM  AF,CF
          SA1    EORUN
          ZR     X1,MRN1     IF NOT END OF RUN ON A 
          COPYRUN  BF,CF
          EQ     MRNX        RETURN 
 PIT      SPACE  4,10 
**        PIT - WRITE AN ITEM TO A FILE.
* 
*         ENTRY  (X2) = FET ADDRESS.
*                (X5) = ADDRESS OF ITEM TO WRITE. 
* 
*         MACROS  WRITEW. 
  
  
 PIT      SUBR               ENTRY/EXIT 
          WRITEW  X2,X5,ITEMSIZ 
          EQ     PITX        RETURN 
 RST      SPACE  4,15 
**        RST - REWIND FILE AND PREPARE FOR READING.
* 
*         *RST* REWINDS THE SPECIFIED FILE AND READS THE FIRST
*         ENTRY INTO THE FILE-S POINTER.
* 
*         ENTRY  (X2) = FET ADDRESS.
* 
*         EXIT   FILE REWOUND AND PARTIALLY READ
*                EOF FLAG SET IF FILE IS EMPTY. 
* 
*         USES   X - 6. 
*                A - 6. 
* 
*         MACROS READ, READW, REWIND. 
  
  
 RST      SUBR               ENTRY/EXIT 
          REWIND X2,R 
          READ   X2,R 
          READW  X2,X2+PTR,ITEMSIZ
          SX6    X1+         NON-ZERO IF READW HIT EOR/EOF/EOI
          SA6    X2+EOF 
          EQ     RSTX        RETURN 
 RWR      SPACE  4,10 
**        RWR - REWIND FILE AND PREPARE FOR WRITING.
* 
*         ENTRY  (X2) = FET ADDRESS.
* 
*         EXIT   FILE REWOUND, EOF FLAG SET ON. 
* 
*         USES   X - 6. 
*                A - 6. 
* 
*         MACROS  REWIND, WRITE.
  
  
 RWR      SUBR               ENTRY/EXIT 
          REWIND  X2,R
          WRITE  X2,* 
          SX6    77B         FLAG FILE ALWAYS EOF 
          SA6    X2+EOF 
          EQ     RWRX        RETURN 
          TITLE  COMMON DECKS.
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMCARM 
*CALL     COMCCDD 
*CALL     COMCCCE 
*CALL     COMCCIO 
*CALL     COMCCOD 
*CALL     COMCCPM 
*CALL     COMCDXB 
*CALL     COMCLFM 
*CALL     COMCMVE 
*CALL     COMCPFM 
*CALL     COMCPOP 
*CALL     COMCRDC 
*CALL     COMCRDO 
*CALL     COMCRDS 
*CALL     COMCRDW 
*CALL     COMCSNM 
*CALL     COMCSYS 
*CALL     COMCUSB 
*CALL     COMCWTC 
*CALL     COMCWTH 
*CALL     COMCWTO 
*CALL     COMCWTS 
*CALL     COMCWTW 
*CALL     COMCZTB 
          TITLE  FETS AND BUFFERS.
 FETS     SPACE  4,10 
*         FETS. 
  
  
 I        BSS    0           INPUT
 INPUT    FILEB  IBUF,IBUFL,(FET=8) 
  
 O        BSS    0           OUTPUT 
 OUTPUT   FILEB  OBUF,OBUFL,(FET=8) 
  
 DB       BSS    0           DATABASE 
 ZZZZZG0  FILEB  OLDBUF,OLDBUFL,(FET=15D) 
  
 NUMBERS  BSS    0           FILE TO HOLD TAPE NUMBERS
 ZZZZZG4  FILEB  DIRBUF,DIRBUFL,(FET=11D) 
  
 CF       BSS    0           MERGE SORT FILE
 ZZZZZG5  FILEB  CFBUF,CFBUFL,FET=MFETSIZ 
 CFPTR    BSSZ   6
 CFEOF    BSSZ   1
  
 AF       BSS    0           MERGE SORT SCRATCH FILE ONE
 ZZZZZG8  FILEB  AFBUF,AFBUFL,FET=MFETSIZ 
 AFPTR    BSSZ   6
 AFEOF    BSSZ   1
  
 BF       BSS    0           MERGE SORT SCRATCH FILE TWO
 ZZZZZG9  FILEB  BFBUF,BFBUFL,FET=MFETSIZ 
 BFPTR    BSSZ   6
 BFEOF    BSSZ   1
  
 NEW      BSS    0           PERMANENT FILE BEING PROCESSED 
 ZZZZZG1  FILEB  NEWBUF,NEWBUFL,(FET=16D),EPR 
  
 TF       BSS    0           TAPE FILE
 TAPE     FILEB  TFBUF,TFBUFL,(FET=TFETSIZ) 
          DATA   0           WRITTEN FLAG FOR PRIMARY TAPE
          DATA   0           CURRENT REEL VSN FOR PRIMARY TAPE
          DATA   0           CHARACTERISTICS - DENSITY, MEDIUM, ETC 
          DATA   1           INITIAL REQUEST FLAG 
          DATA   0           RING REQUIRED IF NON-ZERO
          DATA   0           MASS STORAGE FLAG
          DATA   0           DUMP VSN VARIABLE
          DATA   0           DUMP NAME VARIABLE 
          DATA   0           DUMP LFN VARIABLE
 CFC      DATA   0           DUMP CURRENT FILE POSITION 
 CRC      DATA   0           DUMP CURRENT RECORD POSITION 
          DATA   0           DUMP CURRENT FILE NAME (RMS) 
  
 MF       BSS    0           NEW TAPE FOR *COMPACT* 
 NTAPE    FILEB  MFBUF,MFBUFL,(FET=TFETSIZ) 
          DATA   0           WRITTEN FLAG FOR COMPACTED TAPE
          DATA   0           CURRENT REEL VSN FOR COMPACTED TAPE
          DATA   0           CHARACTERISTICS - DENSITY, MEDIUM, ETC 
          DATA   1           INITIAL REQUEST FLAG 
          DATA   0           RING REQUIRED IF NON-ZERO
          DATA   0           MASS STORAGE FLAG
          DATA   0           COMPACT VSN VARIABLE 
          DATA   0           COMPACT NAME VARIABLE
          DATA   0           COMPACT LFN VARIABLE 
 FILENUM  DATA   0           COMPACT CURRENT FILE POSITION
 RECNUM   DATA   0           COMPACT CURRENT RECORD POSITION
          DATA   0           COMPACT CURRENT FILE NAME (RMS)
  
 SF       BSS    0           SCRATCH FILE FOR COPY
 ZZZZZG2  FILEB  SFBUF,SFBUFL,(FET=16D) 
  
 OPLDF    BSS    0           OPLD TEMPORARY STORAGE FILE
 ZZZZZG3  FILEB  RLDBUF,RLDBUFL 
  
 UPDATES  BSS    0           UPDATES FILE 
 ZZZZZG6  FILEB  TNBUF,TNBUFL 
  
 CAT      BSS    0           CATLIST HOLDING FILE 
 ZZZZZG7  FILEB  CLSBUF,CLSBUFL,(FET=10D) 
          TITLE  PRS - PRESET ROUTINES. 
          USE    PRESET 
 PRS      SPACE  4,20 
**        PRS - PRESET PROGRAM. 
* 
*         *PRS* CRACKS THE COMMAND LINE, CHECKS SYSTEM ORIGIN 
*         PRIVILEGES AND ACCORDINGLY SETS UP THE APPROPRIATE HEADINGS 
*         FOR OUTPUT.  IN ADDITION, IT CHECKS I/O ASSIGNMENT. 
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
* 
*         USES   X - ALL. 
*                A - ALL. 
*                B - 2, 3, 6, 7.
* 
*         CALLS  ARM, DXB, POP, RSP, STF, USB, ZAP. 
* 
*         MACROS ABORT, CLOCK, CSET, DATE, EREXIT, GETCN, GETJO,
*                GETPFP, JDATE, MESSAGE, MEMORY, PDATE, READ, SETLOF, 
*                SYSTEM, WRITE, WRITEC. 
  
  
 RECLAIM  SB1    1
          MEMORY CM,MEMORY,R,RFL=  SET/GET FL (FOR BACK LEVEL SUPPORT)
          REPRIEVE  RPVBLK,SETUP,233B  SET REPRIEVE MASKS 
  
*         CRACK COMMAND LINE. 
  
          SB2    CCDR        ADDRESS OF CONTROL CARD IMAGE
          RJ     USB         UNPACK CONTROL CARD TO STRING BUFFER 
          SB6    USBB        SET ADDRESS OF STRING BUFFER 
          RJ     POP         PICK OFF *RECLAIM* VERB
          NG     B6,PRS15    IF *POP* DETECTED AN ERROR 
          ZR     B6,PRS1     IF *POP* FOUND A TERMINATOR
          SB3    CCART       SET CONTROL CARD ARGUMENT TABLE
          RJ     ARM         PROCESS ARGUMENTS
          NZ     X1,PRS15    IF *ARM* DETECTED AN ERROR 
 PRS1     SX2    23B         SET EOR STATUS IF *I=* OR *L=* 
          SA1    I           INPUT FET
          MX0    6*7
          BX6    X0*X1
          BX6    X2+X6       ADD BINARY AND COMPLETE BITS 
          SA6    A1          REPLACE IT 
          SA1    O           OUTPUT FET 
          BX6    X0*X1
          ZR     X6,PRS2     IF *L=0* 
          BX6    X2+X6       MERGE BINARY AND COMPLETE BITS 
          SA6    A1          REPLACE IT 
 PRS2     SA0    I           SET FET ADDRESS FOR R4 *ZAP* 
          SX2    I           SET FET ADDRESS FOR R5 *ZAP* 
          SX0    USBB        SET BUFFER ADDR FOR R4 *ZAP* 
          SA1    CCIN        COMMAND LINE INPUT FLAG SET BY *ARM* 
          ZR     X1,PRS3     IF *Z* ARGUMENT NOT GIVEN
          RJ     ZAP         *Z* ARGUMENT PROCESSOR 
 PRS3     DATE   DATE 
          CLOCK  TIME 
          SA4    CCART       SET ARGUMENT TABLE ADDRESS 
          SB6    TKPR        KEYWORD TABLE ADDRESS
          SA5    CCDR        COMMAND LINE IMAGE 
          SB2    B0+         NO SPECIAL SKIP
          RJ     RSP         REMOVE PASSWORD FROM COMMAND LINE
          MESSAGE  CCDR,0    ISSUE COMMAND LINE TO DAYFILE
          PDATE  CATSKL      GET PACKED DATE AND TIME 
          MX0    -36
          SA2    CATSKL 
          BX2    -X0*X2 
          SB7    FCUD 
 PRS3.1   SA1    CATSKL+B7
          BX1    X0*X1
          BX6    X1+X2
          SA6    A1          STORE PACKED DATE/TIME IN PFC SKELETON 
          SB7    B7-1 
          NE     B7,B1,PRS3.1  IF NOT FINISHED STORING DATE/TIME
          SX6    B1+
          SA6    RBPF        SET BYPASS FLAG
          GETCN  CATSKL+FCCN  SAVE CHARGE/PROJECT FOR LOCAL FILE DUMPS
          SX6    B0+
          SA6    RBPF        CLEAR BYPASS FLAG
          GETPFP OLDBUF 
          SA1    OLDBUF+2    SAVE USER NAME 
          MX0    42 
          BX6    X0*X1
          SA6    UND
          SA6    UNV
          BX6    -X0*X1 
          SA6    CATSKL+FCUI  SAVE USER INDEX FOR LOCAL FILE DUMPS
          SA1    OLDBUF+1    SAVE PACK NAME 
          BX6    X1 
          SA6    HDRPN
          SA1    OLDBUF      SAVE FAMILY NAME 
          BX6    X1 
          SA6    FAMILY 
  
*         CONVERT TODAYS DATE TO PACKED JULIAN. 
  
          JDATE  DUMPDT      *DUMP* DATE
          SB7    B1 
          MX0    30D
          SA5    DUMPDT 
          LX5    30D
          BX5    X0*X5
          RJ     DXB         CONVERT DISPLAY TO BINARY
          SA6    DUMPDT 
  
*         CHECK IF TMS IS ACTIVE. 
  
          SX6    B1+         SET BYPASS FLAG
          SA6    RBPF 
          SYSTEM SFM,R,TMSTAT,GTSF*100B 
          SA2    RBPF        CHECK BYPASS FLAG
          BX6    X6-X6       PRESET FOR TMS NOT ACTIVE
          SA6    A2          CLEAR BYPASS FLAG
          SA1    TMSTAT 
          ZR     X2,PRS3.2   IF PRE-TMS SYSTEM
          MX6    1
          BX6    X1*X6       TMS ACTIVE BIT 
          LX1    59-58
          BX6    X1*X6       TMS BINARIES BIT 
 PRS3.2   SA6    A1          SET TMS STATUS 
  
*         DETERMINE JOB ORIGIN TYPE.
  
          GETJO  JOBORIG
          SA1    JOBORIG
          SX0    1           GIVE SPECIAL PERMISSION FOR SYOT 
          SX7    HEADER0
          SX2    X1-SYOT
          ZR     X2,PRS7     IF SYSTEM ORIGIN THEN SET FULL LIST
          SX1    X1-IAOT
          NZ     X1,PRS4     IF THIS JOB IS NOT INTERACTIVE 
          CSET   NORMAL 
          SX6    B1+         INDICATE CHARACTER SET MODE CHANGED
          SA6    RECSET 
  
*         CHECK FOR SPECIAL PRIVILEGES. 
  
 PRS4     SX7    HEADER0     HEADER LENGTH
          SA1    USERDB 
          SX0    B1          ALLOW FULL ACCESS TO USER DATABASE 
          NZ     X1,PRS7     IF USER DATABASE 
          SX0    B0          RESTRICT ACCESS TO SITE DATABASE 
          BX6    X6-X6
          SA6    PRIVARG     TERMINATE LIST OF ALLOWED ARGUMENTS
          SX7    X7-3 
          EQ     PRS8        SET ACCESS LEVEL 
  
*         BUILD HEADER FOR PRIVILEGED USERS.
  
 PRS7     SA1    HEAD2
          SX2    2R U 
          BX6    X1+X2
          SA6    A1          SET HEADER 
  
*         SET ACCESS LEVEL AND HEADER SIZE. 
  
 PRS8     BX6    X0          FLAG FOR SPECIAL ACCESS
          SA7    HLENGTH
          SA6    ACCESS 
  
*         CHECK FOR TERMINAL FILES. 
  
          SA1    CCIN 
          NZ     X1,PRS8.1   IF INPUT IS FROM COMMAND LINE
          SX2    I
          RJ     STF         CHECK FOR INPUT FILE DISPOSITION 
          SA6    IDT
          ZR     X6,PRS8.1   IF INPUT IS A TERMINAL FILE
          READ   I           READ FIRST PART OF DISK INPUT FILE 
 PRS8.1   WRITE  O,*         PRESET WRITE FUNCTION
          SX2    O           CHECK OUTPUT FILE EQUIPMENT TYPE 
          RJ     STF
          SA6    ODT
          MX0    42 
          NZ     X6,PRS8.2   IF OUTPUT NOT ASSIGNED TO *TTY*
  
*         REMOVE *PAGE* FROM HEADER IF *TTY* ASSIGNED.
  
          SA1    OPTION      10 SPACES
          BX6    X1 
          SA6    HEAD1.0
          SETLOF LOFPTR      SET LIST-OF-FILES ADDRESS
          EQ     PRS9        SET UP DATABASE USER NAME
  
*         SET PRINT PARAMETERS IF NOT TERMINAL OUTPUT.
  
 PRS8.2   GETPP  OBUF,MLPP,PRSB  GET PAGE LENGTH AND PRINT DENSITY
          WRITEC O,PRSB      SET PRINT DENSITY
          WRITEC O,PRSC      ISSUE INITIAL PAGE EJECT 
  
*         SET UP DATABASE FILE PARAMETERS.
  
 PRS9     SA1    NDBPW
          BX0    X1 
          SA1    NDBPN
          BX6    X1 
          SA1    DEFPW
          BX7    X1 
          SA2    DEFUN
          SA3    NDBUN
          SA4    DEFNAM 
          SA5    NDBNAM 
          SA1    USERDB 
          NZ     X1,PRS10    IF USER DATABASE IS REQUESTED
          SA1    ACCESS      CHECK FOR PRIVILEGED ACCESS
          NZ     X1,PRS9.1   IF SPECIAL ACCESS ALLOWED
          NZ     X3,PRS15    IF *UN* PARAMETER IS USED
          NZ     X5,PRS15    IF *DB* PARAMETER IS USED
          NZ     X6,PRS15    IF *PN* PARAMETER IS USED
          NZ     X0,PRS15    IF *PW* PARAMETER IS USED
          SA1    NDBR 
          NZ     X1,PRS15    IF *R* PARAMETER IS USED 
 PRS9.1   SA1    DEFPN       GET DEFAULT PACK NAME
          EQ     PRS10.2     CHECK IF PACK NAME SPECIFIED 
  
 PRS10    BX1    X2-X3
          NZ     X1,PRS10.1  IF DEFAULT USER NAME NOT SPECIFIED 
          BX1    X4-X5
          ZR     X1,PRS15    IF DEFAULT FILE NAME IS SPECIFIED
 PRS10.1  BX7    X7-X7       CLEAR DEFAULT PASSWORD 
          BX2    X2-X2       CLEAR DEFAULT USER NAME
          SX1    B0+         CLEAR DEFAULT PACK NAME
 PRS10.2  ZR     X6,PRS11    IF PACK NAME NOT SPECIFIED 
          SA1    NDBR        GET DEVICE TYPE IF SPECIFIED 
          NZ     X1,PRS10.3  IF DEVICE TYPE IS SPECFIED 
          SA1    DEFR        DEFAULT DEVICE TYPE
 PRS10.3  BX1    X1-X6       EXCHANGE DEVICE TYPE AND PACK NAME 
          BX6    X6-X1       DEVICE TYPE
          BX1    X1-X6       PACK NAME
 PRS11    SA6    RDT         SAVE DEVICE TYPE 
          ZR     X3,PRS12    IF USER NAME NOT SPECIFIED 
          SA2    UND         CHECK THE CURRENT USER NAME
          BX2    X2-X3
          ZR     X2,PRS12    IF CURRENT USER NAME IS SPECIFIED
          BX2    X3 
 PRS12    BX6    X2 
          SA6    DBUN 
          BX6    X1          SAVE PACK NAME TO BE USED
          SA6    DBPN 
          BX6    X4 
          ZR     X5,PRS13    IF FILE NAME NOT SPECIFIED 
          BX6    X5 
          LX5    6
          SX5    X5-1R0 
          NZ     X5,PRS13    IF NOT DB=0
          SX6    B0+
 PRS13    SA6    DBNAM
          ZR     X0,PRS14    IF PASSWORD NOT SPECIFIED
          BX7    X0 
 PRS14    SA7    DBPW 
          EQ     MAIN        ENTER MAIN LOOP
  
 PRS15    SA4    CCART
          SB6    TKPR 
          SA5    CCDR 
          SB2    B0+
          RJ     RSP         REMOVE PASSWORD FROM CONTROL CARD
          MESSAGE  CCDR,0,R  ISSUE CONTROL CARD TO DAYFILE
          MESSAGE  PRSA,3    * RECLAIM ARGUMENT ERROR.* 
          WRITEC O,PRSA 
          EQ     ABT1        ABORT *RECLAIM*
  
  
 PRSA     DATA   C* RECLAIM ARGUMENT ERROR.*
 PRSB     DATA   1LS         PRINT DENSITY FORMAT EFFECTOR
 PRSC     DATA   1L1         PAGE EJECT FORMAT EFFECTOR 
          TITLE  OPTIONS. 
          SPACE  4,10 
*         OPTION TABLES.
          SPACE  4,10 
*         COMMAND OPTION TABLE. 
  
 CCART    BSS                          COMMAND OPTION TABLE 
 I        ARG    0,I,0,1               INPUT FILE NAME
 L        ARG    0,O,0,1               OUTPUT FILE NAME 
 Z        ARG    -NOEQV,CCIN,0,1       *Z* INPUT FLAG 
 NA       ARG    -NOEQV,NAP,0,1        NO ABORT ON TRIVIAL ERRORS 
 NH       ARG    -NOEQV,NHV,0,1        NO HEADER ON OUTPUT
 NV       ARG    -NOEQV,NVV,0,1        NO VALIDATION OF DUMP FILE 
 T        ARG    0,NUMBERS,0,1         FILE WITH VSN-S FOR UPDATE 
 DB       ARG    0,NDBNAM,400B,1
 UN       ARG    0,NDBUN,0,1           OWNER OF DATABASE
 PN       ARG    0,NDBPN,400B,1        PACK NAME OF DATABASE
 R        ARG    0,NDBR,400B,1         DEVICE TYPE OF DATABASE
 PW       ARG    0,NDBPW,0,1           PASSWORD OF DATABASE 
 S        ARG    -SITEDB,USERDB,0,1    SITE/USER DATABASE FLAG
          CON    0                     ARGUMENT LIST TERMINATOR 
          SPACE  4,10 
*         TABLE OF SECURE KEYWORDS. 
  
 TKPR     BSS    0           TABLE OF KEYWORDS TO REMOVE
          DATA   0LPW        PASSWORD 
          CON    0           END OF TABLE 
          SPACE  4,10 
*         DATABASE FILE PARAMETERS FROM COMMAND LINE. 
  
 NDBUN    BSSZ   1           NEW DATABASE USER NAME 
 NDBPN    BSSZ   1           NEW DATABASE PACK NAME 
 NDBR     BSSZ   1           NEW DATABASE DEVICE TYPE 
 NDBNAM   BSSZ   1           NEW DATABASE FILE NAME 
 NDBPW    BSSZ   1           NEW DATABASE PASSWORD
          SPACE  4,10 
*         DEFAULT DATABASE FILE PARAMETERS. 
  
 DEFUN    DATA   0LSYSTEMX   DEFAULT USER NAME
 DEFPN    DATA   0           DEFAULT PACK NAME (CURRENT PACK) 
 DEFR     DATA   0           DEFAULT DEVICE TYPE (SYSTEM DEFAULT) 
 DEFNAM   DATA   0LRECLDB    DEFAULT FILE NAME
 DEFPW    DATA   0LARPASS    DEFAULT PASSWORD 
          SPACE  4,10 
*         PRESET COMMON DECKS.
  
  
*CALL     COMCRSP 
*CALL     COMCSTF 
*CALL     COMCZAP 
          SPACE  4,10 
*         BUFFERS.
  
          USE    BUFFERS
  
 BEGIN    BSSN   RECLAIM
 OBUF     BSSN   OBUFL       OUTPUT BUFFER
 DIRBUF   BSSN   DIRBUFL     *NUMBERS*, MERGESORT BUFFER
 AFBUF    EQU    DIRBUF      REUSE DIRBUF FOR MERGESORT SCRATCH ONE 
 IBUF     BSSN   IBUFL       INPUT BUFFER 
 OLDBUF   BSSN   OLDBUFL     DATABASE IN/SORT1 SCRATCH BUFFER 
 TFBUF    BSSN   TFBUFL      PRIMARY DUMP FILE BUFFER 
 MFBUF    BSSN   MFBUFL      *COMPACT* DUMP FILE BUFFER 
 SFBUF    EQU    MFBUF       REUSE MFBUF FOR LOAD FILE BUFFER 
 NEWBUF   EQU    MFBUF       REUSE MFBUF FOR DATABASE OUT BUFFER
 TNBUF    BSSN   TNBUFL      *UPDATES* BUFFER 
 BFBUF    EQU    TNBUF       REUSE TNBUF FOR MERGESORT SCRATCH TWO
 CFBUF    BSSN   CFBUFL      MERGESORT BUFFER 
 WSA      BSSN   WSAL        WORKING STORAGE BUFFER 
 RLDBUF   BSSN   RLDBUFL     *OPLDF* BUFFER 
 PRMITH   BSSN   1           PERMIT HEADER
 CATBUF   BSSN   TCATBFL     CATLIST BUFFER 
 CLSBUF   BSSN   CLSBUFL     FILE *CATLIST* BUFFER
 PFTAB    BSSN   PFTABL+5    PERMANENT FILE NAMES TABLE 
 NNTAB    BSSN   PFTABL+5    STORAGE FOR NEW NAMES
  
*         THE FOLLOWING MUST BE THE LAST STORAGE DEFINITION BECAUSE THE 
*         PERMIT BUFFER IS EXTENDED ON A *LOAD* BY INCREASING THE JOB 
*         FIELD LENGTH. 
  
 PRMITB   BSSN   PRMITBL     PERMIT BUFFER
 RFL=     BSSN   0           SET INITIAL FIELD LENGTH 
 END      BSSN
  
  
 SDM=     EQU    0           SUPPRESS SYSTEM-ISSUED DAYFILE MESSAGE 
          SPACE  4,10 
*         OVERFLOW CHECK. 
  
  
          USE    PRESET 
          ERRPL  *-IBUF      PRESET OVERFLOWS INTO INPUT BUFFER 
          SPACE  4
          END    RECLAIM
