GETTASV 
          IDENT  GETTASV,FWA
          ABS 
          SST 
          ENTRY  GETTASV
          ENTRY  RFL= 
          SYSCOM B1 
          TITLE  GETTASV - GET VSNS FOR TAPE ALTERNATE STORAGE. 
*COMMENT  GETTASV - GET TAPE ALTERNATE STORAGE VSN(S).
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1993. 
 GETTASV  SPACE  4,10 
***       GETTASV - GET TAPE ALTERNATE STORAGE VSN(S).
* 
*         R. E. DUNBAR.      93/10/11.
          SPACE  4,10 
***       *GETTASV* IS A UTILITY TO SELECT ONE OR TWO SYSTEM VSNS FOR 
*         USE AS TAPE ALTERNATE STORAGE (*TAS*) ARCHIVE VOLUMES IN A
*         TAPE MANAGEMENT SYSTEM (*TMS*) ENVIRONMENT. 
          SPACE  4,20 
***       COMMAND FORMAT. 
* 
* 
*         GETTASV(P1,P2,...,PN) 
* 
* 
*         *PN* MAY BE ONE OF THE FOLLOWING -
* 
*         PARAMETER          DESCRIPTION
*         ---------          -----------
* 
*         SS=FILE            LOCAL FILE NAME OF THE *TFSP* MACHINE- 
*                            READABLE AUDIT FILE.  FILE MUST BE IN THE
*                            FORMAT CREATED BY THE *TFSP* *MREADVS* 
*                            DIRECTIVE.  THE DEFAULT LFN IS *MREADVS*.
* 
*         P=PREFIX           TWO-CHARACTER ALPHANUMERIC PREFIX FOR THE
*                            ARCHIVE VSNS.  DEFAULT IS *AA*.
* 
*         N=VSNS             NUMBER OF VOLUMES. THE DEFAULT IS *1*. 
* 
*                            N=1   ONE VOLUME IS SELECTED, WITH A VSN 
*                                  IN THE RANGE XX0000-XX4095, WHERE
*                                  *XX* IS THE PREFIX SPECIFIED BY THE
*                                  *P* PARAMETER. 
* 
*                            N=2   TWO VOLUMES ARE SELECTED, THE FIRST
*                                  VSN IN THE RANGE XX0000-XX4095, AND
*                                  A SECOND IN THE RANGE XX5000-XX9095. 
*                                  *XX* IS THE PREFIX SPECIFIED BY THE
*                                  *P* PARAMETER.  THE NUMERIC PORTION
*                                  OF THE SECONDARY VSN IS EXACTLY 5000 
*                                  HIGHER THAN THAT OF THE PRIMARY VSN. 
* 
*         D=DENSITY          DUMP TAPE DENSITY.        DEFAULT IS *GE*. 
* 
*                            D=HD/PE/GE, SELECT 9-TRACK MAGNETIC TAPE.
*                            D=CE, SELECT CARTRIDGE TAPE. 
*                            D=AE, SELECT ACS CARTRIDGE TAPE. 
* 
*         F=FORMAT           DUMP TAPE FORMAT.         DEFAULT IS *I*.
* 
*                            F=I - INTERNAL FORMAT. 
*                            F=LI - LONG BLOCK INTERNAL FORMAT. 
* 
*         T=LFN1             DESTAGE TAPE LFN.  THE DEFAULT IS *TAPE*.
*                            THE LOCAL FILE NAME FOR THE PRIMARY TAPE 
*                            TO RECEIVE THE DESTAGED PERMANENT FILES. 
* 
*         VF=LFN2            VERIFY TAPE LFN.  THE DEFAULT IS *PFVER*.
*                            THE LOCAL FILE NAME FOR THE SECONDARY
*                            TAPE TO RECEIVE BACKUP COPIES OF THE 
*                            DESTAGED PERMANENT FILES.
* 
*         C=ALTCMD           ALTERNATE COMMAND.  DEFAULT IS *SETTASV*.
*                            THE COMMAND NAME TO BE USED IN AN *EXCST*
*                            CALL TO PASS THE TAPE DENSITY, FORMAT AND
*                            SELECTED VSN(S) ON FOR FURTHER PROCESSING. 
*                            *ALTCMD* MUST BE A PROGRAM OR PROCEDURE ON 
*                            THE SYSTEM LIBRARY OR AVAILABLE TO THE JOB 
*                            AS A LOCAL FILE OR IN A GLOBAL LIBRARY. IT 
*                            IS EXECUTED VIA *EXCST* AS FOLLOWS.
* 
*                            ALTCMD(DENSITY,FORMAT,VSN1,,LFN1)
* 
*                               OR
* 
*                            ALTCMD(DENSITY,FORMAT,VSN1,VSN2,LFN1,LFN2) 
* 
*                            THE PROGRAM OR PROCEDURE CALLED MUST BE
*                            ABLE TO ACCEPT SIX POSITIONAL PARAMETERS 
*                            AS SHOWN IN THE ORDER SHOWN. 
          TITLE  DAYFILE MESSAGES.
          SPACE  4,20 
