*DECK REMOVE
USETEXT CYBRDEF 
USETEXT MISC$ 
USETEXT ACN$COM 
USETEXT CHN$COM 
USETEXT GLOBALI 
      PROC REMOVE (CHAIN);
      BEGIN # REMOVE #
 #
*1DC  REMOVE
* 
*     1. PROC NAME           AUTHOR              DATE 
*        REMOVE              B. M. WEST          7 MARCH 1977 
* 
*     2. FUNCTIONAL DESCRIPTION.
*        REMOVES THE CONNECTION SPECIFIED BY THE GLOBAL ITEM ACN FROM 
*        THE CHAIN SPECIFIED. 
* 
*     3. METHOD USED. 
*        SEARCHES CHAIN SPECIFIED FOR ACN. WHEN FOUND CHAINS PREVIOUS 
*        ENTRY TO SUCCEEDING ENTRY. 
* 
*     4. ENTRY PARAMETERS.
*          ACN - APPLICATION CONNECTION NUMBER, A GLOBAL ITEM.
*          CHAIN - CHAIN TO BE SEARCHED.
*     5. EXIT PARAMETERS. NONE. 
* 
*     6. COMDECKS USED. 
*          RBF$COM
* 
*     7. ROUTINES CALLED, NONE. 
* 
*     8. DAYFILE MESSAGES. NONE 
* 
 #
# 
      LOCAL PARAMETERS
# 
      ITEM CHAIN U;          # CHAIN TO BE SEARCHED                    #
      ITEM NEXT U;           # NEXT CONNECTION                         #
      ITEM PREVIOUS U;       # PREVIOUS CONNECTION                     #
      ITEM I I;              # INDEX VARIABLE                          #
      ITEM FOUND B;          # FOUND FLAG                              #
# 
      REMOVE ACN FROM THE CHAIN SPECIFIED IN CHAIN
# 
      IF CHN$FIRST [CHAIN] NQ 0 
      THEN
        BEGIN # NON-EMPTY CHAIN # 
        IF CHN$FIRST [CHAIN] EQ ACN 
        THEN
          BEGIN # ACN FIRST ONE ON CHAIN #
          CHN$FIRST [CHAIN] = ACN$NEXT [ACN]; 
          IF CHN$FIRST [CHAIN] EQ 0 
          THEN
            CHN$LAST [CHAIN] = 0; 
          CHN$NENTRIES[CHAIN] = CHN$NENTRIES[CHAIN] - 1;
          END  # ACN FIRST ONE ON CHAIN # 
        ELSE
          BEGIN # ACN NOT FIRST ONE ON CHAIN #
          NEXT = 1; 
          FOUND = FALSE;
          PREVIOUS = CHN$FIRST [CHAIN]; 
          FOR I = I WHILE NEXT NQ 0 AND NOT FOUND DO
            BEGIN # SEARCH #
            NEXT = ACN$NEXT [PREVIOUS]; 
            IF NEXT EQ ACN
            THEN
              BEGIN # FOUND # 
              FOUND = TRUE; 
              ACN$NEXT [PREVIOUS] = ACN$NEXT [NEXT];
              END  # FOUND #
            ELSE
            PREVIOUS = NEXT;
            END   # SEARCH #
          IF FOUND
          THEN
            BEGIN 
            CHN$NENTRIES [CHAIN] = CHN$NENTRIES [CHAIN] - 1;
            IF CHN$LAST [CHAIN] EQ NEXT 
            THEN
            CHN$LAST [CHAIN] = PREVIOUS;
          END   # FOUND # 
          END  # ACN NOT FIRST ONE ON CHAIN # 
        END   # NON-EMPTY CHAIN # 
      RETURN; 
      END   # REMOVE #
      TERM; 
