z/OS MVS Using the Subsystem Interface
Previous topic | Next topic | Contents | Contact z/OS | Library | PDF


Example

z/OS MVS Using the Subsystem Interface
SA38-0679-00

The following is a coded example of a program that generates a Request Subsystem Version Information call.

This program is reentrant, and does not have to run in an authorized library.
SSIREQ54 TITLE '- ISSUE SUBSYSTEM INFORMATION SSI CALL'
SSIREQ54 AMODE 31
SSIREQ54 RMODE ANY
         SPLEVEL SET=4
*********************************************************************
* FUNCTION: THIS PROGRAM GENERATES A SUBSYSTEM VERSION INFORMATION  *
*           CALL.  IT DISPLAYS THE RETURNED INFORMATION ON THE      *
*           ON THE OPERATOR CONSOLE.  THE SUBSYSTEM CALL IS         *
*           DIRECTED TO THE MASTER SUBSYSTEM.                       *
*                                                                   *
* NAME OF MODULE: SSIREQ54                                          *
*                                                                   *
* REGISTER USE:                                                     *
*                                                                   *
*              0                   PARM REGISTER                    *
*              1                   PARM REGISTER                    *
*              2                   SSOB                             *
*              3                   SSIB                             *
*              4                   SSVI                             *
*              5                   SSVI SIZE USED                   *
*              6                   SSVI SIZE NEEDED                 *
*              7                   UNUSED                           *
*              8                   ABEND VALUE REGISTER             *
*              9                   IEFSSREQ/SSVI RETURN CODES       *
*              10                  UNUSED                           *
*              11                  UNUSED                           *
*              12                  SSIREQ54 BASE REGISTER           *
*              13                  SAVE AREA CHAIN REGISTER         *
*              14                  PARM REGISTER / RETURN ADDR      *
*              15                  PARM REGISTER / COND CODE        *
*                                                                   *
* ATTRIBUTES:  PROBLEM STATE, AMODE(31), RMODE(ANY)                 *
*                                                                   *
* NOTE:  THIS IS A SAMPLE PROGRAM.                                  *
*                                                                   *
*********************************************************************
         SPACE ,
SSIREQ54 START 0
         TITLE '- EQUATES'
*********************************************************************
*        GENERAL EQUATES                                            *
*********************************************************************
NOP      EQU   0                   NO OPERATION
FF       EQU   X'FF'               ALL BITS ON
EQUHOBON EQU   X'80000000'         HIGH ORDER BIT ON
*
*********************************************************************
*        AFTER COMPARE INSTRUCTIONS                                 *
*********************************************************************
GT       EQU   2                   A HIGH
LT       EQU   4                   A LOW
NE       EQU   7                   A NOT EQUAL B
EQ       EQU   8                   A EQUAL B
GE       EQU   11                  A NOT LOW
LE       EQU   13                  A NOT HIGH
*
*********************************************************************
*        AFTER ARITHMETIC INSTRUCTIONS                              *
*********************************************************************
OV       EQU   1                   OVERFLOW
PLUS     EQU   2                   PLUS
MINUS    EQU   4                   MINUS
NZERO    EQU   7                   NOT ZERO
ZERO     EQU   8                   ZERO
ZEROS    EQU   8                   ZERO
NMINUS   EQU   11                  NOT MINUS
NOV      EQU   12                  NOT OVERFLOW
NPLUS    EQU   13                  NOT PLUS
*
*********************************************************************
*        AFTER TEST UNDER MASK INSTRUCTIONS                         *
*********************************************************************
ALLON    EQU   1                   ALL ON
MIXED    EQU   4                   MIXED
NALLOFF  EQU   5                   ALLON+MIXED
ALLOFF   EQU   8                   ALL OFF
NALLON   EQU   12                  ALLOFF+MIXED
*
*********************************************************************
*        GENERAL PURPOSE REGISTERS                                  *
*********************************************************************
R0       EQU   0                   PARM REGISTER
R1       EQU   1                   PARM REGISTER
R2       EQU   2                   SSOB
R3       EQU   3                   SSIB
R4       EQU   4                   SSVI
R5       EQU   5                   SSVI SIZE USED
R6       EQU   6                   SSVI SIZE NEEDED
R7       EQU   7                   UNUSED
R8       EQU   8                   ABEND VALUE REGISTER
R9       EQU   9                   IEFSSREQ/SSVI RETURN CODES
R10      EQU   10                  UNUSED
R11      EQU   11                  UNUSED
R12      EQU   12                  SSIREQ54 BASE REGISTER
R13      EQU   13                  SAVE AREA CHAIN REGISTER
R14      EQU   14                  PARM REGISTER / RETURN ADDR
R15      EQU   15                  PARM REGISTER / COND CODE
*
*********************************************************************
*        ABEND EQUATES                                              *
*********************************************************************
SSVIA101 EQU   101                 IEFSSREQ MACRO RETURNED R15
*                                   NON-ZERO
SSVIA102 EQU   102                 SSOBRETN IS NON-ZERO BUT NOT
*                                   EQUAL TO SSVIERR
         TITLE '- CVT - COMMUNICATIONS VECTOR TABLE'
         CVT DSECT=YES,LIST=NO
         TITLE '- IEFJESCT - JES CONTROL TABLE'
         IEFJESCT TYPE=DSECT
         TITLE '- IEFJSSIB - SUBSYSTEM IDENTIFICATION BLOCK'
         IEFJSSIB
         TITLE '- IEFSSOBH - SUBSYSTEM OPTION BLOCK HEADER'
         IEFSSOBH