***       DAYFILE MESSAGES. 
* 
*         * ALTERNATE COMMAND INCORRECT.* - THE ALTERNATE COMMAND 
*                SPECIFIED WITH THE *C* PARAMETER DOES NOT MEET THE 
*                REQUIREMENTS FOR A *NOS* COMMAND NAME.  IT MUST BE 
*                SEVEN OR FEWER ALPHANUMERIC CHARACTERS.
* 
*         * AUDIT FILE IS EMPTY OR MISPOSITIONED.* - END OF 
*                FILE OR END OF RECORD WAS DETECTED ON THE FIRST READ 
*                OF THE *TFSP* MACHINE-READABLE AUDIT FILE. 
* 
*         * AUDIT FILE IS WRONG VERSION OR MISPOSITIONED.* - THE AUDIT
*                FILE FILE VERSION NUMBER DOES NOT MATCH THE VERSION
*                NUMBER *GETTASV* IS PREPARED TO PROCESS. 
* 
*         * GETTASV ABORTED.* - *GETTASV* HAS DETECTED AN ERROR OR
*                THE USER HAS INITIATED AN ABORT. 
* 
*         * GETTASV ARGUMENT ERROR.* - AN INCORRECT ARGUMENT WAS
*                DETECTED ON THE *GETTASV* COMMAND.  THE ARGUMENT WAS 
*                EITHER TOO LARGE OR NOT AN ACCEPTABLE *NOS* FORMAT.
* 
*         * GETTASV COMPLETE.* - NORMAL COMPLETION.  THE REQUESTED
*                VOLUMES HAVE BEEN SELECTED.
* 
*         * NO PRIMARY OR SECONDARY VSNS AVAILABLE.* - *GETTASV*
*                FOUND NEITHER PRIMARY NOR SECONDARY VSNS AVAILABLE 
*                WITH THE PREFIX SPECIFIED. 
* 
*         * PRIMARY LFN INCORRECT.* - THE PRIMARY DESTAGE TAPE LFN
*                SPECIFIED WITH THE *T* PARAMETER DOES NOT MEET THE 
*                REQUIREMENTS FOR A *NOS* LOCAL FILE NAME.  IT MUST 
*                BE SEVEN OR FEWER ALPHANUMERIC CHARACTERS. 
* 
*         * PRIMARY VSN NOT AVAILABLE.* - *GETTASV* COULD NOT FIND AN 
*                AVAILABLE PRIMARY VSN WITH THE PREFIX SPECIFIED. 
* 
*         * PRIMARY/SECONDARY VSN SET NOT AVAILABLE.* - *GETTASV* FOUND 
*                AVAILABLE PRIMARY AND SECONDARY VSNS WITH THE PREFIX 
*                SPECIFIED, BUT NO MATCHING PAIR. 
* 
*         * SECONDARY LFN INCORRECT.* - THE SECONDARY DESTAGE TAPE LFN
*                SPECIFIED WITH THE *VF* PARAMETER DOES NOT MEET THE
*                REQUIREMENTS FOR A *NOS* LOCAL FILE NAME.  IT MUST 
*                BE SEVEN OR FEWER ALPHANUMERIC CHARACTERS. 
* 
*         * SECONDARY VSN NOT AVAILABLE.* - *GETTASV* COULD NOT FIND AN 
*                AVAILABLE SECONDARY VSN WITH THE PREFIX SPECIFIED. 
* 
*         * TAPE DENSITY NOT RECOGNIZED.* - THE VALUE SPECIFIED FOR THE 
*                *D* PARAMETER DOES NOT MATCH ANY KNOWN TAPE DENSITY. 
* 
*         * TAPE FORMAT NOT RECOGNIZED.* - THE VALUE SPECIFIIED FOR 
*                THE *F* PARAMETER IS NOT ONE OF THE TAPE FORMATS 
*                ALLOWED FOR TAPE ALTERNATE STORAGE PURPOSES. 
* 
*         * VSN PREFIX INCORRECT.* - THE VALUE SPECIFIED ON THE *P* 
*                PARAMETER IS NOT TWO ALPHANUMERIC CHARACTERS.
          TITLE  COMMON DECKS.
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMCCMD 
*CALL     COMCMAC 
  
