*COMDECK PBBLOCKTR
_$J+
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*        P B B L O C K T R A N S P O R T   -   ROUTE BLOCK            * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_$G-,R-,I-    NON RECURSIVE, INTERRUPTABLE ?
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW - THIS PROCEDURE ROUTES A BLOCK THROUGH THE NETWORK.      * 
*             IT IS CALLED BY MONITOR THROUGH A WORKLIST ENTRY.       * 
*             NETWORK BLOCKS IN THE NPU WILL HAVE ONE OF THE          * 
*             FOLLOWING THREE DESTINATIONS:                           * 
*               1) THE HIP, FOR ROUTING TO THE LOCAL HOST             * 
*               2) THE LIP, FOR ROUTING TO A REMOTE NPU OR A          * 
*                  REMOTE HOST                                        * 
*               3) THIS NPU, FOR PASSING TO THE SERVICE MODULE        * 
*                  OR TO THE DOWNLINE BLOCK PROTOCOL MODULE           * 
*                                                                     * 
** INPUT    - POINTER TO THE NETWORK BLOCK (FIRST AND ONLY            * 
*             PARAMETER IN THE WORKLIST ENTRY)                        * 
*                                                                     * 
** OUTPUT   - WORKLIST TO SVM OR LIP, CALL TO BLOCK PROTOCOL          * 
*             MODULE OR HIP.                                          * 
*                                                                     * 
** EXTERNAL SUBROUTINES USED -                                        * 
*             PBLOST      - BAD NETWORK BLOCK HANDLER                 * 
*             PBLSPUT     - SEND WORKLIST ENTRY                       * 
*             PN1GTPTR    - STRUCTURED SERVICES GET ROUTE TABLE PTR   * 
*             PN2SRCH     - STRUCTURED SERVICES GET TCB PTR           * 
*             PBDBPM      - DOWNLINE BLOCK MODULE                     * 
*             PBXFER      - TRANSFER CONTROL TO PAGED ROUTINE (HIP)   * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PBBLOCKTRANSPORT; 
  
CONST 
  K1NOTFND = 3;                             _BLOCK DESTINATION UNKNOWN ?
  
VAR 
  K1DBGI    : INTEGER;                      _INDEX TO NEXT NETWORK BLK ?
  K1DBGA    : ARRAY [0..29] OF B0BUFPTR;    _SAVED NETWORK BLOCK ARRAY ?
  K1DNIND  : INTEGER;                       _ DESTINATION NODE         ?
  K1TBLP   : B0BUFPTR;                      _ TABLE TO BE SEARCHED     ?
  K1LLCBP  : B0BUFPTR;                      _LLCB POINTER              ?
  K1SN     : INTEGER;                       _SOURCE NODE               ?
  K1CN     : INTEGER;                       _CONNECTION NUMBER         ?
  K1BT     : BLKTYPE;                       _BLOCK TYPE VARIABLE       ?
_$J+? 
_****************************** 
*                             * 
*    START BLOCK TRANSPORT    * 
*                             * 
******************************? 
  
BEGIN                                       _ BEGIN MAIN ROUTINE       ?
B1BUFF := BWWLENTRY [OPS].B0EWLQ. 
          MMWD0.BABUFPTR;                   _GET NETWORK BLOCK         ?
K1DBGA [K1DBGI] := B1BUFF;                  _SAVE PTR TO NETWORK BLOCK ?
K1DBGI          := (K1DBGI + 1) MOD 30;     _UPDATE INDEX INTO ARRAY   ?
WITH B1BUFF' DO 
  BEGIN 
  K1DNIND := K1NOTFND;                      _DEFAULT NOT FOUND         ?
  K1TBLP  := PN1GTPTR (ORD (BFDATAC [DN]),
                       DELOCDN);            _GET ROUTE TABLE           ?
  IF K1TBLP " NIL 
  THEN
    K1DNIND := K1TBLP'.BRTYP1.BRLNKTYPE;
  
  CASE K1DNIND OF                           _ CASE THE DN              ?
  
_******************** 
*                   * 
*       HIP         * 
*                   * 
********************? 
  
    NLCOUPLER:  
      BEGIN 
      PBXFER (BRTNJUMP[C1PTHIPQ].JENTADDR,
              BRTNJUMP[C1PTHIPQ].JPAGEVAL); _QUEUE TO HIP              ?
      END;
  
_******************** 
*                   * 
*       LIP         * 
*                   * 
********************? 
  
    NLTRUNK:  
      BEGIN 
_  ******  CAUTION - HIDDEN *IF DEF,HLIP  ******  ? 
*IF DEF,HLIP
      TRKPTR := K1TBLP'.BRTYP1.BRPTR;       _SET TRUNK C.B. ADDRESS    ?
