*COMDECK X25PADD3 
_$J+? 
_ 
  
                     XX      XX    222222    5555555555 
                      XX    XX    22222222   5555555555 
                       XX  XX    22      22  55 
                        XXXX             22  55 
                         XX        2222222    5555555 
                         XX       2222222      5555555
                        XXXX     22                  55 
                       XX  XX    22          55      55 
                      XX    XX   2222222222   55555555
                     XX      XX  2222222222    555555 
  
  
  
         PPPPPPPP      AAAAAA    DDDDDDDD    DDDDDDDD      333333 
         PPPPPPPPP    AAAAAAAA   DDDDDDDDD   DDDDDDDDD    33333333
         PP      PP  AA      AA  DD      DD  DD      DD  33      33 
         PP      PP  AA      AA  DD      DD  DD      DD          33 
         PPPPPPPPP   AA      AA  DD      DD  DD      DD      33333
         PPPPPPPP    AAAAAAAAAA  DD      DD  DD      DD      33333
         PP          AAAAAAAAAA  DD      DD  DD      DD          33 
         PP          AA      AA  DD      DD  DD      DD  33      33 
         PP          AA      AA  DDDDDDDDD   DDDDDDDDD    33333333
         PP          AA      AA  DDDDDDDD    DDDDDDDD      333333 
  
  
  
  
  
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                    PXPADTIP                                         * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_$R-,G-,I-? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW -                                                         * 
*              X.25 PAD INTERFACE                                     * 
*                                                                     * 
** INPUT -                                                            * 
*              BWWLENTRY[OPS] = PARAMETER LIST                        * 
*                                                                     * 
** CALLING PROGRAMS                                                   * 
*              PX25TIP       -X25 TIP                                 * 
*                                                                     * 
** OUTPUT -                                                           * 
** EXTERNAL SUBROUTINES -                                             * 
** NOTES -                                                            * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PXPAD3; 
CONST 
*CALL X25CON01
  
TYPE
  
*CALL X25TYP02
*CALL X25TYP07
*CALL X25TYP08
  
VAR 
  
      XIPARAMS : X0PARAMS;                  _INPUT WORKLIST            ?
      XOPARAMS : X0PARAMS;                  _OUTPUT WORKLIST           ?
      XOBFPTR  : B0BUFPTR;                  _INTERNAL BUFFER POINTER   ?
      XPPTR    : X0BUFPTR;                  _INTERNAL POINTER          ?
      XPREGL   : REGLSET;                   _FOR REGULATION            ?
  
_     * * *  BIP INTERFACE                                             ?
      XDLBLOCK : B0BUFPTR;
  
VALUE 
  
      XPREGL = ($0003); 
_$J+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                    PXPL3Q                                           * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW -                                                         * 
*              FORMAT AND QUEUE A WORKLIST TO LEVEL 3                 * 
*                                                                     * 
** INPUT -                                                            * 
*              XPL3WC   = WORKCODE TO BE SENT                         * 
*              B1TCB    = TCB ADDRESS                                 * 
*              B1BUFF   = FRAGMENT ADDRESS                            * 
*                                                                     * 
** CALLING PROGRAMS                                                   * 
*              PXPDQUEUE     -GET NEXT DOWNLINE BLOCK                 * 
*              PXPADTIP      -MAIN PROGRAM                            * 
*                                                                     * 
** OUTPUT -                                                           * 
*              WORKLIST QUEUED TO LEVEL 3                             * 
*                                                                     * 
** EXTERNAL SUBROUTINES -                                             * 
*              PBLSPUT       -QUEUE A WORKLIST                        * 
*                                                                     * 
** NOTES -                                                            * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PXPL3Q( XPL3WC : B08BITS);
BEGIN 
  
WITH XOPARAMS DO                            _OUTPUT WORKLIST           ?
  BEGIN 
  
  XAWC := XPL3WC;                           _SET WORKCODE              ?
  XATCBLCCB := B1TCB;                       _SET TCB ADDRESS           ?
  
  IF XPL3WC = TPFRGQ
  THEN
    XABFRPTR := B1BUFF;                     _FRAGMENT ADDRESS          ?
  
  PBLSPUT(XAWORKLIST,BYWLCB[B0XL3]);
  END; _WITH XOPARAMS?
END; _PROCEDURE PXPL3Q? 
  
