DWWBKNT REXX procedure

The REXX procedure DWWBKNT performs multiple calls of the CICS VR NOTIFY utility DWWNT for IDCAMS REPRO backups listed in the input data set. It can be used in TSO and in a batch environment.

DWWBKNT has the following three parameters on call:
Input data set name
Specifies the data set with backups list. Each line in the data set has the following format:
Read syntax diagramSkip visual syntax diagramDSNAMEBACKUPNAMEDATETIME
DSNAME
Specifies the fully qualified base cluster name of the VSAM data set that the backup was created for.
BACKUPNAME
Specifies the fully qualified name of the VSAM data set backup.
DATE
Local date in format YYYY/MM/DD.
TIME
Local time in format HHMMSS.
High level qualifier
Specifies the high level qualifier for SDWWLOAD data set.
Preallocation
Specifies (YES or NO) if the product that created the backup preallocated the target data set at the time of the restore. It is an optional parameter, default value is NO.
Figure 1. DWWBKNT REXX sample
/*REXX: ************************************************************/
/*                                                                 */
/* Licensed Materials - Property of IBM                            */
/*                                                                 */
/* 5655-P30             DWWBKNT                                    */
/*                                                                 */
/* (C) Copyright IBM Corp. 2014                                    */
/* (C) Copyright HCL Technologies Ltd. 2025                        */
/*                                                                 */
/* $MAC(DWWBKNT) COMP(P3001): MULTIPLE BACKUP NOTIFICATION         */
/*                                                                 */
/* FUNCTION:  Sample REXX to perform multiple calls of DWWNT       */
/*            for backups listed in the input data set.            */
/*                                                                 */
/* INPUT:                                                          */
/*  1. DSNI - Input data set name                                  */
/*      Layout of each line:                                       */
/*       Sphere data set name       char(44)                       */
/*       One or more blanks                                        */
/*       Backup data set name       char(44)                       */
/*       One or more blanks                                        */
/*       Creation Date (YYYY/MM/DD) char(10)  (e.g., 2013/04/25)   */
/*       One or more blanks                                        */
/*       Creation Time (HHMMSS)     char(6)   (e.g., 030534)       */
/*       One or more blanks                                        */
/*  2. HLQ  - high level qualifier for SDWWLOAD data set           */
/*  3. ALLOCP - YES/NO (default is NO), input parameter for DWWNT  */
/*                                                                 */
/* OUTPUT:                                                         */
/*  Zero return code after successful completion.                  */
/*  Non-zero return code if an error was encountered or            */
/*   DWWNT returns non-zero return code.                           */
/*                                                                 */
/* NOTES:                                                          */
/*  - Creation Date and Creation Time are optional parameters.     */
/*    If specified it is local date and time.                      */
/*  - ALLOCP is optional parameter.                                */
/*  - Product identifier is set to REPRO for VSAM data set backup. */
/*                                                                 */
/* EXAMPLES:                                                       */
/*  1. Invoking the REXX from TSO:                                 */
/*                                                                 */
/*  EXEC 'DWW.CVR520.SDWWCNTL(DWWBKNT)' 'CICSVR.IN DWW.CVR520 YES' */
/*                                                                 */
/*  2. Invoking the REXX in batch:                                 */
/*                                                                 */
/*  //XXXXXXXX JOB ...                                             */
/*  //SETPARM  SET DSNI=CICSVR.IN                                  */
/*  //         SET HLQ=DWW.CVR520                                  */
/*  //         SET ALLOCP=YES                                      */
/*  //REXXDEF  EXEC PGM=IKJEFT01,REGION=0M,                        */
/*  // PARM='DWWBKNT &DSNI &HLQ &ALLOCP'                           */ 
/*  //SYSEXEC  DD DSN=DWW.CVR520.SDWWCNTL,DISP=SHR                 */ 
/*  //SYSTSPRT DD SYSOUT=*                                         */ 
/*  //DWWMSG   DD SYSOUT=*                                         */ 
/*  //SYSTSIN  DD DUMMY                                            */
/*                                                                 */ 
/*******************************************************************/ 
/* CHANGE ACTIVITY:                                                */ 
/*                                                                 */ 
/*  REASON  REL YYMMDD ID        REMARKS                           */ 
/*  R14088  520 120116           Creation                          */ 
/*                                                                 */ 
/*******************************************************************/  
Subcom TSO  
If RC \= 0 Then Do
  Say "*** Couldn't initialize TSO environment" 
  Exit 8  
