Dynamic output programming example
The following example uses dynamic output to create an output descriptor
and allocates a SYSOUT data set that references the descriptor. Then
it deletes the descriptor. The characteristics of the descriptor
are specified in the program's input, except for BURST, which is hard-coded.
DYN CSECT ENTRY LINKAGE
USING *,15
STM 14,12,12(13)
BALR 12,0
BEGIN DS 0H
USING BEGIN,12
*
* REG 1 POINTS TO TWO INPUT WORDS: WORD 1 POINTS TO
* REQUESTED SYSOUT OPTIONS. WORD 2 POINTS TO OUTPUT
* AREA FOR RETURN AND REASON CODES.
*
LA 4,OUTPUT_DATA ADR OF OUTPUT DATA
ST 4,4(0,1) PUT ADR IN PARM LIST
L 4,0(0,1) POINTER TO INPUT
*
* MOVE INPUT DATA INTO THE TEXT UNITS
*
USING INPUT_DATA,4 MAP INPUT DATA
MVC COPYPRM,COPYIN HOW MANY COPIES
MVC GROUP#1,GROUPIN1 FIRST GROUP VAL
MVC GROUP#2,GROUPIN2 SECOND GROUP VAL
MVC FORMDPRM,FORMDIN WHAT KIND OF FORM
OC POINTER4,ENDMASK HIGH ORDER BIT ON
* INDICATES END OF
* TEXT UNIT POINTER
* LIST
*
* ISSUE OUTADD TO CREATE AN OUTPUT DESCRIPTOR
*
OUTADD NAME=ODNAME,TEXTPTR=TXTPTRS1, C
MF=(E,ADDPARML)
ST 15,OUTADD_RETCODE SAVE RETURN CODE
ST 0,OUTADD_RESCODE SAVE REASON CODE
ST 1,OUTADD_KEY SAVE KEY IN ERROR
LTR 15,15 OUTADD RETCODE
BNZ SKIP BRANCH IF BAD
*
* INVOKE DYNALLOC TO ALLOCATE THE SYSOUT DATA SET THAT
* GOES WITH THE OUTPUT DESCRIPTOR OUT1.
*
B DYNAL DYNALLOC ROUTINE
*
* INVOKE OUTDEL TO DELETE THE DESCRIPTOR, THEN EXIT
*
DELETE OUTDEL NAME=ODNAME,MF=(E,DELPARML)
ST 15,OUTDEL_RETCODE SAVE RETURN CODE
ST 0,OUTDEL_RESCODE SAVE REASON CODE
SKIP DS 0H HERE IF CREATE BAD
LM 14,12,12(13) RETURN TO CALLER
SLR 15,15
BR 14