*DECK     NVFTILP 
USETEXT TEXTNVF 
USETEXT TEXTSS
USETEXT TXTANVF 
USETEXT TXTAPSS 
  
PROC NVFTILP((PT)); 
# TITLE NVFTILP - ISSUE LOGIN PROMPTS                                  #
  
      BEGIN  # NVFTILP #
# 
**    NVFTILP - ISSUE LOGIN PROMPTS.
* 
*     E. THAVIKULWAT    81/09/02
* 
*     THIS PROCEDURE'S MAIN FUNCTION IS TO DETERMINE THE APPROPRIATE
*     LOGIN PROMPT TO ISSUE TO THE TERMINAL.  IT IS CALLED INTO 
*     EXECUTION BY THE FOLLOWING PROCEDURES:  
*       *NVFTBRK*   *NVFTDSP*   *NVFTETI*   *NVFTITE*   *NVFTPSV* 
*       *NVFTPUV*   *NVFTRCN*   *NVFTRVD*   *NVFTTCD*   *NVFTVAA* 
*       *NVFTVVD* 
* 
*     PROC NVFTILP((PT))
* 
*     ENTRY:  
*       PT  = POINTER TO PTAC ENTRY.
*       PTA$PROMPT FIELD OF PTAC ENTRY CONTAINS THE PROMPT TO ISSUE.
* 
*     EXIT: 
*       APPROPRIATE PROMPT ISSUED TO TERMINAL.
* 
*     METHOD: 
*       FAMILY   - IF FAMILY AND USER ARE BOTH MANDATORY, PROCEED TO
*                  VALIDATE THE USER. 
*                  IF ONLY FAMILY IS MANDATORY, THEN ISSUE USER PROMPT
*                  INSTEAD. 
*                  IF FAMILY IS NOT MANDATORY, ISSUE FAMILY PROMPT. 
* 
*       USER     - IF USER IS MANDATORY, PROCEED TO VALIDATE THE USER.
*                  IF USER IS NOT MANDATORY, ISSUE USER PROMPT. 
* 
*       PASSWORD - TERMINAL WOULD BE SET TO AWAITING PASSWORD PROMPT
*                  ONLY IF: 
*                    1) USER NAME WAS ENTERED IN RESPOND TO A USER
*                       PROMPT. 
*                    2) USER NAME WAS ENTERED IN AN ABBREVIATED FORMAT
*                       FOLLOWING A FAMILY PROMPT.
*                  FOR CASE 1, PROCEED TO ISSUE PASSWORD PROMPT.
*                  FOR CASE 2, IF AUTOLOGIN TYPE FOR USER IS DEFAULT
*                  AND "NULL" VALUE ENTERED OR USER TYPE IS MANDATORY,
*                  PROCEED TO VALIDATE THE USER.  OTHERWISE, ISSUE
*                  PASSWORD PROMPT. 
* 
*       PID      - THE TERMINAL WOULD BE SET TO AWAITING PERSONAL ID
*                  PROMPT ONLY IF THE FAMILY AND USER HAVE SUCCESSFULLY 
*                  BEEN VALIDATED, THE USER IS REQUIRED TO ENTER A
*                  PERSONAL ID, AND THE PERSONAL ID HAS NOT PREVIOUSLY
*                  BEEN ENTERED.  IF THE USER IS REQUIRED TO ENTER THE
*                  PID, IT WILL BE REQUESTED EVEN IF THE PASSWORD IS IN 
*                  ERROR. 
* 
*       APPL     - IF APPLICATION IS MANDATORY, SET STATE OF TERMINAL 
*                  TO AWAIT VALIDATE APPLICATION ACCESS.
*                  IF APPLICATION IS PRIMARY, CHANGE APPLICATION TO TYPE
*                  DEFAULT SO THAT SUBSEQUENT ATTEMPTS WILL ALWAYS
*                  SOLICITE APPLICATION PROMPT AND SET STATE OF TERMINAL
*                  TO AWAIT VALIDATE APPLICATION ACCESS.
# 
  
# 
****  PROC NVFTILP - XREF LIST. 
# 
  
      XREF
        BEGIN 
        PROC NVFTPVR;        # PREPARE VALIDATE USER REQUEST           #
        PROC NVFUMQE;        # TRANSFER SM OR TEXT TO QUEUE            #
        PROC SSBSBF;         # STORE BITFIELD IN TABLE                 #
        PROC SSCATR;         # ACCEPT TIMER REQUEST                    #
        PROC SSTAQE;         # ACCEPT QUEUE ENTRY                      #
        END 
  
# 
****
# 
      DEF  DTIME$   #120#;   # DELAY TIME IN SECONDS FOR A RESPONSE    #
      DEF  EPOFF$   #X"45503D4E"#;     # HEX CODE FOR "EP=N"           #
      DEF  TRBSIZ$  #4#;     # NUMBER OF WORDS IN TIMER REQUEST BLOCK  #
  
