This example uses the CVAFSEQ macro to count the number of VSAM data
sets whose data set names are within the range defined by two supplied
data set names. The addresses of the two data set names are supplied
to the program in registers 6 and 7, labeled RDSN1 and RDSN2, respectively.
The address of a DEB open to the VTOC is supplied in register 4, labeled
RDEB.
The CVAF parameter list is expanded by a list form of the CVAFSEQ
macro. ACCESS=GTEQ is specified on the list form of macro and is,
therefore, not coded in the first execution of the CVPL. Subsequent
executions of the CVPL (at label RELOOP) specify ACCESS=GT.
End of data is tested by comparing the CVSTAT field to the value
of STAT032, which is an equate in the ICVAFPL mapping macro.
The count of VSAM DSCBs matching the data set name criterion
is returned in register 15, unless an error is encountered, in which
case a negative 1 is returned in register 15.
SEQXMP1 CSECT
STM 14,12,12(13)
BALR 12,0
USING *,12
ST 13,SAVEAREA+4
LA RWORK,SAVEAREA
ST RWORK,8(,13)
LR 13,RWORK
************************************************************
*
* REGISTERS
*
************************************************************
REG1 EQU 1 REGISTER 1
RWORK EQU 3 WORK REGISTER
RDEB EQU 4 DEB ADDRESS
RDSN1 EQU 6 ADDRESS OF DATA SET NAME 1
RDSN2 EQU 7 ADDRESS OF DATA SET NAME 2
REG15 EQU 15 RETURN CODE REGISTER 15
************************************************************
*
* COUNT THE NUMBER OF VSAM DATA SETS WHOSE DATA SET NAMES ARE
* BETWEEN DSN1 AND DSN2 INCLUSIVELY.
* RDSN1 CONTAINS ADDRESS OF DSN1.
* RDSN2 CONTAINS ADDRESS OF DSN2.
* ADDRESS OF DEB OPEN TO VTOC SUPPLIED IN RDEB.
*
************************************************************
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
MVI BFLELTH,DSCBLTH DATA PORTION OF DSCB READ - DSN *
SUPPLIED IN CVPL
MVC DS1DSNAM,0(RDSN1) MOVE IN STARTING DATA SET NAME TO *
WORKAREA
XR RWORK,RWORK ZERO COUNT
CVAFSEQ DEB=(RDEB), FIND FIRST DATA SET WHOSE DATA SET*
BUFLIST=BUFLIST, NAME IS GREATER THAN OR EQUAL TO *
EADSCB=OK, THAT OF DSN1 *
MF=(E,CVPL)
LOOP EQU * LOOP UNTIL END OF DATA OR DATA SET *
NAME GREATER THAN DSN2
LTR REG15,REG15 ANY ERROR
BZ TESTDSN BRANCH IF NOT-CHECK DSN LIMIT
************************************************************
*
* DETERMINE WHAT ERROR IS
*
************************************************************
C REG15,ERROR4 IS RETURN CODE 4
BNE OTHERERR BRANCH IF NOT 4
CLI CVSTAT,STAT032 IS IT END OF DATA?
BNE OTHERERR BRANCH IF NOT
************************************************************
*
* END OF DATA
*
************************************************************
B RELEASE RELEASE CVAF RESOURCES AND RETURN
TESTDSN EQU * IS DATA SET NAME GREATER THAN DSN2
CLI DS1FMTID,DS1IDC IS THIS A FORMAT 1 DSCB?
BE CKVSAM BRANCH IF FORMAT 1
CLI DS1FMTID,DS8IDC IS THIS A FORMAT 8 DSCB?
BNE CKLAST BRANCH IF NO. CAN NOT BE VSAM.
CKVSAM EQU * CHECK VSAM
CLC DS1DSNAM,0(RDSN2) HAS LIMIT BEEN REACHED?
BH RELEASE BRANCH IF HIGH TO RELEASE RESOURCES
TM DS1DSORG+1,DS1ORGAM IS DATA SET VSAM
BZ CKLAST BRANCH IF NO-DO NOT COUNT IT
LA RWORK,1(,RWORK) INCREMENT COUNT BY ONE
CKLAST EQU * CHECK IF LAST DATA SET NAME (DSN2)
CLC DS1DSNAM,0(RDSN2) HAS LIMIT BEEN REACHED?
BNH RELOOP BRANCH IF NO-READ NEXT ONE
B RELEASE RELEASE CVAF RESOURCES AND RETURN
RELOOP EQU * READ NEXT DSCB
CVAFSEQ ACCESS=GT, GET DSCB WITH DATA SET NAME *
EADSCB=OK, GREATER THAN THE ONE LAST READ *
MF=(E,CVPL)
B LOOP CHECK RESULTS OF CVAFSEQ
OTHERERR EQU * UNEXPECTED ERROR
************************************************************
*
* UNEXPECTED ERROR PROCESSING
*
************************************************************
LA RWORK,1(0,0) ONE IN RWORK
LNR RWORK,RWORK SET NEGATIVE COUNT INDICATING ERROR
RELEASE CVAFDIR ACCESS=RLSE, RELEASE CVAF BUFFERS/IOAREA *
BUFLIST=0, DO NOT RELEASE USER BUFFER LIST *
IXRCDS=NOKEEP, RELEASE CVAF VIER BUFFERS *
MF=(E,CVPL) RELEASE CVAF I/O AREA
LR REG15,RWORK CURRENT COUNT IS RETURN CODE
L 13,SAVEAREA+4
RETURN (14,12),RC=(15) RETURN CURRENT COUNT
ERROR4 DC F'4' ERROR RETURN CODE 4
BUFLIST ICVAFBFL DSECT=NO BUFFER LIST
IECSDSL1 (1) FORMAT 1 DSCB DATASET NAME AND *
BUFFER
DSCBLTH EQU *-IECSDSL1-L'DS1DSNAM LENGTH OF DATA PORTION OF DSCB
SAVEAREA DS 18F SAVE AREA
CVPL CVAFSEQ ACCESS=GTEQ, READ DSCB WITH DSN GTEQ SUPPLIED DSN *
IXRCDS=KEEP, KEEP VIERS IN STORAGE DURING CALLS *
DSN=DS1DSNAM, SUPPLIED DATA SET NAME *
BUFLIST=BUFLIST, *
EADSCB=OK, *
MF=L
ORG CVPL EXPAND MAP OVER LIST
CVPLMAP ICVAFPL DSECT=NO CVPL MAP
END