*DECK     NVFTINA 
USETEXT          TEXTNVF
USETEXT          TXTANVF
USETEXT          TXTAPSS
  
PROC NVFTINA; 
# TITLE NVFTINA - PROCESS TIMER EXPIRED CONDITION (FC/INACT SM)        #
  
      BEGIN  # NVFTINA #
# 
**    NVFTINA - PROCESS TIMER EXPIRED CONDITION (FC/INACT SM) 
* 
*     E. THAVIKULWAT    81/09/24
*     C. BRION          83/04/11
* 
*     THIS PROCEDURE WILL EITHER TERMINATE A LOGIN SESSION OR REATTEMPT 
*     A SWITCH TO AN APPLICATION.  THIS ACTION IS DUE TO EXPIRATION OF
*     NVF'S TIMER.  THIS ROUTINE IS CALLED INTO EXECUTION BY PROCEDURE
*     *NVFTDQE*.
* 
*     PROC NVFTINA
* 
*     ENTRY:  
*       ABH IN *ABHBUF* 
*       FC/INACT SM IN *MSGBUF* 
* 
*     EXIT: 
*       ONE OF TWO CONDITIONS:  
*         - A NEW ATTEMPT IS MADE TO SWITCH TO AN APPLICATION, OR 
*         - "TIMEOUT" MESSAGE ISSUED TO THE TERMINAL AND LOGIN SESSION
*           TERMINATED.  A CTR/CHAR MAY BE SENT TO FORCE THE TERMINAL 
*           TO NON-TRANSPARENT INPUT MODE.
* 
*     METHOD: 
*       SEARCH PTAC TABLE FOR ENTRY THAT MATCHES THIS TERMINAL'S ACN
*       AND TIMER CANCELLATION NUMBER.  IF ENTRY FOUND, EITHER SEND 
*       "TIMEOUT" MESSAGE AND TERMINATE CONNECTION, OR CALL *NVFTDSP* TO
*       ATTEMPT TO SWITCH TO THE APPLICATION.  IF NO PTAC ENTRY IS
*       FOUND, IGNORE THE SM. 
# 
  
# 
****  PROC NVFTINA - XREF LIST. 
# 
  
      XREF
        BEGIN 
        PROC NVFTETC;        # END TERMINAL CONNECTION                 #
        PROC NVFTDAD;        # DETERMINE ADDITIONAL DIALOGUE           #
        PROC NVFTDSP;        # DETERMINE SWITCH POSSIBILITY            #
        PROC NVFUMQE;        # TRANSFER TEXT TO QUEUE                  #
        PROC NVFTILP;        # ISSUE LOGIN PROMPT                      #
        PROC NVFSCAD;        # COMPLETE APPLICATION DEPARTURE          #
        END 
  
# 
****
# 
  
*CALL TMSGNVF 
  
*CALL TERMCLS 
  
      ITEM ADDR       I;     # ADDRESSING INFORMATION FOR ABH          #
      ITEM MATCH      B;     # EXIT LOOP VARIABLE                      #
      ITEM MATCH2     B;     # AST MATCH FLAG                          #
      ITEM MATCH3     B;     # SEC AST ENTRY MATCH FLAG                #
      ITEM NENTRY     I;     # NUMBER OF ENTRIES IN TABLE              #
      ITEM PT         I;     # SUBSCRIPT FOR ARRAY PTAC                #
      ITEM SORD       I;     # SECONDARY AST ORDINAL                   #
      ITEM PORD       I;     # PRIMARY AST ORDINAL                     #
      ITEM ERRCOD     I;     # ERROR CODE FOR NVFTDAD CALL             #
      ITEM ASENTRY    I;     # NUMBER AST ENTRIES                      #
  
# 
*     DETERMINE NUMBER OF AST ENTRIES.
# 
      ASENTRY = ASTLNGTH/ASTSIZ$; 
# 
*     SEARCH PTAC TABLE FOR ENTRY THAT MATCHES THIS TERMINAL'S ACN
*     AND TIMER CANCELLATION NUMBER.  IF NO MATCH, IGNORE SM. 
# 
      MATCH = FALSE;
      MATCH3 = FALSE; 
      MATCH2 = FALSE; 
      NENTRY = PTALNGTH / PTACSIZ$; 
      FOR PT = 0 STEP 1 WHILE (NOT MATCH AND PT LS NENTRY)
      DO
        BEGIN 
        IF (PTA$ACN[PT] EQ FCACN[0])
          AND (PTA$CNUM[PT] EQ ABHABN[0]) 
        THEN
          BEGIN                        # PTAC ENTRY FOUND              #
          MATCH = TRUE; 
  
