*DECK LINK
USETEXT MISC$ 
USETEXT TSB$COM 
USETEXT ACN$COM 
USETEXT CHN$COM 
USETEXT GLOBALI 
USETEXT RBF$COM 
      PROC LINK (DESTINATION, EVENTADDRESS);
      BEGIN # LINK #
 #
*1DC  LINK
*     1. PROC NAME           AUTHOR              DATE 
*        LINK                B. M. WEST          3 MARCH 1977 
* 
*     2. FUNCTIONAL DESCRIPTION.
*        LINK IS CALLED TO LINK A CONNECTION TO THE MODULE WHICH IS TO
*        PROCESS IT. IN THE CASE A PARTICULAR EVENT MUST OCCUR BEFORE 
*        THE DESTINATION MODULE CAN BEGIN PROCESSING THE CONNECTION 
*        AN EVENT IS SPECIFIED BY ITS ADDRESS.
* 
*     3. METHOD USED. 
*        THE DESTINATION PASSED TO LINK BY THE CALLING PROGRAM IS AN
*        INDEX TO THE CHAIN TABLE (CHN$TABLE). CHN$TABLE CONTAINS A 
*        FLAG TO INDICATE IF THE MODULE IS IN AN OVERLAY OR IS RESIDENT.
*        IF RESIDENT CHN$TABLE CONTAINS THE ADDRESS OF THE RESIDENT 
*        MODULE. IF AN OVERLAY THE INFORMATION ABOUT THE OVERLAY IS IN
*        THE CHAIN TABLE INDEXED BY MOD$CHAIN ITEM IN THE MOD$TABLE 
*        ENTRY. ACN, A GLOBAL ITEM, CONTAINS THE CURRENT ACN TO PROCESS 
* 
*     4. ENTRY PARAMETERS.
* 
*          DESTINATION - STATUS VARIABLE IN THE STATUS LIST MOD 
* 
*          EVENTADDRESS - ADDRESS OF EVENT PROCESSOR
* 
*     5. EXIT PARAMETERS. NONE. 
* 
*     6. COMDECKS CALLED
*        RBF$COM
*        TSBMDEFS 
*        TSBMBASE 
* 
*     7. ROUTINES CALLED. NONE. 
* 
*     8. DAYFILE MESSAGES. NONE.
* 
 #
      XREF PROC WAIT; 
# 
      LOCAL PARAMETERS
# 
      ITEM DESTINATION U;                  # DESTINATION, INDEX TO     #
                                           # MOD$TABLE                 #
      ITEM EVENTADDRESS U;                 # EVENT ADDRESS             #
      ITEM CHAIN U;                        # CHAIN INDEX               #
# 
      SET DESTINATION INTO ACN ENTRY AND INDICATE TO WHICH CHAIN IT 
      BELONGS 
# 
      ACN$CHAIN [ACN] = DESTINATION;
# 
      IF AN EVENT IS SPECIFIED PLACE THE ADDRESS IN THE EVENT ITEM
      COMMON TO ALL COMMON BLOCKS AND PLACE THE CONNECTION ON THE 
      EVENT CHAIN 
# 
      CHAIN = ACN$CHAIN [ACN];
      IF ACN$CB [ACN] NQ 0
      THEN
        BEGIN # CONTROL BLOCK EXISTS #
        P<CCBHDR> = ADDRESS [ACN$CB [ACN]]; 
        CCB$EVENT = EVENTADDRESS; 
        IF EVENTADDRESS NQ 0
        THEN
          CHAIN = CHAINS"EVENT";
        IF EVENTADDRESS EQ CHAINS"BACKGROUND" 
        THEN
          BEGIN                                  # LINK TO BACKGROUND  #
          CHAIN = EVENTADDRESS;                  # CHAIN PROCESSOR     #
          CCB$EVENT = LOC (WAIT); 
          END 
        END   # CONTROL BLOCK EXISTS #
# 
      PLACE CONNECTION ON CHAIN 
# 
      IF CHN$FIRST [CHAIN] EQ 0 
      THEN
        BEGIN # EMPTY CHAIN # 
        CHN$FIRST [CHAIN] = ACN;
        END # END EMPTY CHAIN PROCESSING #
      ELSE
        ACN$NEXT [CHN$LAST[CHAIN]] = ACN; 
      ACN$NEXT [ACN] = 0; 
      CHN$LAST [CHAIN] = ACN; 
# 
      UPDATE THE NUMBER OF ENTRIES ON THE CHAIN 
# 
      CHN$NENTRIES [CHAIN] = CHN$NENTRIES [CHAIN] + 1;
      RETURN; 
      END # END OF LINK # 
      TERM; 
