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


Example 1 — Subsystem Initialization Routine (TSYSINIT)

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

 
TSYSINIT RSECT
TSYSINIT AMODE ANY
TSYSINIT RMODE ANY
************************************************************************
*  Function:                                                           *
*   This is the TSYS subsystem initialization routine.  It is          *
*   called as the result of subsystem definition in any of the         *
*   following ways:                                                    *
*                                                                      *
*     IEFSSNxx parmlib member                                          *
*     SETSSI ADD command                                               *
*     IEFSSI REQUEST=ADD macro                                         *
*                                                                      *
*   Initialization for the TSYS subsystem consists of the following    *
*   steps:                                                             *
*                                                                      *
*     1. Establish recovery                                            *
*     2. Issue the IEFSSVT REQUEST=CREATE macro to create the          *
*        subsystem vector table                                        *
*     3. Issue the IEFSSI REQUEST=OPTIONS macro to specify             *
*        optional information specific to the TSYS subsystem           *
*     4. Issue the IEFSSI REQUEST=PUT macro to store information       *
*        for use by the TSYS subsystem function routines               *
*     5. Issue the IEFSSI REQUEST=ACTIVATE macro to enable the         *
*        TSYS subsystem to receive function requests                   *
*     6. Cancel recovery and return                                    *
*                                                                      *
*   INPUT                                                              *
*     Register 1 points to a two-word parameter list                   *
*     - Word 1 = address of the SSCVT for the TSYS subsystem           *
*     - Word 2 = address of the JSIPL                                  *
*                                                                      *
*   REGISTER USE                                                       *
*      1 - TSYSCB                                                      *
*     10 - SSCVT                                                       *
*     11 - JSIPL                                                       *
*     12 - Code register                                               *
*     13 - Data register                                               *
*                                                                      *
*   MACROS                                                             *
*     CVT                                                              *
*     ESTAE                                                            *
*     FREEMAIN                                                         *
*     GETMAIN                                                          *
*     IHASDWA                                                          *
*     IEFJESCT                                                         *
*     IEFJSCVT                                                         *
*     IEFSSI                                                           *
*     IEFSSVT                                                          *
*     IEFSSVTI                                                         *
*     RETURN                                                           *
*     SETRP                                                            *
*     WTO                                                              *
*                                                                      *
************************************************************************
*
************************************************************************
* Chain saveareas.                                                     *
************************************************************************
         USING TSYSINIT,12
         SAVE  (14,12)                 Save caller's registers
         LR    12,15                   Establish module base register
         LR    10,1                    Save pointer to parameter list
         GETMAIN R,LV=WORKALEN         Get working storage
         ST    13,4(1)                 Chain saveareas backward
         ST    1,8(13)                 Chain saveareas forward
         LR    13,1                    Point to this module's savearea
*
         USING WORKAREA,13             Addressability to work area
         L     11,4(10)                Establish addressability
         USING JSIPL,11                 to the JSIPL
         L     10,0(10)                Establish addressability
         USING SSCT,10                  to the SSCVT
*
************************************************************************
* Establish ESTAE                                                      *
************************************************************************
         XC    ESTAED,ESTAED           Clear ESTAE parameter list
         L     8,=A(TSYSERR)           Address of ESTAE routine
         ESTAE (8),CT,PARAM=ARETRY,MF=(E,ESTAED)
         LTR   15,15                   If ESTAE failed
         BNZ   ESTAERR                  report it and return
*
************************************************************************
* Invoke the IEFSSVT REQUEST(CREATE) macro to build and initialize     *
* the vector table, using the static function routine input table.     *
* The function routines reside in LINKLIB and must be loaded to        *
* global storage to make them available to all address spaces.         *
* Register notation is used to identify the output token for           *
* demonstration purposes.                                              *
************************************************************************
         LA 2,TOKEN1
*
         IEFSSVT REQUEST=CREATE,SUBNAME=SSCTSNAM,SSVTDATA=ROUTINE1,    *
               OUTTOKEN=(2),LOADTOGLOBAL=YES,MAXENTRIES=ENTRIES,       +
               RETCODE=RC,RSNCODE=REASON,                              +
               MF=(E,VTPARMS)
*
         B     TESTVTCR(15)            Check return code
*
TESTVTCR EQU   *
         B     ANCHORCB                0 - Processing successful
         B     VTERR                   4 - Warning
         B     VTERR                   8 - Invalid parameters
         B     VTERR                  12 - Request failure
         B     VTERR                  16 - Error loading subsystem
         B     VTERR                  20 - System error
         B     VTERR                  24 - SSI service not available
