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
Code sample for "Read Next Record" Request
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 |