*DECK WAITSM
USETEXT CYBRDEF 
USETEXT IP$COM
USETEXT MISC$ 
USETEXT TCH$COM 
USETEXT ACN$COM 
USETEXT GLOBALI 
USETEXT TCB$COM 
      PROC WAITSM;
      BEGIN                                      # WAITSM              #
*IF DEF,IMS 
 #
*1DC  WAITSM
* 
*     1. PROC NAME           AUTHOR              DATE 
*        WAITSM              SEYUNG OH           DEC 13,1979
* 
*     2. FUNCTIONAL DESCRIPTION 
*        THIS EVENT PROCESSOR CAUSES SMP TO BE LOADED AND EXECUTED
*        WHENEVER SUPERVISORY MESSAGES ARE QUEUED.  IT ALSO CAUSES
*        RBF TO TERMINATE AFTER AN IDLE DOWN HAS BEEN REQUESTED AND 
*        THERE ARE NO ACTIVE CONNECTIONS LEFT.
* 
*     3. METHOD USED. 
*        ALL SUPERVISORY MESSAGES ARE QUEUED USING THE TCB$INPUT ENTRY
*        IN THE SMPACN CONTROL BLOCK.  IF RBF IS IDLING DOWN, THE ACN 
*        TABLE IS SCANNED FOR ACTIVE CONNECTIONS.  IF NONE ARE FOUND, 
*        RBF IS TERMINATED NORMALLY.
* 
*     4. ENTRY PARAMETERS. NONE.
* 
*     5. EXIT PARAMETERS. NONE. 
* 
*     6. SYMPLTEXTS USED. 
*        CYBRDEF
*        IP$COM 
*        MISC$
*        TCH$COM
*        ACN$COM
*        GLOBALI
*        TCB$COM
* 
*     7. ROUTINES CALLED. 
*        ENDRBF 
*        LINK 
*        REMOVE 
* 
*     8. DAYFILE MESSAGES. NONE.
* 
 #
*ENDIF
      XREF PROC ENDRBF; 
      XREF PROC LINK; 
      XREF PROC REMOVE; 
      XREF ITEM SMCOUNT;
  
      ITEM FOUND B;            # TRUE IF IDLESHUTDOWN AND RBF ACTIVE   #
      ITEM I;                  # TEMPORARY INDUCTION VARIABLE          #
      CONTROL EJECT;
      IF IDLESHUTDOWN 
      THEN
        BEGIN                  # SEARCH FOR ACTIVE CONNECTIONS         #
        FOUND = FALSE;
        FOR I = LOWER$ACN STEP 1
        WHILE I LQ TOTDEV+STATIONS AND NOT FOUND
        DO                     # SCAN THE ACN$TABLE                    #
          BEGIN 
          FOUND = (ACN$STATE [I] EQ CONNECTSTATE"ACTIVE") OR FOUND; 
          END 
        IF NOT FOUND
        THEN                   # NO MORE ACTIVE CONNECTIONS            #
          BEGIN 
          ENDRBF;              # NORMAL RBF TERMINATION                #
          END 
        END                    # SEACRH FOR ACTIVE CONNECTIONS         #
      IF TCB$INPUT NQ ZERO
      THEN
        BEGIN                                    # SM AVAILABLE        #
        REMOVE (CHAINS"EVENT"); 
        LINK (ACN$CHAIN [ACN], NOEVENT);
        END                                      # SM AVAILABLE        #
      ELSE
        BEGIN                                    # NO SM               #
        SMCOUNT = 0;
        END                                      # NO SM               #
      RETURN; 
      END                                        # WAITSM              #
      TERM; 
