*DECK FFSEESC 
USETEXT TEXTFFS 
      PROC FFSEESC; 
*CALL COPYRITE
# TITLE FFSEESC - END SINGLE FILE SERVER CONNECTION                    #
  
      BEGIN                            # FFSEESC                       #
# 
**    FFSEESC  END SINGLE FILE SERVER CONNECTION
* 
*     A. LIM                           88/01/24 
* 
*     THIS PROCEDURE ENDS A SINGLE FILE SERVER CONNECTION NORMALLY OR 
*     ABNORMALLY. 
* 
*     PROC FFSEESC
* 
*     ENTRY    CURACN  = FILE SERVER CONNECTION NUMBER. 
*              ACNX    = FILE SERVER CONNECTION ENTRY ORDINAL.
*              P<WBQ>  = PTR TO WAITING BLOCK QUEUE.
* 
*     EXIT     P<APSM> = PTR TO OUTPUT SUPERVISORY MESSAGE (*OUTBUF*).
*              ALL WAITING BLOCKS FOR THIS CONNECTION DELETED.
*              CON/END SUPERVISORY MESSAGE SENT FOR THIS CONNECTION.
* 
*     METHOD   FIND AND DELETE ANY WAITING BLOCKS FOR THIS CONNECTION.
* 
*              IF THE CONNECTION STATE IS *PENDING* OR *ACTIVE* 
*                SEND CON/END SUPERVISORY MESSAGE FOR THE CONNECTION. 
* 
# 
  
# 
****  PROC FFSEESC - XREF LIST
# 
      XREF
        BEGIN 
        PROC FFSMDTS;    # DEALLOCATE TABLE SPACE                      #
        PROC FFSOSMG;    # OUTPUT SUPERVISORY MESSAGE                  #
        PROC FFSUFWE;    # UTILITY TO FIND NEXT WAITING BLOCK ENTRY    #
        END 
  
# 
****
# 
      ITEM I             I;            # LOOP INDUCTION VARIABLE       #
      ITEM INDEX         I;            # WORD INDEX OF WBQ ENTRY       #
  
      CONTROL EJECT;
#     START MAIN PROCEDURE                                             #
  
#     DELETE ANY WAITING BLOCK QUEUE ENTRIES FOR THIS CONNECTION.      #
  
      FOR I = 0                        # LOOP THRU ALL WAITING BLOCK   #
        WHILE ACN$WBC[ACNX] NQ 0 DO    # ENTRIES UNTIL NO MORE ENTRIES #
        BEGIN                          # EXIST FOR THIS CONNECTION     #
        FFSUFWE (INDEX);               # FIND NEXT WAITING BLOCK       #
        FFSMDTS (P<WBQ> , INDEX , 
                 WBQ[INDEX + SIZ$]);   # REMOVE ENTRY FROM QUEUE       #
        ACN$WBC[ACNX] = ACN$WBC[ACNX] - 1; # DECR. WAITING BLOCK COUNT #
        END;
# 
*     IF THE CONNECTION STATE IS *PENDING* , OR  *ACTIVE* : 
*       SEND THE CON/END SUPERVISORY MESSAGE
# 
      IF ACN$STATE[ACNX] LAN
        (PENDING + ACTIVE) NQ 0 
      THEN
        BEGIN 
        P<APSM> = LOC(OUTBUF);         # BASE SUPERVISORY MESSAGE PTR  #
        SPMSG0[0] = 0;                 # CLEAR FIRST WORD              #
        SPMSG1[0] = 0;                 # CLEAR SECOND WORD             #
        FFSOSMG (CONEND, LCONEN);      # FORMAT AND SEND CON/END SM    #
        END;
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # FFSEESC                       #
  
      TERM