# 
*     CHECK IF TIMEOUT FOR APPLICATION NOT NETTING ON. IF SO, LOCATE THE
*     PRIMARY AST ENTRY.
*     CALL NVFSCAD TO COMPLETE APPLICATION DEPARTURE FOR BOTH ENTRIES.
# 
          IF PTA$STATE[PT] EQ PTACST"AWTNETP" 
          THEN
            BEGIN 
# 
*     LOCATE THE PRIMARY AST ENTRY FOR THIS PTAC ENTRY. 
# 
            FOR PORD = 0 STEP 1 WHILE 
              ((PORD LS ASENTRY) AND
               ((NOT MATCH2 AND NOT MATCH3) OR
                (MATCH2 AND NOT MATCH3) OR
                (NOT MATCH2 AND MATCH3))) 
            DO
              BEGIN 
              IF ((AST$PANAM[PORD] EQ PTA$SWTAPP[PT]) AND 
                  (AST$PANAM[PORD] EQ AST$SANAM[PORD])) 
              THEN
# 
*     PRIMARY AST ENTRY FOUND.
# 
  
                BEGIN 
                NVFSCAD(PORD);
                MATCH2 = TRUE;
                END 
  
              IF ((AST$SANAM[PORD] EQ PTA$SWTAPP[PT]) AND 
                  (AST$SANAM[PORD] NQ AST$PANAM[PORD])) 
              THEN
# 
*     SECONDARY AST ENTRY FOUND.
# 
                BEGIN 
                NVFSCAD(PORD);
                MATCH3 = TRUE;
                END 
              END 
            END 
# 
*     CHECK IF TIMEOUT FOR REATTEMPTING TO SWITCH TO AN APPLICATION.
*     IF SO, CALL NVFTDSP TO DETERMINE THE SWITCH POSSIBILITY.
# 
          IF PTA$STATE[PT] EQ PTACST"AWTAPPL" 
          THEN
            BEGIN 
            PTA$STATE[PT] = PTACST"AWTVAA"; 
            NVFTDSP(PT,0);
            GOTO ENDEXIT; 
            END 
# 
*     CHECK TERMINAL CLASS TO SEE IF NVF SHOULD SEND A CTR/CHAR.
# 
          ADDR = PTA$ACN[PT]; 
          GOTO TERMCLS [PTA$TC[PT]];
  
SENDCTRCHAR:  
  
# 
*     SEND CTR/CHAR TO FORCE TERMINAL TO BE IN NON-TRANSPARENT INPUT
*     MODE. 
# 
          PFCSFC[1] = CTRCHAR;
          CTRSTR[1] = 0;               # CLEAR REST OF WORD 0          #
          B<0,16>CTRSTR[1] = NOXPAR$;  # ADD FN/FV PAIR FOR NON-XPARENT#
          NVFUMQE(P<CTQ>,APSM[1],APPPR$,ADDR,LCTRLO$); # TRANSFER TO Q #
  
NOCTRCHAR:  
  
# 
*       SEND "TIMEOUT" MESSAGE AND TERMINATE CONNECTION.
# 
          NVFUMQE(P<CTQ>,TOUTBUF[0],APPTTX$,ADDR,LMSG20$);  # TXT TO Q #
  
# 
*     IF NETON PENDING TYPE OF TIMEOUT, SET UP APPLICATION NOT PRESENT
*     ERROR CODE AND CALL NVFTDAD TO DETERMINE NEXT DIALOGUE. OTHER-
*     WISE, END THE CONNECTION. 
# 
  
          IF PTA$STATE EQ PTACST"AWTNETP" 
          THEN
            BEGIN 
            ERRCOD = ECANP$;
            NVFTDAD(PT,ERRCOD); 
# 
*     IF CONNECTION AWAITING PROMPT, CALL NVFTILP TO ISSUE PROMPT.
# 
            IF PTA$STATE[PT] EQ PTACST"AWTPRMT" 
            THEN
              NVFTILP(PT);
            END 
          ELSE
            NVFTETC(PT);                 # END TERMINAL CONNECTION   #
          END 
        END 
  
ENDEXIT:  
      END  # END NVFTINA #
  
TERM