SSOBGN   EQU   *             REQUIRED IF NOT USING IEFJSSOB DEFN
         TITLE '- IEFSSVI  - SUBSYSTEM VERSION INFORMATION'
         IEFSSVI
         TITLE '- LDA - LOCAL DATA AREA DSECT'
*********************************************************************
*        THE LOCAL DATA AREA IS MAPPED IN THIS DSECT.  THIS DATA    *
*        AREA IS OBTAINED THROUGH A 'STORAGE' MACRO INSTRUCTION     *
*        IN THE PROGRAM.                                            *
*********************************************************************
         SPACE ,
LDAAREA  DSECT
LDASTART EQU   *                   START OF LOCAL DATA AREA
LDASA    DS    9D                  SAVE AREA FOR LOWER CALLERS
LDAID    DS    CL8'LDAAREA '       IDENTIFICATION OF LDA AREA
LDA@SSOB DS    F                   POINTER TO SSOB FOR IEFSSREQ'S USE
LDASSOB  DC    XL(SSOBHSIZ)'00'    AREA FOR SSOB
LDASSIB  DC    XL(SSIBSIZE)'00'       AND SSIB
LDAEND   EQU   *                   START OF LOCAL DATA AREA
LDASIZE  EQU   LDAEND-LDASTART     LENGTH OF AREA TO GETMAIN
         TITLE '- HOUSEKEEPING REENTRANT ENTRY ROUTINE'
*********************************************************************
*        HOUSEKEEPING AND GENERAL ENTRY ROUTINE (REENTRANT USING    *
*        LINKAGE-STACK METHOD)                                      *
*********************************************************************
SSIREQ54 CSECT
         BAKR  R14,0               SAVE CALLER'S ARS, GPRS, AND
*                                   RETURN ADDRESS ON LINKAGE STACK
         LR    R12,R15             SET UP PROGRAM BASE REGISTER
         USING SSIREQ54,R12        INFORM ASSEMBLER
         STORAGE OBTAIN,           GET A SAVE AREA THAT'S REENTRANT    X
               LENGTH=LDASIZE,     STANDARD SAVE AREA SIZE             X
               COND=NO             UNCONDITIONAL REQ - NO RC INFO
         SPACE ,
         LR    R13,R1              SAVE STORAGE ADDRESS
         USING LDASTART,R13        ADDRESS LOCAL DATA AREA (LDA)
         MVC   LDAID,=CL8'LDAAREA'   INDICATION OF LOCAL DATA AREA
         WTO   'SSIREQ54 EXECUTING V1', LET OP KNOW                    X
               ROUTCDE=(2,11)
         TITLE '- SSOB/SSVI PROCESSING ROUTINE'
