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


Example of using the CVAFSEQ macro with an indexed VTOC

z/OS DFSMSdfp Advanced Services
SC23-6861-01

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                                                                    

Go to the previous page Go to the next page




Copyright IBM Corporation 1990, 2014