*COMDECK X25SUBTIP
_$J+ PAGE EJECT?
_ 
  
  
                 XX      XX       22222222   55 
                 XX      XX      2222222222  5555555555 
                 XXX    XXX      2       22  5555555555 
                  XXX  XXX               22  55 
                   XX  XX               22   55 
                    XXXX               22    55 
                     XX               22     555555555
                    XXXX             22       555555555 
                   XX  XX           22               55 
                  XXX  XXX         22                55 
                 XXX    XXX       22         5       55 
                 XX      XX  ..  2222222222  5555555555 
                 XX      XX  ..  2222222222   55555555
  
  
  
   CCCCCC      OOOOOO    MM      MM  MM      MM    OOOOOO    NN      NN 
  CCCCCCCC    OOOOOOOO   MMM    MMM  MMM    MMM   OOOOOOOO   NNN     NN 
 CC      CC  OO      OO  MMMM  MMMM  MMMM  MMMM  OO      OO  NNNN    NN 
 CC          OO      OO  MM MMMM MM  MM MMMM MM  OO      OO  NN NN   NN 
 CC          OO      OO  MM  MM  MM  MM  MM  MM  OO      OO  NN  NN  NN 
 CC          OO      OO  MM      MM  MM      MM  OO      OO  NN   NN NN 
 CC          OO      OO  MM      MM  MM      MM  OO      OO  NN    NNNN 
 CC      CC  OO      OO  MM      MM  MM      MM  OO      OO  NN     NNN 
  CCCCCCCC    OOOOOOOO   MM      MM  MM      MM   OOOOOOOO   NN      NN 
   CCCCCC      OOOOOO    MM      MM  MM      MM    OOOOOO    NN      NN 
  
  
  
  SSSSSSSS   UU      UU  BBBBBBBBB      TTTTTTTTTT  IIIIII  PPPPPPPPP 
 SSSSSSSSSS  UU      UU  BBBBBBBBBB     TTTTTTTTTT  IIIIII  PPPPPPPPPP
 SS      SS  UU      UU  BB      BB         TT        II    PP      PP
  SS         UU      UU  BB      BB         TT        II    PP      PP
   SSS       UU      UU  BBBBBBBB           TT        II    PPPPPPPPPP
      SSS    UU      UU  BBBBBBBB           TT        II    PPPPPPPPP 
        SS   UU      UU  BB      BB         TT        II    PP
 SS      SS  UU      UU  BB      BB         TT        II    PP
 SSSSSSSSSS   UUUUUUUU   BBBBBBBBBB         TT      IIIIII  PP
  SSSSSSSS     UUUUUU    BBBBBBBBB          TT      IIIIII  PP
  
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*              X25 SUBTIP HANDLER  ( PXINTBIP )           : LEVEL I   * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_$R-,G-,I-     NON-RECURSIVE
               INTERRUPTABLE? 
_$J+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW:                                                          * 
*              THIS PROCEDURE IS CALLED BY DOWNLINE TIP SERVICE       * 
*              (DLTS) IN BIP WHEN DLTS RECEIVES ANY DOWNLINE          * 
*              BLOCKS FROM HOST.  IT CHECKS THE BLOCK TYPE FOR        * 
*              ICMD, ICMDR, BREAK OR RESET AND CALLS THE A-A SUBTIP   * 
*              FOR AN A-A CONNECTION.                                 * 
*                                                                     * 
** INPUT:                                                             * 
*              TCB ADDRESS                    : TCB                   * 
*              DOWNLINE NETWORK BLOCK         : DLBLOCK               * 
*                                                                     * 
** OUTPUT:                                                            * 
*              NONE                                                   * 
*                                                                     * 
** CALLING PROGRAM:                                                   * 
*                                                                     * 
*              BIP (DOWNLINE TIP SERVICE)     : PBDLTS                * 
*                                                                     * 
** SUBROUTINE CALL:                                                   * 
*                                                                     * 
*     EXTERNAL SUBROUTINE                                             * 
*              TRANSFER PROGRAM CONTROL       : PBXFER                * 
*                                                                     * 
*     INTERNAL SUBROUTINE                                             * 
*              NONE                                                   * 
*                                                                     * 
** NOTES:                                                             * 
*                                                                     * 
*              BJTXTPAGE AND BJTXTENT IN BJTIPTYPE ARE                * 
*              ASSIGNED BY MPEDIT TO THIS ROUTINE.                    * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PXINTBIP (    TCB     : B0BUFPTR; _TCB ADDRESS               ?
                    VAR DLBLOCK : B0BUFPTR);_DOWNLINE BLOCK            ?
  
CONST 
*CALL X25CON01
  
