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 ,