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 Process SYSOUT Data Set call. It requests a SYSOUT data set from JES through a writer name and reads each record of the data set. When the routine reaches the end of the data, the SYSOUT data set is deallocated and the SYSOUT class and destination are updated. The routine ends and cycles back to the beginning to ask JES for the next data set.

This routine is non-reentrant, and must reside below 16 megabytes in an APF-authorized library.
SSIREQ01 TITLE '- DOCUMENTATION'
SSIREQ01 AMODE 31
SSIREQ01 RMODE 24
         SPLEVEL SET=4
*********************************************************************
* FUNCTION:  THIS PROGRAM PERFORMS THE FOLLOWING FUNCTIONS:         *
*                                                                   *
*        1. REQUESTS A SYSOUT DATA SET FROM JES THROUGH A WRITER    *
*           NAME (SHOWS AN EXAMPLE OF USING ONE OF THE AVAILABLE    *
*           SELECTION CRITERIA TO INFLUENCE WHICH SYSOUT DATA SET   *
*           IS SELECTED).  THIS PROGRAM IS INTENDED TO RUN ON JES3  *
*           ONLY, AS IT SHOWS SELECTION CRITERIA AVAILABLE ONLY TO  *
*           JES3.  (SPECIFICALLY, BIT SSSOHLD IS USED.)             *
*        2. IF ONE IS NOT AVAILABLE, THE OPERATOR CAN WAIT UNTIL    *
*           ONE IS AVAILABLE, OR EXIT THE PROGRAM.                  *
*        3. IF ONE IS AVAILABLE, IT IS DYNAMICALLY ALLOCATED.       *
*        4. EACH RECORD IS READ AND DISPLAYED TO THE OPERATOR.      *
*        5. UPON END-OF-DATA, THE SYSOUT DATA SET IS DEALLOCATED.   *
*           THE SYSOUT CLASS IS CHANGED TO 'A', AND THE             *
*           DESTINATION IS CHANGED TO 'PRT803'.                     *
*           (SHOWS AN EXAMPLE OF USING THE AVAILABLE DYNAMIC        *
*           ALLOCATION TEXT UNIT TO CHANGE THE ATTRIBUTES OF THE    *
*           RECEIVE SYSOUT DATA SET DURING UNALLOCATION.)           *
*        6. THE PROGRAM THEN CYCLES BACK AND ASKS JES FOR THE NEXT  *
*           DATA SET (GOES TO STEP 1).                              *
*                                                                   *
* NAME OF MODULE:  SSIREQ01                                         *
*                                                                   *
* REGISTER USE:                                                   *
*                                                                   *
*              0                   PARM REGISTER                    *
*              1                   PARM REGISTER                    *
*              2                   SSOB                             *
*              3                   SSSO                             *
*              4                   DCB                              *
*              5                   RB                               *
*              6                   MAX RECORD LENGTH                *
*              7                   DUMP CODE                        *
*              8                   ABEND VALUE REGISTER             *
*              9                   IEFSSREQ RETURN CODES            *
*              10                  BASE REGISTER                    *
*              11                  TEXT RECORD STRUCTURE PTR        *
*              12                  UNUSED                           *
*              13                  SAVE AREA CHAIN REGISTER         *
*              14                  PARM REGISTER / RETURN ADDR      *
*              15                  PARM REGISTER / COND CODE        *
*                                                                   *
* ATTRIBUTES:  SUPERVISOR STATE, AMODE(31), RMODE(24)               *
*                                                                   *
*                                                                   *
* NOTE:  THIS IS A SAMPLE.                                          *
*********************************************************************
         TITLE '- EQUATES'