*********************************************************************
*        SET UP SSOB, SSIB, AND SSVI CONTROL BLOCKS.                *
*********************************************************************
         SPACE 2
*********************************************************************
*        OBTAIN STORAGE FOR AN SSVI.                                *
*********************************************************************
         LA    R5,SSVIMSIZ         MINIMUM SIZE REQUIRED
TRYIT    DS    0H
         STORAGE OBTAIN,           GET A SAVE AREA THAT'S REENTRANT    X
               LENGTH=(5),         STANDARD SAVE AREA SIZE             X
               COND=NO             UNCONDITIONAL REQ - NO RC INFO
         LR    R4,R1               POINT TO THE SSVI
         USING SSVI,R4             ADDRESSABILITY
         SPACE 2
*********************************************************************
*        WHEN ISSUING THE IEFSSREQ MACRO, REGISTER 1 MUST POINT TO  *
*        A CONTROL BLOCK THAT HAS IT'S HIGH-ORDER BIT SET, AND IT'S *
*        LOW-ORDER 31 BITS POINTING TO THE SSOB FOR THE SPECIFIC    *
*        FUNCTION CALL.  THEREFORE, SET THIS CONTROL BLOCK          *
*        (LDA@SSOB) WITH THE HIGH ORDER BIT SET, AND THE LOW-ORDER  *
*        31 BITS POINTING TO LDASSOB FIELD.                         *
*********************************************************************
         SPACE ,
         LA    R2,LDASSOB          POINT TO THE SSOB
         USING SSOB,R2             ADDRESSABILITY
         O     R2,=A(EQUHOBON)     SET HIGH ORDER BIT ON
         ST    R2,LDA@SSOB         STORE FOR IEFSSREQ'S USE
*                                   LATER WHEN ISSUING MACRO
*********************************************************************
*        NOW PROCESS THE SSOB (THE SUBSYSTEM OPTION BLOCK).         *
*********************************************************************
         SPACE ,
         XC    SSOBEGIN(SSOBHSIZ),SSOBEGIN  CLEAR THE SSOB
         MVC   SSOBID,=C'SSOBID'   MOVE IDENTIFIER IN
         MVC   SSOBLEN,=Y(SSOBHSIZ)  MOVE SIZE OF THE HEADER IN
         LA    R1,LDASSIB          POINT TO THE SSIB
         ST    R1,SSOBSSIB         SAVE IN SSOB
         MVC   SSOBFUNC,=Y(SSOBSSVI) MOVE THE FUNCTION ID IN
         ST    R4,SSOBINDV         SAVE SSVI ADDRESS IN SSOB
*********************************************************************
*        DONE WITH THE SSOB - NOW WORK WITH THE SSIB.               *
*        THE SSIB IS USED TO IDENTIFY THE SPECIFIC SUBSYSTEM THAT   *
*        THIS REQUEST IS GOING TO.  WE ISSUE OUR REQUEST TO THE     *
*        MASTER SUBSYSTEM, SO WE NEED TO PROVIDE ONE RATHER THAN    *
*        USE THE LIFE-OF-JOB SSIB WHICH COULD BE USED IF RUNNING    *
*        UNDER JES2.                                                *
*********************************************************************
         SPACE ,
         LA    R3,LDASSIB          POINT TO THE SSIB
         USING SSIB,R3             ADDRESSABILITY
         XC    SSIBEGIN(SSIBSIZE),SSIBEGIN  CLEAR SSIB
         MVC   SSIBID,=C'SSIBID'   MOVE IDENTIFIER IN
         MVC   SSIBLEN,=Y(SSIBSIZE)  MOVE SIZE OF THE SSIB IN
         MVC   SSIBSSNM,=C'MSTR'   SHOW MASTER SUBSYSTEM TO BE
