This example uses the CVAFDIR macro to read a DSCB of a given data
set name and determines whether the DSCB is for a partitioned data
set. The address of the 44-byte data set name is supplied to the program
in register 5 (labeled RDSN in the example). The address of a DEB
open to the VTOC is supplied to the program in register 4 (labeled
RDEB in the example).
The buffer list is in the program and is generated by the ICVAFBFL
macro. The DSCB buffer is in the program and is generated by the IECSDSL1
macro.
Figure 1. Example of CVAFDIR Macro
with VTOC Part 1 of 2 DIRXMP1 CSECT
STM 14,12,12(RSAVE)
BALR 12,0
USING *,12
ST RSAVE,SAVEAREA+4
LA RWORK,SAVEAREA
ST RWORK,8(,RSAVE)
LR RSAVE,RWORK
************************************************************
*
* REGISTERS
*
************************************************************
REG1 EQU 1 REGISTER 1
RWORK EQU 3 WORK REGISTER
RDEB EQU 4 DEB ADDRESS
RDSN EQU 5 ADDRESS OF DATA SET NAME
RSAVE EQU 13 SAVE AREA ADDRESS
REG15 EQU 15 RETURN CODE REGISTER 15
************************************************************
*
* RETURN CODES
*
************************************************************
PDSRTN EQU 0 DATA SET A PDS RETURN CODE
NOTFND EQU 4 DATA SET NOT FOUND RETURN CODE
NOTPDS EQU 8 DATA SET NOT A PDS RETURN CODE
UNEXPECD EQU 12 UNEXPECTED ERROR RETURN CODE
************************************************************
*
* READ DSCB INTO DS1FMTID.
* DATA SET NAME ADDRESS SUPPLIED IN RDSN.
* ADDRESS OF DEB OPEN TO VTOC SUPPLIED IN RDEB.
* DETERMINE IF DATA SET IS A PARTITIONED DATA SET.
* THIS PROGRAM IS NEITHER REENTRANT NOR REUSABLE.
*
************************************************************
XC BUFLIST(BFLHLN+BFLELN),BUFLIST ZERO BUFFER LIST
OI BFLHFL,BFLHDSCB DSCBS TO BE READ WITH BUFFER LIST
MVI BFLHNOE,1 ONE BUFFER LIST ENTRY
LA RWORK,DS1FMTID ADDRESS OF DSCB BUFFER
ST RWORK,BFLEBUF PLACE IN BUFFER LIST
OI BFLEFL,BFLECHR CCHHR OF DSCB RETURNED BY CVAF
MVI BFLELTH,DSCBLTH DATA PORTION OF DSCB READ - DSN *
SUPPLIED IN CVPL
MVC DS1DSNAM,0(RDSN) MOVE IN DATA SET NAME TO WORKAREA
CVAFDIR ACCESS=READ,DSN=DS1DSNAM,BUFLIST=BUFLIST,DEB=(RDEB)
USING CVPL,REG1 ADDRESSABILITY TO CVPL
LTR REG15,REG15 ANY ERROR
BZ NOERROR BRANCH IF NOT
Figure 2. Example of CVAFDIR Macro
with VTOC Part 2 of 2 ************************************************************
*
* DETERMINE WHAT ERROR IS
*
************************************************************
C REG15,ERROR4 IS RETURN CODE 4
BNE OTHERERR BRANCH IF NOT 4
CLI CVSTAT,STAT001 IS IT DATA SET NAME NOT FOUND?
BNE OTHERERR BRANCH IF NOT
DROP REG1 ADDRESSABILITY TO CVPL NOT NEEDED
************************************************************
*
* DATA SET NAME NOT FOUND
*
************************************************************
L RSAVE,4(,RSAVE)
RETURN (14,12),RC=NOTFND SET UP DATA SET NOT FOUND ERROR
NOERROR EQU * DSCB READ
MVC F1CCHHR,BFLEARG MOVE CCHHR OF FORMAT 1/4 DSCB TO *
WORKAREA
CLI DS1FMTID,C'4' IS DSCB A FORMAT 4 DSCB
BE NOTF1 BRANCH IF YES. NOT A FORMAT 1
TM DS1DSORG,DS1DSGPO IS FORMAT 1 DSCB FOR PARTITIONED *
DATA SET
BO PDS BRANCH IF PDS
NOTF1 EQU * DSCB IS NOT A PDS
L RSAVE,4(,RSAVE)
RETURN (14,12),RC=NOTPDS SET UP NOT PDS RETURN CODE
PDS EQU * DATA SET IS PARTITIONED
L RSAVE,4(,RSAVE)
RETURN (14,12),RC=PDSRTN SET UP PDS RETURN CODE
OTHERERR EQU * UNEXPECTED ERROR
L RSAVE,4(,RSAVE)
RETURN (14,12),RC=UNEXPECD
ERROR4 DC F'4' ERROR RETURN CODE 4
BUFLIST ICVAFBFL DSECT=NO BUFFER LIST
IECSDSL1 (1) FORMAT 1 DSCB DATA SET NAME AND *
BUFFER
DSCBLTH EQU *-IECSDSL1-L'DS1DSNAM LENGTH OF DATA PORTION OF DSCB
F1CCHHR DS XL5 CCHHR OF DSCB
SAVEAREA DS 18F SAVE AREA
CVPL ICVAFPL , CVPL MAPPING MACRO
END