*COMDECK PBLOST 
_$J+
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*        P B L O S T   -   PROCESS BAD NETWORK BLOCKS                 * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_$G-,R-,I-    NON RECURSIVE, INTERRUPTABLE ?
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW - THIS PROCEDURE PROCESSES BAD NETWORK BLOCK BY LOGGING   * 
*             THE LAST FOUR (4) BAD ONES IN A LOCAL ARRAY AND         * 
*             RELEASING POSSIBLE OLDER BAD BLOCKS FROM THAT ARRAY     * 
*             NOTE THAT ONLY THE FIRST BUFFER OF A BAD BLOCK IS       * 
*             RETAINED, THE REST IS RELEASED IMMEDIATELY              * 
*                                                                     * 
** INPUT    - K8BLKP  POINTER TO BAD NETWORK BLOCK                    * 
*                                                                     * 
** OUTPUT   - NIL BAD BLOCK POINTER (K8BLKP) RETURNED                 * 
*                                                                     * 
** EXTERNAL SUBROUTINES USED -                                        * 
*             PBRELZRO    - RELEASE POSSIBLE CHAIN OF BUFFERS         * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PBLOST (VAR K8BLKP : B0BUFPTR); 
  
CONST 
      LIMIT   = 3;                          _MAX NR LOGGED BAD BLKS - 1?
  
VAR 
      BLKLOST : ARRAY [0..LIMIT] OF         _LOST BLOCKS ARRAY         ?
                B0BUFPTR; 
      LOSTCNT : INTEGER;                    _TOTAL NR OF LOST BLOCKS   ?
      INDEX   : INTEGER;                    _NEXT INDEX FOR BLKLOST    ?
  
BEGIN 
IF K8BLKP " NIL 
THEN                                        _BUFFER POINTER PASSED     ?
  BEGIN 
  PBRELZRO (K8BLKP'.BCCHAINS [DBUFLENGTH],  _RELEASE ALL BUT FIRST     ?
            BEDBSIZE);                      _ BUFFER OF THE BAD BLOCK  ?
  PBRELZRO (BLKLOST [INDEX], BEDBSIZE);     _REL POSS. OLD BAD BLOCK   ?
  BLKLOST [INDEX] := K8BLKP;                _INSERT NEW BAD BLOCK      ?
  INDEX           := (INDEX + 1)            _COMPUTE NEW INDEX         ?
                         MOD (LIMIT + 1); 
  K8BLKP          := NIL;                   _RETURN NIL TO CALLER      ?
  LOSTCNT         := LOSTCNT + 1;           _BUMP TOTAL LOST COUNTER   ?
  END;
END;   _ PBLOST  ?