*         BUFFER SIZE DEFINITIONS.
  
 OBUFL    EQU    1001B       OUTPUT FILE BUFFER LENGTH
 ABUFL    EQU    1001B       AUDIT FILE BUFFER LENGTH 
 ARECL    EQU    24          AUDIT FILE RECORD LENGTH 
          TITLE  TABLES.
 FWA      SPACE  4,10 
          ORG    110B 
 FWA      EQU    *           PROGRAM ORIGIN 
          TITLE  COMMAND ARGUMENT VARIABLES.
*         COMMAND ARGUMENT VARIABLES. 
 ARGS     SPACE  4,10 
 ACMD     DATA   C*SETTASV*  ALTERNATE COMMAND PARAMETER
 DENS     DATA   C*GE*       DENSITY PARAMETER
 ERFL     CON    0           ERROR FLAG IF NONZERO
 FRMT     DATA   C*I*        TAPE FORMAT PARAMETER
 LFN1     DATA   C*TAPE*     PRIMARY DESTAGE TAPE LFN 
 LFN2     DATA   C*PFVER*    SECONDARY DESTAGE TAPE LFN 
 MAXV     VFD    12/0,24/4L4095,24/0  HIGHEST ALLOWABLE PRIMARY VSN 
 NVSN     DATA   C*1*        NUMBER OF VSNS PARAMETER 
 PRFX     DATA   C*AA*       PREFIX PARAMETER 
 TTYP     DATA   C*MTNT*     *TMS* TAPE TYPE
 VSEC     CON    0           SECONDARY VSN FOUND IF NON-ZERO
          TITLE  ERROR MESSAGES.
*         ERROR MESSAGES. 
          SPACE  4,10 
 ERAE     DATA   C* AUDIT FILE IS EMPTY OR MISPOSITIONED.*
 ERAV     DATA   C* AUDIT FILE IS WRONG VERSION OR MISPOSITIONED.*
 ERVE     DATA   C* NO PRIMARY OR SECONDARY VSNS AVAILABLE.*
 ERVF     DATA   C* SECONDARY LFN INCORRECT.* 
 ERVM     DATA   C* PRIMARY/SECONDARY VSN SET NOT AVAILABLE.* 
 ERVP     DATA   C* PRIMARY VSN NOT AVAILABLE.* 
 ERVS     DATA   C* SECONDARY VSN NOT AVAILABLE.* 
          TITLE  MAIN PROGRAM.
 GETTASV   SPACE  4,15
**        GETTASV - MAIN PROGRAM. 
* 
*         CALLS  CAP, PRS, SNM. 
* 
*         MACROS MESSAGE, READ, READC.
  
  
 GETTASV  BSS    0           ENTRY
          RJ     PRS         PRESET 
          READ   SS,R        READ FIRST AUDIT RECORD
          READC  SS,AREC,ARECL
          SX5    ERAE        * AUDIT FILE IS EMPTY OR MISPOSITIONED.* 
          NZ     X1,ABT      IF EOR/EOF/EOI ON FIRST READ 
          SA1    AREC 
          MX6    -6 
          LX1    6
          BX6    -X6*X1 
          SX6    X6-1R2      CHECK FOR CORRECT AUDIT FILE VERSION 
          ZR     X6,GET2     IF CORRECT VERSION 
          SX5    ERAV        * AUDIT FILE IS WRONG VERSION OR MISPOS..* 
          EQ     ABT         ABORT JOB
  
*         READ AN AUDIT RECORD. 
  
 GET1     READC  SS,AREC,ARECL  READ AUDIT RECORD 
          NZ     X1,GET6     IF EOR/EOF/EOI 
  
*         CHECK FOR A USER NAME ASSOCIATED WITH THIS VSN. 
  
 GET2     SA1    AREC 
          MX0    -12
          SA2    A1+1 
          BX6    -X0*X1 
          BX2    X0*X2
          BX6    X2+X6
          SA3    =10H 
          BX6    X3-X6
          NZ     X6,GET1     IF ASSIGNED TO A USER
  
