*DECK     NVFTPSV 
USETEXT          TEXTNVF
USETEXT          TEXTSS 
USETEXT          TXTANVF
USETEXT          TXTAPSS
USETEXT          TXSMNVF
PROC NVFTPSV((PT)); 
# TITLE NVFTPSV - PROCESS SUCCESSFUL VALIDATION                        #
  
      BEGIN  # NVFTPSV #
# 
**    NVFTPSV - PROCESS SUCCESSFUL VALIDATION.
* 
*     E. THAVIKULWAT    81/10/19
* 
*     THIS PROCEDURE'S MAIN FUNCTION IS TO UPDATE *PTAC* ENTRY UPON A 
*     SUCCESSFUL USER OR APPLICATION VALIDATION.  IT IS CALLED INTO 
*     EXECUTION BY THE FOLLOWING PROCEDURES:  
*       *NVFTETI*   *NVFTVAA*  *NVFTVVD*
* 
*     PROC NVFTPSV((PT))
* 
*     ENTRY:  
*       PT  =  POINTER TO *PTAC* ENTRY
* 
*     EXIT: 
*       *PTAC* TABLE UPDATED TO REFLECT SUCCESSFUL USER OR APPLICATION
*       VALIDATION. 
* 
*     NOTES:  
*       INCREMENT FAMILY COUNT IS SET ONLY FOR INITIAL USER VALIDATION. 
*       USER VALIDATION DUE TO A CR/RCN REQUEST IS NOT CONSIDERED 
*       INITIAL AND FAMILY COUNT IS NOT INCREMENTED.
* 
*     METHOD: 
*       FOR APPLICATION VALIDATION, CALL *NVFTDSP* TO DETERMINE IF
*       SWITCH IS POSSIBLE.  FOR INITIAL USER VALIDATION, CALL *NVFTIAM*
*TEXT 
*       TO ISSUE *ABUN* AND *ABIC* ACCOUNT MESSAGE, AND 
*       DETERMINE IF THERE IS AN IMPLIED MANDATORY
*       APPLICATION FROM THE *VALIDUS* FILE.  IF THERE
*ENDTEXT
*       IS AN IMPLIED MANDATORY APPLICATION, SET STATE OF TERMINAL TO 
*       AWAIT VALIDATE APPLICATION ACCESS.  OTHERWISE, CALL *NVFTILP* TO
*       ISSUE APPLICATION PROMPT.  ON AN INTIAL LOGIN IF THE USER IS
*       NOT ALLOWED MULTIPLE CONCURRENT LOGINS, CREATE AN ENTRY IN THE
*       *RML* TABLE INORDER TO RESTRICT THE USER. 
# 
  
# 
****  PROC NVFTPSV - XREF LIST. 
# 
  
      XREF
        BEGIN 
        PROC NVFTDAD;        # DETERMINE ADDITIONAL DIALOGUE           #
        PROC NVFTDSP;        # DETERMINE SWITCH POSSIBILITY            #
        PROC NVFTIAM;        # ISSUE ACCOUNTING MESSAGE                #
        PROC NVFTILP;        # ISSUE LOGIN PROMPT                      #
        PROC NVFUMQE;        # MAKE QUEUE ENTRY                        #
        PROC SSTAQE;         # ACCEPT QUEUE ENTRY                      #
        PROC SSTETS;         # ENLARGE TABLE SPACE                     #
        END 
  
# 
****
# 
      DEF  LENGTH$ #10#;     # NUMBER OF CHARACTERS IN CLRSCRN ARRAY   #
  
      ITEM BPOS       I;     # BIT POSITN WITHIN WORD (COMPASS NOTATN) #
      ITEM COUNT      I;     # COUNT OF THE NUMBER OF 1'S BITS         #
      ITEM I          I;     # LOOP VARIABLE                           #
      ITEM INUSERV    B;     # INITIAL USER VALIDATIONS FLAG           #
      ITEM MATCH      B;     # EXIT LOOP VARIABLE                      #
      ITEM NENTRY     I;     # NUMBER OF ENTRIES IN TABLE              #
      ITEM PT         I;     # SUBSCRIPT FOR ARRAY PTAC                #
      ITEM RM         I;     # SUBSCRIPT FOR ARRAY RML                 #
  
# 
*     CLRSCRN - A "MESSAGE" SENT TO THE TERMINAL TO CLEAR THE SCREEN. 
# 
      ARRAY CLRSCRN [00:00] S(1); 
        BEGIN 
        ITEM CLRWORD  C(00,00,01) = ["1"];
        ITEM CLRZERO  U(00,06,54) = [0];
        END 
  
  
  
      IF PTA$PROMPT[PT] EQ AWTAPP$
      THEN                             # SUCCESSFUL APPL VALIDATION    #
        BEGIN 
        PTA$APPLCT[PT] = 0;            # CLEAR APPLICATION RETRY COUNT #
        PTA$AFF[PT]    = FALSE;        # CLEAR APPLICATION FAILED FLAG #
        NVFTDSP(PT,0);                 # DETERMINE SWITCH POSSIBILITY  #
        END 
      ELSE                             # SUCCESSFUL USER VALIDATION    #
        BEGIN 
        PTA$USERCT[PT] = 0;            # CLEAR USER RETRY COUNT        #
        INUSERV = PTA$IUVF[PT]; 
        IF INUSERV
        THEN                           # INITIAL USER VALIDATION       #
          BEGIN 
          PTA$CNTIME[PT] = CTM$PDT[0];  # SAVE CONNECTION TIME         #
          NVFTIAM(PT,ABUN$);           # ISSUE *ABUN* ACCOUNTING MSG   #
          IF PTA$CHGNUM[PT] NQ NULL$   #  CHARGE NUMBER EXISTS         #
          THEN
            BEGIN 
            NVFTIAM(PT,ABIC$);         # ISSUE *ABIC* MESSAGE          #
            END 
          IF PTA$PID[PT] NQ NULL$      #  PERSONAL IDENTIFIER EXISTS   #
          THEN
            BEGIN 
            NVFTIAM(PT,SIPI$);         # ISSUE *SIPI* MESSAGE          #
            END 
          PTA$IUVF[PT] = FALSE; 
          END 
  
