Previous Topic

Next Topic

Book Contents

Book Index

Examples of Macro Access and Base Level API Functions

The following topics present several examples of how to perform the various functions described in this chapter. Do not use these examples without appropriate modification. Most of the examples provided do not check the return code from macro CTTIOS. Some examples refer to Assembler symbols that are not included in the example.

Loading the TCT into Storage

The TCT (Control‑M/Tape Control Table) is not a load module and therefore cannot be loaded using the LOAD macro. To load the TCT, use the CTTTLD macro. The example below shows a sample program that uses the CTTTLD macro to load the TCT.

Code Sample for TCT Load Request

             CALL   CTTTLD,(LOADENV,TCTADDR,0,0)   LOAD THE TCT

             LTR    R15,R15                        SUCCESSFUL?

             BNZ    TCTFAIL                        NO - TERMINATE

             .

             .

    TCTFAIL  WTO    'TCT LOAD FAILED, PROGRAM TERMINATED'

             ABEND  8,DUMP ABEND PROGRAM WITH U0008

             .

             .

    LOADENV  DC     CL8'LOADENV'                CONSTANT FOR CTTTLD

    TCTADDR  DS     A                              ADDRESS OF TCT

Code sample for Media Database OPEN Request

            CALL   CTTTLD,(LOADENV,TCTADDR,0,0)   Load the TCT

             .

             .

             L      R12,TCTADDR

    OPENMDB  CTTIOS ANY,OPEN,ENV=$ENV,TCT=(R12),               Open the MDB  *

                    RC=RESCODE,MF=(E,IOSLIST)

             .

             .

    IOSLIST  CTTIOS MF=L

    $ENV     DC     CL4'USER'                     Environment specification

    TCTADDR  DS     A                             Address of TCT

    RESCODE  DS     F

    LOADENV  DC     CL8'LOADENV'               Constant for CTTTLD

Note: The return code from the CTTTLD macro must also be checked.

Code sample for CLOSE Request

    CLOSEMDB        CTTIOS ANY,CLOSE,MF=(E,IOSLIST)

                    .

                    .

    IOSLIST         CTTIOS MF=L

Keyed Reading From the Media Database

Control‑M/Tape base level API provides keyed access to data residing in the Media Database. Keyed access is achieved using the indexes, as explained above.

The example below shows samples for keyed access requests from the Media Database.