*********************************************************************
*        GENERAL EQUATES                                            *
*********************************************************************
EQUHOBON EQU   X'80000000'         HIGH ORDER BIT ON
FF       EQU   X'FF'               ALL BITS ON IN A BYTE
*********************************************************************
*        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
*********************************************************************
*        ABEND CODE INDICATIONS                                     *
*********************************************************************
BADR15   EQU   1                   IEFSSREQ R15 NON-ZERO
BADRETN  EQU   2                   SSOBRETN NON-ZERO AND NOT 8
BADS99A  EQU   3                   DYNALLOC ALLOC FAILED
BADOPEN  EQU   4                   OPEN DCB FAILED
BADS99U  EQU   5                   DYNALLOC UNALLC FAILED
BADRLEN  EQU   6                   PSO DATASET TOO LARGE (RECLEN)
*********************************************************************
*        GENERAL PURPOSE REGISTERS                                  *
*********************************************************************
R0       EQU   0                   PARM REGISTER
R1       EQU   1                   PARM REGISTER
R2       EQU   2                   SSOB
R3       EQU   3                   SSSO
R4       EQU   4                   DCB
R5       EQU   5                   RB
R6       EQU   6                   MAX RECORD LENGTH
R7       EQU   7                   DUMP CODE
R8       EQU   8                   ABEND VALUE REGISTER
R9       EQU   9                   RETURN CODES OR REASONS
R10      EQU   10                  BASE REGISTER
R11      EQU   11                  TEXT RECORD STRUCTURE PTR
R12      EQU   12                  UNUSED
R13      EQU   13                  SAVE AREA CHAIN REGISTER
R14      EQU   14                  PARM REGISTER / RETURN ADDR
R15      EQU   15                  PARM REGISTER / COND CODE
         TITLE '- CVT - COMMUNICATIONS VECTOR TABLE'
         CVT DSECT=YES,LIST=NO
         TITLE 'DCBD'
         DCBD  DSORG=PS
         TITLE '- IEFJESCT - JES CONTROL TABLE'
         IEFJESCT TYPE=DSECT
         TITLE '- SSOB'
         IEFSSOBH
SSOBGN   EQU   *                   START OF FUNCTIONAL EXTENSION
         TITLE '- SSSO'
         IEFSSSO SOEXT=YES
         TITLE '- IEFZB4D0 - SVC99 DSECTS'
         IEFZB4D0
         TITLE '- IEFZB4D2 - TU KEYS'
         IEFZB4D2
*********************************************************************
*  HOUSEKEEPING                                                     *
*********************************************************************
SSIREQ01 CSECT
         SAVE  (14,12)             FORM ID
         BALR  R10,0               ESTABLISH BASE REG
         USING *,R10               INFORM ASSEMBLER
         LA    R2,SA               CHAIN SAVEAREAS
         ST    R13,4(R2)           OLD IN NEW
         ST    R2,8(R13)           NEW IN OLD
         LR    R13,R2              RECHAIN THE SAVE AREAS
         TITLE '- PROCESS SYSOUT'
         WTO   'SSI CODE 01 Version 1'  LET OP KNOW WHAT LEVEL
         STORAGE OBTAIN,           GET STORAGE FOR SSOB/SSSO
               LENGTH=SSOBLEN1,
               COND=NO
         LR    R2,R1               SAVE BEGINNING OF STORAGE
         USING SSOBEGIN,R2         INFORM ASSEMBLER
         LA    R3,SSOBGN           PT TO BEGINNING OF SSSO
         USING SSSOBGN,R3          INFORM ASSEMBLER
         TITLE '- SSOB PROCESSING'
*********************************************************************
* NOW WORK ON THE SSOB.  THE LIFE-OF-JOB IS USED HERE, SO THE       *
* SSOBSSIB IS ZERO.                                                 *
*********************************************************************
         XC    SSOB(SSOBHSIZ),SSOB CLEAR THE SSOB
         MVC   SSOBID,=CL4'SSOB'   SSOB INITIALS INTO SSOB
         MVC   SSOBFUNC,=AL2(SSOBSOUT) MOVE FUNCTION ID INTO SSOB
         MVC   SSOBLEN,=AL2(SSOBHSIZ) MOVE SIZE INTO SSOB
         ST    R3,SSOBINDV         SAVE THE SSSO ADDRESS
         TITLE '- SSSO PROCESSING'
