*DECK NVFTRVD USETEXT TEXTNVF USETEXT TEXTSS USETEXT TXTANVF USETEXT TXTAPSS USETEXT TXSMNVF PROC NVFTRVD; # TITLE NVFTRVD - RECEIVE VCB DATA # BEGIN # NVFTRVD # # ** NVFTRVD - RECEIVE VCB DATA. * * E. THAVIKULWAT 81/11/13 * C. BRION 82/04/11. 83/05/10. * * THIS PROCEDURE'S MAIN FUNCTION IS TO PROCESS VCB DATA AND DETERMIN * APPROPRIATE ACTIONS TO TAKE DEPENDING ON WHAT PROCESS REQUESTED TH * DATA. IT IS CALLED INTO EXECUTION BY PROCEDURE *NVFTDQE*. * * PROC NVFTRVD * * ENTRY: * VCB DATA IN *MSGBUF* * * EXIT: * ONE OF THE FOLLOWING: * 1) APPLICATION PROMPT REISSUED. * 2) CONNECTION SWITCHED TO APPROPRIATE APPLICATION. * 3) CONNECTION TERMINATED. * 4) A TIMER IS STARTED FOR NVF TO REATTEMPT TO SWITCH TO THE * APPROPRIATE APPLICATION. * * NOTES: * 1) IF THE RECONNECT PROCESS REQUESTED THE DATA BECAUSE OF AN * APPLICATION FAILURE, APPLICATION PROMPT IS NOT REISSUED IF * THE FAILED APPLICATION IS A MANDATORY/IMPLIED MANDATORY * APPLICATION. * 2) FOR A NORMAL RECONNECT, THE USER IS REVALIDATED, WITHOUT * INCREMENTING FAMILY COUNT, WHETHER OR NOT A NEW APPLICATION * IS SPECIFIED. * * METHOD: * CALL *NVFTURT* TO GET A *PTAC* ENTRY THAT MATCHES ON VCB AND * UPDATE *RAU* TABLE IF NEEDED. SAVE VCB DATA IN APPROPRIATE * FIELDS OF THE *PTAC* AND ISSUE *AEAP* ACCOUNT DAYFILE MESSAGE. * IF DEVICE IS A PASSIVE DEVICE OR VCB DATA WAS REQUESTED BY THE * CONNECTION BROKEN PROCESS, THEN TERMINATE THE CONNECTION. * OTHERWISE, DATA WAS REQUESTED BY THE RECONNECT PROCESS. IF THE * RECONNECT IS DUE TO APPLICATION FAILED CONDITION AND THE FAILED * APPLICATION IS A MANDATORY/IMPLIED MANDATORY APPLICATION, THEN * CHECK IF THIS IS A CONSOLE WITH ALL MANDATORY LOGIN PARAMETERS. * IF SO, START UP A 30-SECOND TIMER, AT THE END OF WHICH NVF WILL * REATTEMPT TO CONNECT TO THE FAILED APPLICATION. IF NOT, THEN * TERMINATE THE CONNECTION. IF THE RECONNECT IS NOT DUE TO THE * APPLICATION FAILED CONDITION, OR IF THE FAILED APPL IS NOT * MANDATORY OR IMPLIED MANDATORY, THEN REVALIDATE THE USER WITHOUT * INCREMENTING THE FAMILY COUNT. # # **** PROC NVFTRVD - XREF LIST. # XREF BEGIN PROC NVFSCAD; # COMPLETE APPLICATION DEPARTURE # PROC NVFTCCT; # CALCULATE CONNECT TIME # PROC NVFTCRN; # CHECK FOR RESERVED APPLICATION NAME # PROC NVFTETC; # END TERMINAL CONNECTION # PROC NVFTIAM; # ISSUE ACCOUNT DAYFILE MESSAGE # PROC NVFTILP; # ISSUE LOGIN PROMPT # PROC NVFTRLC; # REFUSE LOANED CONNECTION # PROC NVFTURT; # UPDATE *RAU* TABLE IF NEEDED # PROC NVFUMQE; # TRANSFER TEXT TO QUEUE # PROC SSCATR; # ACCEPT TIMER REQUEST # PROC SSTRTS; # REMOVE TABLE SPACE # FUNC XCDD; # MACREL CONVERT INTEGER TO DISPLAY DEC # END # **** # $BEGIN XREF BEGIN PROC MESSAGE; # SEND MESSAGE TO SYSTEM AND USER DAYFILE # END $END # **** # *CALL TMSGNVF *CALL TERMCLS # ** DAYMSG - TERMINAL CLASS CHANGED MESSAGE BUFFER # ARRAY DAYMSG[00:00] S(8); BEGIN ITEM DAY$MSG1 C(00,00,33) = ["INVALID TERMINAL CLASS TRANSITION"]; ITEM DAY$MSG2 C(03,18,10) = [" OLD TC = "]; ITEM DAY$OLDT U(04,18,18); # OLD TERMINAL CLASS # ITEM DAY$MSG3 C(04,36,10) = [" NEW TC = "]; ITEM DAY$NEWT U(05,36,18); # NEW TERMINAL CLASS # ITEM DAY$MSG4 C(05,54,12) = [" TERMNAME = "]; ITEM DAY$TNAM C(07,06,07); # TERMINAL NAME # ITEM DAY$DOT C(07,48,01) = ["."]; END # ** CABBUF - CONNECTION ABORTED MESSAGE BUFFER. # ARRAY CABBUF [00:00] S(3); BEGIN ITEM CAB$MSG C(00,00,21) = [".CONNECTION ABORTED. "]; END # ** TRBBUF - TIMER REQUEST BUFFER * * BUFFER CONTAINING TIMER INFORMATION. BUFFER IS SET UP TO CONTAIN * THE FC/INACT SM WHICH IS RETURNED TO THE *TAINPQ* WHEN THE TIMER * EXPIRES. # ARRAY TRBBUF [00:00] S(TMBSIZ$); BEGIN ITEM TRB$SMID S:CTQSTAT(00,00,12) = [S"SINA"]; #INTERNAL ID# ITEM TRB$WC U(00,48,12) = [TMBSIZ$]; # ENTRY SIZE # ITEM TRB$ABT U(01,00,06) = [APPCMD]; # APPL BLOCK TYPE # ITEM TRB$CNUM U(01,18,18); # CANCELLATION NUM # ITEM TRB$PFCSFC U(02,00,16) = [FCINA]; # FC/INACT PFCSFC # ITEM TRB$ACN U(02,24,12); # APPL CONN NUMBER # ITEM TRB$DELAY U(03,24,18) = [RTRYTIME$];# DELAY TIME IN SEC # ITEM TRB$QNUM U(03,42,18); # Q NUM FOR FC/INACT# END ITEM ADDR I; # ADDRESSING INFORMATION FOR ABH # ITEM AS I; # APPLICATION STATUS TABLE ORDINAL # ITEM ASENTRY I; # NUMBER OF AST ENTRIES # ITEM CNTIME C(10); # VARIABLE TO RECEIVE CONNECT TIME # ITEM CNTYP I; # CONNECTION TYPE INDICATOR # ITEM MATCH B; # EXIT LOOP VARIABLE # ITEM NENTRY I; # NUMBER OF ENTRIES IN TABLE # ITEM PORD I; # PRIMARY AST ENTRY ORDINAL # ITEM PRIAPP B; # PRIMARY APPLICATION INDICATOR # ITEM PT I; # SUBSCRIPT FOR ARRAY PTAC # ITEM RNAME I; # RESERVED NAME INDICATOR # ITEM SMOUT B; # SM OUTPUT TYPE FOR NVFTRLC CALL # ITEM VCBLOC I; # LOCAL VCB ORDINAL # CONTROL EJECT; # * DETERMINE NUMBER OF AST ENTRIES # ASENTRY = ASTLNGTH/ASTSIZ$; # * CALL *NVFTURT* TO FIND THE *PTAC* ENTRY AND UPDATE *RAU* TABLE IF * NEEDED. SAVE VCB DATA THAT APPLIES TO BOTH PASSIVE AND INTERACTIV * DEVICE IN THE *PTAC*. # P = LOC(MSGBUF[0]); # LOCATION OF VCB DATA BUFFER # # * SEARCH PTAC TABLE FOR ENTRY THAT MATCHES ON VCB. # MATCH = FALSE; NENTRY = PTALNGTH / PTACSIZ$; # CALCULATE NUMBER OF ENTRIES # FOR PT = 0 STEP 1 WHILE (NOT MATCH AND PT LS NENTRY) DO BEGIN IF PTA$VCB[PT] EQ VCB$VCB[0] THEN # PTAC ENTRY FOUND # BEGIN MATCH = TRUE; # EXIT LOOP # END END PT = PT - 1; PTA$TN[PT] = VCB$TN[0]; PTA$HW[PT] = VCB$HW[0]; PTA$VTP[PT] = VCB$VTP[0]; PTA$CACA[PT] = VCB$CACA[0]; PTA$ICF[PT] = VCB$ICF[0]; PTA$RCNA[PT] = VCB$RCNA[0]; PTA$NET[PT] = VCB$NET[0]; PTA$LCF[PT] = VCB$LCF[0]; PTA$ALIF[PT] = VCB$ALIF[0]; PTA$SDT[PT] = VCB$SDT[0]; PTA$DO[PT] = VCB$DO[0]; PTA$XBZ[PT] = VCB$XBZ[0]; PTA$SL[PT] = VCB$SL[0]; PTA$DBZ[PT] = VCB$DBZ[0]; PTA$UBZ[PT] = VCB$UBZ[0]; PTA$CNTIME[PT] = VCB$CNTIME[0]; PTA$SWTIME[PT] = VCB$SWTIME[0]; PTA$FWORD[PT] = VCB$FWORD[0]; PTA$UWORD[PT] = VCB$UWORD[0]; PTA$PROMPT[PT] = AWTAPP$; # * IF VCB DATA WAS REQUESTED BECAUSE OF CONNECTION BROKEN, USE * THE ORIGINAL TERMINAL CLASS FROM VCB TO AVOID THE SEARCH FOR * PDCT ENTRY IN CASE THE TERMINAL CLASS HAS BEEN CHANGED * ERRONEOUSLY FROM AN ASYN TYPE TO A SYNCHRONOUS ONE. # IF PTA$STATE[PT] EQ PTACST"AWTVCBC" THEN PTA$TC[PT] = VCB$TC[0]; # * IF VCB DATA WAS REQUESTED BECAUSE OF CR/RCN, COMPARE THE * ORGINAL TERMINAL CLASS WITH THE ONE FROM CR/RCN SM. IF * TC IS CHANGED FROM ASYNC TO SYNC, SEND OUT THE MESSAGE * AND END TERMINAL CONNECTION. # IF PTA$STATE[PT] EQ PTACST"AWTVCBR" AND PTA$TC[PT] GQ TC9$ AND VCB$TC[0] LS TC9$ THEN BEGIN $BEGIN DAY$OLDT[0] = XCDD(VCB$TC[0]+1000); DAY$NEWT[0] = XCDD(PTA$TC[PT]+1000); DAY$TNAM[0] = PTA$TN[PT]; MESSAGE(DAYMSG,0); $END PTA$TC[PT] = VCB$TC[0]; NVFTETC(PT); RETURN; END # * IF THE PRIMARY APPL NUMBER IN THE *PTAC* IS ZERO, THEN MOVE THE * PRIMARY APPL NUMBER FROM THE *VCB* TO THE *PTAC*. (IF PTA$PRIAN * IS NON-ZERO, IT MAY HAVE JUST BEEN SET, AND WE DON'T WANT TO * OVERWRITE IT.) # IF PTA$PRIAN[PT] EQ 0 THEN BEGIN PTA$PRIAN[PT] = VCB$PRIAN[0]; END # * ISSUE *AEAP* ACCOUNT DAYFILE MESSAGE. # NVFTIAM(PT,AEAP$); # * IF THIS CR/RCN IS NOT THE RESULT OF A PREVIOUS CR/RCN/A BEING * SENT, THEN THE NUMBER OF T-A CONNECTIONS FOR THE APPLICATION TO * WHICH THIS TERMINAL WAS CONNECTED MUST BE DECREMENTED. IF THE * NUMBER OF CONNECTIONS TO THAT APPLICATION IS NOW ZERO AND THAT * APPLICATION HAS FAILED OR NETTED OFF, THE APPROPRIATE RESPONSE * SM (FAIL/APPL/N OR NET/OFF/N) MUST BE ISSUED. # IF NOT PTA$RCNA[PT] THEN BEGIN PRIAPP = FALSE; NVFTURT(VCB$VCB[0],PT,PRIAPP); # UPDATE *RAU* TABLE # FOR AS = 0 STEP 1 WHILE (AS LS ASENTRY AND AST$PANAM[AS] NQ PTA$SWTAPP[PT]) DO BEGIN END AST$TACN[AS] = AST$TACN[AS] - 1; AST$ICCN[AS] = AST$ICCN[AS] - 1; NVFSCAD(AS); # * IF THIS IS AN INITIAL LOAN AND THE CONNECTION HAS NOT BEEN BROKEN, * INCREMENT THE NUMBER OF RESERVED CONNECTIONS FOR THIS APPL. # IF (PTA$LRC[PT] EQ RCRC"LSA") AND (PTA$STATE[PT] NQ PTACST"AWTVCBC") THEN BEGIN AST$RACN[AS] = AST$RACN[AS] + 1; END END # * CLEAR THE CR/RCN/A FLAG IN THE PTAC. THIS FLAG HELPS NVF TO * DISTINGUISH BETWEEN A NORMAL CR/RCN AND A CR/RCN THAT IS THE * RESULT OF NVF SENDING A CR/RCN/A TO NIP. # PTA$RCNA[PT] = FALSE; # * DETERMINE PROCESS (CONNECTION BROKEN OR RECONNECT) THAT REQUESTED * THE DATA. # IF ((PTA$DT[PT] NQ DT$CONS) AND (PTA$DT[PT] NQ DT$USER)) OR (PTA$STATE[PT] EQ PTACST"AWTVCBC") THEN # PASSIVE DEVICE OR CONNECTION BROKEN # BEGIN # * CHECK IF CONNECTION THAT WAS LOANED. * IF SO, THEN THE CONNECTION COUNT FOR THE PRIMARY APPL MUST * BE DECREMENTED. # IF PTA$LCF[PT] # IF LOAN CONNECTION # THEN BEGIN PRIAPP = TRUE; NVFTURT(VCB$VCB[0],PT,PRIAPP); # UPDATE *RAU* TABLE # FOR AS = 0 STEP 1 WHILE ((AS LS ASENTRY) AND (AST$AN[AS] NQ PTA$PRIAN[PT])) DO BEGIN END IF AS LS ASENTRY THEN BEGIN AST$RACN[AS] = AST$RACN[AS] - 1; PTA$LCF[PT] = FALSE; # CLEAR THE LCF FLAG # NVFSCAD(AS); END END # * CONNECTION BROKEN AND/OR PASSIVE DEVICE, TERMINATE THE * CONNECTION. # NVFTETC(PT); END ELSE # RECONNECT FOR INTERACTIVE DEVICE # BEGIN ADDR = PTA$ACN[PT]; VCBLOC = PTA$VCB[PT]; # * DATA REQUESTED BY THE RECONNECT PROCESS. SAVE VCB DATA THAT * APPLIES TO INTERACTIVE DEVICES IN THE *PTAC*. # PTA$ALIFAM[PT] = VCB$ALIFAM[0]; PTA$FAMIND[PT] = VCB$FAMIND[0]; PTA$ALIUSR[PT] = VCB$ALIUSR[0]; PTA$USRIND[PT] = VCB$USRIND[0]; PTA$ALIAPP[PT] = VCB$ALIAPP[0]; PTA$APPIND[PT] = VCB$APPIND[0]; # * SETUP APPLICATION CONNECT TIME MESSAGE. # CTM$ANAME[0] = PTA$SWTAPP[PT]; # APPLICATION NAME # CNTYP =TATIME$; NVFTCCT(PT,1,CNTIME,CNTYP); # CALC CONNECT TIME # CTM$TIME[0] = CNTIME; # SAVE CONNECT TIME # # * DETERMINE IF RECONNECT IS DUE TO APPLICATION FAILED CONDITION. * ON A NON-LOANED TYPE OF RECONNECTION. # IF PTA$AFF[PT] THEN # APPL FAILED WITH OUTSTANDING CONN # BEGIN # * APPLICATION FAILED. SEND "APPLICATION FAILED" MESSAGE. # NVFUMQE(P,APFBUF[0],APPTTX$,ADDR,LMSG30$); # * 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,APSM[1],APPPR$,ADDR,LCTRLO$); # TRANSFER TO Q# NOCTRCHAR: # * IF FAILED APPLICATION IS MANDATORY/IMPLIED MANDATORY, * TERMINATE THE CONNECTION. OTHERWISE, PROCEED TO REVALIDATE * THE USER AND ISSUE APPLICATION PROMPT. # IF (((PTA$APPIND[PT] EQ MNDATRY$) OR (VCB$VDSF[0])) AND PTA$LRC[PT] LS RCRC"LSA") THEN # MANDATORY/IMPLIED MANDATORY APPL FAILED # BEGIN # * SEND "CONNECT TIME" MESSAGE. # NVFUMQE(P,CTMEBUF[0],APPTTX$,ADDR,LMSG40$); # * IF THIS IS A CONSOLE DEVICE TYPE WITH ALL MANDATORY LOGIN * PARAMETERS, START A 30 SECOND TIMER SO THAT NVF CAN TRY TO * RECONNECT THE CONSOLE TO THE DESIRED APPLICATION. # IF (PTA$DT[PT] EQ DT$CONS) AND (PTA$FAMIND[PT] EQ MNDATRY$) AND (PTA$USRIND[PT] EQ MNDATRY$) AND (PTA$APPIND[PT] EQ MNDATRY$) THEN BEGIN TRB$ACN[0] = PTA$ACN[PT]; TRB$QNUM[0] = LOC(P); SSCATR(TRBBUF[0]); PTA$CNUM[PT] = TRB$CNUM[0]; PTA$STATE[PT] = PTACST"AWTAPPL"; END # * IF NON-CONSOLE OR NON-MANDATORY LOGIN PARAMETERS, SEND THE * LOGGED OUT MESSAGE AND END TERMINAL CONNECTION. # ELSE BEGIN NVFUMQE(P,LOMBUF[0],APPTTX$,ADDR,LMSG20$); NVFTETC(PT); # END TERMINAL CONNECTION # END RETURN; # EXIT # END END # * CHECK STATE OF PTAC. IF DUE TO LOANED REQUEST TYPE OF * RECONNECT, CHECK THE DIFFERENT REASON CODES TO DETERMINE * NEXT ACTION. # IF PTA$STATE[PT] EQ PTACST"AWTVCBL" THEN BEGIN PTA$LCF[PT] = TRUE; # SET LCF FIRST # # * IF THE PRIMARY APPL FAILED OR THE SECONDARY APPL ABORTED THE * CONNECTION, CLEAR THE LOAN CONNECTION FIELD IN THE PTAC, SINCE * THIS IS NO LONGER A LOANED CONNECTION. CLEAR THE VOLUNTEERED * APPL FLAG SO THE APPLICATION PROMPT WILL BE SENT. SEND EITHER * THE "CONNECTION ABORTED" OR "APPLICATION FAILED" MESSAGE. # IF (PTA$LRC[PT] EQ RCRC"PAF") OR (PTA$LRC[PT] EQ RCRC"SAC") THEN BEGIN PTA$LRC[PT] = 0; PTA$LCF[PT] = FALSE; PTA$VAF[PT] = FALSE; IF PTA$LRC[PT] EQ RCRC"SAC" THEN BEGIN # * LOCATE THE PRIMARY AST ENTRY AND DECREMENT THE RESERVED * CONNECTION COUNT. UPDATE THE *RAU* TABLE, IF NEEDED. # PRIAPP = TRUE; NVFTURT(VCB$VCB[0],PT,PRIAPP); # UPDATE *RAU* TABLE # FOR AS = 0 STEP 1 WHILE (AS LS ASENTRY AND AST$AN[AS] NQ PTA$PRIAN[PT]) DO BEGIN END IF AS LS ASENTRY THEN BEGIN AST$RACN[AS] = AST$RACN[AS] - 1; NVFSCAD(AS); END NVFUMQE(P,CABBUF[0],APPTTX$,ADDR,LMSG30$); END ELSE BEGIN NVFUMQE(P,APFBUF[0],APPTTX$,ADDR,LMSG30$); END END # * IF SWITCHING BACK TO PRIMARY, BUT THE PRIMARY APPLICATION NAME * IS NOT SPECIFIED, THE PRIMARY APPL MUST HAVE FAILED. IN THIS * CASE, THE LOAN CONNECTION IS ENDED. DECREMENT THE NUMBER OF * RESERVED CONNECTIONS FOR THE PRIMARY APPL. UPDATE THE *RAU* * TABLE, IF NECESSARY. # IF (PTA$LRC[PT] GQ RCRC"UVS" AND PTA$LRC[PT] LQ RCRC"SLE") AND NOT PTA$VAF[PT] THEN BEGIN PTA$LRC[PT] = 0; PTA$LCF[PT] = FALSE; PRIAPP = TRUE; NVFTURT(VCB$VCB[0],PT,PRIAPP); FOR AS = 0 STEP 1 WHILE ((AS LS ASENTRY) AND (AST$AN[AS] NQ PTA$PRIAN[PT])) DO BEGIN END IF AS LS ASENTRY THEN BEGIN AST$RACN[AS] = AST$RACN[AS] - 1; NVFSCAD(AS); END END END # * NORMAL RECONNECT OR NON-MANDATORY APPLICATION FAILED. SEND * "CONNECT TIME" MESSAGE. DETERMINE IF NEW APPLICATION SPECIFIED. * IF NO NEW APPLICATION SPECIFIED AND THE PREVIOUS APPLICATION * IS A MANDATORY/IMPLIED MANDATORY APPLICATION, TERMINATE THE * CONNECTION. # IF PTA$LRC[PT] LS RCRC"LSA" THEN NVFUMQE(P,CTMEBUF[0],APPTTX$,ADDR,LMSG40$); IF PTA$VAF[PT] THEN BEGIN NVFTCRN(PT,RNAME); IF (RNAME NQ NORESNAM$) THEN BEGIN IF RNAME EQ LOGIN$ THEN BEGIN # * HAVE RESERVED APPLICATION NAME OF "HELLO" OR "LOGIN". * CHECK IF LOAN REQUEST TYPE OF CONNECTION IN WHICH CASE THE * RESERVED APPL NAMES ARE NOT ALLOWED. * SET UP TO ISSUE CR/RCN/A SM VIA CALL TO NVFTRLC. # IF PTA$LRC[PT] EQ RCRC"LSA" THEN BEGIN SMOUT = TRUE; PTA$LRC[PT] = RCRC"SNA"; NVFTRLC(PT,SMOUT,PTA$LRC[PT]); RETURN; END IF PTA$LRC[PT] LS RCRC"LSA" THEN BEGIN NVFTILP(PT); END END # * FOR ALL RESERVED APPLICATION NAMES, RETURN. IF THE APPLICATION * NAME WAS "BYE" OR "LOGOUT", NVF WILL HAVE ALREADY TERMINATED * THE CONNECTION. # RETURN; END END ELSE BEGIN # * NO NEW APPLICATION SPECIFIED. * IF A LOAN REQUEST TYPE OF RECONNECT, THEN INVALID RECONNECT * FROM PRIMARY TO SECONDARY APPLICATION. * SET UP TO ISSUE A CR/RCN/A SM VIA CALL TO NVFTRLC. # IF PTA$LRC[PT] EQ RCRC"LSA" THEN BEGIN SMOUT = TRUE; PTA$LRC[PT] = RCRC"SNA"; NVFTRLC(PT,SMOUT,PTA$LRC[PT]); RETURN; END ELSE BEGIN IF (PTA$APPIND[PT] EQ MNDATRY$) OR (VCB$VDSF[0]) THEN BEGIN NVFUMQE(P,LOMBUF[0],APPTTX$,ADDR,LMSG20$); NVFTETC(PT); RETURN; END END END # * WHETHER OR NOT NEW APPLICATION IS SPECIFIED, REVALIDATE THE USER * (CPM 56B REQUEST) WITHOUT INCREMENTING THE FAMILY COUNT. # P = LOC(MSGBUF[0]) + ((NMSGBUF$ + 1) / 2); CRQ$FCWORD[0] = 0; # CLEAR OUTPUT HALF OF *MSGBUF* # CRQ$FWORD[0] = 0; CRQ$PWORD[0] = 0; CRQ$UWORD[0] = 0; CRQ$FC[0] = CPM56B$; CRQ$ACN[0] = VCBLOC; CRQ$FNAM[0] = PTA$FNAM[PT]; CRQ$VPWF[0] = TRUE; CRQ$IFCTF[0] = FALSE; CRQ$UNUM[0] = PTA$UNUM[PT]; CRQ$QNUM[0] = LOC(P); NVFUMQE(P,CRQBUF[0],APPTTX$,0,LMSG40$); PTA$STATE[PT] = PTACST"AWTVAL"; # AWAIT VALIDATION STATE # PTA$PROMPT[PT] = AWTFAM$; # SET TO AWAIT FAMILY # PTA$USERCT[PT] = LLVAL; # FORCE LOGOUT IF UNSUCCESSFUL # PTA$PWEXPF[PT] = TRUE; # DO NOT REISSUE PW EXP MESSAGE # END END # END NVFTRVD # TERM