*COMDECK PNSGATH                                                              UP
_$J+?                                                                    UPDATES
_*****************************                                           UPDATES
*                            *                                           UPDATES
*         PNSGATH            *                                           UPDATES
*   GATHER STATISTICS        *                                           UPDATES
*                            *                                           UPDATES
*****************************?                                           UPDATES
_$R-,G-,I+     NON-RECURSIVE                                             UPDATES
               NON-INTERRUPTABLE ?                                       UPDATES
_*********************************************************************** UPDATES
*                                                                      * UPDATES
**OVERVIEW- PNSGATH BUMPS THE STATISTICS SPECIFIED BY THE USER.        * UPDATES
*           STATISTICS ARE DUMPED ON OVERFLOW.                         * UPDATES
*                                                                      * UPDATES
**INPUT- THE TCB CONTAINING THE STATISTICS TO DUMP, THE MESSAGE        *
*        BUFFER (ONLY IF CHARACTERS ARE TO BE COUNTED) AND THE         *
*        TYPE OF STATISTIC TO BUMP.                                    *
*                                                                      * UPDATES
**OUTPUT- PROPER STATISTICS ARE BUMPED.                                * UPDATES
*                                                                      * UPDATES
**EXTERNAL SUBROUTINES-                                                * UPDATES
*              1) PTCTCHR          COUNT CHARS IN A MESSAGE            * UPDATES
*              2) PNDSTAT          DUMP STATISTICS                     * UPDATES
*                                                                      * UPDATES
***********************************************************************? UPDATES
PROCEDURE PNSGATH (LCBPTR : BZLCBP; BFR : B0BUFPTR; 
                   STATYPE : J0STATYPE);
  
VAR 
  COUNT     : PACKED RECORD 
                CASE X  : INTEGER OF
                0: (INT : INTEGER); 
                1: (U11 : B011BITS; 
                    L5  : B05BITS); 
                END;
  IDNSN     : PACKED RECORD 
                CASE X  : INTEGER OF
                0: (INT : INTEGER); 
                1: (IDN : B08BITS;
                    ISN : B08BITS); 
                END;
  CHRC16    : INTEGER;
  CHRC5     : INTEGER;
  
BEGIN 
WITH LCBPTR' DO                             _USING LINE STATISTICS     ?
  BEGIN 
  IF STATYPE = J0BADBLK                     _IF BAD BLOCK              ?
  THEN
    BZSTIC.BZBBAD := BZSTIC.BZBBAD + 1      _BUMP COUNT                ?
  ELSE
    BEGIN 
    IDNSN.INT := BFR'.BIINT [DN/2+1];       _GET DN/SN LOCAL           ?
    IF STATYPE @ J0RCVE                     _IF RECEIVING A BLOCK      ?
    THEN
      BEGIN 
      BZSTIC.BZBRCV := BZSTIC.BZBRCV + 1;   _BUMP BLOCK(S) RECEIVED    ?
      CHRC16        := BZSTIC.BZCRCV;       _PREVIOUS CHAR. RECEIVED   ?
      CHRC5         := BZCRRM;              _AND REMAINDER             ?
      END _ STATYPE @ J0RCVE ?
    ELSE
      BEGIN 
      BZSTIC.BZBTRAN := BZSTIC.BZBTRAN + 1; _BLOCK TRANSMITTED COUNT   ?
      CHRC16         := BZSTIC.BZCTRANS;    _PREVIOUS CHARACTERS RCVD  ?
      CHRC5          := BZCTRM;             _AND REMAINDER             ?
      END;
    COUNT.INT := PTCTCHR (BFR) + CHRC5;     _COUNT PLUS OLD REMAINDER  ?
    CHRC16    := COUNT.U11 + CHRC16;        _GET TOTAL COUNT DIV BY 32 ?
    IF STATYPE @ J0RCVE                     _IF RECEIVING A BLOCK      ?
    THEN
      BEGIN 
      BZSTIC.BZCRCV := CHRC16;              _STORE MSB INTO LCB        ?
      BZCRRM        := COUNT.L5;            _AND REMAINDER             ?
      IF STATYPE = J0TRRCVE 
      THEN                                  _CHARS RECEIVED OVER TRUNK ?
        IF CKLOCNODE = IDNSN.IDN            _FOR THIS DESTINATION NODE ?
        THEN                                _DONT COUNT AS DWNLN CHARS ?
          GOTO 90;                          _(WILL BE COUNTED BY BIP)  ?
      PFULCHR := COUNT.U11 + PFULCHR;       _BUMP UPLINE CHAR COUNT    ?
      END 
    ELSE
      BEGIN 
      BZSTIC.BZCTRAN := CHRC16;             _TRANSMITTED CHARACTERS    ?
      BZCTRM         := COUNT.L5;           _AND REMAINDER             ?
      IF STATYPE = J0TRSEND 
      THEN                                  _CHARS TO BE SEND OVER TRNK?
        IF CKLOCNODE = IDNSN.ISN            _FROM THIS DESTINATION NODE?
        THEN                                _DONT COUNT AS UPLN CHARS  ?
          GOTO 90;                          _(ALREADY COUNTED BY BIP)  ?
      PFDLCHR := COUNT.U11 + PFDLCHR;       _BUMP DOWNLINE CHAR COUNT  ?
      END;
90: 
    IF CHRC16 < 0                           _IF CHARACTER COUNT OVER-  ?
    THEN                                    _FLOWED - DUMP STATISTICS  ?
      PNDSTAT (LCBPTR); 
    END; _ ELSE STATYPE " J0BADBLK ?
  END; _ WITH LCBPTR' ? 
END; _ PROCEDURE PNSGATH ?