*********************************************************************
* NOW WORK ON THE SSSO.  SELECT A SELECTION CRITERIA BASED ON       *
* AN EXTERNAL WRITER NAME OF 'ANDREW'.                              *
*********************************************************************
         XC    SSSOBGN(SSSOSIZE),SSSOBGN  CLEAR THE SSSO
         MVC   SSSOLEN,=AL2(SSSOSIZE)     SET THE SIZE OF THE SSSO
         MVI   SSSOVER,SSSOCVER    SET THE VERSION NUMBER
         OI    SSSOFLG1,SSSOSPGM+SSSOHLD   SELECT BY WRITER NAME AND
*                                  THE HOLD QUEUE
         OI    SSSOFLGA,SSSOWTRN   IND. THAT SELECTION IS BY
*                                  WRITER NAME, NOT USERID
         MVC   SSSOPGMN,=CL8'ANDREW'  IND. CORRECT WRITER NAME
*                                     THAT IS USED AS SELECTION
         OI    SSSOFLG2,SSSOPSEE   IND. LONG FORM OF IEFSSSO
*********************************************************************
* NOW GO TAP JES ON THE SHOULDER FOR A DATASET!                     *
*********************************************************************
NEXTDS   DS    0H                  GET NEXT DSNAME FROM JES
         MODESET MODE=SUP          GET INTO SUPERVISOR STATE
         LR    R1,R2               R1=ADDRESS OF SSOB
         O     R1,=A(EQUHOBON)     TURN ON THE HIGH-ORDER BIT
         ST    R1,MYSSOBPT         SAVE POINTER FOR SSREQ
         LA    R1,MYSSOBPT         POINT TO SSOB POINTER
         IEFSSREQ ,                GO TO JES FOR A DATASET
         MODESET MODE=PROB         BACK TO PROBLEM STATE
         LA    R8,BADR15           ASSUME BAD REG 15 RETURN
         LTR   R9,R15              DID THE IEFSSREQ WORK OK?
         BC    NZERO,ABEND         NOT GOOD...TAKE AN ABEND
         LA    R8,BADRETN          ASSUME BAD SSOBRETN
         ICM   R9,B'1111',SSOBRETN CHECK OUT SSOBRETN
         BC    NZERO,TESTIT        NON-ZERO, INVESTIGATE FURTHER
*********************************************************************
* WE HAVE A DATA SET.  NOW DYNAMICALLY ALLOCATE IT, READ AND DISPLAY*
* THE RECORDS USING SEQUENTIAL ACCESS METHOD AS EXAMPLE OF HOW TO   *
* RETRIEVE THE DATA.                                                *
*********************************************************************
         TITLE '- ALLOCATE RETURNED DATASET'
*********************************************************************
* ALLOCATE THE RETURNED SYSOUT DATASET                              *
*********************************************************************
         LA    R8,BADRLEN          ASSUME SIZE TOO LARGE FOR WTO
         SR    R6,R6               CLEAR REG 6
         ICM   R6,B'0011',SSSOMLRL GET MAX RECORD LENGTH
         CH    R6,=H'150'          IS MAX RCD LENGTH>150??
         BC    GT,ABEND            YES - TIME FOR US TO GO HOME
         STH   R6,RECLEN           SAVE MAX RECORD LENGTH
         LA    R5,MY99RB           PT TO RB
         USING S99RB,R5            ADDRESSABILITY TO THE RB
         XC    S99RB(RBLEN),S99RB  ZERO THE RB
         MVI   S99RBLN,RBLEN       RB LENGTH
         MVI   S99VERB,S99VRBAL    RB VERB CODE=ALLOC
         LA    R1,MY99TPTA         ADDR SVC 99 ALLOC TU PTRS
         ST    R1,S99TXTPP         STORED IN RB
         LA    R1,MY99RBPT         PT TO RB POINTER
         MVC   TXTDSNAM,SSSODSN    MOVE DATASET NAME TO BE ALLOCATED
         DYNALLOC                  ISSUE DYNAMIC ALLOCATION
         LA    R8,BADS99A          ASSUME IT DIDN'T WORK
         LR    R9,R1               COPY FOR DUMP
         LTR   R15,R15             SVC 99 WORK OKAY??
         BC    NZERO,ABEND         NO, TAKE A DUMP
