*DECK NXBLOCK 
USETEXT NIPDEF
USETEXT AHEADER 
USETEXT BACKBUF 
USETEXT DRHDR 
USETEXT NCNB
USETEXT NHEADER 
USETEXT PT
PROC NXBLOCK((NCNBFWA),(BLOCKTYPE)); # SEND BLOCK PROTOCOL ELEMENT     #
STARTIMS; 
 #
*1DC  NXBLOCK 
* 
*     1. PROC NAME           AUTHOR              DATE 
*        NXBLOCK             J.C. LEE            82/06/08 
* 
*     2. FUNCTIONAL DESCRIPTION 
*        SEND NETWORK BLOCK PROTOCOL ELEMENTS 
*        BACK/BRK/RST/INITN/INITR/TERM/ICMD/ICMDR TO NPU. 
* 
*     3. METHOD USED
*        IF BLOCKTYPE IS BACK 
*           AND THERE IS A FREE ENTRY IN THE BACK BUFFER, 
*          USE BACK BUFFER ENTRY FOR DOWNLINE BACK. 
*        ELSE (BACK BUFFER CANNOT BE USED), 
*          ALLOCATE BUFFER FOR THE DOWNLINE BLOCK 
*        SET NETWORK BLOCK TYPE 
*        CALL NFOB TO LINK BUFFER TO PIP OUTBOUND CHAIN 
* 
*     4. ENTRY PARAMETERS 
*        NCNBFWA   - FWA OF NCNB
*        BLOCKTYPE - NETWORK BLOCK TYPE 
* 
*     5. EXIT PARAMETERS
*        NONE 
* 
*     6. SYMPL TEXTS USED 
*        AHEADER             APPLICATION BLOCK HEADER WORD TEMPLATE 
*        BACKBUF             DOWNLINE BACK BUFFER 
*        DRHDR               BUFFER HEADER WORD TEMPLATE
*        NCNB                NETWORK CONNECTION BLOCK TEMPLATE
*        NHEADER             NETWORK BLOCK HEADER WORD TEMPLATE 
*        NIPDEF              CONSTANT DEFINITIONS 
* 
*     7. ROUTINES CALLED
*        MGETS   - ALLOCATE BUFFER
*        NFOB    - LINK BUFFER TO PIP OUTBOUND CHAIN
*        XTRACE  - TRACE PROCEDURE CALL 
* 
*        THIS PROCEDURE IS CALLED BY NFOB, NLOBCH,
*        HSFCBRK, AND NBSTTP. 
* 
 #
STOPIMS;
# 
      FORMAL PARAMETERS 
# 
      ITEM NCNBFWA    U;     # FWA OF NCNB                             #
      ITEM BLOCKTYPE  U;     # NETWORK BLOCK TYPE                      #
# 
      EXTERNAL VARIABLES
# 
      XREF
        BEGIN 
        PROC MGETS;          # ALLOCATE BUFFER                         #
        PROC NFOB;           # LINK BUFFER TO PIP OUTBOUND CHAIN       #
        PROC XTRACE;         # TRACE PROC CALL                         #
        END 
# 
      LOCAL VARIABLES 
# 
      DEF NETSIZE  # 2 #;    # BUFFER SIZE OF NETW DOWNLINE BLK        #
      ITEM BUFFWA    U;      # BUFFER FOR NETWORK BLOCK                #
      ITEM NXBSIZE;          # BUFFER SIZE                             #
  
      CONTROL IFEQ DEBUG,1; 
      ARRAY TRACE$NBLK [1:NETICMDR] S(1); 
        BEGIN                # TRACE NETWORK BLOCK CALL                #
        ITEM NBLK$NAME C(00,00,05) = [
          "ERROR",
          "ERROR",
          "NXBCK",
          "ERROR",
          "NXBRK",
          "ERROR",
          "ERROR",
          "NXRST",
          "NXINR",
          "NXINN",
          "NXTRM",
          "NXICM",
          "NXICR",
                                      ];
        END 
      CONTROL FI; 
#**********************************************************************#
  
      BEGIN 
  
      CONTROL IFEQ DEBUG,1; 
      XTRACE(NBLK$NAME[BLOCKTYPE]); 
      CONTROL FI; 
  
      P<NCNB> = NCNBFWA;               # NCNB ADDRESS                  #
      IF (BLOCKTYPE EQ NETBACK) AND    # DOWNLINE BACK FOR NPU         #
         (BACKFFREE NQ 0) AND          # FREE ENTRY IN BACK BUFFER     #
         (NCNBTN[0] NQ 0) AND          # CHECK FOR NOT INTRAHOST A-A CN#
         (NCNBHN[0] NQ 0) 
      THEN                             # USE BACK BUFFER FOR BACK      #
        BEGIN 
        BUFFWA = BACKFFREE + 1;        # ADDRESS OF FREE ENTRY IN BUF  #
        P<DRHDRWD> = BACKFFREE; 
        BACKFFREE = CMWORD[0];         # ADDRESS OF NEXT FREE ENTRY    #
        END 
      ELSE                             # GET BUFFER FOR DOWNLINE BLOCK #
        BEGIN 
        IF (BLOCKTYPE NQ NETICMD) AND (BLOCKTYPE NQ NETBRK) 
        THEN
          BEGIN 
          NXBSIZE = NETSIZE;
          END 
        ELSE
          BEGIN 
          NXBSIZE = ICMDSIZE; 
          END 
        MGETS(NXBSIZE,BUFFWA,TRUE); 
        END 
  
      P<NHEADER> = BUFFWA + BLKHSIZE; 
      NHWORD[0] = 0;                   # CLEAR NETWORK HEADER WORD     #
      P<AHEADER> = P<NHEADER>;
      BT[0] = BLOCKTYPE;     # NETWORK BLOCK TYPE                      #
      IF BLOCKTYPE EQ NETBACK 
      THEN                   # SET BSN FOR DOWNLINE BLOCK              #
        NHBSN[0] = TEMPBSN; 
      ELSE IF (BLOCKTYPE EQ NETICMD) OR (BLOCKTYPE EQ NETBRK) 
      THEN
        BEGIN 
        ABHACT[0] = CT8ASCII;  # SET CHARACTER TYPE                    #
        ABHTLC[0] = 1;  # CHAR COUNT FOR INTERRUPT CHAR/BREAK RC       #
        NHICMDA[1] = TEMPBSN;  # SET INTERRUPT CHAR/BREAK REASON CODE  #
        END 
  
      NFOB(BUFFWA,NCNBFWA); 
  
      RETURN; 
      END 
      TERM
