*COMDECK PTREGL 
_$J+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                           P T R E G L                               * 
*                                                                     * 
*           DETERMINE CURRENT REGULATION LEVEL FOR CONNECTION         * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_$R-,G-,I-   NON RECURSIVE, INTERRUPTABLE?
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW - THIS FUNCTION PASSES THE CURRENT REGULATION LEVEL       * 
*             FOR A GIVEN LOGICAL CONNECTION TO THE CALLER.           * 
*                                                                     * 
** INPUT    - TCB ADDRESS (PARAMETER)                                 * 
*                                                                     * 
** OUTPUT   - INTEGER VALUE CONTANING ONE OF THE FOLLOWING            * 
*             REGULATION LEVELS:                                      * 
*                 RGNONE (0) - NO REGULATION ACTIVE                   * 
*                 RGBUF1 (1) - APPROACHING MEDIUM BUFFER REGL         * 
*                 RGBUF2 (2) - MEDIUM LEVEL BUFFER REGULATION         * 
*                 RGUBL1 (3) - UPLINE BLOCK LIMIT REACHED             * 
*                 RGUBL2 (4) - UPLINE BLOCK LIMIT EXCEEDED            * 
*                 RGLLNK (5) - LOGICAL LINK REGULATION                * 
*                 RGMUXB (6) - SEVERE BUFFER REGULATION               * 
*                 RGTDIS (7) - TERMINAL DISABLED                      * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
FUNCTION PTREGL (TCBP : B0BUFPTR) : INTEGER;
VAR 
  RGNRBUFS : INTEGER;                       _NR DATA BUFFERS           ?
  RGTHRESH : INTEGER;                       _BUFFER THRESHOLD FOR IPRI ?
  RGOBC    : INTEGER;                       _OUTSTANDING BLK COUNT     ?
  RGUBL    : INTEGER;                       _UPLINE BLOCK LIMIT        ?
  RGIPRI   : INTEGER;                       _PRIORITY OF CONNECTION    ?
  RGLREG   : INTEGER;                       _LOGICAL LINK REGL LEVEL   ?
  RGOVUBL  : INTEGER;                       _VARIABLE AMOUNT OVER UBL  ?
  
BEGIN 
PFCREGL := PFCREGL + 1;                     _COUNT CALLS TO PTREGL     ?
IF TCBP'.BSTCB.BSCNFST = C7DISABLED 
THEN
  PTREGL := RGTDIS                          _TERMINAL DISABLED         ?
ELSE
  BEGIN 
  PBDF ($010C, RGNRBUFS);                   _GET CURRENT NR OF BUFFERS ?
  IF RGNRBUFS @ BFTHRESH [B0THMUX]
  THEN
    BEGIN 
    PTREGL  := RGMUXB;                      _SEVERE BUFFER REGULATION  ?
    PFIREGL := PFIREGL + 1; 
    END 
  ELSE
    BEGIN 
    RGIPRI := TCBP'.BSTCB.BSIPRI;           _GET PRIORITY OF CONNECTION?
    IF TCBP'.BSTCB.BSCN " 0 
    THEN                                    _HAVE A CONNECTION         ?
      RGLREG := TCBP'.BSTCB.BSLLCB'.
                BLLLCB.BLSPART.BLREG        _GET LOGICAL LINK REGL LVL ?
    ELSE
      RGLREG := 3;                          _NO LOG.LINK REG IF CN=0   ?
    IF (RGLREG + RGIPRI) < 3
    THEN
        BEGIN 
        PTREGL  := RGLLNK;                  _LOGICAL LINK REGULATION   ?
        PFIREGL := PFIREGL + 1; 
        END 
    ELSE
      BEGIN 
      RGOBC := TCBP'.BSTCB.BSOBCNT;         _GET OUTSTANDING BLK COUNT ?
      RGUBL := TCBP'.BSTCB.BSUBL;           _GET UPLINE BLOCK LIMIT    ?
      IF TCBP'.BSTCB.BSBATCH                _IF BATCH STREAM           ?
      THEN
        RGOVUBL := RGBUBL                   _BATCH OVER UBL AMOUNT     ?
      ELSE
        RGOVUBL := RGIUBL;                  _INTERACTIVE OVER UBL      ?
      IF RGOBC \ (RGUBL + RGOVUBL)
      THEN
        BEGIN 
        PTREGL  := RGUBL2;                  _UPLINE BLK LIMIT EXCEEDED ?
        PFIREGL := PFIREGL + 1; 
        END 
      ELSE
        IF RGOBC \ RGUBL
        THEN
          BEGIN 
          PTREGL  := RGUBL1;                _UPLINE BLK LIMIT REACHED  ?
          PFIREGL := PFIREGL + 1; 
          END 
        ELSE
          BEGIN 
          RGTHRESH := BFTHRESH
                      [B0TH3LV + RGIPRI];   _GET BUFFER THRESHOLD      ?
          IF RGNRBUFS @ RGTHRESH
          THEN
            BEGIN 
            PTREGL  := RGBUF2;              _MEDIUM BUFFER REGULATION  ?
            PFIREGL := PFIREGL + 1; 
            END 
          ELSE
            IF RGNRBUFS @ (RGTHRESH+RGOVBUF)
            THEN
              BEGIN 
              PTREGL  := RGBUF1;            _LOW BUFFER REGULATION     ?
              PFIREGL := PFIREGL + 1; 
              END 
            ELSE
              PTREGL := RGNONE;             _NO REGULATION ACTIVE      ?
          END;
      END;
    END;
  END;
END; _FUNCTION PTREGL?