Code sample for "Read by Volser" Request

             L      R2,=A(VOLKEY)               Volume key field

             USING  DVX,R2

             XC     VOLKEY,VOLKEY

             MVC    DVXVOLSR,=C'123456'         Prepare vol. key

             LA     R15,=A(L'DVXVOLSR)          Length of volser

    READVOL  CTTIOS VOL,READ,KEY=VOLKEY,RC=RESCODE,REC=VOLREC,  Read from MDB *

                    KEYLEN=(R15),MF=(E,IOSLIST)

             LTR    R15,R15                     Was read OK?

             BNZ    NOTFOUND                    No - treat accordingly

             .

             .

    VOLKEY   DS     XL(DVXLEN)                  Vol. index key

    VOLREC   DS     XL(DVLLEN)                  Vol. record buffer

    RESCODE  DS     F                           CTTIOS reason code

    IOSLIST  CTTIOS MF=L                        CTTIOS list form

             .

             .

    * Control‑M/TAPE MAPPING MACROS

             CTTDVL                             Vol. data record

             CTTDVX                             Vol. index record

             CTTDBTP                            CTTIOS parameters block

Sample "Read by Dataset Name" Request

Since D‑type indexes are non‑unique (that is, more than one dataset can have the same name), the sample shown below reads only the record of the first dataset in the Media Database with the specified name.

Code sample for "Read by Dataset Name" Request

             LA     R2,DSNKEY                   D.S. key field

             USING  DDX,R2

             XC     DSNKEY,DSNKEY

             MVC    DDXDSN,=CL44'CTT.SAMPLE.FILE'    Prepare D.S. key

             LA     R15,=A(L'DDXDSN)

             CTTIOS DS,READ,KEY=DSNKEY,REC=DSNREC,   Read from MDB        *

                    KEYLEN=(R15),ENQ=Y,MF=(E,IOSLIST)

             LTR    R15,R15                     Was read OK?

             BNZ    NOTFOUND                    No - treat accordingly

             .

             .

    DSNKEY   DS     XL(DDXLEN)                  D.S. index key

    DSNREC   DS     XL(DDSLEN)                  D.S. record buffer

    RESCODE  DS     F                           CTTIOS reason code

    IOSLIST  CTTIOS MF=L                        CTTIOS list form

             .

             .

    * Control‑M/TAPE MAPPING MACROS

             CTTDDS                             D.S. data record

             CTTDDX                             D.S. index record

             CTTDBTP                            CTTIOS parameters block

Note: In the above example, the KEYTYPE parameter is omitted. It defaults to KEYTYPE=D.

Code sample for "Read by Volser and File Sequence Number" Request

             LA     R2,DLSKEY                   D.S. key field

             USING  DLX,R2

             XC     DLSKEY,DLSKEY

             MVC    DLXVOLSR,=C'123456'         Copy volser

             LA     R3,1                        First D.S. on volser

             STCM   R3,B'0011',DLXLBLNM         Store label number

             LA     R15,=A(L'DLXVOLSR+L'DLXLBLNM)

             CTTIOS DS,READ,KEY=DLSKEY,KEYLEN=(R15),KEYTYPE=L,  Read from MDB   *

                    REC=DSNREC,MF=(E,IOSLIST)

             LTR    R15,R15                     Was read OK?

             BNZ    NOTFOUND                    No - treat accordingly

             .

             .

    DLSKEY   DS     XL(DLXLEN)                  D.S. L‑type key

    DSNREC   DS     XL(DDSLEN)                  D.S. record buffer

    RESCODE  DS     F                           CTTIOS reason code

    IOSLIST  CTTIOS MF=L                        CTTIOS list form

             .

             .

    * Control‑M/TAPE MAPPING MACROS

             CTTDDS                             D.S.data record

             CTTDLX                             D.S.L-type index

             CTTDBTP                            CTTIOS parameters block

Code sample for "Read All Datasets With Specified Prefix Using READNEXT" Request

          LA     R2,DSNKEY                   D.S. key field

         USING  DDX,R2

         L      R3,=A(DSNREC)               Record addressability

         USING  DDS,R3

         XC     DSNKEY,DSNKEY               Clear index

         MVC    DDXDSN(L'DSPRFX),DSPRFX     Dataset's prefix

         LA     R15,=A(L'DSPRFX)            Length of prefix

         CTTIOS DS,READ,KEY=DSNKEY,REC=DSNREC,  Read from MDB            *

                KEYLEN=(R15),MF=(E,IOSLIST)

         .

         .

READNEXT CTTIOS DS,READNEXT,KEY=DSNKEY,     Read next dataset from MDB   *

                REC=DSNREC,MF=(E,IOSLIST)

         LTR   R15,R15                      Successful ?

         BNZ   NOMORE                       No - skip further READNEXTs

         CLC   DDSDSN(L'DSPRFX),DSPRFX      Is it still the same prefix

         BE    READNEXT                     Yes - loop again

NOMORE   EQU                                                              *

         .

         .

DSPRFX   DC    CL15'DATASET.PREFIX.'        Dataset's prefix

DSNKEY   DS    XL(DDXLEN)                   D.S. index key

DSNREC   DS    XL(DDSLEN)                   D.S. record buffer

RESCODE  DS    F                            CTTIOS reason code

IOSLIST  CTTIOS MF=L                        CTTIOS list form

         .

         .

* Control‑M/TAPE MAPPING MACROS

         CTTDDS                             D.S. data record

         CTTDDX                             D.S.index record

         CTTDBTP                            CTTIOS parameters block

Non‑Keyed (RBA‑Based) Reading of the Media Database

Control‑M/Tape Base Level API also provides non‑keyed access to data residing in the Media Database. Non‑keyed access is achieved by using the RBA as the pointer to the desired record in the data file, as explained above.

The example below shows a few sample RBA‑based access requests from the Media Database.

Code sample for "Read a Record" Request

             MVC    RECRBA,=X'000203'           Set the RBA to block 2, record 3

             CTTIOS ANY,READ,RC=RESCODE,REC=AREA,RBA=RECRBA,  Read from MDB    *

                    MF=(E,IOSLIST)

             LTR    R15,R15                     Does record exists ?

             BNZ    NOTFOUND                    No - treat accordingly

             L      R3,=A(AREA)                 R3 points to the record read

             USING  DVL,R3

             CLI    DVLRTYPE,DVLRVL             Is it a volume record ?

             BE     TREATVOL                    Yes - treat accordingly

             CLI    DVLRTYPE,DDSRDS             Is it a dataset record ?

             BE     TREATDS                     Yes - treat accordingly

             B      TREATOTH                    Treat other record types

             .

             .

    AREA     DS     CL(DVLLEN)                  Record buffer (both vol and D.S.)

    RECRBA   DS     XL4                         RBA of record

             .

             .

    * Control‑M/TAPE MAPPING MACROS

             CTTDVL                             Vol. data record

             CTTDDS                             D.S. data record

             CTTDBTP                            CTTIOS parameters block

In this sample

    MVC    RECRBA,DVLRBA             Set RBA of current record

    CTTIOS ANY,READNEXT,REC=AREA,    Read the next record from MDB          *

           RBA=RECRBA,RC=RESCODE,MF=(E,IOSLIST)

    LTR    R15,R15

           .

           .

In this sample

Sample Media Database Access Program

This sample access program sequentially reads all the Media Database using RBAs and produces the following reports:

This program provides a working example for a wide variety of requests available through the CTTIOS macro.

Code sample for Media Database Access Program

        **********************************************************************

        *                                                                    *

        *                            CTTSAM1                                 *

        *                                                                    *

        *                                                                    *

        *   FUNCTION: SAMPLE PROGRAM TO DEMONSTRATE ACCESS TO THE Control‑M/ *

        *             TAPE MEDIA DATABASE  (MDB)  USING THE BASE LEVEL API.  *

        *             THE PROGRAM READS THE MDB AND PRODUCES TWO REPORTS:    *

        *             1. A VOLUME REPORT CONTAINING ALL VOLUMES IN THE MDB   *

        *                AND ALL DATASETS EXISTING ON EACH VOLUME            *

        *             2. A DATASET REPORT CONTAINING ALL DATASETS IN THE MDB *

        *                AND ALL VOLUMES THAT ARE PART OF EACH DATASET       *

        *                                                                    *

        *   RETURN CODES: 00  ‑  OK                                          *

        *                 04  ‑  MDB EMPTY                                   *

        *                 08  ‑  ERROR DURING PROCESSING                     *

        *                                                                    *

        *   LOGIC: THE PROGRAM READS THE MDB SEQUENTIALLY USING RBAS. VOLUME *

        *          AND DATASET RECORDS ARE PROCESSED, AND OTHER RECORDS ARE  *

        *          DISREGARDED.                                              *

        *          FOR VOLUME RECORDS,  THE DATASETS OF THE VOLUME ARE READ, *

        *          USING THE L‑TYPE INDEX.  A READ REQUEST WITH NO LABEL     *

        *          NUMBER  (VOLSER ONLY)  IS PERFORMED FIRST.  THE READNEXT  *

        *          REQUEST IS THEN USED REPEATEDLY UNTIL ALL DATASETS ON THE *

        *          VOLUME ARE PROCESSED.                                     *

        *          FOR DATASET RECORDS,  THE VOLUMES OF THE DATASET ARE READ *

        *          THE FIRST VOLSER IS TAKEN FROM THE DATASET RECORD,  AND   *

        *          AFTERWARDS,  THE VOLUME RECORDS ARE READ,  AND THE        *

        *          NEXT VOLUME RETRIEVED FROM THEM, UNTIL ALL VOLUMES OF THE *

        *          DATASET HAVE BEEN READ.                                   *

        *                                                                    *

        *   DD CARDS:  DAMDB    ‑ MDB DATA FILE                              *

        *              DAMDI    ‑ MDB INDEX FILE                             *

        *              DATRC    ‑ TRACE FILE                                 *

        *              DARPTVOL ‑ VOLUME REPORT FILE                         *

        *              DARPTDSN ‑ DATASET NAMES REPORT FILE                  *

        *                                                                    *

        *   DISCLAIMER:  THIS SAMPLE PROGRAM IS PROVIDED ON AN ‘AS IS’ BASIS,*

        *                WITHOUT ANY WARRANTY, EITHER EXPRESS OR IMPLIED     *

        *                                                                    *

        *   REGISTERS: R13    ‑ BASE                                         *

        *              R2     ‑ MDB RECORD KEY  (WHERE APPLICABLE)           *

        *              R3     ‑ MDB RECORD BUFFER                            *

        *                                                                    *

        *   ATTRIBUTES: AMODE 31                                             *

        *               RMODE 24                                             *

        *                                                                    *

        *   TO COMPILE, LINK AND RUN THE PROGRAM:                            *

        *                                                                    *

        *   //CTTSAM1 JOB ...                                                *

        *   //        JCLLIB  ORDER=IOA.PROCLIB             <<<----- CHANGE  *

        *   //        INCLUDE MEMBER=IOASET                                  *

        *   //ASM     EXEC IOAASM                                            *

        *   //C.SYSIN   DD DISP=SHR,DSN=&ILPREFA..SAMPLE(CTTSAM1)            *

        *   //L.SYSLMOD DD DISP=SHR,DSN=YOUR.LOAD.LIBRARY   <<<----- CHANGE  *

        *   //L.SYSIN   DD *                                                 *

        *      INCLUDE SYSLIB(CTTTRC)                                        *

        *      INCLUDE SYSLIB(CTTTLD)                                        *

        *     MODE RMODE(24),AMODE(31)                                       *

        *     ENTRY CTTSAM1                                                  *

        *     NAME CTTSAM1(R)                                                *

        *   //*                                                              *

        *   //RUN EXEC PGM=CTTSAM1,COND=(0,NE),REGION=60M                    *

        *   //STEPLIB  DD DISP=SHR,DSN=YOUR.LOAD.LIBRARY    <<<----- CHANGE  *

        *   //         DD DISP=SHR,DSN=&STEPLIB                              *

        *   //DAPARM   DD DISP=SHR,DSN=&ILPREFA..PARM                        *

        *   //         DD DISP=SHR,DSN=&ILPREFA..IOAENV                      *

        *   //DAMDB    DD DISP=SHR,DSN=&DBPREFT..MDBD.E000                   *

        *   //DAMDI    DD DISP=SHR,DSN=&DBPREFT..MDBI.E000                   *

        *   //DATRC    DD DISP=SHR,DSN=&DBPREFT..TRC                         *

        *   //DARPTVOL DD SYSOUT=*                                           *

        *   //DARPTDSN DD SYSOUT=*                                           *

        *   //                                                               *

        *                                                                    *

        **********************************************************************

                 EJECT

                 CTTDDS                    D.S.  DATA RECORD

                 CTTDVL                    VOL.  DATA RECORD

                 CTTDVX                    VOL.  INDEX RECORD

                 CTTDDX                    D.S.  INDEX RECORD

                 CTTDLX                    D.S.  L‑TYPE INDEX

                 CTTDBTP                   CTTIOS PARAMETERS BLOCK

                 EJECT

                 MACRO

        &NAME    MYPUT &DCB,&REC

        &NAME    LA    R15,*+6               ADDRESS FOLLOWING BASSM

                 BASSM R14,R15               CHANGE AMODE

                 PUT   &DCB,&REC             PUT THE DESIRED RECORD

                 LA    R15,*+10              ENDING ADDRESS

                 O     R15,=X'80000000'

                 BSM   0,R15

                 MEND

        **********************************************************************

                 EJECT

        CTTSAM1  AMODE 31

        CTTSAM1  RMODE 24

        CTTSAM1  CSECT

                 BEGIN *,EQUR=YES

                 CTTLEVEL

                 SPACE 3

        ***

        * INITIALIZE PROGRAM ‑ LOAD THE TCT AND OPEN FILES

        ***

                 CALL  CTTTLD,(LOADENV,TCTADDR,0,0)  LOAD THE TCT

                 LTR   R15,R15             SUCCESSFUL ?

                 BNZ   LTCTFAIL            NO ‑ TERMINATE

                 SPACE 3

                 OPEN  (RPTVOL,OUTPUT)     OPEN VOLUME REPORT OUTPUT FILE

                 LTR   R15,R15             SUCCESSFUL ?

                 BNZ   OUTERROR            NO ‑ TERMINATE

                 OPEN  (RPTDSN,OUTPUT)     OPEN DATASET REPORT OUTPUT FILE

                 LTR   R15,R15             SUCCESSFUL ?

                 BNZ   OUTERROR            NO ‑ TERMINATE

                 MYPUT RPTVOL,VOLMSG       PRINT VOLUME REPORT HEADER

                 MYPUT RPTDSN,DSNMSG       PRINT DATASET REPORT HEADER

                 SPACE 3

                 L     R12,TCTADDR

                 MVC   MSGOP,=CL8'OPEN'

                 CTTIOS ANY,OPEN,ENV=$ENV,              OPEN MDB            *

                        TCT=(R12),RC=RESCODE,MF=(E,IOSLIST)

                 LTR   R15,R15             SUCCESSFUL ?

                 BNZ   MDBERROR            NO ‑ TERMINATE

                 SPACE  3

        ***

        * SEQUENTIAL READING OF THE MDB,  BY RBA

        ***

                 MVC   RECRBA,RBA0         START WITH THE FIRST RECORD

                 MVC   MSGOP,=CL8'READ'

                 CTTIOS ANY,READ,RC=RESCODE,REC=AREA,RBA=RECRBA,  *

                       MF=(E,IOSLIST)  READ THE FIRST RECORD

                 LTR   R15,R15             SUCCESSFUL ?

                 BZ    READOK              YES ‑ PROCESS THE NEXT RECORD

                 CH    R15,=H'4'           WAS IT BECAUSE FIRST RECORD IS FREE?

                 BH    MDBERROR            NO ‑ TERMINATE                      *

                                           OTHERWISE TRY TO READ THE NEXT ONE

                 MVC   MSGOP,=CL8'READNEXT'

                 CTTIOS ANY,READNEXT,RC=RESCODE,REC=AREA,  READ NEXT RECORD     *

                       RBA=RECRBA,MF=(E,IOSLIST)

                 LTR   R15,R15             WAS READNEXT SUCCESSFUL ?

                 BZ    READOK              YES ‑ PROCESS THE RECORD

                 CH    R15,=H'4'           E.O.F ?

                 BE    MDBEMPTY            YES ‑ MDB IS EMPTY

                 B     MDBERROR            OTHERWISE ‑ TERMINATE

                 SPACE 3

        ***

        * LOOP ON ALL RECORDS

        ***

        READOK   EQU   *

                 L     R3,=A(AREA)  ESTABLISH ADDRESSABILITY

                 USING DVL,R3              TO THE RECORD BUFFER

                 CLI   DVLRTYPE,DVLRVL     IS THIS A VOLUME RECORD ?

                 BE    TREATVOL            YES ‑ TREAT ACCORDINGLY

                 CLI   DVLRTYPE,DDSRDS     IS THIS A DATASET RECORD ?

                 BE    TREATDS             YES ‑ TREAT ACCORDINGLY

        READNEXT EQU   *

                 MVC   MSGOP,=CL8'READNEXT'

                 CTTIOS ANY,READNEXT,RC=RESCODE,REC=AREA,  READ NEXT RECORD     *

                       RBA=RECRBA,MF=(E,IOSLIST)

                 LTR   R15,R15             WAS READ SUCCESSFUL ?

                 BZ    READOK              YES ‑ PROCCESS THIS RECORD

                 CH    R15,=H'4'           E.O.F ?

                 BE    EODAD               YES ‑ ISSUE MESSAGE

                 B     MDBERROR            OTHERWISE TERMINATE

                 DROP  R3

                 SPACE 3

        ***

        * TREAT ONE VOLUME RECORD ‑ PRINT ALL ITS DATASETS

        ***

        TREATVOL EQU   *

                 USING DVL,R3              ESTABLISH ADDRESSABILITY

                 MVC   VOLUME,DVLVOLSR     MOVE VOLSER TO OUTPUT RECORD

                 MYPUT RPTVOL,OUTVOL

                 TM    DVLSTAT,DVLSSCR     IS IT SCRATCH ?

                 BNO   GETDSNS             NO ‑ GET DATASETS ON THE VOLUME

                 MVC   DSNAME,SCRIND       ELSE ‑ ISSUE SCRATCH MESSAGE

                 MYPUT RPTVOL,OUTDSN       PRINT THE SCRATCH MESSAGE

                 B     ENDVOL              END VOLUME PROCESSING

        GETDSNS  EQU   *

                 LA    R2,DLSKEY           ESTABLISH ADDRESSABILITY

                 USING DLX,R2              TO D.S.  L‑TYPE INDEX

                 XC    DLSKEY,DLSKEY       CLEAR INDEX FIELD

                 MVC   DLXVOLSR,DVLVOLSR   MOVE VOLSER TO KEY FIELD

                 DROP  R3                  VOLUME RECORD NOT NEEDED ANY MORE

                 LA    R15,=A(L'DLXVOLSR)

                 MVC   MSGOP,=CL8'READ'

                 CTTIOS DS,READ,KEY=DLSKEY,  READ FROM MDB                     *

                       RC=RESCODE,                               *RC           *

                       KEYTYPE=L,KEYLEN=(R15),REC=AREA,MF=(E,IOSLIST)

                 CH    R15,=H'4'                                 *NFD

                 BE    ENDVOL                                    *NFD1

                 BH    MDBERROR                                  *NFD

        PRINTDSN EQU   *

                 USING DDS,R3              ADDRESSABILITY  (R3‑>>RECORD BUFFER)

                 MVC   DSNAME,DDSDSN       MOVE DSNAME TO OUTPUT RECORD

                 MYPUT RPTVOL,OUTDSN       PRINT IT

                 MVC   MSGOP,=CL8'READNEXT'

                 CTTIOS DS,READNEXT,KEY=DLSKEY,  READ NEXT RECORD FROM MDB     *

                       RC=RESCODE,                               *RC           *

                       KEYTYPE=L,REC=AREA,MF=(E,IOSLIST)

                 LTR   R15,R15             SUCCESSFUL ?

                 BZ    PROCDSN             YES ‑ PROCESS DSN

                 CH    R15,=H'4'           NO ‑ WAS IT BECAUSE THE END OF MDB ?

                 BH    MDBERROR            NO ‑ ISSUE AN ERROR MESSAGE

                 B     ENDVOL              YES ‑ PROCESS NEXT VOLUME

        PROCDSN  EQU   *

                 CLC   DLXVOLSR,VOLUME     ARE WE STILL IN THE SAME VOLUME ?

                 BE    PRINTDSN            YES ‑ PRINT IT AND PROCESS NEXT DS

        ENDVOL   EQU   *

                 B     READNEXT            GO TO GET NEXT RECORD

                 SPACE 3

        ***

        * TREAT ONE DATASET RECORD ‑ PRINT ALL ITS VOLUMES

        ***

        TREATDS  EQU   *

                 USING DDS,R3              ESTABLISH ADDRESSABILITY

                 MVC   DSNAME,DDSDSN       MOVE DSNAME TO OUTPUT RECORD

                 MYPUT RPTDSN,OUTDSN       PRINT IT

                 MVC   VOLUME,DDSVOLSR     MOVE FIRST VOLSER TO MESSAGE

                 MYPUT RPTDSN,OUTVOL       PRINT MESSAGE

                 LH    R4,DDSVOLS#         NUMBER OF VOLUMES IN DATASET

                 CH    R4,=H'1'            IS THERE ONLY ONE VOL IN DATASET ?

                 BNH   ENDDSN              YES ‑ END PROCESSING OF DATASET

                 DROP  R3                  ADDRESSABILITY NOT NEEDED ANY MORE

                 SPACE 3

        ***

        * FIND ALL VOLUMES OF DATASET

        ***

                 LA    R2,DVXKEY           ESTABLISH ADDRESSABILITY

                 USING DVX,R2              TO VOLUME INDEX FIELD

                 USING DVL,R3              AND TO VOLUME RECORD

                 XC    DVXKEY,DVXKEY       CLEAR VOLUME KEY FIELD

                 BCTR  R4,0                DECREMENT VOL COUNT  (1 PRINTED)

        NEXTVOL  EQU   *

                 MVC   DVXVOLSR,VOLUME

                 LA    R15,=A(L'DVXVOLSR)

                 MVC   MSGOP,=CL8'READ'

                 CTTIOS VOL,READ,KEY=DVXKEY,  READ FROM MDB                    *

                       RC=RESCODE,                                             *

                       REC=AREA,KEYLEN=(R15),MF=(E,IOSLIST)

                 CH    R15,=H'4'

                 BE    ENDDSN

                 BH    MDBERROR

                 MVC   VOLUME,DVLNEXT      NEXT VOLUME  (PREV ALREADY PRINTED)

                 MYPUT RPTDSN,OUTVOL       PRINT THE VOLUME SERIAL

                 BCT   R4,NEXTVOL          AND GO GET NEXT VOLUME  (IF ANY)

        ENDDSN   EQU   *                   END OF DATASET PROCESSING

                 B     READNEXT            GO TO GET NEXT RECORD

                 DROP  R3

                 SPACE 3

        *

        MDBERROR EQU *

                 LR    R5,R15

                 CVD   R5,DOUBLE

                 UNPK  MSGRC(2),DOUBLE+6(2)

                 OI    MSGRC+1,X'F0'

        *

                 L     R5,RESCODE

                 CVD   R5,DOUBLE

                 UNPK  MSGRSN(5),DOUBLE+5(3)

                 OI    MSGRSN+4,X'F0'

        *

                 IOAEDIT 'CTT200S _ FAILED FOR DAMDB DATASET.',(MSGOP,8),      *

                       INTO=MDBERR1+8,REGSAVE=YES,MF=(E,WORKEDIT)

        MDBERR1  WTO   'CTT200S   OPER   FAILED FOR DAMDB DATASET.'

        *

                 IOAEDIT '        RC=_, REASON=_',(MSGRC,2,MSGRSN,5),  ,       *

                       INTO=MDBERR2+8,REGSAVE=YES,MF=(E,WORKEDIT)

        MDBERR2  WTO   '        RC=XX,  REASON=YYYYY'

        *

                 B     RET8

        OUTERROR WTO   'UNABLE TO OPEN OUTPUT FILE'

                 B     RET8

        LTCTFAIL WTO   'TCT LOAD FAILED'

                 B     RET8

        MDBEMPTY WTO   'MDB IS EMPTY'

                 B     RET4

        EODAD    EQU   *

                 MYPUT RPTVOL,EOFMSG

                 MYPUT RPTDSN,EOFMSG

                 CLOSE  (RPTVOL,,RPTDSN)  CLOSE OUTPUT FILES

                 CTTIOS ANY,CLOSE,                                             *

                 RC=RESCODE,                                                   *

                 MF=(E,IOSLIST)

        CALL     CTTTLD,(DELETE,TCTADDR,0,0)   FREE TCT AREA

                 B     RET0

        RET8     LA    R15,8

                 B     ENDPGM

        RET4     LA    R15,4

                 B     ENDPGM

        RET0     SLR   R15,R15

                 B     ENDPGM

        ENDPGM   EQU   *

                 SPACE 3

                 BRTRN  (15)

                 EJECT

        ***

        * CONSTANTS

        ***

        RBA0     DC    XL4'00000100'       RBA OF FIRST RECORD IN DATABASE

        $ENV     DC    CL4'SAM1'

        LOADENV  DC    CL8'LOADENV'

        DELETE   DC    CL8'DELETE'

        PATTERN  DC    X'402120202020'

                 SPACE 3

        ***

        * DATA AREAS

        ***

        AREA     DS    CL(DVLLEN)  RECORD BUFFER  (BOTH VOL AND D.S.)

        RECRBA   DS    XL4                 RBA OF RECORD

        RESCODE  DS    F                   REASON CODE OF PROGRAM

        DLSKEY   DS    XL(DLXLEN)  D.S.  L‑TYPE INDEX KEY

        DVXKEY   DS    XL(DVXLEN)  VOL.  INDEX RECORD

        TCTADDR  DS    A                   ADDRESS OF THE TCT

        DOUBLE   DS    D

        MSGRC    DS    CL6                 RC FROM CTTIOS FOR CTT200S

        MSGRSN   DS    CL6                 REASON CODE FOR CTT200S

        MSGOP    DS    CL8                 OPERATION FOR CTT200S

                 DS    0F

        WORKEDIT DS    CL256               OPERATION FOR CTT200S

                 SPACE 3

        ***

        * OUTPUT MESSAGES

        ***

        OUTDSN   DS    CL80                DATASET OUTPUT RECORD

                 ORG   OUTDSN

                 DC    CL6' DSN= '         RECORD PREFIX

        DSNAME   DS    CL(L'DDSDSN)        DATASET NAME

                 DC    CL(80+OUTDSN‑*)' ' FILLER

                 ORG

        OUTVOL   DS    CL80                VOLUME OUTPUT RECORD

                 ORG   OUTVOL

                 DC    CL6' VOL= '         RECORD PREFIX

        VOLUME   DS    CL(L'DVLVOLSR)      VOLUME SERIAL

                 DC    CL(80+OUTVOL‑*)' ' FILLER

                 ORG

        VOLMSG   DC    CL80' *** VOLUME REPORT ***'

        DSNMSG   DC    CL80' *** DATASET REPORT ***'

        EOFMSG   DC    CL80' *** END OF MDB WAS REACHED *** '

        SCRIND   DC    CL44' *** THIS IS A SCRATCH VOLUME ***'

                 SPACE 3

        ***

        * CTTIOS IN LIST FORM

        ***

        IOSLIST  CTTIOS MF=L

                 SPACE 3

        ***

        * DATA Control BLOCKS

        ***

        RPTVOL   DCB   DDNAME=DARPTVOL,MACRF=PM,LRECL=81,RECFM=FBA,            *

                       DSORG=PS

        RPTDSN   DCB   DDNAME=DARPTDSN,MACRF=PM,LRECL=81,RECFM=FBA,            *

                       DSORG=PS

                 END

        High Level API

Calling programs that access the Control‑M/Tape Media Database using basic level API must load a Control‑M/Tape Control Table and allocate the Media Database components. High Level API performs these actions automatically.

Parent Topic

Base Level API