z/OS MVS Programming: Sysplex Services Guide
Previous topic | Next topic | Contents | Contact z/OS | Library | PDF


Coded Example

z/OS MVS Programming: Sysplex Services Guide
SA23-1400-00

Here is an example of a message user routine, the members (member 1 and member 2) of a group have established a protocol for the use of the message control information (MSGCNTL parameter on DIDXCMDSGOX):
  • If member 1 sends a message to member 2 and places zeros in the first byte of the message control field, member 1 is indicating that the data in the message buffer area (MSGBUF parameter on IXCMSGOX) is an initial message. Member 2's message user routine then reads in the data contained in the message buffer.
  • If member 1 sends a message with anything other than zeros in the first byte of the message control field, member 1 is confirming that it received a prior message. Member 2's message user routine then does not have to read in any information from the message buffer.
 ***************************************************************
 *                                                             *
 *  MESSAGE USER ROUTINE                                       *
 *                                                             *
 ***************************************************************
 MEXIT    CSECT
 MEXIT    AMODE 31
 MEXIT    RMODE ANY
 @MAINENT DS    0H
          USING *,R15
          B     @PROLOG
          DC    AL1(16)
          DC    C'ME 89360 MEXIT'
          DROP  R15
 ***************************************************************
 *                                                             *
 *  ENTRY LINKAGE                                              *
 *                                                             *
 ***************************************************************
 @PROLOG  STM   R14,R12,12(R13)
          LR    R12,R15
 @PSTART  EQU   MEXIT
 *
 *  SET UP BASE REGISTER TO 12
 *
          USING @PSTART,R12
          SLR   R15,R15
          IC    R15,@SIZDATD
          SLR   R0,R0
          ICM   R0,7,@SIZDATD+1
          STORAGE OBTAIN,LENGTH=(0),SP=(15)
          LR    R10,R1
          USING @DATD,R10
          ST    R13,4(,R10)
          ST    R10,8(,R13)
          LM    R15,R1,16(R13)
          LR    R13,R10
***************************************************************
 *                                                             *
 *  MESSAGE USER ROUTINE CODE                                  *
 *                                                             *
 *  IF THE FIRST BYTE OF MSGCNTL CONTAINS ZEROS, THEN READ     *
 *  IN THE MESSAGE; OTHERWISE, DO NOT READ IN THE MESSAGE.     *
 *                                                             *
 ***************************************************************
          LR    R6,R1                   SAVE THE PARAMETER LIST
          USING MEPL,R6                 GET ADDRESSABILITY TO MEPL
          L     R4,MEPLMLEN             PLACE THE LENGTH OF MSG IN REG 4
          LA    R5,MEPLCNTL             LOAD ADDRESS OF MSGCNTL TO REG 5
          USING CHKTYPE,R5              GET ADDRESSABILITY TO MSGCNTL
          CLI   MSGTYPE,X'00'           SEE IF MESSAGE SHOULD BE READ IN
          BNE   @DONREAD                IF NO, BRANCH
          STORAGE OBTAIN,LENGTH=(R4),SP=0  IF YES, GET STORAGE FOR MSG
          LR    R3,R1                   SAVE THE ADDRESS IN REG 3

 *
 *  SET UP DYNAMIC AREA AND ISSUE IXCMSGIX TO RECEIVE MESSAGE
 *
          L     R7,MSGILNTH
          BCTR  R7,0
          EX    R7,@SETPARM
          IXCMSGIX MSGTOKEN=MEPLMTOK,MSGBUF=(R3),                        X
                RETCODE=RETURN,RSNCODE=REASON,MF=(E,MSGILSTD)

 ***************************************************************
 *                                                             *
 *  NOTE:  THIS IS A SIMPLIFIED EXAMPLE OF A MESSAGE USER      *
 *  ROUTINE.  NORMALLY, AT THIS POINT, THE MESSAGE WOULD       *
 *  BE PLACED ON A WORK QUEUE OR OTHER APPROPRIATE ACTION      *
 *  TAKEN WITHIN THE MESSAGE USER ROUTINE, AND                 *
 *  THE STORAGE WOULD NOT BE RELEASED.                         *
 *                                                             *
 ***************************************************************
 *
 *  RELEASE THE STORAGE AND WRITE TO OPERATOR
 *
          STORAGE RELEASE,LENGTH=(R4),ADDR=(R3),SP=0
          WTO   'READ IN THE MESSAGE',ROUTCDE=11,LINKAGE=BRANCH
          B     @FINI
 *
 *  BRANCH HERE WHEN MSGTYPE DOES NOT CONTAIN ZEROS (NO MESSAGE
 *  TO RECEIVE)
 *
 @DONREAD WTO   'MESSAGE CONFIRMATION',ROUTCDE=11,LINKAGE=BRANCH
 *
 *  RELEASE DYNAMIC AREA
 *
 @FINI    LR    R1,R10
          L     R13,4(,R13)
          SLR   R15,R15
          IC    R15,@SIZDATD
          SLR   R0,R0
          ICM   R0,7,@SIZDATD+1
          STORAGE RELEASE,LENGTH=(0),ADDR=(1),SP=(15)
          LM    R14,R12,12(R13)
          BR    R14                  RETURN TO XCF
          DS    0F
 @SETPARM MVC   MSGILSTD(0),MSGILSTS
 @PSIZE   EQU   ((*-MEXIT+99)/100)*5
          DC    C'PATCH AREA - MEXIT 89.360'
          PUSH  PRINT
          PRINT ON,GEN,DATA
 @PSPACE  DC    25S(*)
          ORG   @PSPACE
          DC    ((@PSIZE+1)/2)S(*)
          ORG   ,
          POP   PRINT
 MEXIT    CSECT ,
          LTORG
          DS    0D
 @SIZDATD DS    0A
          DC    AL1(0)
          DC    AL3(@DYNSIZE)
 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

 MSGILST1 IXCMSGIX  MF=(L,MSGILSTS)    LIST FORM OF IXCMSGIX MACRO
 MSGILNTH DC   A(*-MSGILST1)
 @ENDDATA EQU   *
 @DATA    DS    0H
 @DATD    DSECT
          DS    0F
 SAVEAREA DS    18F
 RETURN   DS    1F                    RETURN CODE
 REASON   DS    1F                    REASON CODE
 TOKENMSG DS    CL4                   MESSAGE TOKEN
 MSGILST2 IXCMSGIX  MF=(L,MSGILSTD)    LIST FORM OF IXCMSGIX MACRO
 @ENDDATD DS    0X
 @DYNSIZE EQU   ((@ENDDATD-@DATD+7)/8)*8
 CHKTYPE  DSECT
 MSGTYPE  DS    X
 RESTCNTL DS    XL31
 ***************************************************************
 *                                                             *
 *  MAPPING MACROS                                             *
 *                                                             *
 ***************************************************************
          IXCYMEPL
          END   MEXIT

Go to the previous page Go to the next page




Copyright IBM Corporation 1990, 2014