z/OS DFSMSdfp Advanced Services
Previous topic | Next topic | Contents | Contact z/OS | Library | PDF


Example of Using the CVAFDIR Macro with a VTOC

z/OS DFSMSdfp Advanced Services
SC23-6861-01

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

Go to the previous page Go to the next page




Copyright IBM Corporation 1990, 2014