*DECK     NVFTCRN 
USETEXT          TEXTNVF
USETEXT          TEXTSS 
USETEXT          TXSMNVF
USETEXT          TXTANVF
USETEXT          TXTAPSS
  
PROC NVFTCRN((PT),RNAME); 
# TITLE NVFTCRN - CHECK FOR RESERVED APPLICATION NAME                  #
  
      BEGIN  # NVFTCRN #
# 
**    NVFTCRN - CHECK FOR RESERVED APPLICATION NAME.
* 
*     E. THAVIKULWAT    81/10/29
* 
*     THIS PROCEDURE CHECKS FOR VOLUNTEERED RESERVED APPLICATION NAMES
*     OF "HELLO", "LOGIN", "BYE", OR "LOGOUT".  IT IS CALLED INTO 
*     EXECUTION BY THE FOLLOWING PROCEDURES:  
*       *NVFTRVD*   *NVFTVAA* 
* 
*     PROC NVFTCRN((PT),RNAME)
* 
*     ENTRY:  
*       PT  =  POINTER TO PTAC ENTRY. 
* 
*     EXIT: 
*       RNAME = NORESNAM$  IF NOT A RESERVED APPLICATION NAME.
*             = LOGIN$     IF NAME IS "LOGIN" OR "HELLO". 
*             = LOGOUT$    IF NAME IS "LOGOUT" OR "BYE".
* 
*     NOTES:  
*       IN THE CASE WHERE THERE IS A MANDATORY OR PRIMARY APPLICATION 
*       SPECIFIED IN THE *LCF*, OR A IMPLIED MANDATORY APPLICATION
*       SPECIFIED IN THE *VALIDUS* FILE, AND A VOLUNTEERED RESERVED 
*       APPLICATION NAME IS ENTERED, THE VOLUNTEERED RESERVED 
*       APPLICATION NAME OVERRIDES THE *LCF* OR *VALIDUS* NAME. 
* 
*     METHOD: 
*       IF VOLUNTEERED APPLICATION NAME IS "HELLO" OR "LOGIN", ISSUE
*       *AEUN* ACCOUNT MESSAGE, DECREMENT FAMILY COUNT, 
*       SEND OUT BANNER AND SYSTEM HEADER, AND SET STATE OF 
*       TERMINAL TO AWAIT PROMPT.  ALSO, IF  MULTIPLE LOGINS ARE
*       PROHIBITED, REMOVE THE ENTRY FROM THE *RML* TABLE.  IF THE
*       VOLUNTEERED APPLICATION NAME IS EITHER "BYE" OR "LOGOUT", 
*       SEND THE LOGOUT MESSAGE AND CALL *NVFTETC* TO END THE TERMINAL
*       CONNECTION. 
*       IF THE VOLUNTEERED APPLICATION NAME IS ANY OF THE ABOVE MENTIONED 
*       RESERVED WORDS, SEND OUT A CTR/CHAR TO FORCE THE TERMINAL TO BE 
*       IN NON-TRANSPARENT MODE.
# 
  
# 
****  PROC NVFTCRN - XREF LIST. 
# 
  
      XREF
        BEGIN 
        PROC NVFTETC;        # END TERMINAL CONNECTION                 #
        PROC NVFTIAM;        # ISSUE ACCOUNTING MESSAGE                #
        PROC NVFTURL;        # UPDATE THE RESTRICT LOGIN TABLE         #
        PROC NVFUMQE;        # TRANSFER SM OR TEXT TO QUEUE            #
        END 
  
# 
****
# 
      DEF  RCULO$   #22#;    # USER LOGOUT REASON CODE                 #
  
*CALL TMSGNVF 
  
*CALL TERMCLS 
  
  
      ITEM ADDR       I;     # ADDRESSING INFORMATION FOR ABH          #
      ITEM I          I;     # LOOP VARIABLE                           #
      ITEM LNGTH      I;     # LENGTH OF MESSAGE                       #
      ITEM PT         I;     # SUBSCRIPT FOR ARRAY PTAC                #
      ITEM RNAME      I;     # RESERVED APPLICATION NAME INDICATOR     #
  
# 
*     FOLLOWING ARRAY DEFINES THE RESERVED APPLICATION NAMES. 
# 
      ARRAY RSVAPPL[00:03] S(1);
        BEGIN 
        ITEM RAP$NAME   C(00,00,07) = ["HELLO","LOGIN","BYE","LOGOUT"]; 
        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 
  
      RNAME = NORESNAM$;
# 
*     SEARCH RESERVED APPLICATION NAME TABLE FOR MATCH. 
# 
      FOR I = 0 STEP 1 WHILE
        (RNAME EQ NORESNAM$) AND (I LS 4) 
      DO
        BEGIN 
        IF (RAP$NAME[I] EQ PTA$VLTAPP[PT])
        THEN                           # RESERVED APPLICATION NAME     #
          BEGIN 
          RNAME = LOGIN$;              # INITIALIZE TO "LOGIN" FOUND   #