VAR 
      BLKTYPE : INTEGER;                    _LOCAL BLOCK TYPE          ?
  
BEGIN 
BLKTYPE := DLBLOCK'.BIINT[BTWD];            _GET BLOCK TYPE            ?
CASE BLKTYPE OF                             _SPECIAL CASE CERTAIN TYPES?
  
HTICMD,                                     _INTERRUPT COMMAND         ?
HTICMR,                                     _INTERRUPT RESPONSE        ?
HTBREAK,                                    _BREAK FROM APPLICATION    ?
HTRESET:                                    _RESET FORM APPLICATION    ?
  BEGIN 
  IF TCB'.BSTCB.BSLCCBPTR'.LCCB.LCCNTYPE = N0XPAD 
  THEN
    BEGIN 
    PBRELCHN (DLBLOCK, BEDBSIZE);           _RELEASE THE BUFFER        ?
    END 
  ELSE
    BEGIN 
    IF TCB'.BSTCB.BSLCCBPTR'.LCCB.LCCNTYPE = N0XAPPL
    THEN
      BEGIN 
      WITH BWWLENTRY[OPS].B0EWLQ DO 
        BEGIN 
        MMWD0.BALBYT   := BLKTYPE;          _PASS BLOCK TYPE           ?
        MMWKCODE       := L5ATOA;           _A TO A WORKCODE           ?
        MMWD1.BABUFPTR := DLBLOCK;          _BUFFER ADDRESS            ?
        MMWD2.BABUFPTR := TCB;              _AND TCB POINTER           ?
        END; _ WITH BWWLENTRY[OPS].. ?
      PBXFER (X25STTABLE[N0XAPPL].XASTADDR, _ADDRESS AND PAGE OF THE   ?
              X25STTABLE[N0XAPPL].XASTPAGE);_A TO A SUB-TIP            ?
      DLBLOCK := NIL;                       _NOTHING FOR BIP TO QUEUE  ?
      END; _ LCCNTYPE = N0XAPPL ? 
    END; _ ELSE LCCNTYPE <> N0XPAD ?
  END; _ CASE BLKTYPE ? 
END; _ CASE BLKTYPE ? 
END;  _  PROCEDURE PXINTBIP : X25 SUBTIP HANDLER                       ?
_$J+  PAGE EJECT? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*              REGULATION PROCESS  ( PXREGLCHK )       : LEVEL I      * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_$R-,G-,I-     NON-RECURSIVE
               INTERRUPTABLE? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW:                                                          * 
*              THE REGULATION PROCESS IS CALLED WHEN THE SUBTIP#S     * 
*              RECEIVES THE UPLINE FRAGMENT OR THE EXPIRATION OF      * 
*              REGULATION TIMER.  THE PACKET LEVEL (LEVEL 3) WILL     * 
*              BE NOTIFIED BY THIS ROUTINE IF THE STATUS OF           * 
*              REGULATION CHANGES.                                    * 
** INPUT:                                                             * 
*              INCOMING WORKCODE            : WORKCODE                * 
*              TCB ADDRESS                  : TCBADDR                 * 
*              TIMER PACKET POINTER         : TMRPTR                  * 
** OUTPUT:                                                            * 
*              STOP INPUT WORKLIST TO THE   : TPSTOPIN                * 
*               PACKET LEVEL (LEVEL 3).                               * 
*              START INPUT WORKLIST TO THE  : TPSTARTIN               * 
*               PACKET LEVEL (LEVEL 3).                               * 
*                                                                     * 
** CALLING PROGRAM:                                                   * 
*                                                                     * 
*              PAD SUBTIP WORKLIST HANDLER  : PXPADTIP                * 
*              A-A SUBTIP WORKLIST HANDLER  : PXAATIP                 * 
*                                                                     * 
** SUBROUTINE CALL:                                                   * 
*                                                                     * 
*     EXTERNAL SUBROUTINE                                             * 
*              THE SYSTEM REGULATION CHECK  : PTREGL                  * 
*              RELEASEOATBUFFER             : PBREL1BF                * 
*                                                                     * 
*     INTERNAL SUBROUTINE                                             * 
*                                                                     * 
*                                                                     * 
** NOTES:                                                             * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PXREGLCHK (WORKCODE : INTEGER;
                     TCBADDR  : B0BUFPTR; 
                     TMRPTR   : B0BUFPTR);
  
CONST 
  
*CALL X25CON01
  
      X5INITIAL  = 0;                       _DEFAULT VALUE             ?
  
TYPE
  