*         CHECK FOR AVAILABLE, ON-SITE, CENTER-OWNED SYSTEM VSN.
  
          SA1    AREC+18
          SA2    =6LVAILON
          BX6    X1-X2
          AX6    24 
          NZ     X6,GET1     IF NOT AVAILABLE OR OFF SITE 
          SX6    X1-3RCEN 
          NZ     X6,GET1     IF NOT CENTER-OWNED TAPE 
          SA1    AREC+22
          LX1    -6 
          SX6    X1-3RYES 
          NZ     X6,GET1     IF NOT SYSTEM TAPE 
  
*         CHECK FOR NON-RESERVED TAPE.
  
          SA2    =1LN 
          MX0    6
          LX1    24 
          BX2    X1-X2
          BX6    X0*X2
          NZ     X6,GET1     IF TAPE IS RESERVED
  
*         CHECK FOR CORRECT TAPE TYPE (AT, CT, MTNT). 
  
          LX1    -18
          MX0    -6 
          BX2    -X0*X1 
          SA1    A1+1 
          MX0    18 
          BX1    X0*X1
          BX1    X1+X2
          LX1    54 
          SA2    TTYP 
          BX6    X1-X2
          NZ     X6,GET1     IF NOT CORRECT TAPE TYPE 
  
*         CHECK THAT *VSN* AND *PRN* MATCH. 
  
          SA1    AREC+15
          MX0    -6*5 
          BX6    -X0*X1      UPPER 5 OF *VSN* 
          SA1    A1+1 
          MX0    6
          BX7    X0*X1       LOWER 1 OF *VSN* 
          BX1    X1-X7       REMOVE UPPER CHARACTER 
          BX6    X6+X7       MERGE UPPER 5 AND LOWER 1 OF *VSN* 
          MX0    6*7
          LX6    6*5         LEFT JUSTIFY *VSN* 
          BX5    X0*X1       ISOLATE *PRN*
          LX5    6           LEFT JUSTIFY *PRN* 
          BX7    X5-X6
          NZ     X7,GET1     IF *VSN* AND *PRN* DO NOT AGREE
  
*         (X5) = (X6) = VSN.
  
          SA2    PRFX 
          BX7    X2-X6
          AX7    48 
          NZ     X7,GET1     IF PREFIX DOES NOT MATCH 
          SA2    GETA        PATTERN FOR PRIMARY VSN
          SB2    6           MUST BE 6 CHARACTERS 
          RJ     CAP         CHECK FOR ALLOWED PATTERN
          BX5    X6          RESTORE VSN
          NZ     X1,GET3     IF WRONG PATTERN FOR PRIMARY VSN 
          SA1    MAXV 
          LX6    6*6
          IX1    X1-X6
          NG     X1,GET1     IF NUMERIC PORTION EXCEEDS 4095
          SB5    GETC        POINT TO COMMAND TO BE EXECUTED
          SA1    NVSN 
          ZR     X1,GET5     IF ONLY ONE VSN NEEDED 
          SA1    TVSN 
          SX7    X1+1        INCREMENT VSN COUNT
          SA6    TVSN+X7     SAVE VSN IN TABLE
          SA7    A1 
          MX6    0           SET TABLE TERMINATE
          SA6    A6+B1
          EQ     GET1        PROCESS NEXT AUDIT RECORD
  
 GET3     SA2    GETB        PATTERN FOR SECONDARY VSN
          SB2    6           MUST BE 6 CHARACTERS 
          RJ     CAP         CHECK FOR ALLOWED PATTERN
          NZ     X1,GET1     IF WRONG PATTERN FOR SECONDARY VSN 
          SA1    NVSN 
          SX5    ERVP        * PRIMARY VSN NOT AVAILABLE.*
          ZR     X1,ABT      IF PRIMARY VSN NEEDED AND NOT FOUND
          LX6    6*6         RIGHT JUSTIFY SECONDARY VSN
          SX0    5
          LX0    18 
          IX0    X6-X0       PRIMARY VSN TO LOOK FOR
          SA2    MAXV 
          IX2    X2-X0
          NG     X2,GET1     IF NUMERIC PORTION EXCEEDS 9095
          SA6    VSEC        FLAG QUALIFYING SECONDARY VSN FOUND
          SA1    TVSN 
          ZR     X1,ABT      IF NO ENTRIES IN VSN TABLE 
 GET4     SA1    A1+B1
          ZR     X1,GET1     IF NO MORE ENTRIES 
          BX7    X0-X1
          NZ     X7,GET4     IF NO MATCH
  
