*COMDECK X25USRTIP
_$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 
  
  
  
                     UU      UU    SSSSSS    RRRRRRRR 
                     UU      UU   SSSSSSSS   RRRRRRRRR
                     UU      UU  SS      SS  RR      RR 
                     UU      UU  SS          RR      RR 
                     UU      UU  SSSSSSSSS   RRRRRRRRR
                     UU      UU   SSSSSSSSS  RRRRRRRR 
                     UU      UU          SS  RR   RR
                     UU      UU  SS      SS  RR    RR 
                      UUUUUUUU    SSSSSSSS   RR     RR
                       UUUUUU      SSSSSS    RR      RR 
  
  
  
                     TTTTTTTTTT    IIIIII    PPPPPPPP 
                     TTTTTTTTTT    IIIIII    PPPPPPPPP
                         TT          II      PP      PP 
                         TT          II      PP      PP 
                         TT          II      PPPPPPPPP
                         TT          II      PPPPPPPP 
                         TT          II      PP 
                         TT          II      PP 
                         TT        IIIIII    PP 
                         TT        IIIIII    PP 
  
  
  
  
  
  
  
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                    PXUSRTIP                                         * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_$R-,G-,I-? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW -                                                         * 
*              X.25 PAD INTERFACE                                     * 
*                                                                     * 
** INPUT -                                                            * 
*              BWWLENTRY[OPS] = PARAMETER LIST                        * 
*                                                                     * 
** CALLING PROGRAMS                                                   * 
*              PX25TIP       -X25 TIP                                 * 
*                                                                     * 
** OUTPUT -                                                           * 
** EXTERNAL SUBROUTINES -                                             * 
** NOTES -                                                            * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PXUSRTIP; 
*IF DEF,X25DEBUG
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                 * 
*              PXUSRTIP      -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                                                   * 
*              PXUSRTIP      -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                                                   * 
*              PXUSRTIP      -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+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                    PXUSRTIP                                         * 
*              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)                     _IF INPUT ALLOWED          ?
      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 PXUSRTIP? 
*ENDIF
*IF -DEF,X25DEBUG,2 
BEGIN 
END; _PROCEDURE PXUSRTIP? 