# 
*         IF A RESERVED APPLICATION NAME WAS SPECIFIED ON AN INITIAL
*         LOAN, RETURN.  A CR/RCN/A WILL BE SENT LATER. 
# 
          IF PTA$LRC[PT] EQ RCRC"LSA" 
          THEN
            BEGIN 
            RETURN; 
            END 
  
          ADDR = PTA$ACN[PT]; 
# 
*     CHECK TERMINAL CLASS TO SEE IF NVF SHOULD SEND A CTR/CHAR.
# 
      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:  
  
          IF (I LS 2) 
          THEN                         # NAME IS "HELLO" OR "LOGIN"    #
            BEGIN 
# 
*           ISSUE *AEUN* ACCOUNT MESSAGE, POINT BASE ARRAY TO OUTPUT
*           HALF OF *MSGBUF*, AND SET UP DECREMENT FAMILY COUNT 
*           REQUEST.
# 
            NVFTIAM(PT,AEUN$);         # ISSUE *AEUN* ACCOUNTING MSG   #
  
            P<CRQBUF> = LOC(MSGBUF[0]) + ((NMSGBUF$ + 1) / 2);
            CRQ$FCWORD[0] = 0;         # CLEAR CPM REQUEST BUFFER      #
            CRQ$FWORD[0]  = 0;
            CRQ$FC[0]     = CPM73B$;   # DECREMENT FAMILY COUNT        #
            CRQ$ACN[0]    = 0;
            CRQ$FNAM[0]   = PTA$FNAM[PT];  # FAMILY NAME               #
  
            LNGTH = CRQDSIZ$ * 10;     # LENGTH OF REQUEST             #
            NVFUMQE(P<CPMRQ>,CRQBUF[0],APPTTX$,0,LNGTH);  # REQ TO Q   #
            IF NOT PTA$CACA[PT] 
            THEN                       # MULT CONCURRENT LOGINS PROHIB #
              NVFTURL(PT);             # REMOVE ENTRY FROM *RML* TABLE #
# 
*           CLEAR APPROPRIATE FIELDS OF PTAC ENTRY TO REFLECT LOGIN 
*           STATE.
# 
            P<BPGEN> = LOC(PTA$FWORD[PT]);  # 1ST WRD OF VALIDATN DATA #
            FOR I = 0 STEP 1 UNTIL 9
            DO
              BEGIN 
              BPG$WORD[I] = 0;         # CLEAR VALIDATION DATA FIELDS  #
              END 
  
            P<BPGEN> = LOC(PTA$VDSAPP[PT]);  # 1ST WRD AFTER AUTO DATA #
            FOR I = 0 STEP 1 UNTIL 4
            DO
              BEGIN 
              BPG$WORD[I] = 0;         # CLEAR FIELDS AFTER AUTO DATA  #
              END 
  
            P<BPGEN> = LOC(PTA$PID[PT]);
            BPG$WORD[0] = 0;           # CLEAR THE PERSONAL ID FIELD   #
            BPG$WORD[1] = 0;
# 
*           SEND OUT BANNER AND SET STATE OF TERMINAL TO AWAIT PROMPT.
# 
            NVFUMQE(P<CTQ>,CPRBUF,APPTTX$,ADDR,LMSG90$);
            BAN$DATE[0] = CTM$DATE[0];
            BAN$TIME[0] = CTM$CLOCK[0]; 
            BAN$TNAM[0] = PTA$TN[PT]; 
            NVFUMQE(P<CTQ>,BANBUF,APPTTX$,ADDR,LMSG30$);
            NVFUMQE(P<CTQ>,SYSHDR,APPTTX$,ADDR,LMSG70$);
  
            PTA$PROMPT[PT] = AWTFAM$;  # SET TO AWAIT FAMILY           #
            PTA$STATE[PT] = PTACST"AWTPRMT";  # SET TO AWAIT PROMPT    #
            PTA$IUVF[PT] = TRUE;       # SET TO INITIAL VALIDATION     #
            END 
          ELSE                         # NAME IS "BYE" OR "LOGOUT"     #
            BEGIN 
# 
*           APPLICATION NAME IS "BYE" OR "LOGOUT", SEND LOGGED OUT
*           MESSAGE AND END TERMINAL CONNECTION.
# 
            RNAME = LOGOUT$;           # "BYE" OR "LOGOUT" FOUND       #
            PTA$RC[PT] = RCULO$;       # USER LOGOUT RC FOR CR/TRM SM  #
            NVFUMQE(P<CTQ>,LOMBUF,APPTTX$,ADDR,LMSG20$);  # TEXT TO Q  #
            NVFTETC(PT);               # END TERMINAL CONNECTION       #
            END 
          END 
        END 
  
      END  # END NVFTCRN #
  
TERM