*                                   USED TO GET THE INFO
*********************************************************************
*        DONE WITH THE SSIB - NOW WORK WITH THE SSVI.               *
*        THE SIZE CAN BE VARIABLE, SO WE NEED TO USE DYNAMIC SIZING *
*        TECHNIQUES WHEN CLEARING IT.                               *
*********************************************************************
         SPACE ,
         LR    R15,R5              SIZE OF THE SSVI
         BCTR  R15,0               DECREMENT FOR EX
         EX    R15,CLEAR           CLEAR THE SSVI
         STH   R5,SSVILEN          SAVE THE SIZE OF THE SSVI
         MVI   SSVIVER,SSVICVER    MOVE CURRENT VERSION NUMBER IN
         MVC   SSVIID,=A(SSVICID)  SAVE THE IDENTIFIER
         TITLE '- ISSUE IEFSSREQ'  ON IT''S WAY'
*********************************************************************
*        THE SSOB, SSIB, AND SSVI BLOCKS ARE NOW FILLED IN, AND THE *
*        IEFSSREQ MACRO IS READY TO GO.                             *
*********************************************************************
         SPACE 2
*********************************************************************
*        SET REGISTER ONE SO THAT IT POINTS TO POINTER OF THE SSOB  *
*********************************************************************
         SPACE ,
         LA    R1,LDA@SSOB         R1 POINTS TO ADDRESS OF SSOB
*********************************************************************
*        ISSUE THE IEFSSREQ REQUEST TO THE SUBSYSTEM.  NOTE WE      *
*        DON'T HAVE TO MODESET TO SUPERVISOR STATE; PROBLEM STATE   *
*        IS FINE FOR THIS SUBSYSTEM VERSION INFORMATION CALL.       *
*********************************************************************
         SPACE ,
         IEFSSREQ ,                GO GET THE VERSION INFORMATION
         SPACE ,
*********************************************************************
*        NOW CHECK THE RESULTS - HOW DID WE DO?                     *
*********************************************************************
         SPACE ,
         LA    R8,SSVIA101         ASSUME R15 NON-ZERO
         LTR   R9,R15              DID R15=0?  SAVE IN REG9 AS WELL
         BC    NZERO,ABEND         NO...GO TAKE A DUMP
         LA    R8,SSVIA102         ASSUME SSOBRETN NON-ZERO
         ICM   R9,B'1111',SSOBRETN CHECK SSOBRETN
         BC    ZERO,SHOWUSER       SEEMS OK - SHOW WHAT WE GOT
         C     R9,=A(SSVINSTR)     SPECIAL NOT ENOUGH
*                                   STORAGE CASE?
         BC    NE,ABEND            NO, TAKE A DUMP
         SPACE ,
*********************************************************************
*        THE IEFSSREQ MACRO WORKED OK, BUT THERE WASN'T ENOUGH      *
*        STORAGE DEFINED TO RECEIVE ALL OF THE INFORMATION.  USING  *
*        THE INFORMATION RETURNED, LET'S TRY AGAIN.                 *
*********************************************************************
         SPACE ,
         LH    R6,SSVIRLEN         SAVE THE STORAGE NEEDED
         STORAGE RELEASE,          FREE MY INFO AREA                   X
               LENGTH=(5),         VARIABLY OBTAINED SIZE              X
               ADDR=(4)            HERE'S WHERE IT LIVES
         LR    R5,R6               NEW SIZE TO TRY AGAIN
         B     TRYIT               GO DO IT TO DO!
         DROP  R2                  SSOB
         TITLE '- EXIT ROUTINES TO MVS (BOTH GOOD AND BAD)'
*********************************************************************
*        THESE ARE GENERAL EXIT ROUTINES BACK TO MVS.               *
*        ABENDS ARE USED FOR THE ABNORMAL TERMINATIONS.             *
*********************************************************************
         SPACE 2