# 
*       IF MULTIPLE CONCURRENT LOGINS ARE PROHIBITED, CHECK THE *RML* 
*       TABLE FOR A DUPLICATE USER. IF A DUPLICATE IS FOUND CALL
*       *NVFTDAD* AND END THE CONNECTION.  IF NO DUPLICATE, CREATE A
*       TABLE ENTRY IN THE *RML* TABLE TO RESTRICT THE USER.
# 
        IF INUSERV AND (NOT PTA$CACA[PT]) 
        THEN
          BEGIN                        # INTIAL LOGIN, RESTRICTED USER #
          FOR I = 0 STEP 1 UNTIL (RMLLNGTH - 1) 
          DO
            BEGIN 
            IF (RML$UIDX[I] EQ PTA$UIDX[PT]) AND
               (RML$FNAM[I] EQ PTA$FNAM[PT])
            THEN
              BEGIN                    # MULTIPLE CONCURRENT LOGINS    #
              NVFTDAD(PT,ECCANA$);     # ISSUE ERROR AND END CONNECT   #
              RETURN; 
  
              END 
            END 
          RM = RMLLNGTH;               # CREATE NEW *RML* TABLE ENTRY  #
          SSTETS (P<RML>,RM,RMLSIZ$); 
          RML$UIDX[RM] = PTA$UIDX[PT];
          RML$FNAM[RM] = PTA$FNAM[PT];
          END 
# 
*       SEARCH APPLICATION BITS FIELD OF *AAWC* TO DETERMINE IF A 
*       MANDATORY APPLICATION IS SPECIFIED IN THE *VALIDUS* FILE FOR
*       THIS USER (ONLY ONE BIT SET). 
# 
        COUNT = 0;
        FOR I = 12 STEP 1 WHILE (COUNT LS 2 AND I LQ 59)
        DO
          BEGIN 
          IF B<I,1>PTA$AAVW[PT] EQ 1
          THEN
            BEGIN 
            COUNT = COUNT + 1;         # INCREMENT NUMBER OF 1'S       #
            BPOS  = 59 - I;            # BIT POSITION WITHIN WORD(CMP) #
            END 
          END 
  
        IF COUNT EQ 1 
        THEN                           # MANDATORY APPL IN VALIDUS     #
          BEGIN 
# 
*         IMPLIED MANDATORY APPLICATION IS SPECIFIED IN THE *VALIDUS* 
*         FILE.  HAVE TO FURTHER CHECK IF BIT IS UNIQUE TO THIS 
*         APPLICATION.  IF BIT IS NOT UNIQUE, APPLICATION IS NOT
*         CONSIDERED A MANDATORY APPLICATION. 
# 
          MATCH   = FALSE;
          NENTRY  = ASTLNGTH / ASTSIZ$; 
          FOR I = 0 STEP 1 WHILE (NOT MATCH AND I LS NENTRY)
          DO
            BEGIN 
            IF AST$AWBP[I] EQ BPOS
            THEN                       # FOUND APPLICATION             #
              BEGIN 
              IF NOT AST$BNUF[I]
              THEN                     # APPLICATION BIT IS UNIQUE     #
                BEGIN 
                PTA$VDSAPP[  PT] = AST$ANAM[I];  # SAVE APPL NAME      #
                PTA$VDSF[  PT]   = TRUE;      # SET VALIDUS APPL FLAG  #
                END 
              MATCH = TRUE;            # SET EXIT LOOP CONDITION       #
              END 
            END 
          END 
  
# 
*       FOR BOTH INITIAL AND NON-INITIAL USER VALIDATION, DETERMINE IF
*       USER NEEDS TO BE PROMPTED FOR AN APPLICATION NAME.  NO PROMPT 
*       IS REQUIRED IF THERE IS AN IMPLIED MANDATORY APPLICATION NAME 
*       OR IF USER HAS ALREADY SUPPLIED THE APPLICATION NAME. 
# 
        PTA$PROMPT[PT] = AWTAPP$; 
        IF ((PTA$VAF[PT]) AND (PTA$APPIND[PT] NQ PRIMARY$)) 
          OR (PTA$VDSF[PT]) 
        THEN                           # NO APPLICATION PROMPT         #
          BEGIN 
          PTA$STATE[PT] = PTACST"AWTVAA";  # AWAIT VALIDAT APPL ACCESS #
          END 
        ELSE                           # APPLICATION PROMPT REQUIRED   #
          BEGIN 
          NVFTILP(PT);                 # ISSUE APPLICATION PROMPT      #
          END 
        END 
  
      END  # END NVFTPSV #
  
TERM
