*DECK NVFTDAD
USETEXT TEXTNVF
USETEXT TXTANVF
USETEXT TXTAPSS
PROC NVFTDAD((PT),(EC));
# TITLE NVFTDAD - DETERMINE ADDITIONAL DIALOGUE POSSIBILITY #
BEGIN # NVFTDAD #
#
** NVFTDAD - DETERMINE ADDITIONAL DIALOGUE POSSIBILITY.
*
* E. THAVIKULWAT 81/11/11
* A. LIM 82/08/04
*
* THIS PROCEDURE'S MAIN FUNCTION IS TO ISSUE APPROPRIATE MESSAGE
* TO THE TERMINAL AND DETERMINE WHETHER TERMINAL SHOULD BE
* PROMPTED ANY FURTHER FOR A NEW APPLICATION. IT IS CALLED INTO
* EXECUTION BY THE FOLLOWING PROCEDURES:
* *NVFTDSP* *NVFTPSV* *NVFTRCN*
*
* PROC NVFTDAD((PT),(EC))
*
* ENTRY:
* PT = POINTER TO PTAC ENTRY
* EC = ERROR CODE
* 0 = APPLICATION BUSY
* 1 = APPLICATION HAS NETTED OFF WITH CONNECTIONS
* OUTSTANDING
* 2 = APPLICATION HAS FAILED WITH CONNECTIONS
* OUTSTANDING
* 3 = NIP REFUSED SWITCH
* 4 = APPLICATION TERMINATED CONNECTION
* 5 = APPLICATION REFUSED CONNECTION
* 6 = APPLICATION NOT AVAILABLE
* 7 = MULTIPLE CONCURRENT LOGINS ARE PROHIBITED
*
* EXIT:
* ERROR MESSAGE SENT TO TERMINAL.
*
* NOTES:
* NO APPLICATION PROMPT IS REISSUED IF MANDATORY OR IMPLIED
* MANDATORY SPECIFIED FOR THE TERMINAL OR USER RESPECTIVELY.
*
* IF EC = 7 (MULTIPLE CONCURRENT LOGINS PROHIBITED) THEN THE
* USER IS SENT AN INFORMATIVE MESSAGE AND THE CONNECTION
* IS TERMINATED.
*
* METHOD:
* SEND APPROPRIATE MESSAGE DEPENDING ON EC. IF CONSOLE DEVICE AND
* ALL MANDATORY LOGIN PARAMTERS WERE SPECIFIED, START A TIMER IN
* ORDER TO REATTEMPT TO SWITCH TO THE APPLICATION IN 30 SECONDS.
* IF NOT A CONSOLE DEVICE, AND IF A MANDATORY APPLICATION WAS
* SPECIFIED, CALL *NVFTETC* TO END THE CONNECTION. OTHERWISE,
* CLEAR APPROPRIATE FIELDS OF THE *PTAC* ENTRY AND SET TERMINAL
* STATE TO AWAIT PROMPT.
#
#
**** PROC NVFTDAD -XREF LIST.
#
XREF
BEGIN
PROC ABORT; # MACREL - ABORT TASK #
PROC MESSAGE; # MESSAGE - ISSUE MESSAGE #
PROC NVFTETC; # END TERMINAL CONNECTION #
PROC NVFUMQE; # TRANSFER TEXT TO QUEUE #
PROC SSCATR; # ACCEPT TIMER REQUEST #
END
#
****
#
*CALL TMSGNVF
*CALL TERMCLS
ITEM ADDR I; # ADDRESSING INFORMATION FOR ABH #
ITEM EC I; # ERROR CODE #
ITEM LNGTH I; # LENGTH OF MESSAGE #
ITEM PT I; # SUBSCRIPT FOR ARRAY PTAC #
#
* 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
#
* 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
$BEGIN
#
* ILGRC - ILLEGAL REASON CODE FROM CR/CRN.
#
ARRAY ILGRC[00:00] S(4);
BEGIN
ITEM ILG$MSG C(00,00,34) =
[" NVFTDAD - INVALID RC FROM CR/RCN."];
ITEM ILG$ZERO U(03,24,36) = [0];
END
$END
SWITCH ERRSWT
LLABSY, # APPLICATION BUSY #
LLANP, # APPLICATION NOT PRESENT #
LLAPF, # APPLICATION FAILED #
LLARC, # APPLICATION REFUSED CONNECTION #
LLATC, # APPLICATION TERMINATED CONNECTION #
LLARC, # APPLICATION REFUSED CONNECTION #
LLANP, # APPLICATION NOT PRESENT #
LLCAP; # MULTIPLE CONCURRENT LOGINS PROHIBITED #
GOTO ERRSWT[EC];
LLATC: # APPLICATION TERMINATED CONNECTION #
$BEGIN
MESSAGE(ILGRC[0], 0);
ABORT;
$END
GOTO LLEND;
LLARC: # APPLICATION REFUSED CONN #
IF (PTA$APPIND[PT] EQ MNDATRY$)
OR (PTA$VDSF[PT])
THEN # MANDATORY/IMPLIED MANDATORY APPLICATION #
BEGIN
P<BPGEN> = LOC(UANPBUF[0]); # USER ACCESS NOT POSSIBLE MSG #
LNGTH = LMSG60$; # LENGTH OF MESSAGE #
END
ELSE # NO MANDATORY/IMPLIED MANDATORY APPL #
BEGIN
P<BPGEN> = LOC(IAMBUF[0]); # ILLEGAL APPLICATION MESSAGE #
LNGTH = LMSG40$; # LENGTH OF MESSAGE #
END
GOTO ENDERR;
LLANP: # APPLICATION NOT NETTED ON #
P<BPGEN> = LOC(ANPBUF[0]); # APPLICATION NOT PRESENT MSG #
LNGTH = LMSG30$; # LENGTH OF MESSAGE #
GOTO ENDERR;
LLAPF: # APPLICATION FAILED #
P<BPGEN> = LOC(APFBUF[0]); # APPLICATION FAILED MESSAGE #
LNGTH = LMSG30$; # LENGTH OF MESSAGE #
GOTO ENDERR;
LLABSY: # DUP USER OR NO AVAIL CONN NUM #
P<BPGEN> = LOC(ABSYBUF[0]); # APPLICATION BUSY MESSAGE #
LNGTH = LMSG40$; # LENGTH OF MESSAGE #
GOTO ENDERR;
LLCAP:
P<BPGEN> = LOC(CANABUF[0]); # CONCURRENT LOGINS PROHIBITED #
LNGTH = LMSG50$;
ADDR = PTA$ACN[PT];
NVFUMQE(P<CTQ>,BPGEN[0],APPTTX$,ADDR,LNGTH);
PTA$CACA[PT] = TRUE; # DON'T SEARCH *RML* TABLE #
NVFTETC(PT);
GOTO LLEND;
ENDERR: # COMMON END PROCESSING #
#
* SEND MESSAGE THAT WAS SET UP PREVIOUSLY TO THE TERMINAL.
#
ADDR = PTA$ACN[PT];
NVFUMQE(P<CTQ>,BPGEN[0],APPTTX$,ADDR,LNGTH); # MESSAGE TO QUEUE #
#
* 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 OR PTA$DT[PT] EQ DT$CLP) 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<TAINPQ>);
SSCATR(TRBBUF[0]);
PTA$CNUM[PT] = TRB$CNUM[0];
PTA$STATE[PT] = PTACST"AWTAPPL";
GOTO LLEND;
END
#
* IF MANDATORY/IMPLIED MANDATORY APPLICATION IS REQUIRED, NO MORE
* PROMPTS ARE ISSUED.
#
IF (PTA$APPIND[PT] EQ MNDATRY$)
OR (PTA$VDSF)
THEN # MANDATORY/IMPLIED MANDATORY APPL REQ #
BEGIN
#
* 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:
# SEND "LOGGED OUT" MESSAGE #
NVFUMQE(P<CTQ>,LOMBUF[0],APPTTX$,ADDR,LMSG20$);
NVFTETC(PT,0); # END TERMINAL CONNECTION #
END
ELSE # NO MANDATORY/IMPLIED MANDATORY APPL REQ #
BEGIN
#
* CLEAR APPROPRIATE FIELDS OF *PTAC* ENTRY AND SET TERMINAL
* STATE TO AWAIT APPLICATION PROMPT.
#
PTA$AWORD[PT] = 0; # CLEAR SWITCH APPLICATION WORD #
PTA$VAF[PT] = FALSE; # CLEAR VOLUNTEERED APPL FLAG #
PTA$VAWORD[PT] = 0; # CLEAR VOLUNTEERED APPL WORD #
PTA$STATE[PT] = PTACST"AWTPRMT"; # SET TERM TO AWAIT PROMPT #
END
LLEND:
END # END NVFTDAD #
TERM