* * $Id: abuser.s,v 1.1.1.1 1996/02/15 17:53:18 mclareni Exp $ * * $Log: abuser.s,v $ * Revision 1.1.1.1 1996/02/15 17:53:18 mclareni * Kernlib * * ABUSER CSECT * * CERN PROGLIB# Z036 ABUSER .VERSION KERNIBM 2.11 850320 * ********************************************************************* * * FUNCTION: RECORD THE ADDRESS OF A USER EXIT ROUTINE AND * SUBSEQUENTLY PASS CONTROL TO IT DURING ABEND * PROCESSING. THE USER EXIT ROUTINE MUST BE ABLE TO * RECEIVE A CALL OF THE FORM 'CALL NAME(KODES,KODEU)' * WHERE KODES WILL BE THE SYSTEM COMPLETION CODE AND * KODEU THE USER COMPLETION CODE. IT MUST RETURN * WHEN ITS PROCESSING IS COMPLETE. * ABUSER MAY BE CALLED AT ANY TIME DURING NORMAL * PROGRAM EXECUTION TO RE-SPECIFY THE ADDRESS OF THE * USER EXIT ROUTINE. CALL ABUSER(0) CANCELS THE EFFECT * OF ALL PREVIOUS CALLS. * * CALLING SEQUENCE: CALL ABUSER(NAME) * * ARGUMENTS: NAME - THE NAME OF THE USER EXIT ROUTINE WHICH * MUST APPEAR IN A FORTRAN EXTERNAL STATEMENT * * ENTRY POINT: REENT - CALL REENT(NAME) HAS THE SAME EFFECT AS * CALL ABUSER(NAME) * * NOTES: THIS VERSION IS ONLY FOR USE IN A SIEMENS FORTRAN 77 * ENVIRONMENT. IT CALLS THE SIEMENS SERVICE SUBPROGRAM * ENDXIT. * ********************************************************************* * * MODIFICATION LOG : * * 1.02 : CMS-COMPATIBLE CODE ADDED. * R. MATTHEWS, CERN/DD, DECEMBER 1984. * * 1.01 : MODIFIED TO TEST THE DETAIL CODE RECEIVED FROM THE FORTRAN * LIBRARY; IF IT IS FOUND TO BE ZERO THE USER EXIT IS NOT * CALLED. THIS MODIFICATION WAS MADE NECESSARY BY A CORRECTION * TO V10L20 OF THE FORTRAN LIBRARY WHICH CAUSES THE EXIT * IDENTIFIED IN THE CALL TO ENDXIT TO RECEIVE CONTROL FOR NORMAL * TERMINATION AS WELL AS ABNORMAL TERMINATION, (PREVIOUSLY * CONTROL WAS ONLY RECEIVED FOR ABNORMAL TERMINATION). * R. MATTHEWS, CERN/DD, JULY 1984. * * 1.00 : ORIGINAL VERSION, R. MATTHEWS, CERN/DD, DECEMBER 1982. * ********************************************************************* * 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 * PRINT NOGEN * ENTRY REENT * REENT EQU * * * P R O L O G U E * USING ABUSER,R15 B SAVEREGS DC AL1(7),CL7'ABUSER' IDENTIFIER DC C'1.02' VERSION.MODIFICATION LEVEL SAVEREGS STM R14,R12,12(R13) LR R4,R13 CNOP 0,4 BAL R13,AROUNDSA SAVEAREA DC A(EPILOGUE),17F'0' DROP R15 USING SAVEAREA,R13 AROUNDSA ST R13,8(0,R4) ST R4,4(0,R13) XC 8(4,R13),8(R13) * * C A L L E N D X I T * L R2,0(0,R1) R2 -> ADDRESS OF USER EXIT L R2,0(0,R2) R2 := ADDRESS OF USER EXIT LTR R2,R2 IS IT ZERO ? BZ CANCEL YES, BRANCH * ST R2,USEREXIT STORE IT CALL ENDXIT,(F1,AABEXIT,IRC,F0),VL B EPILOGUE * CANCEL CALL ENDXIT,(F0,AABEXIT,IRC,F0),VL B EPILOGUE * * C A L L U S E R E X I T W I T H S C C A N D U C C * CNOP 0,4 ABEXIT EQU * USING ABEXIT,R15 ESTABLISH ADDRESSABILITY B EP0102 EP0101 DC A(SAVEAREA) EP0102 STM R14,R12,12(R13) LR R4,R13 L R13,EP0101 ST R13,8(0,R4) ST R4,4(0,R13) XC 8(4,R13),8(R13) DROP R15 * LM R2,R3,0(R1) R2 -> RETURN CODE; R3 -> DETAIL CODE L R3,0(0,R3) R3 := DETAIL CODE LTR R3,R3 IS IT ZERO ? BZ EPILOGUE YES, DO NOT CALL THE USER EXIT * #if defined(CERNLIB_SYCERNV) L R2,0(0,R2) R3 := RETURN CODE ST R2,UCC STORE THE RETURN CODE ST R3,SCC STORE THE DETAIL CODE #endif #if !defined(CERNLIB_SYCERNV) L R2,16 R2 -> CVT L R2,0(0,R2) R2 := CVTTCBP L R2,4(0,R2) R2 -> TCB L R2,224(0,R2) R2 -> RTM2WA L R2,28(0,R2) R2 := COMPLETION CODES LA R2,0(0,R2) ZERO THE HIGH ORDER BYTE SRDL R2,12 R2 := SYSTEM COMPLETION CODE ST R2,SCC STORE IT SRL R3,20 R3 := USER COMPLETION CODE ST R3,UCC STORE IT #endif L R15,USEREXIT R15 -> USER EXIT CALL (15),(SCC,UCC),VL * * E P I L O G U E * EPILOGUE EQU * L R13,4(0,R13) LM R14,R12,12(R13) MVI 12(R13),X'FF' BR R14 * * D A T A A R E A S * AABEXIT DC A(ABEXIT) F0 DC F'0' F1 DC F'1' IRC DS F SCC DS F UCC DS F USEREXIT DS F * END #ifdef CERNLIB_SYOS_REENT #undef CERNLIB_SYOS_REENT #endif #ifdef CERNLIB_SYCERN_ABUSER #undef CERNLIB_SYCERN_ABUSER #endif