*ENDIF
_  ******  CAUTION - HIDDEN *ENDIF FOR HLIP CODE  ******  ? 
      PBXFER (BRTNJUMP[C1PLLIPQ].JENTADDR,
              BRTNJUMP[C1PLLIPQ].JPAGEVAL); _QUEUE NETWORK BLOCK TO LIP?
      END;
  
_*******************
*                  *
*       LOCAL      *
*                  *
*******************?
  
    NLTERM: 
      BEGIN 
      K1BT.BTCHR := BFDATAC [BTPT];         _GET BOCK TYPE             ?
      K1SN       := ORD (BFDATAC [SN]);     _GET SOURCE NODE           ?
      K1CN       := ORD (BFDATAC [CN]);     _GET CONNECTION NUMBER     ?
      IF K1CN = 0 
      THEN                                  _CONNECTION NR OF ZERO     ?
_ 
* * * *  SERVICE MESSAGE LOCATED
? 
        IF K1BT.BTYPE = HTCMD               _AND BLK TYPE OF CMD       ?
        THEN
          WITH BWWLENTRY [OPS].CMSMLEY DO   _SERVICE MESSAGE FOUND     ?
            BEGIN 
            CMWKCODE := D0SM;               _WORKCODE FOR SVM          ?
            CMPOINT  := B1BUFF;             _PASS BLOCK POINTER        ?
            PBLSPUT (BWWLENTRY [OPS], 
                     BYWLCB [B0SMWL]);      _PASS WLE TO SVM           ?
            END 
        ELSE
          PBLOST (B1BUFF)                   _NON SVM OVER ZERO CONN.   ?
      ELSE
_ 
* * * *  BLOCK FOR TERMINAL, LOCATE THE LLCB
? 
        BEGIN 
        K1LLCBP := PN2SRCH (K1SN, K1TBLP'.
                            BRTYP1.BRPTR);  _LOCATE THE LLCB           ?
        IF K1LLCBP = NIL
        THEN
          PBLOST (B1BUFF)                   _LLCB NOT FOUND            ?
        ELSE
          IF K1LLCBP'.BLLLCB.BLSPART. 
             BLCNFST " C7ACTIVE 
          THEN
            PBLOST (B1BUFF)                 _LLCB NOT ACTIVE           ?
          ELSE
_ 
* * * *  BLOCK FOR TERMINAL, LOCATE THE TCB 
? 
            BEGIN 
            B1TCB := PN2SRCH (K1CN, 
                     K1LLCBP'.BLLLCB. 
                     BLSPART.BLCONDIR);     _LOCATE THE TCB            ?
            IF B1TCB = NIL
            THEN
              PBLOST (B1BUFF)               _TCB NOT FOUND             ?
            ELSE
              PBDBPM;                       _PASS VALID D/L BLOCK ALONG?
            END; _IF BLCNFST " C7ACTIVE ELSE? 
        END; _IF K1CN = 0 ELSE? 
      END; _NLTERM:?
  
_*******************
*                  *
*     NOT FOUND    *
*                  *
*******************?
  
    K1NOTFND: 
      PBLOST (B1BUFF);                      _UNKNOWN DESTINATION       ?
  
    END; _CASE K1DNIND OF?
  
  END; _WITH B1BUFF' DO?
END; _ PROCEDURE PBBLOCKTRANSPORT ? 
_$J+
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*        P B S W L E   -   SWITCH BLOCK THOUGH NETWORK                * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_$G-,R-,I+    NON RECURSIVE, NON INTERRUPTABLE ?
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW - THIS PROCEDURE BUILDS AND SENDS A WORKLIST ENTRY        * 
*             TO PBBLOCKTRANSPORT TO ROUTE A BLOCK THROUGH THE        * 
*             NETWORK.                                                * 
*                                                                     * 
** INPUT    - POINTER TO THE NETWORK BLOCK (PARAMETER)                * 
*                                                                     * 
** OUTPUT   - WORKLIST ENTRY SEND TO PBBLOCKTRANSPORT                 * 
*                                                                     * 
** EXTERNAL SUBROUTINES USED -                                        * 
*             PBLSPUT     - SEND WORKLIST ENTRY                       * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PBSWLE ( K1BLKP  : B0BUFPTR); 
  
VAR 
  K1WLP   : 'BWWORKLIST;                    _POINTER TO WORKLIST ENTRY ?
  
BEGIN 
ADDR (K1BLKP, K1WLP);                       _MAKE K1BLKP THE WLE       ?
PBLSPUT (K1WLP', BYWLCB [B0BIP]);           _PASS WLE TO BIP           ?
END; _PROCEDURE PBSWLE? 
  