*CALL TMSGNVF 
  
      ITEM EPWD       I;     # CTRL/DEF ECHOPLEX WORD POSITION         #
      ITEM EPBIT      I;     # CTRL/DEF ECHOPLEX BIT POSITION          #
      ITEM LNGTH      I;     # LENGTH OF MESSAGE                       #
      ITEM PSUB       I;     # SUBSCRIPT FOR GOTO SWITCH               #
      ITEM PT         I;     # SUBSCRIPT FOR ARRAY PTAC                #
      ITEM PTIND      I;     # AUTOLOGIN TYPE INDICATOR VARIABLE       #
      ITEM PTPRMT     I;     # PROMPT INDICATOR VARIABLE               #
      ITEM PTTC       I;     # TERMINAL CLASS VARIABLE                 #
  
# 
**    TRBBUF - TIMER  REQUEST BUFFER. 
* 
*     BUFFER CONTAINING TIMER INFORMATION.  BUFFER IS SET UP TO CONTAIN 
*     FC/INACT SM WHICH IS TO BE RETURNED TO *TAINPQ* QUEUE SHOULD THE
*     TIMER EXPIRE. 
# 
      ARRAY TRBBUF[00:00] S(TRBSIZ$); 
        BEGIN 
        ITEM TRB$SMID   S:CTQSTAT(00,00,12) = [S"SINA"];  # INTERNAL ID#
        ITEM TRB$WC     U(00,48,12) = [TRBSIZ$];  # ENTRY-SIZE         #
        ITEM TRB$ABT    U(01,00,06) = [APPCMD];  # APPL BLOCK TYPE     #
        ITEM TRB$CNUM   U(01,18,18);   # CANCELLATION NUMBER           #
        ITEM TRB$PFCSFC U(02,00,16) = [FCINA];  # FC/INACT PFCSFC      #
        ITEM TRB$ACN    U(02,24,12);   # APPLICATION CONNECTION NUMBER #
        ITEM TRB$DELAY  U(03,24,18) = [DTIME$];  # DELAY TIME IN SEC   #
        ITEM TRB$QNUM   U(03,42,18);   # Q NUM FOR TIMER EXPIRED MSG   #
        END 
  
# 
*     THE FOLLOWING BASED ARRAY IS FOR GENERAL PURPOSE USAGE
# 
      BASED ARRAY BPGEN[00:00] S(1);
        BEGIN 
        ITEM BPG$WORD   U(00,00,60);   # FULL WORD REFERENCE           #
        END 
  
      SWITCH PRMTSWT
                 LLAPPL,     # LABEL FOR APPLICATION PROMPT            #
                 LLPRID,     # LABEL FOR PERSONAL IDENTIFIER PROMPT    #
                 LLPWRD,     # LABEL FOR PASSWORD PROMPT               #
                 LLUSER,     # LABEL FOR USER PROMPT                   #
                 LLFAM;      # LABEL FOR FAMILY PROMPT                 #
  
      IF NOT PTA$ALIF[PT] 
      THEN                             # NO AUTOLOGIN DATA             #
        BEGIN 
        GOTO ENDPRMT;                  # ISSUE APPROPRIATE PROMPT      #
        END 
# 
*     CHECK FOR AUTOLOGIN DATA.  PASSWORD PROMPT IS NOT ISSUED IF USER
*     NAME WAS OBTAINED FROM THE *LCF* (I.E., USER IS MANDATORY OR USER 
*     IS DEFAULT AND "NULL" VALUE RECEIVED).
# 
      PSUB = PTA$PROMPT[PT] - 1;
      GOTO PRMTSWT[PSUB]; 
  
LLFAM:                                 # AWAITING FAMILY PROMPT        #
      PTIND = PTA$FAMIND[PT]; 
      IF (PTIND EQ MNDATRY$ OR PTIND EQ PRIMARY$) AND 
         (PTA$USRIND[PT] EQ MNDATRY$ OR PTA$USRIND[PT] EQ PRIMARY$) 
      THEN                   # PRIMARY/MANDATORY FAMILY AND USER,      #
        BEGIN                          #   PROCEED TO VALIDATE USER    #
        NVFTPVR(PT);                   # PREPARE VALIDATE USER REQUEST #
        RETURN;                        # EXIT                          #
        END 
  
      IF PTIND EQ MNDATRY$ OR 
         PTIND EQ PRIMARY$
      THEN                             # PRIMARY/MANDATORY FAMILY ONLY #
        BEGIN 
        PTA$PROMPT[PT] = AWTUSR$;      # CHANGE TO ISSUE USER PROMPT   #
        END 
  
      GOTO ENDPRMT;                    # ISSUE APPROPRIATE PROMPT      #
  
LLUSER:                                # AWAITING USER PROMPT          #
      IF PTA$USRIND[PT] EQ MNDATRY$ OR
         PTA$USRIND[PT] EQ PRIMARY$ 
      THEN                             # PRIMARY/MANDATORY USER,       #
        BEGIN                          #   PROCEED TO VALIDATE USER    #
        NVFTPVR(PT);                   # PREPARE VALIDATE USER REQUEST #
        RETURN;                        # EXIT                          #
        END 
  
      GOTO ENDPRMT;                    # ISSUE APPROPRIATE PROMPT      #
  
