*COMDECK PBDLTS 
_$J+
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*        P B D L T S   -   DOWNLINE TIP SERVICES                      * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_$G-,R-,I-    NON RECURSIVE, INTERRUPTABLE ?
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW - THIS PROCEDURE MAKES A DIRECT CALL TO A TIP APPENDAGE   * 
*             FOR CERTAIN DOWNLINE BLOCKS TO ALLOW FOR PRE-           * 
*             OUTPUT TEXT PROCESSING OR OTHER BLOCK HANDLING BY       * 
*             THE TIP. THE TIP CAN RETURN THE BLOCK (TEXT-PROCESSED)  * 
*             IN WHICH CASE THIS PROCEDURE WILL PUT THAT BLOCK IN     * 
*             THE DOWNLINE TCB QUEUE BY CALLING PBQUEMAINT.           * 
*             ANOTHER REASON FOR CALLING  QUEUE MAINTENANCE IS        * 
*             TO CHECKING FOR U/L BACK(S) DUE IN CASE OF AN EMPTY     * 
*             DOWNLINE QUEUE                                          * 
*                                                                     * 
** INPUT    - TCB POINTER AND BLOCK POINTER (PARAMETERS)              * 
*                                                                     * 
** OUTPUT   - BLOCK TYPE IS INSERTED IN BTWD (4) OF THE BUFFER        * 
*             PRIOR TO CALLING THE TIP, FOR THE TIPS CONVENIENCE      * 
*                                                                     * 
** EXTERNAL SUBROUTINES USED -                                        * 
*             PBRELCHN    - RELEASE CHAIN OF BUFFERS                  * 
*             PNSGATH     - GATHER STATISTICS ON DOWNLINE DATA BLKS   * 
*             PBRDPGE     - SAVE CURRENT PAGE NUMBER                  * 
*             PBPSWITCH   - SWITCH TO NEW PAGE NUMBER                 * 
*             PBCALL      - CALL DOWNLINE TIP APPENDAGE               * 
*             PBQUEMAINT  - PUT BLOCK IN DOWNLINE TCB QUEUE           * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PBDLTS (K3TCBP, K3BLKP : B0BUFPTR); 
  
VAR 
  K3PAGE  : INTEGER;                        _ PAGE NUMBER OF TEXT PROC ?
  K3ENTRY : INTEGER;                        _ ENTRY POINT OF TEXT PROC ?
  K3CURPG : INTEGER;                        _CURRENT PAGE NUMBER       ?
  K3QACTN : INTEGER;                        _QUEUE ACTION (FRONT/END)  ?
  K3BT    : BLKTYPE;                        _ BLOCK TYPE FIELD         ?
  K3DBC   : DBDBC;                          _ DATA BLOCK CLARIFIER     ?
  K3QARR  : ARRAY [BOOLEAN] OF INTEGER;     _QUEUE ACTION FOR INTBLK   ?
  
VALUE 
  K3QARR  = (K4PUT, K4PUTFR); 
  
BEGIN 
IF K3TCBP'.BSTCB.BSCNFST = C7DOWN           _IF TCB DOWN THEN          ?
THEN
  PBRELCHN (K3BLKP,BEDBSIZE)                _RELEASE THE DATA          ?
ELSE
  BEGIN 
  WITH K3BLKP' DO 
    BEGIN 
    K3QACTN      := K3QARR [BFINTBLK];      _GET QUEUE ACTION          ?
    K3DBC.DBCHAR := BFDATAC [DBC];          _GET DBC LOCAL             ?
    K3BT.BTCHR   := BFDATAC [BTPT];         _GET BLOCKTYPE LOCAL       ?
    BIINT [BTWD] := K3BT.BTYPE;             _SET FOR TIPS CONVENIENCE  ?
    CASE BIINT [BTWD] OF
  
    HTBLK, HTMSG, HTQBLK, HTQMSG: 
  
      BEGIN 
      PNSGATH (K3TCBP'.BSTCB.BSLCBP,        _GATHER STATISTICS ON BLOCK?
                      K3BLKP, J0SEND);
_ 
* * * *  REMOVE EMPTY BATCH DATA BLOCKS 
? 
      IF K3TCBP'.BSTCB.BSBATCH
      THEN
        IF BFLCD = DATA                     _EMPTY BATCH DATA BLOCK    ?
        THEN
          IF K3DBC.DBBERI = 0               _AND NOT EOR OR EOI        ?
          THEN
            PBRELCHN (K3BLKP, BEDBSIZE);    _RELEASE EMPTY BATCH DATA  ?
      END; _HTBLK, HTMSG, HTQBLK, HTQMSG:?
    END; _CASE BIINT [BTWD] OF? 
    END; _WITH K3BLKP' DO?
  IF K3BLKP " NIL 
  THEN
    BEGIN                                   _BLOCK NOT RELEASED        ?
_ 
* * * *  GET THE TIPS TEXT-PROCESSING ROUTINE AND SWITCH CONTROL TO IT
? 
    WITH BJTIPTYPT [K3TCBP'.BSTCB.BSLCBP'.
                    BZTIPTYPE] DO           _SET INDEX TO TIPTYPE TABLE?
      BEGIN 
      K3PAGE  := BJTXTPAGE;                 _GET PAGE OF TP PROCEDURE  ?
      K3ENTRY := BJTXTENT;                  _AND GET ENTRY ADDRESS     ?
      END; _WITH BJTIPTYPT DO?
  
    IF K3ENTRY " 0
    THEN                                    _TP PROCEDURE SPECIFIED    ?
      BEGIN 
      PBRDPGE   (K3CURPG);                  _SAVE CURRENT PAGE NUMBER  ?
      PBPSWITCH (K3PAGE);                   _SWITCH TO TP PROC PAGE    ?
      PBCALL    (K3ENTRY, K3TCBP, K3BLKP);  _CALL TIPS TEXT-PROCESSOR  ?
      PBPSWITCH (K3CURPG);                  _RESTORE CURRENT PAGE      ?
      END; _IF K3ENTRY " 0? 
    END; _IF K3BLKP " NIL?
_ 
* * * *  QUEUE POSSIBLE D/L IN THE QUEUE OR TEST FOR U/L BACK DUE 
? 
  PBQUEMAINT (K3TCBP, K3BLKP, K3QACTN);     _PUT IT IN THE D/L QUEUE   ?
  END; _ BSCNFST < C7ENABLED ?
END; _PROCEDURE PBDLTS? 
