*DECK DISCARD 
USETEXT COMCBEG 
USETEXT COMRAPL 
USETEXT COMRNAM 
USETEXT COMRQUE 
PROC DISCARD; 
# TITLE DISCARD - THROW AWAY FC/ACK AND FC/RST SUPERVISORY MESSAGES. #
  
      BEGIN  # DISCARD #
  
# 
**    DISCARD - THROW AWAY FC/ACK AND FC/RST SUPERVISORY MESSAGES.
* 
*     DISCARD THROWS AWAY FC/ACK AND FC/RST SUPERVISORY MESSAGES FROM 
*     THE MESSAGE QUEUE WHEN A FC/BRK IS FIRST ENCOUNTERED. 
* 
*     PROC DISCARD. 
* 
*     ENTRY   - APL$HEADER IS BASED ARRAY CONTAINING APPL HEADER. 
* 
*     EXIT    - ALL FC/ACK AND FC/RST MESSAGES THROWN AWAY. 
* 
*     PROCESS - FOR EACH ENTRY ON MESSAGE QUEUE:  
*                 DEQUEUE ENTRY.
*                 IF ENTRY IS FC/ACK OR RC/RST
*                 THEN: 
*                   FREE ENTRY. 
*                   DECREMENT MESSAGE COUNT.
*                 ELSE: 
*                   REQUEUE ON MESSAGE QUEUE. 
*               IF MESSAGE QUEUE EMPTY
*                 AND ERR/LGL COUNT NON-ZERO
*               THEN: 
*                 CLEAR ERR/LGL COUNT.
*               RETURN. 
* 
* 
****  PROC DISCARD - XREF LIST BEGIN. 
# 
  
      XREF
        BEGIN 
        PROC DEQUEUE;                # REMOVE ENTRY FROM QUEUE #
        PROC FREE;                   # RELEASE QUEUE ENTRY #
        PROC QUEUE;                  # ADD ENTRY TO QUEUE # 
        END 
  
# 
****  PROC DISCARD - XREF LIST END. 
# 
  
  
      ITEM TEMPQ      I;             # TEMP POINTER TO APL$MSGQ # 
  
CONTROL EJECT;
  
      TEMPQ = APL$MSGQ; 
      APL$MSGQ = 0; 
      ASLONGAS TEMPQ NE 0 
      DO
        BEGIN 
        DEQUEUE(LOC(TEMPQ));
        IF QU$PFCSFC EQ $FCACK
          OR QU$PFCSFC EQ $FCRST
        THEN
          BEGIN 
          FREE; 
          APL$MSGCNT = APL$MSGCNT - 1;
          END 
  
        ELSE
          BEGIN 
          QUEUE(LOC(APL$MSGQ)); 
          END 
  
        END 
  
      IF APL$MSGCNT EQ 0
        AND APL$ERRLGL NE 0 
      THEN
        BEGIN 
        APL$ERRLGL = 0; 
        END 
      END  # DISCARD #
  
      TERM
