*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