*********************************************************************
* SYSOUT DATASET ALLOCATED OKAY.   MOVE RETURNED DDNAME INTO        *
* THE DCB PRIOR TO OPENING IT.                                      *
*********************************************************************
         LA    R4,INDCB            PT TO THE INPUT DCB
         USING IHADCB,R4           ADDRESSABILITY
         MVC   DCBDDNAM(8),TXTDDA99 MOVE IN RETURNED DDNAME
         MVC   TXTDDU99,TXTDDA99   SAVE FOR UNALLOCATION
         MVC   DCBLRECL,SSSOMLRL   MOVE MAX LENGTH RECORD IN
*                                                                   *
         OPEN  INDCB               OPEN THE DCB
         LA    R8,BADOPEN          ASSUME THE OPEN FAILED
         LR    R9,R4               COPY FOR DUMP
         TM    DCBOFLGS,DCBOFOPN   DID IT WORK?
         BC    ALLOFF,ABEND        NOPE, TAKE A DUMP
         TITLE '- GET THE RECORDS - DISPLAY TO PROGRAM'
GETNEXT  DS    0H                  LOOP FOR READING/DISPLAYING
*********************************************************************
* SWITCH TO 24 BIT MODE FOR GET MACRO                               *
*********************************************************************
         LA    R15,SSITO24         SWITCH TO 24 BIT MODE ...
         BSM   0,R15               ... FOR RESTRICTED MACRO
SSITO24  DS    0H
         GET   INDCB               R1==> RECORD AFTER THE GET
         L     R15,SSITO31A        RETURN TO 31 BIT MODE ...
         BSM   0,R15               ... AND CONTINUE