_$J+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                    PXPDQUEUE                                        * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW -                                                         * 
*              DEQUEUE NEXT DOWNLINE NETWORK BLOCK                    * 
*                                                                     * 
** INPUT -                                                            * 
*              XIPARAMS = INPUT WORKLIST                              * 
*              B1TCB    = TCB POINTER                                 * 
*              PTPCB    = TEXT PROCESSING CONTROL BLOCK               * 
*                                                                     * 
** CALLING PROGRAMS                                                   * 
*              PXPADTIP      -PAD SUB TIP                             * 
*                                                                     * 
** OUTPUT -                                                           * 
*              TPFRGQ WORKLIST SENT TO X.25 TIP                       * 
*                                                                     * 
** EXTERNAL SUBROUTINES -                                             * 
*              PBPROPOI      -PRE OUTPUT POI                          * 
*              PTBACK        -GENERATE A BACK BLOCK                   * 
*              PXPL3Q        -GENERATE A WORKLIST ENTRY               * 
*                                                                     * 
** NOTES -                                                            * 
*              ALL UPLINE/DOWNLINE BLOCKS ARE IN THE FOLLOWING FORM:  * 
*              DN -SN  08-08                                          * 
*              CN -BT  10-11                                          * 
*              DBC-P1  12-13                                          * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PXPDQUEUE;
VAR 
  
      XSWK    : B0OVERLAY;
  