*CALL X25TYP02
  
  
_ 
* * *  ACCESSING SYSTEM BUFFER DEFINITION AND SUBTIP DEFINITION.
? 
      X0BUFFER   = PACKED RECORD  CASE X0TAG1 : INTEGER OF
  
                 1: (X1BUFACSS : B0BUFPTR); _ACCESS THE GLOBAL BUFFER  ?
                                            _ DEFINITIONS              ?
                 2: (X1TMRACSS : B7PKTPTR); _TIMER PACKET DEFINITION   ?
                                            _ USING 8 WORD BUFFER      ?
                 END;  _ X0BUFFER ? 
  
VAR 
      X5REGWK    : X0PARAMS;                _WORKLIST ENTRY            ?
      X5TMRPKT   : X0BUFFER;                _TIMER ACCESS PACKET PTR   ?
      X5L3WKC    : INTEGER;                 _WORKCODE FOR PACKET LEVEL ?
      X5REGL     : INTEGER;                 _REGULATION INDICATION     ?
  
_$J+  PAGE EJECT? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*              ACCESSING TIMER  ( PXTIMER )  : LEVEL II               * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW:                                                          * 
*              THIS ROUTINE CALLS TIMER SERVICE ROUTINE TO SET,       * 
*              RESET OR CANCEL INPUT REGULATION TIMER.  THE           * 
*              TIMER PACKET POINTER WILL BE KEPT IN TCB.  THE         * 
*              TIMER PACKET BUFFER WILL BE RELEASED IF THE            * 
*              REQUEST TO THE TIMER SERVICE WAS CANCEL TIMER          * 
** INPUT                                                              * 
*              TCB ADDRESS                  : TCBADDR                 * 
** OUTPUT                                                             * 
*              NONE                                                   * 
*                                                                     * 
** CALLING PROGRAM:                                                   * 
*                                                                     * 
*              REGULATION PROCESS           : PXREGLCHK               * 
*                                                                     * 
** SUBROUTINE CALL:                                                   * 
*                                                                     * 
*     EXTERNAL SUBROUTINE                                             * 
*              TIMER SERVICE                : PBTMRSRVS               * 
*              BUFFER GET                   : PBGET1BF                * 
*                                                                     * 
*     INTERNAL SUBROUTINE                                             * 
*              NONE                                                   * 
*                                                                     * 
** NOTES:                                                             * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PXTIMER;
  
VAR 
      X5ONESEC     : B015BITS;              _ONE SECOND TIME INTERVAL  ?
  
VALUE 
      X5ONESEC     = 303; 
  
BEGIN 
X5TMRPKT.X1BUFACSS := TCBADDR'.BSTCB.BSXTMRPKT; 
  
IF X5TMRPKT.X1BUFACSS = NIL                 _TIMER IS NOT RUNNING      ?
THEN
  BEGIN 
  X5TMRPKT.X1BUFACSS := PBGET1BF (B0S8);    _GET 8 WORD BUFFER FOR     ?
                                            _ TIMER PACKET             ?
  WITH  X5TMRPKT.X1TMRACSS'  DO 
    BEGIN 
    BKWLINDEX := B0X25TIP;                  _WORKLIST INDEX FOR X25TIP ?
    BKWKCODE  := L5TIMEOUT;                 _WORKCODE TO BE RETURNED   ?
    BKTIME    := X5ONESEC;                  _SET TO ONE SECOND         ?
    BKTYPE    := BKSET;                     _SET TIMER                 ?
    BKUSRBYTE := TCBADDR'.BSTCB.BSLCCBPTR'. _SET SUBTIP CONNECTION TYPE?
                             LCCB.LCCNTYPE; 
    BK1UPTR   := X5TMRPKT.X1BUFACSS;        _TIMER PACKET POINTER      ?
  
    END;  _ WITH X5TMRPKT                                              ?
_ 
  * * *  COPY TIMER PACKET POINTER TO TCB.
? 
  TCBADDR'.BSTCB.BSXTMRPKT := X5TMRPKT.X1BUFACSS; 
  
  END;  _ IF BSXTMRPKT = NIL                                           ?
  
X5TMRPKT.X1TMRACSS'.BK2UPTR := TCBADDR;     _TCB ADDRESS               ?
_ 
* * *  CALL TIMER SERVICE TO ACTIVATE TIMER.
? 
PBTMRSRVS (X5TMRPKT.X1TMRACSS); 
  