End  

Address TSO  
Arg DSNI HLQ ALLOCP  
HLQ = Strip(HLQ)  
DSNI = Strip(DSNI)  
ALLOCP = Strip(ALLOCP)  
If ALLOCP = '' Then ALLOCP = 'NO'  
If (DSNI = '')|(HLQ = '')|((ALLOCP \= 'YES')&(ALLOCP \= 'NO')) Then Do  
  Say "*** Please, check the parameters specified"  
  Exit 8  
End  
"FREE  FI(INLIST,DWWIN)" 
"ALLOC FI(DWWMSG) TRACKS SPACE(1,1) LRECL(80)"  
"ALLOC FI(DWWIN) TRACKS SPACE(1,1) LRECL(80)"  
"ALLOC FI(INLIST) DSN('"DSNI"') SHR"  
RCC = RC  
If RCC > 0 Then Do  
  Say '*** Input data set cannot be allocated'  
  Exit RCC  
End  

RCC = 0  
XCC = 0  

S1:Do I=1 by 1 While RCC=0  
     'Execio 1 Diskru INLIST'   
     RCC = RC  
  S2:If RCC = 0 Then Do   
       Pull DSN BN IDATE ITIME REST     
       If REST \= '' Then Do    
         Say '*** Too many input parameters'    
         Exit 12     
       End       
       If IDATE \= '' Then    
         If ITIME \= '' Then    
           Call USD2JJD        /* CONVERT YYYY/MD/DD TO YYYY.DDD */           
         Else Do         
           Say '*** Invalid input date or/and time'        
           Exit 12         
         End     
       Makebuf    
       Queue "  NOTIFY  -"   
       Queue "  DSN("DSN")  -"  
       Queue "  BN("BN")  -"    
       If IDATE \= '' Then       
         Queue "  TIME("OTIME",LOCAL)  -"    
       Queue "  PROD(REPRO) ALLOC("ALLOCP")"     
       If IDATE \= '' Then       
         Execio 5 Diskw DWWIN "(FINI)"   
       Else          
         Execio 4 Diskw DWWIN "(FINI)"    
       Dropbuf  

       CDSN = HLQ".SDWWLOAD(DWWNT)"   
       Address TSO Call "'"CDSN"'"     
       XCC = RC     
       If XCC > 0 Then Do      
         RCC = XCC      
         Say '*** DWWNT terminated. RC='XCC     
       End    
  E2:End  
E1:End   

'Execio 0 Diskru INLIST (FINI'  
"FREE FI(INLIST,DWWIN,DWWMSG)"  
Say '*** NOTIFY exec terminated. RC='XCC  
Exit XCC  
/*******************************************************************/ 
/*         CONVERT YYYY/MD/DD TO YYYY.DDD                          */ 
/*******************************************************************/ 
USD2JJD: 
 Parse var IDATE YYYY '/' MD '/' DD 
 Parse var ITIME HH 3 MM 5 SS 
Select 
  When (MD=01) Then JAY=DD 
  When (MD=02) Then JAY=DD+31 
  When (MD=03) Then JAY=DD+59 
  When (MD=04) Then JAY=DD+90 
  When (MD=05) Then JAY=DD+120  
  When (MD=06) Then JAY=DD+151  
  When (MD=07) Then JAY=DD+181 
  When (MD=08) Then JAY=DD+212 
  When (MD=09) Then JAY=DD+243  
  When (MD=10) Then JAY=DD+273  
  When (MD=11) Then JAY=DD+304 
  When (MD=12) Then JAY=DD+334 
Otherwise Do  
  Say '*** Invalid input date' 
  Exit 12 
End 
End 
If (YYYY // 4 = 0) Then           /* THIS IS A LEAP YEAR    */ 
  If (MD > 2) Then                /* AND PAST FEBRUARY      */   
    JAY = JAY+1                   /* JULIAN IS ONE EXTRA    */ 
DDD = Right(JAY,3,0) 
OTIME = YYYY'.'DDD'/'HH':'MM':'SS 
Return