*DECK NPBRK 
USETEXT NIPDEF
USETEXT STATTAB 
USETEXT PARAMS
USETEXT NCNB
USETEXT AHEADER 
USETEXT DRHDR 
USETEXT MSGIDX
      PRGM NPBRK ;
STARTIMS; 
 #
*1DC  NPBRK 
* 
*     1. PROC NAME           AUTHOR              DATE 
*        NPBRK               L. T. NGUYEN        81/11/09 
* 
*     2. FUNCTIONAL DESCRIPTION 
*        DISCARD ALL MSG AND BLK IN NCNB UPON RECEIVING BREAK 
* 
*     3. METHOD USED
*        SEARCH FOR MSG OR BLK DATA, THEN DELINK FOR RELEASING. 
*        UPDATE COUNTS AS NEEDED. 
* 
*     4. ENTRY PARAMETERS 
*        PARAMS1 - NCNB ADDRESS 
* 
*     5. EXIT PARAMETERS
*        NONE 
* 
*     6. COMDECKS CALLED AND SYMPL TEXTS USED 
*        NIPDEF     PARAMS     NCNB     ACKHEAD 
*        DRHDR     MSGIDX     NHEADER     OSSIZE
* 
*     7. ROUTINES AND OVERLAYS CALLED 
*        ABORT - ABORT NIP
*        OMSG - ISSUE DAYFILE MESSAGE 
*        XTRACE - TRACE PROCEDURE CALL
*        MRELS - RELEASE BUFFER 
* 
*     8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION 
*        "NIP RECEIVED BAD BSN."
* 
*        THIS IS A SECONDARY OVERLAY CALLED BY NBSTTP.
*        W A R N I N G - THIS PROGRAM CANNOT EXCEED THE SECONDARY 
*CALL OSSIZE
* 
* 
 #
STOPIMS;
      XREF LABEL RJMAIN ; 
      XREF PROC ABORT ; 
      XREF PROC MRELS ;      # RELEASE DATA RING                       #
      XREF PROC OMSG ;
      XREF PROC XTRACE ;     # XTRACE ROUTINE                          #
  
      ITEM I I ;             #                                         #
      ITEM CURR;             # CURRENT DATA TO BE RELEASED             #
      ITEM PREVIOUS U ;      # PREVIOUS BLOCK                          #
      ITEM NEXT  U   ;       # NEXT DATA BLOCK                         #
  
      BEGIN                  # NPBRK                                   #
  
      CONTROL IFEQ DEBUG,1; 
        XTRACE("NPBRK") ; 
      CONTROL FI ;
      P<NCNB> = PARAMS1 ;    # NCNB POINTER                            #
  
      P<DRHDRWD> = 0; 
      CURR = NCNBDRFP[0];  # FIRST ENTRY IN DOWNLINE DATA RING         #
      FOR CURR = CURR WHILE CURR NQ 0  # DATA RING EXISTS              #
      AND CURR NQ LOC(NCNBDRFP[0])  # NOT END OF RING                  #
      DO      # RELEASE ALL QUEUED DOWNLINE BLOCKS                     #
        BEGIN 
        NEXT = NEXTPTR[CURR];  # NEXT ENTRY IN DATA RING               #
        MRELS(CURR);  # RELEASE CURRENT DATA RING ENTRY                #
        CURR = NEXT;
        END 
  
# 
        DISCARD THE ACKNOWLEDGE QUEUE IF EXISTS 
# 
  
       NCNBNBO[0] = 0 ;               # NO OUTSTANDING BLOCK COUNT     #
      NCNBWD2[0] = 0;  # CLEAR DATA RING AND ACK-Q POINTERS            #
       NCNBDBSN[0] = 0 ;
  
  
       GOTO RJMAIN ;
       END                   # NPBRK                                   #
  
TERM
  