END;  _ PROCEDURE PXPTIMER : ACCESSING TIMER                           ?
_$J+ PAGE EJECT?
BEGIN 
_ 
*           P X R E G L C H K   (MAIN)                                * 
*                                                                     * 
? 
X5L3WKC := X5INITIAL;                       _INITIALIZE TO DEFAULT VAL.?
IF WORKCODE = L5TIMEOUT                     _EXPIRATION OF REGULATION  ?
THEN                                        _ TIMER                    ?
  BEGIN 
  X5TMRPKT.X1TMRACSS := TMRPTR;             _TIMER PACKET POINTER      ?
  TCBADDR            := X5TMRPKT.           _ASSIGN TCB ADDRESS FROM   ?
                        X1TMRACSS'.BK2UPTR; _ TIMER PACKET             ?
  X5TMRPKT.X1TMRACSS'.                      _CLEAR BUFFER CHAIN        ?
             BK2UPTR := NIL;
  IF TCBADDR = NIL                          _POSSIBLY X25 LINE WAS     ?
  THEN                                      _ DISABLED                 ?
    PBREL1BF (X5TMRPKT.X1BUFACSS, B0S8) 
  ELSE                                      _X25 LINE ACTIVE           ?
    IF TCBADDR'.BSTCB.BSXREGULATE = FALSE 
    THEN                                    _NOT IN INPUT REGULATION   ?
      PBREL1BF (TCBADDR'.BSTCB.             _RETURN BUFFER POINTER     ?
                           BSXTMRPKT, B0S8) _ SHOULD BE SET TO NIL     ?
    ELSE                                    _STILL IN INPUT REGULATION ?
      BEGIN                                 _CHECK FOR INPUT REGULATION?
      X5REGL := PTREGL (TCBADDR);           _CHECK REGULATION WITH TCB ?
      IF X5REGL < RGUBL2                    _OK TO INPUT               ?
      THEN
        BEGIN 
        X5L3WKC               := TPSTARTIN; _NOTIFY START INPUT TO L3  ?
        TCBADDR'.BSTCB.                     _RESET REGULATION FLAG     ?
                  BSXREGULATE := FALSE; 
        PBREL1BF (TCBADDR'.BSTCB.           _RELEASE TIMER PACKET      ?
                         BSXTMRPKT, B0S8);  _ RETURNED PACKET POINTER  ?
                                            _ SHOULD BE SET TO NIL     ?
        END   _ IF X5REGL < RGUBL2                                     ?
      ELSE                                  _X5REGL \ RGUBL2           ?
        PXTIMER;                            _RESTART INPUT REGULATION  ?
                                            _ TIMER                    ?
      END;
  END;  _ IF WORKCODE = L5TIMEOUT                                      ?
  
IF WORKCODE = L3FRGQ                        _UPLINE DATA RECEIVED      ?
THEN
  BEGIN 
  X5REGL := PTREGL (TCBADDR); 
  IF X5REGL < RGUBL2                        _OK TO INPUT               ?
  THEN
    BEGIN 
    IF TCBADDR'.BSTCB.BSXREGULATE           _IT IS IN REGULATION       ?
    THEN
      BEGIN 
      X5L3WKC               := TPSTARTIN;   _NOTIFY START INPUT TO L3  ?
      TCBADDR'.BSTCB.                       _RESET REGULATION FLAG     ?
                BSXREGULATE := FALSE; 
      END;  _ IF BSXREGULATE                                           ?
    END   _ IF X5REGL < RGUBL2                                         ?
  ELSE                                      _X5REGL \ RGUBL2           ?
    BEGIN                                   _REGULATING NOW            ?
    IF TCBADDR'.BSTCB.BSXREGULATE = FALSE 
    THEN                                    _INPUT REGULATION          ?
      BEGIN 
      X5L3WKC                 := TPSTOPIN;  _NOTIFY STOP INPUT TO L3   ?
      TCBADDR'.BSTCB.                       _SET REGULATION FLAG       ?
                  BSXREGULATE := TRUE;
      PXTIMER;                              _START INPUT REGULATION    ?
                                            _ TIMER                    ?
      END;  _ IF NOT (BSXREGULATE)                                     ?
    END;  _ ELSE X5REGL \ RGUBL2                                       ?
  END;  _ IF WORKCODE = L3FRGQ                                         ?
_ 
* * *  QUEUE WORKLIST TO PACKET LEVEL.
? 
IF X5L3WKC " X5INITIAL                      _START / STOP INPUT        ?
THEN                                        _ REGULATION               ?
  BEGIN 
  X5REGWK.XAWC      := X5L3WKC;             _SET WORDCODE              ?
  X5REGWK.XABFRPTR  := NIL;                 _NOT USED                  ?
  X5REGWK.XATCBLCCB := TCBADDR;             _TCB ADDRESS               ?
  PBLSPUT (X5REGWK.XAWORKLIST, BYWLCB[B0XTRANS]); 
  END;  _ IF X5L3WKC " X5INITIAL                                       ?
  
END;  _ REGULATION PROCESS  : PXPREGLPROCESS                           ?
