z/OS TSO/E Programming Services
Previous topic | Next topic | Contents | Contact z/OS | Library | PDF


Example using the Command Scan Service Routine

z/OS TSO/E Programming Services
SA32-0973-00

The sample assembler code in Figure 1 demonstrates the use of the Command Scan Service Routine to syntax check a subcommand name. Suppose the command buffer passed to command scan contains the following subcommand:
SUBCMD  OPERAND1  OPERAND2
When IKJSCAN returns control, the offset field in the command buffer contains the value 7, the number of bytes that precede OPERAND1 in the command buffer.
Figure 1. An example using the Command Scan Service Routine
SCANEX   CSECT ,
SCANEX   AMODE 31                 COMMAND'S ADDRESSING MODE
SCANEX   RMODE ANY                COMMAND'S RESIDENCY  MODE
SCANEX   CSECT
         STM   R14,R12,12(R13)    SAVE CALLER'S REGISTERS
         LR    R11,R15            ESTABLISH ADDRESSABILITY WITHIN
         USING SCANEX,R11         THIS CSECT
         LR    R9,R1              SAVE THE POINTER TO THE CPPL
         GETMAIN RU,LV=WORKSIZE   OBTAIN A DYNAMIC WORK AREA
*
         LR    R10,R1
         USING WORK_AREA,R10      ESTABLISH ADDRESSABILITY
         ST    R10,8(R13)         PUT THE ADDRESS OF MY SAVE AREA
*                                 INTO CALLER'S SAVE AREA
         ST    R13,4(R10)         PUT THE ADDRESS OF MY SAVE AREA
*                                 INTO MY SAVE AREA FOR CALLING
         LR    R13,R1             LOAD GETMAINED AREA ADDRESS
*
         ST    R9,CPPL_PTR
         USING  CPPL,R9           GET ADDRESSABILITY TO THE CPPL
*
         LA  R2,DYN_CSPL          POINT TO MY CSPL
         ST  R2,CSPL_PTR          SAVE CSPL POINTER
         USING CSPL,R2            GET ADDRESSABILITY TO THE CSPL
         MVC CSPLCBUF,CPPLCBUF    GET THE ADDRESS OF THE COMMAND BUFFER
         LA  R4,OUT_AREA          GET THE ADDRESS OF THE OUTPUT AREA
         ST  R4,CSPLOA            AND STORE IT IN THE CSPL
         MVC CSPLUPT,CPPLUPT      MOVE IN THE UPT ADDRESS
         MVC CSPLECT,CPPLECT      MOVE IN THE ECT ADDRESS
         LA  R4,ECB               GET THE ADDRESS OF THE ECB
         ST  R4,CSPLECB           AND STORE IT IN THE CSPL
         LA  R4,FLAGWORD          GET THE FLAGWORD ADDRESS
         ST  R4,CSPLFLG           AND STORE IT IN THE CSPL
         XC  ECB,ECB              SET THE ECB TO ZERO
*
         CALLTSSR EP=IKJSCAN,MF=(E,CSPL)   INVOKE IKJSCAN
*
         ST    R15,RETCODE         SAVE THE RETURN CODE
*
*
*   TEST THE RETURN CODE AND EXAMINE THE COMMAND SCAN OUTPUT AREA.
*   PROCESS ACCORDINGLY.
*        .
*        .
*        .
*
         DROP R2
         DROP R9
*
* PERFORM CLEANUP PROCESSING
*
*
         L     R5,RETCODE         GET THE RETURN CODE
         LR    R1,R13             POINT TO THE WORK AREA
         L     R13,4(R13)         CHAIN TO PREVIOUS SAVE AREA
         FREEMAIN RU,LV=WORKSIZE,A=(1)
         L     R14,12(R13)        HERE'S OUR RETURN ADDRESS
         LR    R15,R5             HERE'S THE RETURN CODE
         LM    R0,R12,20(R13)     RESTORE REGS 0-12
         BSM   0,14               RETURN TO INVOKER
*********************************************************************
*                                                                   *
* DECLARES FOR DYNAMIC VARIABLES                                    *
*                                                                   *
*********************************************************************
WORK_AREA     DSECT
SAVEAREA      DS 0CL72            STANDARD SAVE AREA
              DS  F               UNUSED
              DS  F               BACKWARD SAVE AREA POINTER
              DS  F               FORWARD SAVE AREA POINTER
REG14         DS  F               CONTENTS OF REGISTER 14
REG15         DS  F               CONTENTS OF REGISTER 15
REG0          DS  F               CONTENTS OF REGISTER 0
REG1          DS  F               CONTENTS OF REGISTER 1
REG2          DS  F               CONTENTS OF REGISTER 2
REG3          DS  F               CONTENTS OF REGISTER 3
REG4          DS  F               CONTENTS OF REGISTER 4
REG5          DS  F               CONTENTS OF REGISTER 5
REG6          DS  F               CONTENTS OF REGISTER 6
REG7          DS  F               CONTENTS OF REGISTER 7
REG8          DS  F               CONTENTS OF REGISTER 8
REG9          DS  F               CONTENTS OF REGISTER 9
REG10         DS  F               CONTENTS OF REGISTER 10
REG11         DS  F               CONTENTS OF REGISTER 11
REG12         DS  F               CONTENTS OF REGISTER 12
CPPL_PTR      DS  F               ADDRESS OF THE CPPL
CSPL_PTR      DS  F               ADDRESS OF THE CSPL
DYN_CSPL      DS  6F              STORAGE FOR THE CSPL
OUT_AREA      DS  2F              COMMAND SCAN OUTPUT AREA
FLAGWORD      DS  F               FLAG WORD
ECB           DS  F               ECB
RETCODE       DS  F               RETURN CODE
WORKSIZE  EQU   *-WORK_AREA       DESCRIBES LENGTH OF THE
*                                 DYNAMIC WORK AREA
*
         IKJCPPL                  COMMAND PROCESSOR PARAMETER LIST
LCPPL    EQU   *-CPPL             DESCRIBES LENGTH OF THE CPPL
*
         CVT  DSECT=YES           CVT NEEDED FOR CALLTSSR
         IKJCSPL                  COMMAND SCAN PARAMETER LIST
         IKJCSOA                  COMMAND SCAN OUTPUT AREA
*********************************************************************
*                                                                   *
*     REGISTER EQUATES                                              *
*                                                                   *
*********************************************************************
R0       EQU   0
R1       EQU   1
R2       EQU   2
R3       EQU   3
R4       EQU   4
R5       EQU   5
R6       EQU   6
R7       EQU   7
R8       EQU   8
R9       EQU   9
R10      EQU   10
R11      EQU   11
R12      EQU   12
R13      EQU   13
R14      EQU   14
R15      EQU   15
         END   SCANEX

Go to the previous page Go to the next page




Copyright IBM Corporation 1990, 2014