*COMDECK PBSTRIP
_$J+? 
_ 
************************************************************************
*                                                                      *
*                         P B S T R I P                                *
*                                                                      *
*          STRIPS EMPTY BUFFERS FROM A CHAIN OF BUFFERS                *
*                                                                      *
************************************************************************
? 
_$R-,G-,I-     NON-RECURSIVE
               INTERRUPTABLE
               OPS-LEVEL ONLY?
_***********************************************************************
*                                                                      *
**OVERVIEW - PBSTRIP GOES THROUGH A CHAIN OF DATA BUFFERS AND          *
*            REMOVES ALL EMPTY BUFFERS (I.E. LCD < FCD).               *
*                                                                      *
**INPUT    - THE POINTER TO THE 1ST BUFFER IN THE DATA BUFFER CHAIN.   *
*                                                                      *
**OUTPUT   - PBSTRIP RETURNS THE POINTER TO THE FIRST BUFFER           *
*            OR A NILL POINTER IF ALL BUFFERS WERE DELETED             *
*                                                                      *
** EXTERNAL SUBROUTINES USED :                                         *
*                                                                      *
*            PBREL1BF - RELEASE ONE BUFFER                             *
***********************************************************************?
  
PROCEDURE PBSTRIP (VAR R0BUF : B0BUFPTR); 
  
VAR 
  CURRENT, PREVIOUS : B0BUFPTR; 
  
BEGIN 
  CURRENT := R0BUF;                         _ GET FIRST BUFFER POINTER ?
  WHILE CURRENT " NIL DO
  BEGIN 
    IF CURRENT'.BFLCD < CURRENT'.BFFCD      _ EMPTY BUFFER             ?
    THEN
    BEGIN 
      PREVIOUS := CURRENT;                  _ REMEMBER THIS BUFFER     ?
      PBREL1BF (CURRENT, BEDBSIZE);         _ RELEASE EMPTY BUFFER     ?
      IF PREVIOUS = R0BUF 
      THEN                                  _ JUST RELEASED FIRST BUF  ?
        R0BUF := CURRENT;                   _ UPDATE CALLERS POINTER   ?
    END 
    ELSE
      CURRENT := CURRENT'.
                 BCCHAINS [DBUFLENGTH]; 
  END;
END; _PROCEDURE PBSTRIP?