SHOWUSER DS    0H
         ICM   R6,B'1111',SSVIUDOF ANY USER DATA?
         BC    ZERO,SHOWSYS        NO, SHOW THE SYSTEM DATA
         LA    R7,SSVI(R6)         R7==>USER VARIABLE DATA AREA
         USING SSVIVDAT,R7         ADDRESSABILITY
         LH    R8,SSVIVLEN         GET THE LENGTH
         CH    R8,=H'125'          GREATER THAN 125 CHARS?
         BC    LE,SHOWIT1          NO, USE THE REAL LENGTH
         MVC   SSVIVLEN,=H'125'    ELSE, USE ONLY FIRST 125
SHOWIT1  DS    0H                  R8=NUMBER OF CHARS TO DISPLAY
         WTO   TEXT=SSVIVLEN,      SHOW TO THE CONSOLE                 X
               ROUTCDE=(11)
         B     SHOWSYS2            BRANCH AROUND WTO
SHOWSYS  DS    0H
         WTO   'SSIREQ54 NO USER DATA PRESENT',   LET OP KNOW          X
               ROUTCDE=(2,11)
SHOWSYS2 DS    0H
         ICM   R6,B'1111',SSVISDOF ANY SYSTEM DATA?
         BC    NZERO,SHOWSYS3      YES, DISPLAY IT
         WTO   'SSIREQ54 NO SYSTEM DATA', LET OP KNOW                  X
               ROUTCDE=(2,11)
         B     RETURN
SHOWSYS3 DS    0H
         LA    R7,SSVI(R6)         R7==>USER VARIABLE DATA AREA
         USING SSVIVDAT,R7         ADDRESSABILITY
         LH    R8,SSVIVLEN         GET THE LENGTH
         CH    R8,=H'125'          GREATER THAN 125 CHARS?
         BC    LE,SHOWIT2          NO, USE THE REAL LENGTH
         MVC   SSVIVLEN,=H'125'    ELSE, USE ONLY FIRST 125
SHOWIT2  DS    0H                  R8=NUMBER OF CHARS TO DISPLAY
         WTO   TEXT=SSVIVLEN,      SHOW TO THE CONSOLE                 X
               ROUTCDE=(11)
         SPACE ,
         WTO   'SSIREQ54 RETURNING',      LET OP KNOW                  X
               ROUTCDE=(2,11)
         SPACE ,
*********************************************************************
*        GIVE BACK THE STORAGE WE BOUGHT EARLIER.                   *
*********************************************************************
         SPACE ,
RETURN   DS    0H
         STORAGE RELEASE,          FREE MY INFO AREA                   X
               LENGTH=(5),         VARIABLY OBTAINED SIZE              X
               ADDR=(4)            HERE'S WHERE IT LIVES
         STORAGE RELEASE,          FREE MY REENTRANT SAVE AREA         X
               LENGTH=LDASIZE,     STANDARD SAVE AREA SIZE             X
               ADDR=(R13)          HERE'S WHERE IT LIVES
         SPACE ,
*********************************************************************
*        SET PROGRAM RETURN CODE.                                   *
*********************************************************************
         SPACE ,
         SLR   R15,R15             SET RETURN CODE OF ZERO
*********************************************************************
*        RETURN TO CALLER WITH ORIGINAL STATUS AND REGISTERS.       *
*********************************************************************
         SPACE ,
         PR                        RETURN TO CALLER USING STACK,       X
                                    RESET REGS 2-14, ADDRESSING MODE,  X
                                    ASC MODE, AND RETURN TO CALLER
*********************************************************************
*        ABEND ROUTINES FOLLOW                                      *
*********************************************************************
         SPACE ,
ABEND    DS    0H                  R15 NON-ZERO AFTER IEFSSREQ
         WTO   'PROGRAM HAD FATAL ERROR - SEE REGS 8 AND 9'            X
               ROUTCDE=(2,11)
         SPACE ,
         ABEND (R8),DUMP,STEP      LET THE USER IN ON THE BAD NEWS
         TITLE '- LOCAL DATA'
         SPACE ,
CLEAR    XC    0(*-*,R4),0(R4)     CLEAR SSVI - OBJ OF EXECUTE
         END   ,

Go to the previous page Go to the next page




Copyright IBM Corporation 1990, 2014