*         (X1) = PRIMARY VSN, (X6) = SECONDARY VSN. 
  
          SB2    4*6
          LX5    X1,B2       SAVE AND LEFT JUSTIFY PRIMARY VSN
          LX1    X6,B2       LEFT JUSTIFY SECONDARY VSN 
          SB2    1R#
          SB5    GETD 
          RJ     SNM         SET SECONDARY VSN INTO COMMAND 
          SA1    LFN2 
          SB2    1R>
          RJ     SNM         SET SECONDARY LFN INTO COMMAND 
  
*         (X5) = PRIMARY VSN. 
  
 GET5     SB2    1R+
          BX1    X5 
          RJ     SNM         SET PRIMARY VSN INTO COMMAND 
          SA1    LFN1 
          SB2    1R<
          RJ     SNM         SET PRIMARY LFN INTO COMMAND 
          SA1    FRMT 
          SB2    1R&
          RJ     SNM         SET TAPE FORMAT INTO COMMAND 
          SA1    DENS 
          SB2    1R/
          RJ     SNM         SET TAPE DENSITY INTO COMMAND
          SA1    ACMD 
          SB2    1R-
          RJ     SNM         SET COMMAND NAME INTO COMMAND
          MESSAGE  GETE,3,R  * GETTASV COMPLETE.* 
          EXCST  B5          EXECUTE CONTROL STATEMENT
          ENDRUN
  
