*DECK RELAFT
USETEXT COMCBEG 
USETEXT COMCAPR 
USETEXT COMCCAE 
USETEXT COMQDEF 
USETEXT COMQFIL 
USETEXT COMQNET 
    PROC RELAFT;
      BEGIN    # RELAFT # 
# 
**    RELAFT     RELEASE AFT ENTRY. 
* 
*     RELAFT IS CALLED BY QTF OR QTFS TO RELEASE AN AFT ENTRY.
* 
*     ENTRY      ACN = AFT INDEX. 
* 
*     EXIT       FILELFN HAS BEEN EVICTED, IF NECESSARY.
*                FILECLF HAS BEEN EVICTED, IF NECESSARY.
*                ALL CMM BLOCKS HAVE BEEN RELEASED. 
* 
*     PROCESS    IF LFN EXISTS: 
*                  CALL RTNFIL TO EVICT IT. 
*                IF CLF EXISTS: 
*                  CALL RETERN TO EVICT IT. 
*                CALL TXTREL TO RELEASE ALL TEXT BUFFERS
*                CALL RELNTA TO RELEASE ALL WORKING BUFFERS.
*                CALL RELNTA TO RELEASE ALL NETPUT BUFFERS. 
*                CALL CMMFGR TO RELEASE ALL CMM BLOCKS. 
*                CLEAR AFT ENTRY. 
# 
  
# 
****  XREF
# 
      XREF
        BEGIN 
        PROC CMMFGR;               # FREE CMM GROUP # 
        PROC NAME;                 # DEBUG CODE # 
        PROC RELNTA;               # RELEASE CHAINED BUFFERS #
        PROC RETERN;               # RETURN FILE #
        PROC RTNFIL;               # EVICT FILE # 
        PROC TXTREL;               # RELEASE ALL TEXT BUFFERS # 
        END 
  
# 
****  XREF END
# 
  
  
      ITEM I          I;           # LOOP INDEX # 
  
        $BEGIN
        NAME("RELAFT"); 
        $END
  
      IF FILELFN NE 0 
      THEN
        BEGIN 
        RTNFIL(FILELFNC, TRUE); 
        END 
  
      IF FILECLF NE 0 
      THEN
        BEGIN 
        P<FET> = FILECLF; 
        RETERN(FET, 1); 
        END 
  
      TXTREL;                      # RELEASE ALL TEXT BUFFERS # 
      RELNTA(FILEWHA);             # RELEASE ANY WORKING BUFFERS #
      RELNTA(FILENHA);             # RELEASE ANY NETPUT BUFFERS # 
      IF FILECMM NE 0              # IF CMM GROUP STILL ACTIVE #
      THEN
        BEGIN 
        CMMFGR(FILECMM);           # RELEASE CMM GROUP BLOCKS # 
        END 
  
      P<FET> = P<FILETAB>;
      SLOWFOR I = 0 STEP 1 UNTIL FILENT1 - 1
      DO
        BEGIN 
        FETWD = 0;
        P<FET> = P<FET> + 1;
        END 
  
      FILETOU = TIMEOUT;           # SET DEFAULT TIMEOUT #
      FILEFTS = FTS$VACANT;        # SET STATE TO VACANT #
      FILEPTS = FILEFTS + 1;       # ENSURE K-DISPLAY GETS UPDATED #
      FILEMSG = " ";               # CLEAR CURRENT MESSAGE #
  
      END  # RELAFT # 
    TERM
