The following example invokes RHDCMT00 to execute the DCMT VARY ACTIVE TASK command specified in INREC and to handle an invalid command:
DCMT TITLE 'SAMPLE DRIVER TO CALL DCMT'
CALLDCMT CSECT
LR R12,R15
USING CALLDCMT,R12
B BEGIN
#MOPT CSECT=CALLDCMT,ENV=USER
BEGIN DS 0H
#GETSTG LEN=WORKDSL,PLIST=*,ADDR=(R2),TYPE=(USER,LONG), X
INIT=X'00' GET WORK AREA FOR REENTRANCY.
USING WORKDS,R2
* FOLLOWING CODE ISSUES A VALID COMMAND TO CHANGE MAX TASKS.
* RESULTING STATUS CODE, RETURNED LENGTH, AND RETURNED DATA
* ARE DISPLAYED.
MVC INRECLN,=AL2(L'INRECTXT) SET COMMAND LENGTH.
MVC INRECTXT,GOODCOMM SET COMMAND.
MVC OUTRECLN,=AL4(L'OUTRECTX) SET MAXIMUM OUTPUT LENGTH.
SR R1,R1 SET OUTPUT TYPE TO 0.
STH R1,OUTRECOD REQUEST OUTPUT TO STORAGE.
ST R1,OUTRECTL INITIALIZE RETURNED LENGTH.
ST R1,OUTRECAL INITIALIZE RETURNED LENGTH.
LA R1,99 INITIALIZE RETURN CODE.
STH R1,OUTRECRC
BAL R8,CALLDISP CALL DCMT AND DISPLAY RESULTS.
* FOLLOWING CODE ISSUES A COMMAND WITH INVALID SYNTAX.
* RESULTING STATUS CODE, RETURNED LENGTH, AND RETURNED DATA
* (ERROR MESSAGES) ARE DISPLAYED.
MVC INRECLN,=AL2(L'INRECTXT) SET COMMAND LENGTH.
MVC INRECTXT,BADCOMM SET COMMAND.
MVC OUTRECLN,=AL4(L'OUTRECTX) SET MAXIMUM OUTPUT LENGTH.
SR R1,R1 SET OUTPUT TYPE TO 0.
STH R1,OUTRECOD REQUEST OUTPUT TO STORAGE.
ST R1,OUTRECTL INITIALIZE RETURNED LENGTH.
ST R1,OUTRECAL INITIALIZE RETURNED LENGTH.
LA R1,99 INITIALIZE RETURN CODE.
STH R1,OUTRECRC
BAL R8,CALLDISP CALL DCMT AND DISPLAY RESULTS.
* DONE WITH DISPLAYS. TERMINATE PROGRAM.
#RETURN
EJECT
* SUBROUTINE TO CALL DCMT AND DISPLAY RESULT.
*
CALLDISP DS 0H
#LINK PGM='RHDCMT00',PARMS=(INREC,OUTREC)
MVC WORKRCLN,STATLIT
LH R15,OUTRECRC GET RETURN CODE.
CVD R15,WORKDBL MAKE IT PRINTABLE.
UNPK WORKRC,WORKDBL
OI WORKRC+L'WORKRC-1,X'F0'
L R5,OUTRECAL GET LENGTH OF OUTPUT.
CVD R5,WORKDBL MAKE IT PRINTABLE.
UNPK WORKLEN,WORKDBL
OI WORKLEN+L'WORKLEN-1,X'F0'
#LINEOUT OUTLEN=80,OUTAREA=WORKRCLN
LTR R5,R5 ANY RETURNED DATA?
BZ RETURN NO.
LA R4,OUTRECTX GET A(OUTPUT).
PUTLINE DS 0H PUT OUT ONE LINE.
SR R3,R3 GET LENGTH OF ONE LINE.
IC R3,0(,R4)
LA R4,1(,R4) GET A(LINE TEXT)
#LINEOUT OUTLEN=(R3),OUTAREA=(R4)
AR R4,R3 POINT TO NEXT LENGTH BYTE.
SR R5,R3 REDUCE OUTPUT LENGTH.
BCTR R5,0 ACCOUNT FOR LENGTH BYTE.
LTR R5,R5 STILL MORE OUTPUT?
BP PUTLINE GET LENGTH OF OUTPUT.
RETURN DS 0H
BR R8
GOODCOMM DC CL80'VARY ACTIVE TASK MAX TASK 43'
BADCOMM DC CL80'BAD SYNTAX IN THIS COMMAND'
STATLIT DS CL80' ' TEMPLATE FOR STATUS LINE
ORG STATLIT REDEFINE STATUS LINE
DC CL13'RETURN CODE: ' RETURN CODE LITERAL
DC CL2' ' SPACE FOR RETURN CODE
DC CL20'. RETURNED LENGTH: ' LENGTH LITERAL
DC CL4' ' SPACE FOR RETURN CODE
DC CL1'.' SPACE FOR RETURN CODE
ORG STATLIT+80 DONE WITH REDEFINE
LTORG
EJECT
WORKDS DSECT
SYSPLIST DS 10F PLIST AREA
WORKDBL DS D TEMP WORK AREA
WORKRCLN DS CL80 OUTPUT LINE FOR RETURN CODE
ORG WORKRCLN REDEFINE STATUS LINE
DS CL13 RETURN CODE LITERAL
WORKRC DS CL2 SPACE FOR RETURN CODE
DS CL20 LENGTH LITERAL
WORKLEN DS CL4 LENGTH OF RETURNED DATA
DS CL1 SPACE FOR ENDING PERIOD
ORG WORKRCLN+80 DONE WITH STATUS LINE
INREC DS 0F INPUT TO DCMT
INRECLN DS H INPUT LENGTH
INRECTXT DS CL80 INPUT COMMAND
DS H FILLER
OUTREC DS 0F OUTPUT FROM DCMT
OUTRECLN DS F MAXIMUM ALLOWED OUTPUT LENGTH
OUTRECRC DS H RETURN CODE
OUTRECOD DS H OUTPUT TYPE
OUTRECTL DS F TOTAL LENGTH OF DCMT OUTPUT
OUTRECAL DS F ACTUAL LENGTH RETURNED
OUTRECTX DS CL132 TEXT OUTPUT AREA
WORKDSL EQU *-WORKDS
SPACE 2
END
|
Copyright © 2014 CA.
All rights reserved.
|
|