* /* */ 01050002 * /* MACCOMP Y-2 SC1DE/SJD61 */ 01100002 * /* MACSTAT Y-2 73103/Y02113 */ 01150002 * /* */ 01200002 @EJECT; 01250002 /* IDAEXITR-- EXIT TO USER ROUTINE 02000000 01 FUNCTION = SAVE VSAM REGISTERS, LOAD USER ROUTINE IF IT IS 03000000 NOT IN CORE, RESTORE USER REGISTERS, BALR TO 04000000 THE USER ROUTINE, RESTORE THE VSAM REGISTERS, 05000000 AND DELETE THE USER ROUTINE IF IT WAS LOADED. 06000000 01 INPUT = RPARM1 POINTS TO DESIRED EXIT LIST ENTRY 07000000 01 OUTPUT = REGISTERS ARE UNCHANGED. IF USER ROUTINE DID NOT RETURN 08000000 CONTROL, THE USER EXIT ROUTINE IS LEFT LOADED. */ 09000000 IDAEXITR: 10000000 PROC OPTIONS (NOSAVE, NOSAVEAREA); /* INTERFACE TO USER RTN */ 11000000 /* SAVE VSAM REGISTERS */ 12000000 GEN (IDASVR14); /* SAVE RETURN REG */ 13000000 RESPECIFY IFGEXLEF BASED(RPARM1); /* ENTRY BASE */ 14000000 RPLPLHPT = RPLH; /* PUT PLH POINTER IN RPL */ 15000000 RFY (RWORK0, R13, R15) RSTD; /* GET REGISTERS */ 16000000 GEN SETS (PLHSAVE1, PLHSAVE5); 17000000 STM RAMB,RWORK2,PLHSAVE1(RPLH) SAVE RAMB,ETC 18000000 STM RPARM1,R13,PLHSAVE5(RPLH) SAVE RPARM1 AND R13 19000000 @ENDGEN 20000000 R15 = EXLEXITP; /* GET ROUTINE ADDRESS */ 21000000 RFY RWORK1 RSTD; /* GET REGISTER */ 22000000 /* LOAD THE USER EXIT ROUTINE IF REQUESTED */ 23000000 IF EXLFLAG(EXLLINK) = ON /* SEE IF LOAD REQUIRED */ 24000000 THEN /* IF SO, COME HERE */ 25000000 DO; 26000000 RWORK1 = R1; /* SAVE REGISTER ONE */ 27000000 GEN (LOAD EPLOC=(R15)); /* LOAD ROUTINE */ 28000000 R15 = RWORK0; /* GET ADDR INTO R15 */ 29000000 R1 = RWORK1; /* RESTORE REGISTER ONE */ 30000000 END; /* END OF LOAD CODE */ 31000000 /* RESTORE USER REGISTERS AND BALR TO THE USER ROUTINE */ 32000000 GEN (LM @02,@12,TWENTY8(R13)); /* RESTORE USER REGS */ 33000000 /* TAKE USER EXIT */ 34000000 ?IDACALL (USEREXIT); 35000000 /* RESTORE THE VSAM REGISTERS */ 36000000 RPLH = RPLPLHPT; /* RESTORE PLH POINTER */ 37000000 GEN; 38000000 LM RAMB,RWORK2,PLHSAVE1(RPLH) RESTORE RAMB,ETC. 39000000 LM RPARM1,R13,PLHSAVE5(RPLH) RESTORE RPARM1 AND R13 40000000 @ENDGEN 41000000 /* DELETE THE USER EXIT ROUTINE IF IT WAS LOADED */ 42000000 IF EXLFLAG(EXLLINK) = ON /* SEE IF DELETE NEEDED */ 43000000 THEN /* IF SO, COME HERE */ 44000000 DO; 45000000 RFY RWORK1 RSTD; /* GET REGISTER */ 46000000 RWORK1 = R1; /* SAVE REGISTER ONE */ 47000000 R15 = EXLEXITP; /* POINT TO ROUTINE NAME */ 48000000 GEN (DELETE EPLOC=(R15)); /* DELETE ROUTINE */ 49000000 R1 = RWORK1; /* RESTORE REGISTER ONE */ 50000000 RFY RWORK1 UNRSTD; /* DROP REGISTER */ 51000000 END; /* END OF DELETE CODE */ 52000000 RFY (RWORK0, R13, R15) UNRSTD; /* DROP REGISTERS */ 53000000 GEN (IDARST14); /* RESTORE RETURN */ 54000000 END IDAEXITR; /* END OF EXIT INTERFACE */ 55000000