*
ANCHORCB EQU   *                       Entry for vector table created
************************************************************************
* Initialize and anchor the subsystem-specific control block used      *
* by TSYS and its function routines.                                   *
************************************************************************
         GETMAIN R,LV=CBLEN,SP=241     Get storage for TSYS control    +
                                         block
         USING TSYSCB,1
         XC    TSYSCB,TSYSCB           Clear control block
         MVC   TSYSID(4),CBACRO        Move in eye-catcher
         LA    7,1                     Version 1
         STH   7,TSYSVER               Put version number in control   +
                                         block
         LA    7,CBLEN                 Get control block length
         STH   7,TSYSLEN               Put length in control block
         ST    1,CBADDR                Save control block address
         DROP  1
*
         IEFSSI REQUEST=PUT,SUBNAME=SSCTSNAM,SUBDATA1=CBADDR,          +
               RETCODE=RC,RSNCODE=REASON,                              +
               MF=(E,SSIPARMS)
*
         B     TESTPUT(15)             Check return code
*
TESTPUT  EQU   *
         B     OPTIONS                 0 - Processing successful
         B     SSIERR                  4 - Warning
         B     SSIERR                  8 - Invalid parameters
         B     SSIERR                 12 - Request failure
         B     SSIERR                 16 - Not defined
         B     SSIERR                 20 - System error
         B     SSIERR                 24 - SSI service not available
*
************************************************************************
* Inform the SSI that TSYS will respond to the SETSSI command.         *
************************************************************************
OPTIONS  EQU   *                       Entry for successful PUT
*
         IEFSSI REQUEST=OPTIONS,SUBNAME=SSCTSNAM,COMMAND=YES,          +
               RETCODE=RC,RSNCODE=REASON,                              +
               MF=(E,SSIPARMS)
*
         B     TESTOPT(15)             Check return code
*
TESTOPT  EQU   *
         B     ACTIVATE                0 - Processing successful
         B     SSIERR                  4 - Warning
         B     SSIERR                  8 - Invalid parameters
         B     SSIERR                 12 - Request failure
         B     SSIERR                 16 - Not defined
         B     SSIERR                 20 - System error
         B     SSIERR                 24 - SSI service not available
*
ACTIVATE EQU   *                       Entry for successful OPTIONS
************************************************************************
* Activate the subsystem.                                              *
************************************************************************
         IEFSSI REQUEST=ACTIVATE,SUBNAME=SSCTSNAM,INTOKEN=TOKEN1,      +
               RETCODE=RC,RSNCODE=REASON,                              +
               MF=(E,SSIPARMS)
*
         B     TESTACT(15)
*
TESTACT  EQU   *
         B     ACTIVEOK                0 - Processing successful
         B     SSIERR                  4 - Warning
         B     SSIERR                  8 - Invalid parameters
         B     SSIERR                 12 - Request failed
         B     SSIERR                 16 - Not defined
         B     SSIERR                 20 - System error
         B     SSIERR                 24 - SSI service not available
*
ACTIVEOK EQU   *
         WTO 'TSYS - SUBSYSTEM INITIALIZED'
         B     DONE
