Data Set Name user exit


When you dynamically allocate the output change accumulation or incremental image copy data set, you can allow the Change Accumulation utility to generate the data set name, or you can use the Data Set Name user exit (CAP$DSN or RCU$DSN) routine.


Related topics

If input image copy and input change accumulation data set names are present, the Change Accumulation utility will pass the names to the Data Set Name user exit. This action provides an opportunity to create a second image copy data set and let you assign the name to the second data set.

A sample user exit is supplied in the product sample library. It uses an assembly macro ($RCUDSN) that assists you in writing the user exit routine. The $RCUDSN macro is explained beginning on RCUDSN-macro.

The CAP$DSN Data Set Name user exit is unique to the Change Accumulation utility. You can also use the RCU$DSN Data Set Name user exit. The BMC Image Copy utility and Recovery utility can also use RCU$DSN. This capability allows you to have unique data set name user exits for each product or one common Data Set Name user exit for all three products.

Important

The Change Accumulation utility passes processing control to the exit routine; therefore, no product defaults will be used for data set naming conventions. You should provide all data set naming requirements in your routine, especially situations that use the multivolume (VOLCOPY keyword) or multiple image copy features (IC, STKIC keywords). Examples ($RCUDSN macro) shows an example of specifications for a multivolume situation.

Keywords

There are no keywords associated with the Data Set Name user exit.

Considerations

Provide a load module named CAP$DSN or RCU$DSN.

The Change Accumulation utility first searches for the CAP$DSN load module in the STEPLIB library concatenation. If this search fails, the utility then searches for RCU$DSN. If a CAP$DSN or RCU$DSN load module is found, the utility calls it prior to the dynamic allocation of the output data set. When the user exit receives control, register 1 points to parameter areas containing information about the data set being allocated. The user exit routine may examine the information supplied to help it determine the data set name to use.

If you specify the SCAN(Y) keyword, the utility validates the generated data set name and displays the name in the processing log. You can use this keyword to test changes to the exit routine without building the output data set.

The following restrictions apply:

  • CAP$DSN or RCU$DSN must be reentrant. It may be called by multiple change accumulation tasks.
  • CAP$DSN or RCU$DSN must save all registers upon entry and restore them prior to returning. On return, register 15 must contain a return code. A return code of zero indicates normal completion of the user exit. A nonzero return code indicates an error; the Change Accumulation utility abends the associated change accumulation or incremental image copy task.
  • CAP$DSN or RCU$DSN must make no assumptions about the addressing mode used at run time. It may be called in either 24- or 31-bit mode and must return in the same mode. The parameter area passed to the exit routine resides in 24-bit storage.
  • The register save area provided in register 13 at entry is prechained. The word at offset 8 from register 13 already contains the address of the next save area available and may be loaded by the user exit routine. In any case, CAP$DSN or RCU$DSN must not modify the word at offset 8 from register 13 at entry.

Assemble and link Data Set Name user exit

The following figure shows an example of how to assemble and link the Data Set Name user exit (RCU$DSN or CAP$DSN).

//*+---------------------------------------------------+
//*|                   ASSEMBLE                        |
//*+---------------------------------------------------+
//ASM    EXEC PGM=IEV90,PARM='LOAD,NODECK,BUFSIZE(MAX)'
//SYSLIB   DD  DSN=SYS1.MODGEN,DISP=SHR,DCB=BLKSIZE=19040
//         DD  DSN=SYS1.MACLIB,DISP=SHR
//         DD  DSN=SYS1.AMODGEN,DISP=SHR
//SYSLIN   DD DSN=&&LOADDK,UNIT=SYSDA,SPACE=(CYL,1),DISP=(,PASS)
//SYSPRINT DD SYSOUT=*
//SYSUT1   DD UNIT=SYSDA,DISP=(,DELETE),SPACE=(CYL,(20,10))
//SYSIN    DD DSN=your.ASM(mbr),DISP=SHR
//*+---------------------------------------------------------+
//*|                       LINK                              |
//*+---------------------------------------------------------+
//LINK   EXEC PGM=IEWL,REGION=512K,COND=(4,LT,ASM),
//       PARM='SIZE=(384K,96K),XREF,LIST,REFR,LET,NCAL,RENT'
//SYSPRINT DD SYSOUT=*,DCB=(RECFM=FBA,LRECL=121,BLKSIZE=605)
//SYSUT1   DD UNIT=SYSDA,SPACE=(CYL,(5,1))
//SYSLMOD  DD DSN=your.LOAD,DISP=SHR
//SYSLIB   DD DSN=your.LOAD,DISP=SHR
//SYSLIN   DD DSN=&&LOADDK,DISP=(SHR,DELETE)
//         DD DDNAME=SYSIN
//SYSIN    DD *
MODE AMODE(31),RMODE(ANY)

 

Tip: For faster searching, add an asterisk to the end of your partial query. Example: cert*