Examples of dynamically allocated data set names
This topic provides examples.
In the following figure, the first prototype format is used if the data set being produced is type IC1, stacking is requested, and the data set is not a GDG.
$RCUDSN macro—prototype selection
ICP$DSN CSECT
*
*
*===================================================================*
* IMAGE COPY #1 PROTOTYPES *
*===================================================================*
*
*----------------- STACKED IMAGE COPIES (BUT NOT A GDG) ----------
$RCUDSN '#################..########..########..D#####..T###X
###',FIELDS=(PREFIX,DBD,DSG,DATE,RTIME),
TYPE=IC1,STKIC=Y,GDG=N
*----------------- STACKED, GDG -------------------------
$RCUDSN '#################..########',
FIELDS=(PREFIX,DBD),
TYPE=IC1,STKIC=Y,GDG=Y
*----------------- NON-STACKED, OR GDG ---------------------------
$RCUDSN '#################..########..########',
FIELDS=(PREFIX,DBD,DSG),
TYPE=IC1
*
*===================================================================*
* ANYTHING OTHER THAN AN IC1 DATA SET RETURNS WITH A RC 8. *
* SELECTION OF ONE OF THE PROTOTYPES CAUSES BRANCH TO RC 0 RTN. *
*===================================================================*
*
*
$RCUDSN EXIT
*
END
*
The second prototype format is used if the data set being produced is type IC1, stacking is requested, and the data set is a GDG. The third prototype format is used if the data set being produced is type IC1, and stacking is not requested.
If none of the prototypes are selected, the exit returns to the main task with a nonzero return code, and the main task indicates that the copy for which the exit was invoked will be disabled. In this example, if two copies are requested, the second copy will be disabled because the exit generates DSNs only for the first copy.
In the following figure, offsets within fields are used for prototype substitution (JOB+3), and the TYPE keyword allows for general comparisons based on the character string provided. For example, with TYPE= IC, the prototype is used for any image copy (IC1 through IC10).
$RCUDSN macro with FIELDS offsets and general TYPE values
$RCUDSN ENTRY
*
*====================================================================*
* PROTOTYPE FOR ANY IMAGE COPY *
* (STACKED/NON-STACKED; GDG/NON-GDG; IC1-IC10) *
*====================================================================*
*
$RCUDSN '####################..#####..####..########..######X
##',FIELDS=(PREFIX,JOB+3,TYPE,DBD,DSG),TYPE=IC
*
* THE TYPE PARAMETER AS USED HERE COMPARES ONLY TWO CHARACTERS -- 'IC'
*====================================================================*
* RETURN TO IMAGE COPY PLUS *
*====================================================================*
*
$RCUDSN EXIT
END
In the following figure, assembler coding is used in addition to the $RCUDSN macro. The second prototype includes a user-defined literal string--OFFSIT--in the generated data set name. A field offset reference—TYPE+2—completes the generated data set name.
$RCUDSN macro with Assembler coding
* THIS EXAMPLE SHOWS NORMAL ASSEMBLER CODING *
* INCORPORATED INTO THE DATA SET NAME EXIT ROUTINE. *
* NOTE THAT THE TESTS PERFORMED BY THE 'CLC' INSTRUCTIONS ARE NOT *
* NECESSARY; THE SAME RESULTS CAN BE ACHIEVED BY PROTOTYPE CODING. *
* 'CLC' IS USED HERE FOR ILLUSTRATION PURPOSES ONLY! *
*====================================================================*
RCU$DSN CSECT
$RCUDSN ENTRY
CLC TYPE(3),=C'IC1' IS THIS FOR IC1?
BE IC1NAME YES - BRANCH
CLC TYPE(2),=C'IC' IS THIS FOR ANY OTHER IMAGE COPY?
BE OTHER YES - BRANCH
B XITPGM BRANCH TO EXIT - NO PROTOTYPE USED
* THIS WILL CAUSE U4094 ABEND
*
*====================================================================*
* PROTOTYPE FOR IMAGE COPY # 1 *
* NOTE: THE 'CLC' INSTRUCTION AFTER THE ENTRY STATEMENT CAUSES A *
* BRANCH TO THE FOLLOWING LOCATION--IC1NAME--IN THE ASSEMBLER CODE. *
*====================================================================*
IC1NAME DS OH
$RCUDSN '####################..#####..####..########..######X
##',FIELDS=(PREFIX,JOB+3,TYPE,DBD,DSG)
*
*
*====================================================================*
* PROTOTYPE FOR ANY 'OTHER' IMAGE COPY (IC2 - IC10) *
* NOTE: THE 2ND 'CLC' INSTRUCTION AFTER THE ENTRY STATEMENT CAUSES A *
* BRANCH TO THE FOLLOWING LOCATION--OTHER--IN THE ASSEMBLER CODE. *
*====================================================================*
OTHER DS OH
$RCUDSN '####################..########..########..OFFSIT##'X
,FIELDS=(PREFIX,DBD,DSG,TYPE+2)
*
* THIS CONSTRUCTS A DSN WITH THE FORMAT 'PREFIX.DBD.DSG.OFFSIT_', *
* WHERE '_' IS 2-10 (DERIVED FROM THE LAST DIGIT(S) OF 'TYPE') *
*
*====================================================================*
* RETURN TO IMAGE COPY PLUS *
*====================================================================*
*
XITPGM DS OH
$RCUDSN EXIT
END
Following figure shows an example of an exit routine that handles data set naming for a multivolume data set group or area. The table in Data-set-name-construction-for-traditional-image-copies-and-Snapshot-Copies explains the data set naming conventions.
Exit routine for VOLCOPY(Y)
* SAMPLE ICP$DSN EXIT TO HANDLE VOLCOPY(Y) *
*= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + =*
*
ICP$DSN CSECT
$RCUDSN ENTRY
CLC SEQ,=C'001'
BH VOLCOPY
*
*=====================================================================*
* PROTOTYPE FOR STACKED OUTPUT DATA SETS THAT ARE NOT GDG'S *
*=====================================================================*
ICSTK DS 0H
$RCUDSN '#################..########..########..D#####..T###X
###',FIELDS=(PREFIX,DBD,DSG,DATE,RTIME), X
TYPE=IC,STKIC=Y,GDG=N
*
*=====================================================================*
* PROTOTYPE FOR NON-STACKED OUTPUT, OR FOR GDG'S *
*=====================================================================*
ICGDG DS 0H
$RCUDSN '#################################..########', X
FIELDS=(PREFIX,DBD), X
TYPE=IC,STKIC=N
*
*=====================================================================*
* PROTOTYPE FOR 2ND AND SUBSEQUENT EXTENTS OF VOLCOPY(Y) OPERATION *
*=====================================================================*
VOLCOPY DS 0H
$RCUDSN '#################################..########..S###',X
FIELDS=(PREFIX,DBD,SEQ), X
TYPE=IC,STKIC=N
*
$RCUDSN EXIT
END
Related topic