BEGIN 
WITH B1TCB'.BSTCB DO                        _TCB POINTER               ?
  
  BEGIN 
  BSOQR := NIL; 
  BSOQW := NIL; 
  WHILE ( BSQPTR.BABUFPTR " NIL ) DO        _MORE BLOCKS               ?
  
    BEGIN 
    XDLBLOCK := NIL;                        _CLEAR DOWNLINE DATA PTR   ?
    PBQUEMAINT(B1TCB, XDLBLOCK, 0, 0);      _GET DOWNLINE DATA         ?
    B1BUFF   := XDLBLOCK; 
    B1BUFF'.BFFCD := 13;                    _SKIP NETWORK HEADER + DBC ?
_ 
* * * *  DOWNLINE COMMAND BLOCKS ARE ACKNOWLEDGED AND DISCARDED 
* * * *  ONLY TRANSPARENT DATA IS USED
? 
  
    XSWK.BARCHAR := B1BUFF'.BFDATAC[BTPT];  _GET BLOCK TYPE            ?
    IF XSWK.BABLKTYPE.BTYPE = HTCMD         _IF COMMAND BLOCK          ?
    THEN
      PBRELCHN(B1BUFF,BEDBSIZE)             _DISCARD IT                ?
    ELSE
      BEGIN 
_ 
* * * *  SET OR RESET DOWNLINE Q BIT
? 
      XPPTR.X1BFPTR := B1BUFF;              _GET BUFFER ADDRESS        ?
      XPPTR.X2BFPTR'.XBFRGQBIT := 
      ( B1BUFF'.BFDATAC[12] = CHR($44) ); 
      XPPTR.X2BFPTR'.XBFRGMBIT := FALSE;
      B1BUFF'.BFDATAC[12] := CHR(0);
      B1BUFF'.BFFCD := 8;                   _DATA STARTS AT 13         ?
      IF BSOQR = NIL                        _FIRST DOWNLINE BLOCK      ?
      THEN
        BSOQR := B1BUFF                     _REMIND TO OF CHAIN        ?
      ELSE
        BSOQW'.BCCHAINS[QCHN] := B1BUFF;     _CHAIN NEXT ONE           ?
      BSOQW := B1BUFF;                      _END OF CHAIN              ?
      END; _NOT A CMD BLOCK?
    END; _WHILE MORE BLOCKS?
  IF BSOQR " NIL                            _BLOCKS WHERE FOUND        ?
  THEN
    BEGIN 
    B1BUFF := BSOQR;
    BSXFRGREQ := FALSE;                     _CLEAR POLL CONDITION      ?
    PXPL3Q(TPFRGQ);                         _PASS IT TO LEVEL 3        ?
    END; _IF BSOQR " NIL? 
  END; _WITH B1TCB'.BSTCB?
END; _PROCEDURE PXPDQUEUE?
_$J+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                    PXPPFRGR                                         * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_?
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW -                                                         * 
*              PROCESS THE FRAGMENT REQUEST                           * 
*                                                                     * 
** INPUT -                                                            * 
*              B1TCB = TCB POINTER                                    * 
*                                                                     * 
** CALLING PROGRAMS                                                   * 
*              PXPADTIP      -MAIN CODE                               * 
*                                                                     * 
** OUTPUT -                                                           * 
*              BSXFRGREQ =   SET                                      * 
*                                                                     * 
** EXTERNAL SUBROUTINES -                                             * 
*              PXPDQUEUE     -DEQUEUE DOWNLINE BLOCKS                 * 
*                                                                     * 
** NOTES -                                                            * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PXPPFRGR; 
BEGIN 
B1TCB'.BSTCB.BSXFRGREQ := TRUE;             _SET REQUEST PENDING       ?
IF B1TCB'.BSTCB.BSQPTR.BABUFPTR " NIL 
THEN
  PXPDQUEUE;                                _GET NEXT BLOCK            ?
END; _PROCEDURE PXPPFRGR? 
_$J+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                    PXPADTIP                                         * 
*              MAIN PROGRAM                                           * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
  
BEGIN 
XIPARAMS.XAWORKLIST := BWWLENTRY[OPS];
  
WITH XIPARAMS DO                            _INPUT WORKLIST            ?
  BEGIN 
  
  CASE XAWC OF                              _WORK CODE                 ?
  
    L5SMEN:                                 _ENABLE LINE               ?
      BEGIN 
      END;
  
    L5SMDA:                                 _DISABLE LINE              ?
      BEGIN 
      END;
  
    L5SMRCTCB:                              _RECONFIGURE TCB           ?
      BEGIN 
      END;
  
    A0QUEOUT:                               _BLOCK QUEUED              ?
      BEGIN 
      B1TCB := XABFRPTR;
_ 
* * * *  TERMINALS ARE DEFINED IN NDL AS AUTO LOGGED IN TO NTS
? 
_ 
* * * *  STIMULATOR. HENCE THE BANNER(FIRST DOWNLINE BLOCK) IS DISCARDED. 
? 
      IF B1TCB'.BSTCB.BSLOGGED              _ALREADY LOGGED-IN         ?
      THEN
        BEGIN 
        IF B1TCB'.BSTCB.BSXFRGREQ           _IF REQUEST IS PENDING     ?
        THEN
          PXPDQUEUE;                        _GET NEXT BLOCK            ?
        END 
      ELSE                                  _DOWNLINE BANNER           ?
        BEGIN 
        XDLBLOCK := NIL;                    _CLEAR DOWNLINE DATA PTR   ?
        PBQUEMAINT(B1TCB, XDLBLOCK, 0, 0);  _GET DOWNLINE DATA         ?
        PBRELCHN(XDLBLOCK, BEDBSIZE);       _RELEASE NETWORK BLOCK BUF ?
        B1TCB'.BSTCB.BSLOGGED := TRUE;
        END; _IF B1TCB'.BSTCB.BSLOGGED? 
      END; _A0QUEOUT? 
  
    L3FRGR:                                 _FRAGMENT REQUEST          ?
      BEGIN 
      B1TCB := XATCBLCCB;                   _GET TCB POINTER           ?
      PXPPFRGR;                             _PROCESS FRAGMENT REQUEST  ?
      END; _L3FRGR? 
  
    L3FRGQ:                                 _FRAGMENT QUEUED           ?
      BEGIN 
      B1TCB := XATCBLCCB; 
      WITH B1TCB'.BSTCB DO
      BEGIN 
      IF PTREGL(B1TCB)
      THEN
        BEGIN 
        IF BSTOPP                           _IF STOP PENDING           ?
        THEN
          BEGIN 
          BSTOPP := FALSE;
          PXPL3Q(TPSTARTIN);                _ALLOW INPUT               ?
          END 
        END 
      ELSE                                  _INPUT NOT ALLOWED         ?
        BEGIN 
        IF ^BSTOPP                          _STOP NOT SENT YET         ?
        THEN
          BEGIN 
          BSTOPP := TRUE; 
          PXPL3Q(TPSTOPIN); 
          END;
        _*****  MAKE TIME-OUT WORKLIST ENTRY  *****?
        END; _IF PTREGL?
      B1BUFF := XABFRPTR; 
      B1BT := HTMSG;
_ 
* * * *  INSERT DATA BLOCK CLARIFIER (TRANSPARENT DATA) 
? 
      B1BUFF'.BFFCD := 12;                  _POINTS TO DBC             ?
      XPPTR.X1BFPTR := B1BUFF;
      IF XPPTR.X2BFPTR'.XBFRGQBIT           _IF Q BIT SET              ?
      THEN
        B1BUFF'.BFDATAC[12] := CHR($44)     _PAD MESSAGE               ?
      ELSE
        B1BUFF'.BFDATAC[12] := CHR(4);      _NORMAL DATA               ?
      WITH  B1TCB'.BSTCB, BSFLGWRD  DO
        BEGIN 
        BSINPBUF := B1BUFF;                 _SET UP UNLINE DATA        ?
        KTIGNRCN := FALSE;                  _IGNOR CANCEL              ?
        KTSEND   := TRUE;                   _SEND THIS DATA TO HOST    ?
        KTCKSP   := TRUE;                   _CHECK FOR SPECIAL         ?
        KTBLKT   := HTMSG;                  _MSG TYPE BLOCK            ?
_ 
        * * *  CALL UPLINE TIP SERVICE  * * * 
? 
        PBULTS(B1TCB);
  
        KTWORD   := 0;                      _CLEAR BIP FLAG WORD       ?
        END;  _ WITH BSTCB, BSFLGWRD ?
  
      IF XAREQ                              _FRAGMENT REQUEST          ?
      THEN
        PXPPFRGR;                           _PROCESS IT                ?
      END; _WITH B1TCB'BSTCB? 
      END; _L3FRGQ? 
  
    END; _CASE XAWC?
  END; _WITH XIPARAMS?
END; _PROCEDURE PXPAD3? 