*
VTERR    EQU   *                       Entry for IEFSSVT error
         MVC   FAILSRV(L'SSVTSRV),SSVTSRV  Get name of failing service
         B     ERRMSG                  Issue error message
*
SSIERR   EQU   *                       Entry for IEFSSI error
         MVC   FAILSRV(L'SSISRV),SSISRV  Get name of failing service
*
************************************************************************
* Convert the return and reason code and issue an error message.       *
************************************************************************
ERRMSG   EQU   *
         MVC   SERVERRD(SERVMSGL),SERVERRS  Copy static message
*
         L     7,RC                    Get return code
         CVD   7,DOUBLE                Convert to decimal
         UNPK  RCODE1,DOUBLE           Make return code printable
         MVZ   RCODE1+3,RCODE1
         MVC   SERVERRD+43(2),RCODE1+2  Put return code in message
*
         L     7,REASON                Get reason code
         CVD   7,DOUBLE                Convert to decimal
         UNPK  RCODE1,DOUBLE           Make reason code printable
         MVZ   RCODE1+3,RCODE1
         MVC   SERVERRD+55(4),RCODE1   Put reason code in message
*
         MVC   SERVERRD+18(L'FAILSRV),FAILSRV  Put name of failing    ++
                                         service in message
         WTO   MF=(E,SERVERRD),CONSNAME=JSICNAME  Issue message
         B     DONE
*
INITERR  EQU   *
         MVC   INITERRD(INITMSGL),INITERRS  Copy static message
         WTO   MF=(E,INITERRD),CONSNAME=JSICNAME  Issue message
         B     DONE
*
ESTAERR  EQU   *
         MVC   ESTAERRD(ESTAMSGL),ESTAERRS  Copy static message
         WTO   MF=(E,ESTAERRD),CONSNAME=JSICNAME  Issue message
         B     RETURN
*
************************************************************************
* Cancel the ESTAE and return to caller.                               *
************************************************************************
DONE     EQU   *
         ESTAE 0
RETURN   EQU   *
         L     8,4(13)                 Pointer to caller's savearea
         FREEMAIN R,LV=WORKALEN,A=(13)
         LR    13,8
         RETURN (14,12),RC=0
*
************************************************************************
* ESTAE routine.                                                       *
************************************************************************
TSYSERR  EQU   *
         DROP  12                      Drop current addressability
         USING TSYSERR,15              Set addressability to TSYSERR
         LR    12,15                   Copy address of TSYSERR
         S     12,=A(TSYSERR-TSYSINIT) Reestablish code register
         DROP  15                      Drop addressability to TSYSERR
         USING TSYSINIT,12             Reset addressability
         CL    0,=F'12'                If no SDWA provided
         BE    TSYSERRA                Branch to percolate
         USING SDWA,1
         L     4,SDWAPARM
         L     4,0(4)
         DROP  1
         SETRP WKAREA=(1),RC=4,RETADDR=(4),FRESDWA=YES,RETREGS=YES
TSYSERRA EQU   *
         XR    15,15                   Indicate percolation
         BR    14
*
************************************************************************
* Define static function routine input table.                          *
************************************************************************
         IEFSSVTI TYPE=INITIAL,SSVTDATA=ROUTINE1,TABLEN=STABLEN
         IEFSSVTI TYPE=ENTRY,NUMFCODES=1,FCODES=254,FUNCNAME=WRITEIT
         IEFSSVTI TYPE=ENTRY,NUMFCODES=1,FCODES=255,FUNCNAME=DELETEIT
         IEFSSVTI TYPE=ENTRY,NUMFCODES=1,FCODES=9,FUNCNAME=LISTEN
         IEFSSVTI TYPE=FINAL
*
************************************************************************
* Function routine data.                                               *
************************************************************************
WRITEIT  DC    CL8'WRITEIT '
LISTEN   DC    CL8'LISTEN  '
DELETEIT DC    CL8'DELETEIT'
ENTRIES  DC    H'4'
SSVTSRV  DC    CL7'IEFSSVT'
SSISRV   DC    CL7'IEFSSI '
CBACRO   DC    CL4'TSCB'
*
ARETRY   DC    A(INITERR)
*
SERVERRS WTO 'TSYS ERROR IN xxxxxxx SERVICE, RETCODE xx, RSNCODE xxxx',+
               CONSNAME=,MF=L
SERVMSGL EQU   *-SERVERRS
*
INITERRS WTO 'TSYS - SUBSYSTEM INITIALIZATION FAILED',                 +
               CONSNAME=,MF=L
INITMSGL EQU   *-INITERRS
*
ESTAERRS WTO 'TSYS - SUBSYSTEM ESTAE FAILED',                          +
               CONSNAME=,MF=L
ESTAMSGL EQU   *-ESTAERRS
*
*
         LTORG
*
WORKAREA DSECT
SAVEAREA DS    18F
         DS    0D
DOUBLE   DS    CL8                     CVD work area
RCODE1   DS    F                       Return/reason code in message
RC       DS    F                       Return code
REASON   DS    F                       Reason code
CBADDR   DS    F                       Control block address
FAILSRV  DS    CL7                     Name of failing service
         DS    0F
TOKEN1   DS    F                       Vector table token
*
         IEFSSVT MF=(L,VTPARMS)
*
         IEFSSI MF=(L,SSIPARMS)
*
SERVERRD WTO 'TSYS ERROR IN xxxxxxx SERVICE, RETCODE xx, RSNCODE xxxx',+
               CONSNAME=,MF=L
INITERRD WTO 'TSYS - SUBSYSTEM INITIALIZATION FAILED',                 +
               CONSNAME=,MF=L
ESTAERRD WTO 'TSYS - SUBSYSTEM ESTAE FAILED',                          +
               CONSNAME=,MF=L
*
ESTAED   ESTAE PARAM=ARETRY,MF=L
*
WORKALEN EQU *-WORKAREA
*
TSYSCB   DSECT 0D
TSYSID   DS    CL4                     Acronym
TSYSVER  DS    H                       Version
TSYSLEN  DS    H                       Length
*
CBLEN    EQU *-TSYSCB
*
         CVT DSECT=YES                 CVT
*
         IEFJESCT                      JESCT
*
         IEFJSCVT                      SSCVT
*
         IEFJSRC                       SSI return and reason codes
*
         IEFJSIPL                      Initialization routine          +
                                         parameter list
*
         IHASDWA
*
         IEFSSVTI TYPE=LIST
*
         END

Go to the previous page Go to the next page




Copyright IBM Corporation 1990, 2014