SSITO31A DC    A(SSITO31+EQUHOBON) FOR MODE SWITCHING
*********************************************************************
* RETURN TO 31 BIT MODE AND CONTINUE                                *
*********************************************************************
SSITO31  DS    0H
         EX    R6,MOVEIT           MOVE UP TO 150 BYTES OF REC
         LA    R11,RECLEN          POINT TO RECORD FOR OUTPUT
         WTO   TEXT=(11),ROUTCDE=11 DISPLAY TO JOBLOG
         MVI   RECTEXT,C' '        CLEAR RECORD OUT...
         MVC   RECTEXT+1(L'RECTEXT-1),RECTEXT  ..FOR NEXT ONE
         B     GETNEXT             GO GET NEXT RECORD
         TITLE '- EODAD ROUTINE'
MYEODAD  DS    0H                  END-OF-DATASET
         CLOSE INDCB               CLOSE THE INPUT DCB
         DROP  R4                  IHADCB
*********************************************************************
* UNALLOCATE THE SYSOUT DATASET, CHANGING CLASS + DESTINATION       *
*********************************************************************
         XC    S99RB(RBLEN),S99RB  ZERO THE RB
         MVI   S99RBLN,RBLEN       RB LENGTH
         MVI   S99VERB,S99VRBUN    RB VERB CODE=UNALLOC
         LA    R1,MY99TPTU         ADDR SVC 99 ALLOC TU PTRS
         ST    R1,S99TXTPP         STORED IN RB
         LA    R1,MY99RBPT         PT TO RB POINTER
         DYNALLOC                  ISSUE DYNAMIC UNALLOCATION
         LA    R8,BADS99U          ASSUME IT DIDN'T WORK
         LR    R9,R1               COPY FOR DUMP
         LTR   R15,R15             SVC 99 WORK OKAY??
         BC    NZERO,ABEND         NO, TAKE A DUMP
         B     NEXTDS              GO GET NEXT DATA SET
         TITLE '- BAD RETURN FROM IEFSSREQ'
TESTIT   DS    0H
*********************************************************************
*  R8 HAS THE 'BADRETN' ASSUMPTION VALUE FOR POSSIBLE ABEND.        *
*  R9 HAS A NON-ZERO VALUE FROM SSOBRETN FROM THE IEFSSREQ.         *
*********************************************************************
         CH    R9,NOMORE           END OF DATA SET RETURN?
         BC    NE,ABEND            NOPE - QUIT!
*********************************************************************
*  WE RECEIVED THE END-OF-DATA CONDITION.  ASK WHETHER WE           *
*  SHOULD WAIT ON RETURNED ECB, OR COMPLETE NOW,                    *
*********************************************************************
         XC    MYECB,MYECB         CLEAR THE ECB
         WTOR  'ENTER 'W' OR WAIT, ANYTHING ELSE TO EXIT',
               MYREPLY,
               1,
               MYECB
         WAIT  ECB=MYECB
         OI    MYREPLY,C' '        FORCE REPLY TO UPPER CASE
         CLI   MYREPLY,C'W'        SHOULD WE WAIT?
         BC    NE,EXIT             NO, EXIT
*********************************************************************
* WAIT INDICATED.  SET UP WAIT ON THE RETURNED ECB.                 *
*********************************************************************
         MODESET KEY=ZERO          GET INTO KEY 0
         L     R1,SSSOWTRC         POINT TO RETURNED DATA AREA
         WAIT  ECB=(1)             R1==>RETURNED WAIT-FOR ECB
         MODESET KEY=NZERO         BACK TO ORIGINAL
         B     NEXTDS              WE'RE POSTED - GO GET IT!
         TITLE '- CLOSE OUT ROUTINES'
EXIT     DS    0H                  FINAL CALL, RETURN TO MVS
         MVI   SSSOFLG2,SSSOCTRL   IND. FINAL CALL TO JES
         MODESET MODE=SUP          GET INTO SUPERVISOR STATE
         LA    R1,MYSSOBPT         POINT TO SSOB POINTER
         IEFSSREQ ,                GO TO JES FOR GIVE BACK
         MODESET MODE=PROB         BACK TO PROBLEM STATE....
         STORAGE RELEASE,          FREE SSOB/SSSO
               LENGTH=SSOBLEN1,
               ADDR=(R2)           HERE'S WHERE IT LIVES
         L     R13,4(,R13)         OLD SA PTR
         RETURN (14,12),RC=0       BACK TO MVS
         TITLE '- ABEND ROUTINES'
*********************************************************************
* THIS IS THE ABEND ROUTINE.  R8 CONTAINS THE PROGRAM REASON CODE,  *
* R9 CONTAINS SPECIFIC ERROR/REASON CODE AS RETURNED BY THE         *
* SERVICE ROUTINE.                                                  *
*********************************************************************
ABEND    DS    0H                  ISSUE THE ABEND MACRO
         ABEND (8),DUMP,STEP       TAKE A DUMP IF WANTED
         TITLE '- DATA AREAS'
SA       DS    9D                  SAVE AREAS
MYECB    DS    F                   DOUBLEWORD FOR WTOR
*
MYREPLY  DS    CL1                 REPLY AREA FOR WTORS
RESRV    DS    XL3                 ROUND TO FULL WORD
         TITLE '- DYNALLOC DATA'
*********************************************************************
* THE FOLLOWING CONTROL BLOCKS ARE FOR DYNAMIC ALLOCATION AND       *
* UNALLOCATION.                                                     *
*********************************************************************
* S99 REQUEST BLOCK POINTER                                         *
*********************************************************************
MY99RBPT DC    A(EQUHOBON+MY99RB)  S99 RB PTR
*********************************************************************
* S99 REQUEST BLOCK                                                 *
*********************************************************************
MY99RB   DS    CL(RBLEN)           MY SVC 99 RB
RBLEN    EQU   (S99RBEND-S99RB)    LENGTH OF RB FOR MY99RB
*********************************************************************
* TEXT UNIT POINTERS FOR ALLOCATION                                 *
*********************************************************************
MY99TPTA DC    A(TXTDALDS)         TU FOR DATASET NAME
         DC    A(TXTSSREQ)         NAME OF SUBSYSTEM TU PTR
         DC    A(EQUHOBON+TXTRTDDN) RETURN DD NAME TU
*********************************************************************
* TEXT UNIT POINTERS FOR UNALLOCATION                               *
*********************************************************************
MY99TPTU DC    A(TXTDUNDD)         TU FOR UNALLOC BY DDNAME
         DC    A(TXTDUNNH)         NOHOLD TU
         DC    A(TXTDUNCL)         CHANGE THE CLASS TU
         DC    A(EQUHOBON+TXTDUNDS) CHANGE THE DEST TU
*********************************************************************
* TEXT UNITS FOR ALLOCATION                                         *
*********************************************************************
TXTDALDS DC    AL2(DALDSNAM)       DATASET NAME KEY
         DC    X'0001'             NUMBER
         DC    AL2(44)             DSNAME LENGTH
TXTDSNAM DS    CL44' '             DSNAME FROM IEFSSREQ
TXTCLOSE DC    AL2(DALCLOSE)       UNALLOCATE AT CLOSE KEY
         DC    X'0000'             # FIELD (0000 REQUIRED)
TXTSSREQ DC    AL2(DALSSREQ)       REQUEST OF SUBSYSTEM
         DC    X'0001'             # FIELD (0001 REQUIRED)
         DC    X'0004'             LEN OF SS NAME FOLLOWING
         DC    CL4'JES3'           NAME OF SUBSYSTEM
TXTRTDDN DC    AL2(DALRTDDN)       RETURN DDNAME FIELD
         DC    X'0001'             # FIELD (0001 REQUIRED)
         DC    X'0008'             LEN OF PARM
TXTDDA99 DC    CL8' '              RETURNED DDNAME PARM FIELD
*********************************************************************
* TEXT UNITS FOR UNALLOCATION                                       *
*********************************************************************
TXTDUNDD DC    AL2(DUNDDNAM)       TU FOR DDNAME UNALLOC
         DC    X'0001'             NUMBER
         DC    AL2(8)              DDNAME LENGTH
TXTDDU99 DS    CL8' '              DDNAME FROM DYNALLOC
TXTDUNNH DC    AL2(DUNOVSNH)       TU FOR NOHOLD
         DC    X'0000'             # FIELD (0000 REQUIRED)
TXTDUNCL DC    AL2(DUNOVCLS)       TU FOR CHANGE OF CLASS
         DC    X'0001'             # FIELD (0001 REQUIRED)
         DC    X'0001'             LEN OF SYSOUT CLASS
         DC    CL1'A'              CHANGED SYSOUT CLASS
TXTDUNDS DC    AL2(DUNOVSUS)       TU FOR CHANGE OF REMOTE
         DC    X'0001'             # FIELD (0001 REQUIRED)
         DC    X'0008'             LEN OF CHANGED REMOTE
         DC    CL8'PRT803'         CHANGED REMOTE NAME
MYSSOBPT DS    F                   POINTER TO SSOB FOR IEFSSREQ
NOMORE   DC    AL2(SSSOEODS)       NO MORE DATASETS FROM JES
MOVEIT   MVC   RECTEXT(*-*),0(R1)  OBJ OF AN EXECUTE
RECLEN   DS    H                   LENGTH OF OUTPUT RECORD
RECTEXT  DS    CL150               UP TO 150 BYTES OF SYSOUT
INDCB    DCB   DSORG=PS,MACRF=GL,BUFNO=2,EODAD=MYEODAD,                X
               DDNAME=WILLCHNG
         TITLE '- LITERALS'
         LTORG ,
         END

Go to the previous page Go to the next page




Copyright IBM Corporation 1990, 2014