MVS ASREXIT - SYMREC 授权退出

CICS® 程序可能会调用第一个故障症状组件。 该组件使用 MVS 的SYMREC宏,将症状记录写入 MVSSYS1.LOGREC 数据集,此操作可替代作业日志,或与作业日志并行执行。

要允许CICS使用 SYMREC 宏调用,SYMREC 授权退出 ASREXIT 必须有效;否则,调用失败,返回代码 12,原因代码 3868X'F1C')。

当 CICS调用 SYMREC 时, ASREXIT 例程会发出允许成功写入 SYMREC 的返回码。

在 SYS1.SAMPLIB 中提供的 MVS 示例退出程序 ASREXT0 和 ASREXT1 适用于此目的。 有关这些退出点的更多信息,请参阅 z/OS MVS 安装退出点。 ASREXIT例程可通过检测EPLPNAME是否为DFHSIP值来判断 CICS 是否为调用方,但以下情况除外:
  • 重命名 DFHSIP 时,在这种情况下,EPLPNAME 包含新名称。
  • 当DFHSIP是 MVS 链接的对象时,此时EPLPNAME包含发出 MVS 链接的程序名称,除非该链接本身也是 MVS 链接的对象。

如果选择这种方法,请对 ASREXIT 例程进行编码,允许这些例外情况。

图 1中显示了对 ASREXIT 例程进行编码的替代方法。 该方法不受前述例外的影响。
图 1。 对 ASREXIT 例程编码的示例。
         TITLE 'SYMREC SAMPLE EXIT'
         ASREPL
         PRINT NOGEN
         IHAPSA
         IKJTCB
         PRINT GEN
         DFHAFCD
         EJECT
ASREXIT  CSECT
ASREXIT  AMODE 31
ASREXIT  RMODE ANY
         USING *,R15                Temporary addressability
         MODID BR=YES
         DROP  R15
         STM   R14,R12,12(R13)      Save the caller's registers
         LR    R12,R15
         USING ASREXIT,R12
         L     R3,0(,R1)            Load the address of the EPL
         USING EPL,R3               Get addressability
         LA    R15,RCREJECT         Preset "reject" return code
         USING PSA,0
         L     R1,PSATOLD           Point at current TCB
         USING TCB,R1
         L     R1,TCBEXT2           Point at TCB extension
         DROP  R1
         USING TCBXTNT2,R1
         ICM   R1,B'1111',TCBCAUF   Point at AFCB; is there one?
         BZ    SETRC                No, branch
         DROP  R1
         USING DFHAFCB,R1
         CLC   AFIDENT,=C'AFCX'     Is it a genuine CICS AFCB?
         BNE   SETRC                No, branch
         CLI   AFVER,AFVER1         Is it at least Version 1?
         BL    SETRC                No, branch
         AH    R1,AFLENG            Add length of AFCB's DW
         DROP  R1                   table.
         USING AFTSTART-AFPFXLEN,R1 Allow for AFCB prefix length
         ICM   R1,B'1111',AFTAFCS   Point at AFCS; is there one?
         BZ    SETRC                No, branch
         DROP  R1
         LA    R15,RCWRITE          Set "write" return code
SETRC    DS    0H
         ST    R15,EPLRETC          Store return code
         DROP  R0
         DROP  R3
         DROP  R12
EXIT     LM    R14,R12,12(R13)      Restore caller's registers
         BR    R14                  Return
         LTORG *
R1       EQU   1                    Register 1
R3       EQU   3                    Register 3
R12      EQU   12                   Register 12
R13      EQU   13                   Register 13
R14      EQU   14                   Register 14
R15      EQU   15                   Register 15
RCREJECT EQU  X'0C'                 Return code C
RCWRITE  EQU  X'00'                 Return code 0
         END*  CONSTANTS