*DECK     NVFTBRK 
USETEXT          TEXTNVF
USETEXT          TXTANVF
USETEXT          TXTAPSS
USETEXT          TEXTSS 
  
PROC NVFTBRK; 
# TITLE NVFTBRK - PROCESS BREAK OCCURRED CONDITION (FC/BRK SM)         #
  
      BEGIN  # NVFTBRK #
# 
**    NVFTBRK - PROCESS BREAK OCCURRED CONDITION (FC/BRK SM). 
* 
*     E. THAVIKULWAT    81/09/21
* 
*     THIS PROCEDURE PROCESSES THE BREAK CONDITION.  IT IS CALLED INTO
*     EXECUTION BY PROCEDURE *NVFTDQE*. 
* 
*     PROC NVFTBRK
* 
*     ENTRY:  
*       ABH IN *ABHBUF* 
*       INTR/USR SM IN *MSGBUF* 
* 
*     EXIT: 
*       APPROPRIATE LOGIN PROMPT REISSUED IF NECESSARY. 
* 
*     NOTES:  
*       1) IF CTRL/RTC REQUEST FOR TERMINAL CLASS AND ECHOPLEX IS 
*          OUTSTANDING WHEN A BREAK IS RECEIVED, THE REQUEST MIGHT
*          HAVE BEEN DISCARDED.  IN THIS CASE, THE REQUEST MUST BE
*          REISSUED.
* 
*     METHOD: 
*       SEARCH PTAC TABLE FOR ENTRY THAT MATCHES THIS TERMINAL'S ACN. 
*       IF ENTRY FOUND AND TERMINAL IS WAITING FOR A RESPONSE TO ONE OF 
*       IT'S LOGIN PROMPT, THEN REISSUE FAMILY OR APPLICATION PROMPT. 
*       OTHERWISE, IGNORE THE BREAK.
# 
  
# 
****  PROC NVFTBRK - XREF LIST. 
# 
  
      XREF
        BEGIN 
        PROC NVFTILP;        # ISSUE LOGIN PROMPT                      #
        PROC NVFUMQE;        # TRANSFER PROTOCOL RESPONSE TO QUEUE     #
        END 
  
# 
****
# 
      ITEM ADDR       I;     # ADDRESSING INFORMATION FOR ABH          #
      ITEM MATCH      B;     # EXIT LOOP VARIABLE                      #
      ITEM NENTRY     I;     # NUMBER OF ENTRIES IN TABLE              #
      ITEM PT         I;     # SUBSCRIPT FOR ARRAY PTAC                #
  
# 
*     SEARCH PTAC TABLE FOR ENTRY THAT MATCHES THIS TERMINAL'S ACN. 
*     IF NO MATCH, IGNORE SM. 
# 
      MATCH  = FALSE; 
      NENTRY = PTALNGTH / PTACSIZ$;   # CALCULATE NUMBER OF ENTRIES   # 
      FOR PT = 0 STEP 1 WHILE (NOT MATCH AND PT LS NENTRY)
      DO
        BEGIN 
        IF PTA$ACN[PT] EQ INTRACN[0]
        THEN
          BEGIN                        # PTAC ENTRY FOUND              #
# 
*         BUILD FC/RST PROTOCOL RESPONSE. 
# 
          SPMSG0[1] = 0;
          PFCSFC[1] = FCRST;
          FCACN[1]  = FCACN[0]; 
          ADDR      = ABHADR[0];
          NVFUMQE(P<CTQ>,APSM[1],APPPR$,ADDR,LFC);  # TRNSFR RSP TO Q # 
  
          ADDR = PTA$ACN[PT]; 
# 
*         DETERMINE PROMPT TO REISSUE.  IF BREAK OCCURRED WHILE 
*         TERMINAL WAS WAITING FOR RESPONSE TO A FAMILY, USER, PASSWORD 
*         OR PERSONAL ID PROMPT, THE FAMILY PROMPT WILL BE REISSUED.  IF
*         WAITING FOR PID RESPONSE, BEFORE REISSUE FAMILY PROMPT, MAKE
*         SURE TO DECREMENT FAMILY COUNT. IF WAITING FOR RESPONSE TO
*         APPLICATION PROMPT, THE APPLICATION PROMPT WILL BE REISSUED.
# 
          IF PTA$STATE[PT] EQ PTACST"AWTRSP"
          THEN                         # AWAITING RESPONSE TO PROMPT   #
            BEGIN 
            IF PTA$PROMPT[PT] NQ AWTAPP$
            THEN
              BEGIN                    # REISSUE FAMILY PROMPT         #
  
              IF (PTA$PROMPT[PT] EQ AWTPID$) AND (PTA$SCINV[PT] EQ 0) 
              THEN                     # ISSUE CMP73 REQUEST TO        #
                BEGIN                  # DECREMENT FAMILY COUNT        #
                P<CRQBUF> = LOC(MSGBUF[0])+((NMSGBUF$+1)/2);
                CRQ$FCWORD[0] = 0;
                CRQ$FWORD[0] = 0; 
                CRQ$FC[0] = CPM73B$;   # DECREMENT FAMILY COUNT        #
                CRQ$ACN[0] = 0; 
                CRQ$FNAM[0] = PTA$FNAM[PT]; 
                NVFUMQE(P<CPMRQ>,CRQBUF[0],APPTTX$,0,CRQDSIZ$ * 10);
                END 
  
              PTA$PROMPT[PT] = AWTFAM$;  # AWAIT FAMILY PROMPT         #
              END 
            NVFTILP(PT);               # ISSUE NEXT PROMPT             #
            END 
          MATCH = TRUE; 
          END 
        END 
  
      END  # END NVFTBRK #
  
TERM
