Previous Topic: ExamplesNext Topic: DCUF Example


DCMT Example

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