*DECK EVENTS
USETEXT MISC$ 
USETEXT TSB$COM 
USETEXT ACN$COM 
USETEXT CHN$COM 
USETEXT GLOBALI 
USETEXT RBF$COM 
      PROC EVENT(EVENTADDR); # RETURNS CONTROL ONLY AFTER EVENT OCCURS #
  
      BEGIN                  # BEGIN EVENT                             #
  
*IF,DEF,IMS 
 #
* 
*1DC  EVENT 
* 
*     1. PROC NAME           AUTHOR              DATE 
*        EVENT               A M PRATT           77/05/19 
                             SEYUNG OH           FEB 6,1980 
* 
*     2. FUNCTIONAL DESCRIPTION 
*        RETURNS CONTROL BELOW THE CALL TO "EVENT" ONLY AFTER THE 
*        EVENT HAS OCCURRED.  IF THE CALL TO "EVENT" IS IN PROCEDURE P, 
*        CONTROL, IN THE MEANTIME, PROCEEDS AS IF A RETURN STATEMENT
*        IN P HAD BEEN EXECUTED.
* 
*     3. METHOD USED
*        THE ROUTINE "LINK" IS USED TO ROUTE CONTROL TO THE CALLER OF 
*        EVENT AFTER THE EVENT HAS OCCURRED.  TO EFFECT THE RETURN IN P,
*        THE ENTRY WORD OF P IS COPIED TO THE ENTRY WORD OF EVENT.
* 
*     4. ENTRY PARAMETERS 
*        EVENTADDR           ADDRESS OF EVENT PROCESSOR 
* 
*     5. EXIT PARAMETERS
*        NONE 
* 
*     6. COMDECKS CALLED
*        RBF$COM
*        TSBMDEFS 
*        TSBMBASE 
* 
*     7. ROUTINES CALLED
*        LINK 
* 
*     8. DAYFILE MESSAGES 
*        NONE 
* 
 #
*ENDIF
  
      XREF PROC LINK; 
  
      ITEM EVENTADDR U;      # ADDRESS OF EVENT PROCESSOR              #
  
      BASED ARRAY MOD$ENTRY; # FITS OVER THE ENTRY POINT OF MODULE     #
        ITEM MOD$ENT U(0,0,60);    # WHICH CALLED "EVENT"              #
  
      BASED ARRAY EV$ENTRY;  # FITS OVER THE ENTRY POINT OF THIS       #
        BEGIN                      # ROUTINE ("EVENT")                 #
        ITEM P U(0,12,18);
        ITEM EV$ENT U(0,0,60);
        END 
  
      P<CCBHDR> = ADDRESS[ACN$CB[ACN]]; 
      P<EV$ENTRY> = LOC(EVENT); 
      CCB$LINK = P;          # RETURN CONTROL AFTER EVENT TO ADDRESS   #
                             # WHERE THIS ROUTINE WOULD NORMALLY RETURN#
      P<MOD$ENTRY> = CHN$ENTRYPT [ACN$CHAIN [ACN]]; 
      EV$ENT = MOD$ENT;      # CONTROL NOW PROCEEDS AS IF "EVENT"S     #
                             # CALLER EXECUTED A RETURN STATEMENT      #
      LINK (ACN$CHAIN [ACN],EVENTADDR);          # LINK TO NEW EVENT   #
      RETURN; 
      END 
TERM