*         AUDIT FILE IS EXHAUSTED AND NO SELECTION HAS BEEN MADE. 
*         DETERMINE WHY AND ABORT WITH APPROPRIATE ERROR MESSAGE. 
  
 GET6     SA1    NVSN 
          SX5    ERVP        * PRIMARY VSN NOT AVAILABLE.*
          ZR     X1,ABT      IF NO PRIMARY VSN FOUND
          SA1    TVSN 
          SX5    ERVE        * NO PRIMARY OR SECONDARY VSNS AVAILABLE.* 
          ZR     X1,ABT      IF NEITHER TYPE OF VSN FOUND 
          SA1    VSEC 
          SX5    ERVS        * SECONDARY VSN NOT AVAILABLE.*
          ZR     X1,ABT      IF NO SECONDARY VSN FOUND
          SX5    ERVM        * PRIMARY/SECONDARY VSN SET NOT AVAILABLE* 
          EQ     ABT
  
  
 GETA     VFD    18/442333B,42/0   PRIMARY VSN PATTERN
 GETB     VFD    18/443333B,42/0   SECONDARY VSN PATTERN
 GETC     DATA   C*-------(////,&&,++++++,,<<<<<<<)*
 GETD     DATA   C*-------(////,&&,++++++,######,<<<<<<<,>>>>>>>)*
 GETE     DATA   C* GETTASV COMPLETE.*
          TITLE  SUBROUTINES. 
 ABT      SPACE  4,10 
**        ABT - ABORT PROCESSING. 
* 
*         ENTRY  (X5) = ADDRESS OF ERROR MESSAGE. 
* 
*         EXIT   ALL FILES RETURNED.
*                ERROR MESSAGES ISSUED. 
*                *GETTASV* ABORTED. 
* 
*         MACROS ABORT, MESSAGE, WRITEC, WRITER.
  
  
 ABT      BSS    0           ENTRY
          MESSAGE  X5,,R     ISSUE ERROR MESSAGE
          WRITEC O,X5 
  
*         ENTER HERE FROM PRESET IF ERRORS DETECTED.
  
 ABT1     WRITER OUTPUT,R 
          MESSAGE  ABTA,,R   * GETTASV ABORTED.*
          ABORT              ABORT
  
  
 ABTA     DATA   C* GETTASV ABORTED.* 
 CAP      SPACE  4,30 
**        CAP - CHECK FOR ALLOWABLE PATTERNS. 
* 
*         CHECK PARAMETERS FOR ALLOWABLE CHARACTER PATTERNS.
* 
*         ENTRY  (X5) = PARAMETER, LEFT JUSTIFIED ZERO FILLED.
*                (X2) = PATTERN, LEFT JUSTIFIED ZERO FILLED.  PATTERN 
*                       CONSISTS OF ONE OCTAL DIGIT FOR EACH CHARACTER
*                       POSITION OF THE PARAMETER.  EACH OCTAL DIGIT
*                       INDICATES THE CHARACTERS THAT ARE VALID FOR 
*                       THAT CHARACTER POSITION, AS FOLLOWS.
* 
*                       0 - ANY CHARACTER.
*                       1 - CHARACTERS A THROUGH Z. 
*                       2 - DIGITS 0 THROUGH 4. 
*                       3 - DIGITS 0 THROUGH 9. 
*                       4 - CHARACTERS A THROUGH Z, DIGITS 0 THROUGH 9. 
*                       5 - NO CHARACTER IS VALID.
* 
*                (B2) = MINIMUM NUMBER OF 6-BIT CHARACTERS. 
* 
*         EXIT   (X1) = 0 IF PARAMETER MATCHES PATTERN. 
*                (X1) .NE. 0 IF PARAMETER DOES NOT MATCH PATTERN. 
* 
*         USES   X - 1, 2, 4, 5.
*                A - 1. 
*                B - 2, 3, 4. 
  
  
 CAP3     SX1    B2+         CHECK MINIMUM CHARACTER COUNT
  
  
 CAP      SUBR               ENTRY/EXIT 
 CAP1     LX5    6
          MX1    -6 
          BX1    -X1*X5 
          BX5    X5-X1
          ZR     X1,CAP3     IF ALL CHARACTERS CHECKED
          SB4    X1 
          LX2    3
          SX1    X2          INDEX TO PATTERNS
          ZR     X1,CAP2     IF NO RESTRICTION ON THIS CHARACTER
          BX2    X2-X1
          LX1    2           PATTERN INDEX * 4
          SB3    X1 
          LX1    1           PATTERN INDEX * 8
          SB3    B3+X1       PATTERN INDEX * 12 
          SA1    CAPA 
          MX4    -6 
          LX1    X1,B3
          BX4    -X4*X1 
          SB3    X4 
          GT     B4,B3,CAPX  IF CHARACTER OUT OF RANGE
          MX4    -6 
          LX1    -6 
          BX4    -X4*X1 
          SB3    X4 
          LT     B4,B3,CAPX  IF CHARACTER OUT OF RANGE
 CAP2     ZR     B2,CAP1     IF MINIMUM SIZE REACHED
          SB2    B2-1 
          EQ     CAP1        CONTINUE WITH NEXT CHARACTER 
  
  
 CAPA     VFD    12/2LAZ,12/2L04,12/2L09,12/2LA9,12/2L10
          TITLE  COMMON DECKS.
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMCCIO 
*CALL     COMCCPM 
*CALL     COMCRDC 
*CALL     COMCRDW 
*CALL     COMCSNM 
*CALL     COMCSYS 
*CALL     COMCWTC 
*CALL     COMCWTW 
          TITLE  FILE ENVIRONMENT TABLES. 
 FETS     SPACE  4,10 
*         FETS. 
  
  
 O        BSS    0           OUTPUT FILE
 OUTPUT   FILEB  OBUF,OBUFL 
 SS       BSS    0           AUDIT FILE 
 MREADVS  FILEB  ABUF,ABUFL 
          SPACE  4,10 
*         BUFFERS AND LARGE TABLES. 
  
 TVSN     CON    0           TVSN TABLE - FIRST WORD IS COUNT 
 AREC     EQU    TVSN+4098   AUDIT FILE RECORD BUFFER 
 ABUF     EQU    AREC+ARECL  AUDIT FILE BUFFER
 OBUF     EQU    ABUF+ABUFL  OUTPUT FILE BUFFER 
  
 RFL=     EQU    OBUF+OBUFL  SET INITIAL FIELD LENGTH 
          TITLE  PRS - PRESET ROUTINES. 
          ORG    TVSN+1 
 PRS      SPACE  4,20 
**        PRS - PRESET PROGRAM. 
* 
*         CALLS  ARG, CAP.
* 
*         MACROS MESSAGE. 
  
  
 PRS      SUBR               ENTRY/EXIT 
          SB1    1
  
*         CRACK PARAMETERS FROM COMMAND.
  
          SA1    ACTR        GET NUMBER OF ARGUMENTS
          SB4    X1+
          SA4    ARGR        GET FIRST ARGUMENT 
          SB5    TCAT        COMMAND ARGUMENT TABLE ADDRESS 
          RJ     ARG         PROCESS ARGUMENTS
          SX5    PRSA        * GETTASV ARGUMENT ERROR.* 
          RJ     IME         ISSUE MESSAGE IF ERROR ((X1).NE.0) 
  
*         CHECK ALTERNATE COMMAND PARAMETER.
  
          SA5    ACMD 
          SA2    PRSC 
          SB2    1           MUST BE AT LEAST 1 CHARACTER 
          RJ     CAP         CHECK FOR ALLOWABLE PATTERN
          SX5    PRSD        * ALTERNATE COMMAND INCORRECT.*
          RJ     IME         ISSUE MESSAGE IF ERROR ((X1).NE.0) 
  
*         CHECK PRIMARY LFN PARAMETER.
  
          SA5    LFN1 
          SA2    PRSC 
          SB2    1           MUST BE AT LEAST 1 CHARACTER 
          RJ     CAP         CHECK FOR ALLOWABLE PATTERN
          SX5    PRSI        * PRIMARY LFN INCORRECT.*
          RJ     IME         ISSUE MESSAGE IF ERROR ((X1).NE.0) 
  
*         CHECK SECONDARY LFN PARAMETER.
  
          SA5    LFN2 
          SA2    PRSC 
          SB2    1           MUST BE AT LEAST 1 CHARACTER 
          RJ     CAP         CHECK FOR ALLOWABLE PATTERN
          SX5    ERVF        * SECONDARY LFN INCORRECT.*
          RJ     IME         ISSUE MESSAGE IF ERROR ((X1).NE.0) 
  
*         CHECK PREFIX PARAMETER. 
  
          SA5    PRFX 
          SA2    PRSB 
          SB2    2           PREFIX MUST BE 2 CHARACTERS
          RJ     CAP         CHECK FOR ALLOWABLE PATTERN
          SX5    PRSH        * VSN PREFIX INCORRECT.* 
          RJ     IME         ISSUE MESSAGE IF ERROR ((X1).NE.0) 
          SA1    PRFX        COMBINE PREFIX WITH MAXIMUM DIGIT VALUE
          SA2    MAXV 
          BX6    X1+X2
          SA6    A2+
  
*         CHECK DENSITY PARAMETER.
  
          MX0    30 
          SA1    DENS 
          SA2    TDEN 
 PRS1     BX6    X1-X2
          SA2    A2+1 
          BX7    X0*X6
          ZR     X7,PRS2     IF CORRECT DENSITY 
          NZ     X2,PRS1     IF MORE DENSITIES TO CHECK 
          SX1    B1+         FORCE ERROR INDICATION 
          SX5    PRSE        * TAPE DENSITY NOT RECOGNIZED.*
          RJ     IME         ISSUE MESSAGE FOR ERROR
  
 PRS2     LX6    30 
          SA6    TTYP        SAVE *TMS* TAPE TYPE 
  
*         CHECK TAPE FORMAT PARAMETER.
  
          SA1    FRMT        VALIDATE TAPE FORMAT 
          SA2    TATF 
 PRS3     BX6    X1-X2
          SA2    A2+1 
          BX7    X0*X6
          ZR     X7,PRS4     IF CORRECT FORMAT
          NZ     X2,PRS3     IF MORE FORMATS TO CHECK 
          SX1    B1+         FORCE ERROR INDICATION 
          SX5    PRSF        * TAPE FORMAT NOT RECOGNIZED.* 
          RJ     IME         ISSUE MESSAGE FOR ERROR
  
*         CHECK AND CONVERT NUMBER OF VSNS PARAMETER. 
  
 PRS4     SA1    NVSN 
          SX2    1R1
          LX1    6
          IX6    X1-X2
          SX1    X6-1 
          SA6    NVSN        STORE CONVERTED *NV* PARAMETER 
          ZR     X6,PRS5     IF NV=1
          SX5    PRSG        * NUMBER OF VOLUMES MUST BE 1 OR 2.* 
          RJ     IME         ISSUE MESSAGE IF ERROR ((X1).NE.0) 
  
*         SEE IF ANY PARAMETER ERRORS OCCURRED. 
  
 PRS5     SA1    ERFL 
          ZR     X1,PRSX     IF NO ERRORS 
          EQ     ABT1        ABORT
  
  
 PRSA     DATA   C* GETTASV ARGUMENT ERROR.*
 PRSB     VFD    6/44B,24/55555555B,30/0  PREFIX VALIDATION MASK
 PRSC     VFD    21/4444444B,9/555B,30/0  COMMAND/LFN VALIDATION MASK 
  
*         PRESET ERROR MESSAGES.
  
 PRSD     DATA   C* ALTERNATE COMMAND INCORRECT.* 
 PRSE     DATA   C* TAPE DENSITY NOT RECOGNIZED.* 
 PRSF     DATA   C* TAPE FORMAT NOT RECOGNIZED.*
 PRSG     DATA   C* NUMBER OF VOLUMES MUST BE 1 OR 2.*
 PRSH     DATA   C* VSN PREFIX INCORRECT.*
 PRSI     DATA   C* PRIMARY LFN INCORRECT.* 
 TCAT     SPACE  4,10 
*         COMMAND ARGUMENT TABLE. 
  
 TCAT     BSS    0                 COMMAND ARGUMENT TABLE 
 SS       ARG    SS,SS             AUDIT FILE NAME
 P        ARG    PRFX,PRFX         PREFIX CHARACTERS
 N        ARG    NVSN,NVSN         NUMBER OF VSNS 
 D        ARG    DENS,DENS         TAPE DENSITY 
 F        ARG    FRMT,FRMT         TAPE FORMAT
 T        ARG    LFN1,LFN1         PRIMARY TAPE LFN 
 VF       ARG    LFN2,LFN2         SECONDARY TAPE LFN 
 C        ARG    ACMD,ACMD         ALTERNATE COMMAND
          CON    0                 ARGUMENT LIST TERMINATOR 
 TDEN     SPACE  4,15 
**        TDEN - TABLE OF TAPE DENSITIES. 
* 
*         *TDEN* CONTAINS THE TAPE DENSITIES RECOGNIZED BY *GETTASV*
*         AND THE CORRESPONDING *TMS* TAPE TYPES. 
* 
*T        30/ DEN, 30/ TTYP 
* 
*         DEN    THE DISPLAY CODE SYMBOL FOR THE DENSITY. 
*         TTYP   THE DISPLAY CODE SYMBOL FOR THE *TMS* TAPE TYPE. 
  
  
 TDEN     BSS    0           TABLE OF TAPE DENSITIES VS DEVICE TYPES
          VFD    30/2LLO,30/4LMTNT
          VFD    30/2LHI,30/4LMTNT
          VFD    30/2LHY,30/4LMTNT
          VFD    30/2LHD,30/4LMTNT
          VFD    30/2LPE,30/4LMTNT
          VFD    30/2LGE,30/4LMTNT
          VFD    30/2LCE,30/4LCT
          VFD    30/2LAE,30/4LAT
          VFD    30/3L200,30/4LMTNT 
          VFD    30/3L556,30/4LMTNT 
          VFD    30/3L800,30/4LMTNT 
          VFD    30/4L1600,30/4LMTNT
          VFD    30/4L6250,30/4LMTNT
          CON    0
 TATF     SPACE  4,15 
**        TATF - TABLE OF ALLOWABLE TAPE FORMATS. 
* 
*         *TATF* CONTAINS THE TAPE FORMATS ALLOWED BY *GETTASV*.
* 
*T        30/ FMT, 30/ 0
* 
*         FMT    THE DISPLAY CODE TAPE FORMAT.
  
  
 TATF     BSS    0           TABLE OF ALLOWABLE TAPE FORMATS
          VFD    30/1LI,30/0
          VFD    30/2LLI,30/0 
          CON    0
          SPACE  4,10 
*         PRESET SUBROUTINES. 
 IME      SPACE  4,10 
**        IME - ISSUE MESSAGE IF ERROR. 
* 
*         ENTRY  (X1) = ERROR INDICATOR (NONZERO = ERROR).
*                (X5) = ADDRESS OF ERROR MESSAGE. 
* 
* 
*         EXIT   ERROR MESSAGE ISSUED IF (X1) NONZERO.
*                ERROR FLAG SET IF (X1) NONZERO.
* 
*         MACROS MESSAGE, WRITEC. 
  
  
 IME      SUBR               ENTRY/EXIT 
          ZR     X1,IMEX     IF NO ERROR INDICATED
          BX6    X1          SET ERROR FLAG 
          SA6    ERFL 
          MESSAGE  X5,,R     ISSUE ERROR MESSAGE
          WRITEC O,X5 
          EQ     IMEX        RETURN 
          SPACE  4,10 
*         PRESET COMMON DECKS.
  
  
*CALL     COMCARG 
          SPACE  4,10 
*         OVERFLOW CHECK. 
  
  
          ERRPL  *-OBUF      PRESET OVERFLOWS INTO OUTPUT BUFFER
          SPACE  4
          END 
