A CICS® program may call the first failure symptoms (FFS) component. This uses the MVS™ SYMREC macro to write symptom records to the MVS SYS1.LOGREC data set, in addition to, or instead of, a job log.
The SYMREC authorization exit, ASREXIT, must be in effect to allow CICS to use the SYMREC macro call, otherwise the call fails with return code 12, reason code 3868 (X'F1C').
When SYMREC is called by CICS, the ASREXIT routine issues a return code that permits the SYMREC to be successfully written.
The MVS sample exit programs ASREXT0 and ASREXT1, supplied in SYS1.SAMPLIB, are suitable for this purpose. For further information about these exits, see the z/OS MVS Installation Exits manual. The ASREXIT routine can determine if CICS is the caller by testing EPLPNAME for the value 'DFHSIP' except:
If you choose this method, you may wish to code your ASREXIT routine to allow for these exceptions.
An alternative method of coding the ASREXIT routine is in Figure 9. This method is not affected by the exceptions that are mentioned above.
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