./ ADD NAME=MPF$NTFY    01 01 93200 93227 120839 0174 0169 0001 T2JJ
//IBMUSERA JOB ACCT,'JAN JAEGER',NOTIFY=IBMUSER,COND=(0,NE)             NONUMBER
//ASMA90   EXEC PGM=ASMA90,PARM='DECK,NOOBJ,XREF(SHORT)'                NONUMBER
//SYSPRINT DD  SYSOUT=*                                                 NONUMBER
//SYSLIB   DD  DSN=SYS1.MACLIB,DISP=SHR                                 NONUMBER
//         DD  DSN=SYS1.MODGEN.DISP=SHR                                 NONUMBER
//         DD  DSN=SYS1.HASPSRC,DISP=SHR                                NONUMBER
//SYSUT1   DD  UNIT=SYSALLDA,SPACE=(CYL,10)                             NONUMBER
//SYSPUNCH DD  DSN=&&PUNCH,DISP=(NEW,PASS),UNIT=SYSALLDA,SPACE=(CYL,10) NONUMBER
 TITLE 'MPF EXIT TO NOTIFY USER OF MESSAGES ISSUED BY BATCH JOB'        00000100
*********************************************************************** 00000200
*                                                                     * 00000300
* JUSTIFICATION:                                                      * 00000400
*   USERS NEED TO BE NOTIFIED OF CERTAIN MESSAGES WHILE BATCH JOB IS  * 00000500
*   STILL RUNNING (SUCH AS IEF099I JOB XXXXXXX WAITING FOR DATASETS). * 00000600
*   THIS MPF EXIT WILL SEND THE CONTENTS OF THE MESSAGE THRU THE JES  * 00000700
*   NOTIFY FUNCTION TO THE USER IF A NOTIFY WAS SPECIFIED ON THE      * 00000800
*   JOBCARD.                                                          * 00000900
*                                                                     * 00001000
* FUNCTION:                                                           * 00001100
*   THIS MPF EXIT WILL CHECK THE PRESENCE OF A NOTIFY USERID/NODE     * 00001200
*   ON THE BATCH JOB ISSUEING THE MESSAGE.  IF A NOTIFY USERID EXISTS * 00001300
*   THEN THIS EXIT WILL USE THE JES NOTIFY USER FUNCTION TO SEND THE  * 00001400
*   MESSAGE ISSUED TO THE USER ON THE SPECIFIED NODE.                 * 00001500
*                                                                     * 00001600
* LOGIC:                                                              * 00001700
*   OBTAIN A WORKAREA IN SP230                                        * 00001800
*   FIND JES2 CONTROL BLOCKS THRU THE LIFE-OF-JOB SSIB                * 00001900
*   DO ACRONYM AND VERSION CHECK ON THE JES2 SJB                      * 00002000
*   CHECK FOR NOTIFY USERID IN THE JES JCT                            * 00002100
*   INITIALIZE SSOB AND SSNU                                          * 00002200
*   COPY MESSAGE ADDRESS AND LENGTH FROM CTXT TO SSNU                 * 00002300
*   CALL IEFJSREQ                                                     * 00002400
*   IF MESSAGE WAS SEND SUCCESSFULL THEN REQUEST MINOR LINES          * 00002500
*   RELEASE WORKAREA                                                  * 00002600
*   RETURN TO CALLER                                                  * 00002700
*                                                                     * 00002800
* REGISTER USAGE:                                                     * 00002900
*   R0    WORK                                                        * 00003000
*   R1    ENTRY PARAMETER + WORK                                      * 00003100
*   R2    TCB                                                         * 00003200
*   R3    JSCB                                                        * 00003300
*   R4    SSIB                                                        * 00003400
*   R5    SJB                                                         * 00003500
*   R6    JCT                                                         * 00003600
*   R7-R9 NOT USED                                                    * 00003700
*   R10   CTXTATTR                                                    * 00003800
*   R11   CTXT                                                        * 00003900
*   R12   PROGRAM BASE                                                * 00004000
*   R13   WORKAREA INCLUDING STANDARD OS SAVEAREA                     * 00004100
*   R14   RETURN ADDR + WORK                                          * 00004200
*   R15   ENTRY POINT ADDRESS + WORK                                  * 00004300
*                                                                     * 00004400
* ATTRIBUTES:                                                         * 00004500
*   AMODE(31),RMODE(ANY),REFR,AC(0),OL                                * 00004600
*   THE OL (ONLY LOADABLE) ATTRIBUTE IS NOT REQUIRED BUT RECOMMENDED  * 00004700
*   BECAUSE MPF EXITS ARE LOAD-ED INTO CSA AND SUBSEQUENTLY BRANCHED  * 00004800
*   TO.  THEY ARE NEVER LINK-ED ATTACH-ED OR XCTL-ED TO.              * 00004900
*                                                                     * 00005000
* HISTORY:                                                            * 00005100
*   DATE       BY              COMMENTS                               * 00005200
*   28/02/93   JAN JAEGER      INITIAL VERSION                        * 00005300
*                                                                     * 00005400
*********************************************************************** 00005500
MPF$NTFY RSECT ,                                                        00005600
MPF$NTFY AMODE 31                                                       00005700
MPF$NTFY RMODE ANY                                                      00005800
         B     SKIPHDR-*(,R15)                                          00005900
         DC    AL1(L'EYECATCH)                                          00006000
EYECATCH DC    C'MPF$NTFY-J.JAEGER-&SYSDATE.-&SYSTIME.'                 00006100
SKIPHDR  DS    0H                                                       00006200
         BAKR  R14,0                   STACK REGISTERS                  00006300
         LR    R12,R15                 SET BASE REGISTER                00006400
         USING MPF$NTFY,R12                                             00006500
*                                                                       00006600
         L     R11,0(,R1)              POINT TO PARAMETER LIST          00006700
         USING CTXT,R11                                                 00006800
*                                                                       00006900
         STORAGE OBTAIN,               OBTAIN WORKAREA                 X00007000
               LENGTH=WORKLEN,                                         X00007100
               SP=230                                                   00007200
*                                                                       00007300
         MVC   4(4,R1),=CL4'F1SA'      INDICATE LINKAGE STACK USED      00007400
         LR    R13,R1                                                   00007500
         USING WORKAREA,R13                                             00007600
         USING SSOB,WORKSSOB           THIS IS A NICE FEATURE OF HLASM  00007700
         USING PSA,R0                  THIS ALWAYS WORKS                00007800
*                                                                       00007900
         ICM   R2,B'1111',PSATOLD                                       00008000
         BZ    ERREXIT                 NOT IN TCB MODE                  00008100
         USING TCB,R2                                                   00008200
         SLR   R3,R3                   TCBJSCBB IS A 24 BIT ADDRESS     00008300
         ICM   R3,B'0111',TCBJSCBB     JSCB ADDRESS                     00008400
         BZ    ERREXIT                 NO JSCB FOUND                    00008500
         USING IEZJSCB,R3                                               00008600
         ICM   R3,B'1111',JSCBACT      POINT TO ACTIVE JSCB             00008700
         BZ    ERREXIT                 NO ACTIVE JSCB FOUND             00008800
         ICM   R4,B'1111',JSCBSSIB     SSIB ADDRESS                     00008900
         BZ    ERREXIT                 NO LIFE-OF-JOB SSIB              00009000
         USING SSIB,R4                                                  00009100
         ICM   R5,B'1111',SSIBSUSE     SJB ADDR                         00009200
         BZ    ERREXIT                 NO SJB FOUND                     00009300
*                                                                       00009400
         USING SJB,R5                                                   00009500
         CLC   SJBID,=CL4'SJB'         CHECK ID OF SJB                  00009600
         BNE   ERREXIT                                                  00009700
         CLI   SJBVRSN,SJBCURVN        CHECK VERSION LEVEL              00009800
         BNE   ERREXIT                                                  00009900
         ICM   R6,B'1111',SJBJCT       GET JCT ADDRESS                  00010000
         BZ    ERREXIT                 NO JCT PRESENT                   00010100
         USING JCT,R6                                                   00010200
*                                                                       00010300
         TM    JCTNOTUS,X'BF'          CHECK PRESENCE OF NOTIFY USERID  00010400
         BZ    EXIT                    NO NOTIFY USERID                 00010500
*                                                                       00010600
         LA    R1,SSOB                 INITIALIZE SSOB POINTER          00010700
         ST    R1,SSOBPTR                                               00010800
         OI    SSOBPTR,X'80'           SET HIGH ORDER BIT ON            00010900
         XC    WORKSSOB,WORKSSOB       CLEAR IEFSSREQ PARAMETER LIST    00011000
*                                                                       00011100
         MVC   SSOBID,=CL4'SSOB'       INITIALIZE HEADER                00011200
         MVC   SSOBLEN,=AL2(SSOBHSIZ)                                   00011300
         MVC   SSOBFUNC,=AL2(SSOBSSNU) NOTIFY USER FUNCTION             00011400
         LA    R1,SSNUBGN              POINT TO SSNU SECTION            00011500
         ST    R1,SSOBINDV             STORE IN SSOB                    00011600
         MVC   SSNUID,=CL4'SSNU'       INITIALIZE HEADER                00011700
         MVC   SSNULEN,=AL2(SSNUSIZE)                                   00011800
         MVI   SSNUVER,SSNUCVER                                         00011900
         TM    JCTNNODE,X'BF'          CHECK PRESENCE OF NOTIFY NODE    00012000
         BZ    NOJCTNOD                NO NODE PRESENT                  00012100
         MVC   SSNUNODE,JCTNNODE       NOTIFICATION NODE                00012200
NOJCTNOD DS    0H                                                       00012300
         MVC   SSNUUSER,JCTNOTUS       NOTIFICATION USER                00012400
*                                                                       00012500
         ICM   R10,B'1111',CTXTTXPN    ADDRESS IF MINOR LINES           00012600
         BNZ   ISMINOR                                                  00012700
         ICM   R10,B'1111',CTXTTXPJ    ADDRESS OF MAJOR LINES           00012800
         BZ    ERREXIT                 NO MESSAGE AT ALL                00012900
ISMINOR  DS    0H                                                       00013000
         USING CTXTATTR,R10                                             00013100
         ICM   R9,B'0011',CTXTTLEN     PICK UP LENGTH OF MESSAGE        00013200
         BZ    ERREXIT                 NULL MESSAGE                     00013300
         LA    R8,CTXTTMSG             ADDRESS OF MESSAGE               00013400
         STH   R9,SSNUMLEN             MESSAGE LENGTH                   00013500
         ST    R8,SSNUMSG              MESSAGE ADDRESS                  00013600
*                                                                       00013700
         LA    R1,SSOBPTR                                               00013800
         IEFSSREQ ,                    CALL IEFJSREQ FOR NU FUNCTION    00013900
         LTR   R15,R15                                                  00014000
         BNZ   ERREXIT                 SUBSYSTEM INTERFACE ERROR        00014100
         CLC   SSOBRETN,=AL4(SSNUOKB)  RETURNCODE WORSE THEN WARNING    00014200
         BH    ERREXIT                 SUBSYSTEM FUNCTION ERROR         00014300
         CLC   SSNUERCD,=AL2(SSNUMSGT) TRUNCATED IS STILL ACCEPTABLE    00014400
         BH    ERREXIT                 NOTIFY USER ERROR                00014500
*                                                                       00014600
         OI    CTXTRFB1,CTXTRPML       REQUEST MINOR LINES FOR MLWTO    00014700
*                                                                       00014800
ERREXIT  DS    0H                      ON ERROR SIMPLY EXIT             00014900
EXIT     DS    0H                                                       00015000
         LR    R1,R13                                                   00015100
         STORAGE RELEASE,              RELEASE WORKAREA                X00015200
               LENGTH=WORKLEN,                                         X00015300
               SP=230,                                                 X00015400
               ADDR=(1)                                                 00015500
*                                                                       00015600
         PR    ,                       RETURN TO CALLER                 00015700
*                                                                       00015800
         LTORG ,                       PUT LITERALS AT END OF CSECT     00015900
*                                                                       00016000
WORKAREA DSECT ,                                                        00016100
SAVEAREA DS    18F                     SAVEAREA MUST BE FIRST           00016200
SSOBPTR  DS    A                       POINTER TO SSOB FOR IEFSSREQ     00016300
WORKSSOB DS    XL(SSNULEN8)            SSOB + SSNU                      00016400
WORKLEN  EQU   *-WORKAREA                                               00016500
*                                                                       00016600
         PUSH  PRINT                                                    00016700
         PRINT NOGEN                                                    00016800
         IEZVX100 ,                    MPF EXIT PARAMETER LIST          00016900
         CVT   DSECT=YES               REQUIRED BY IEFSSREQ             00017000
         IEFJESCT ,                    REQUIRED BY IEFSSREQ             00017100
         IHAPSA ,                      POINTS TO TCB                    00017200
         IKJTCB ,                      POINTS TO JSCB                   00017300
         IEZJSCB ,                     POINTS TO SSIB                   00017400
         IEFJSSIB ,                    POINTS TO SJB                    00017500
         IEFSSOBH ,                    SSOB HEADER FOR IEFSSREQ         00017600
SSOBGN   EQU   *                       NU IS NOT SUPPORTED BY IEFJSSOB  00017700
         IAZSSNU ,                     NOTIFY USER SSOB EXTENSION       00017800
         $SJB  ,                       POINTS TO JCT                    00017900
         $JCT  ,                       CONTAINS NOTIFY INFO FROM JES2   00018000
         $HASPEQU ,                    REQUIRED BY $SJB                 00018100
         $BUFFER ,                     REQUIRED BY $JCT                 00018200
         $TQE  ,                       REQUIRED BY $JCT                 00018300
         IFGRPL ,                      REQUIRED BY $BUFFER              00018400
         POP   PRINT                                                    00018500
*                                                                       00018600
         END   MPF$NTFY,(JAN JAEGER,0101,95059)                         00018700
//IEWL     EXEC PGM=IEWL,                                               NONUMBER
//          PARM='XREF,AMODE=31,RMODE=ANY,REFR,OL'                      NONUMBER
//SYSPRINT DD  SYSOUT=*                                                 NONUMBER
//SYSUT1   DD  UNIT=SYSALLDA,SPACE=(CYL,10)                             NONUMBER
//SYSLMOD  DD  DSN=SYS1.LINKLIB,DISP=SHR                                NONUMBER
//SYSLIN   DD  DSN=&&PUNCH,DISP=(OLD,DELETE)                            NONUMBER
//         DD  *                                                        NONUMBER
 NAME MPF$NTFY(R)                                                       NONUMBER
// EXEC PGM=IEFBR14                                                     NONUMBER