LLPWRD:                                # AWAITING PASSWORD PROMPT      #
      PTIND = PTA$USRIND[PT]; 
      IF (PTIND EQ MNDATRY$)
        OR ((PTIND EQ DEFAULT$) AND (PTA$VLTUSR[PT] EQ NULL$))
      THEN                   # MANDATORY/DEFAULT USER SPECIFIED IN THE #
        BEGIN                #   LCF, BUT USER ENTERED IN ABBRE FORMAT #
        NVFTPVR(PT);         # PREPARE VALIDATE USER REQUEST           #
        RETURN;              # EXIT                                    #
        END 
  
      GOTO ENDPRMT;          # ISSUE APPROPRIATE PROMPT                #
  
LLAPPL:                                # AWAITING APPLICATION PROMPT   #
      PTIND = PTA$APPIND[PT]; 
      IF (PTIND EQ MNDATRY$) OR (PTIND EQ PRIMARY$) 
      THEN                             # MANDATORY/PRIMARY APPLICATION #
        BEGIN 
        IF PTIND EQ PRIMARY$
        THEN                           # PRIMARY APPLICATION SPECIFIED #
          BEGIN                        # CHANGE TYPE TO DEFAULT SO     #
          PTA$APPIND[PT] = DEFAULT$;   #   THAT SUBSEQUENT ATTEMPTS    #
          END                          #   WILL SOLICITE APPL PROMPT   #
        PTA$STATE[PT] = PTACST"AWTVAA";  # SET TO AWAIT APPL ACCESS    #
        RETURN;                        # EXIT                          #
        END 
  
      GOTO ENDPRMT;                    # ISSUE APPROPRIATE PROMPT      #
  
LLPRID: 
ENDPRMT:                               # COMMON END PROCESSING         #
      PTPRMT = PTA$PROMPT[PT];
      ABHWORD[1] = 0; 
      LNGTH   = LMSG20$;               # PRESET LENGTH OF PROMPT       #
      IF PTPRMT NQ AWTPWD$
      THEN                             # FAMILY/USER/APPL PROMPT       #
        BEGIN 
        IF PTPRMT EQ AWTFAM$
        THEN                           # FAMILY PROMPT                 #
          BEGIN 
          P<BPGEN> = LOC(FAMBUF[0]);
          END 
        ELSE
          BEGIN 
          IF PTPRMT EQ AWTUSR$
          THEN                         # USER PROMPT                   #
            BEGIN 
             P<BPGEN> = LOC(USRBUF[0]); 
            END 
          ELSE                         # APPLICATION PROMPT            #
            BEGIN 
            IF PTPRMT EQ AWTPID$
            THEN
              BEGIN 
              P<BPGEN> = LOC(PIDBUF[0]);
              END 
            ELSE
              BEGIN 
              APP$TNAME = PTA$TN[PT]; 
              P<BPGEN>  = LOC(APPBUF[0]); 
              LNGTH     = LMSG30$;
              END 
            END 
          END 
        END 
      ELSE                             # PASSWORD PROMPT               #
        BEGIN 
        P<BPGEN> = LOC(PWRDBLK[0]); 
        PTTC     = PTA$TC[PT];
        IF (PTTC EQ TCM33$ OR PTTC EQ TC2741$ OR PTTC EQ TCT4014$)
        THEN                           # PASSWORD BLANKING REQUIRED    #
          BEGIN 
          LNGTH = LMSG90$;
          END 
        ABHCAN[1] = 1;                 # SET NON-ECHOED FLAG           #
        END 
# 
*     SEND PROMPT AND START NVF'S 2 MINUTE TIMER RUNNING. 
# 
      WCB$WORD[1] = LNGTH / 10 + 2; 
      ABHABT[1] = APPPTX$;
      ABHADR[1] = PTA$ACN[PT];
      ABHACT[1] = CT6DISPLAY; 
      ABHTLC[1] = LNGTH;
      IF PTPRMT GQ AWTPWD$    # IF PASSWORD HAS NOT BEEN RECIEVED,     #
      THEN                    #  KEEP CURSOR STAY ON THE SAME LINE IN  #
        BEGIN                 #   ORDER TO FACILITATE THE OVERMASKING  #
        ABHNCP[1] = 1;        #    OF THE LINE WITH THE PASSWORD.      #
        END 
  
      SSTAQE(P<CTQ>,WCBUF[1],ABH[1],BPGEN[0]);      # PROMPT TO QUEUE  #
  
      TRB$ACN  = PTA$ACN[PT];          # APPLICATION CONNECTION NUMBER #
      TRB$QNUM = LOC(P<TAINPQ>);       # RETURN TIMR EXP MSG TO TAINPQ #
      SSCATR(TRBBUF[0]);               # ISSUE TIMER REQUEST           #
      PTA$CNUM[PT]  = TRB$CNUM[0];     # SAVE CANCELLATION NUMBER      #
      PTA$STATE[PT] = PTACST"AWTRSP";  # SET TERM STATE TO AWAIT RSP   #
  
      END  # END NVFTILP #
  
TERM
