*DECK NVFTRCN USETEXT TEXTNVF USETEXT TXSMNVF USETEXT TXTANVF USETEXT TXTAPSS USETEXT TXTSUSS PROC NVFTRCN; # TITLE NVFTRCN - RECONNECT TO NVF REQUEST (CR/RCN SM) # BEGIN # NVFTRCN # # ** NVFTRCN - RECONNECT TO NVF REQUEST (CR/RCN SM). * * E. THAVIKULWAT 81/11/09 * A. LIM 82/08/04 * C. BRION 83/04/11. 83/05/10. * * THIS PROCEDURE'S MAIN FUNCTION IS TO RECONNECT TERMINAL TO NVF IN * RESPONSE TO A CR/RCN REQUEST. IT IS CALLED INTO EXECUTION BY * PROCEDURE *NVFTDQE*. * * PROC NVFTRCN * * ENTRY: * CR/RCN SM IN *MSGBUF* * * EXIT: * ONE OF THE FOLLOWING: * 1) CONNECTION TERMINATED. * 2) APPLICATION PROMPT REISSUED. * 3) CONNECTION SWITCHED TO ANOTHER APPLICATION. * * NOTES: * A CR/RCN REQUEST IS SENT TO NVF FOR 2 REASONS: * 1) THE SWITCH REQUEST WAS SUCCESSUFL BUT EITHER SOMETHING IS * WRONG WITH THE APPLICATION OR USER REQUESTED A RECONNECT. * IN THIS CASE, A *PTAC* ENTRY FOR THE CONNECTION NO LONGER * EXIST, BUT A VCB ENTRY FOR THE CONNECTION DOES EXIST OUT * ON THE VCB FILE. A *PTAC* ENTRY HAS TO BE CREATED AND * INFORMATION FROM THE CR/RCN SM SAVED. * 2) THE SWITCH REQUEST WAS NOT SUCCESSFUL. IN THIS CASE, A * *PTAC* ENTRY FOR THE CONNECTION STILL EXIST. IF DEVICE IS * AN INTERACTIVE DEVICE, APPROPRIATE MESSAGE IS ISSUED TO * THE TERMINAL AND APPLICATION PROMPT MAY BE REISSUED. IF * DEVICE IS A BATCH DEVICE, THE DEVICE REMAIN CONNECTED TO * NVF UNTIL IT'S OWNING CONSOLE HAS COME BACK AND HAS MADE * ANOTHER SUCCESSFUL APPLICATION SELECTION OR UNTIL THE NPU * TERMINATES THE CONNECTION. * * REASON CODE FROM CR/RCN REQUEST DETERMINES REASON FOR THE * RECONNECT. REASON CODE 1-4 IMPLIES 1 ABOVE AND REASON CODE * OF 5-7 IMPLIES 2 ABOVE. * A BIAS OF 15 IS ADDED TO THE REASON CODE FROM CR/RCN WHEN THE * CODE IS TO BE STORED IN THE CR/TRM. * * METHOD: * SEND CR/RCN/N RESPONSE. DETERMINE REASON FOR RECONNECT. IF FOR * AN UNSUCCESSFUL SWITCH, GET *PTAC* ENTRY, UPDATE WITH NEW ACN, * AND DECREMENT T-A CONNECTION COUNT. IF FOR A SUCCESSFUL SWITCH, * CREATE A NEW *PTAC*, UPDATE WITH INFORMATION FROM THE CR/RCN * REQUEST, AND ISSUE VCB READ REQUEST. # # **** PROC NVFTRCN - XREF LIST. # XREF BEGIN PROC MOVE; # MACREL - MOVE CM WORDS # PROC NVFSCAD; # COMPLETE APPLICATION DEPARTURE # PROC NVFTDAD; # DETERMINE ADDITIONAL DIALOGUE # PROC NVFTILP; # ISSUE LOGIN PROMPT # PROC NVFTPVD; # PREPARE TO RECEIVE VALIDATION DATA # PROC NVFTRLC; # RECONNECT TO PRIMARY APPLICATION # PROC NVFTURT; # UPDATE *RAU* TABLE # PROC NVFUMQE; # TRANSFER SM OR TEXT TO QUEUE # PROC SSTETS; # SS - ENLARGE TABLE SPACE # FUNC XSFW C(10); # SPACE FILL WORD # END # **** # # * TEMPORARY BASED ARRAYS FOR USE WHEN CALLING THE *MOVE* ROUTINE. # BASED ARRAY TEMPFROM [00:00] S(1); BEGIN ITEM FROMWRD U(00,00,60); END BASED ARRAY TEMPTO [00:00] S(1); BEGIN ITEM TOWRD U(00,00,60); END DEF RCNRC$ #15#; # NUMBER TO ADD TO CR/RCN REASON CODE # ITEM ADDR I; # ADDRESSING INFORMATION FOR ABH # ITEM AS I; # SUBSCRIPT FOR ARRAY AST # ITEM ASENTRY I; # NUMBER AST ENTRIES # ITEM ERRCOD I; # ERROR CODE # ITEM I I; # LOOP VARIABLE # ITEM MATCH B; # MATCH FOUND FLAG # ITEM OPTWRDSZ I; # SIZE OF OPTIONAL DATA IN CM WORDS # ITEM PD I; # SUBSCRIPT FOR ARRAY PDCT # ITEM PORD I; # PRIMARY AST ORDINAL # ITEM PRIAPP B; # PRIMARY APPL INDICATOR # ITEM PT I; # SUBSCRIPT FOR ARRAY PTAC # ITEM SAVETLC I; # TEMP PLACE TO STORE THE ABHTLC # ITEM SMOUT B; # SM TYPE FOR CALL TO NVFTRLC # ITEM SPSIZ I; # SIZE OF SPTAC ENTRY IN CM WORDS # # * DETERMINE NUMBER OF AST ENTRIES. # ASENTRY = ASTLNGTH/ASTSIZ$; # * BUILD CR/RCN/N RESPONSE. # SPMSG0[1] = 0; # CLEAR RESPONSE AREA # PFCSFC[1] = CRRCNN; CRACN[1] = CRACN[0]; CRNXP[1] = TRUE; CRICT[1] = ICT$; CRALN[1] = ALN$; ADDR = ABHADR[0]; SAVETLC = ABHTLC[0]; # SAVE TLC FOR LATER USE # # * ONLY IF NOT A RECONNECT TO LOAN CONNECTION TO SECONDARY DO * WE NEED TO RESPOND IMMEDIATELY WITH A NORMAL RESPONSE. # IF CRRRCN[0] NQ RCRC"LSA" THEN NVFUMQE(P,APSM[1],APPPR$,ADDR,LCRRCNN); # * DETERMINE IF CR/RCN IS FOR AN ABNORMAL RECONNECT (UNSUCCESSFUL * SWITCH) OR FOR A NORMAL RECONNECT. # ERRCOD = CRRRCN[0]; # REASON CODE # IF CRLIMBO[0] THEN # CR/RCN FOR UNSUCCESSFUL SWITCH # BEGIN # * CR/RCN IS FOR AN ABNORMAL RECONNECT (I.E., CR/ACC HAS NOT BEEN * RECEIVED). CALL *NVFTURT* TO FIND THE *PTAC* ENTRY AND UPDATE * *RAU* TABLE ACCORDINGLY. SAVE NEW ACN, DECREMENT T-A CONNECTION * COUNT. IF INTERACTIVE DEVICE, CALL *NVFTDAD* TO DETERMINE * ADDITIONAL DIALOGUE POSSIBILITY. OTHERWISE, JUST EXIT. # PRIAPP = FALSE; NVFTURT(CRVCB[0],PT,PRIAPP); # UPDATE *RAU* TABLE # PTA$ACN[PT] = CRACN[0]; # SAVE NEW ACN # PTA$RC[PT] = ERRCOD + RCNRC$; # SAVE RC FOR USE IN CR/TRM # PTA$LRC[PT] = ERRCOD; # * SET THE NEXT APPLICATION NAME IF SPECIFIED. # IF CRANAME[0] NQ 0 THEN # NEW APPLICATION SPECIFIED # BEGIN PTA$VLTAPP[PT] = XSFW(CRANAME[0]); # SAVE NEW APPL NAME # PTA$VAF[PT] = TRUE; # SET VOLUNTEERED APPL FLAG # END # * LOCATE AST ENTRY FOR THIS PTAC ENTRY. # 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; # DECREMENT NUMBER OF CONN # AST$ICCN[AS] = AST$ICCN[AS] - 1; #DECREMENT NO OF INCMG CONN # NVFSCAD(AS); # COMPLETE APPL DEPARTURE # IF (PTA$DT[PT] EQ DT$CONS) OR (PTA$DT[PT] EQ DT$CLP) OR (PTA$DT[PT] EQ DT$USER) THEN # INTERACTIVE DEVICE TYPE # BEGIN # * CHECK IF LOANED CONNECTION. * IF SO, CALL NVFTRLC TO RETURN CONNECTION TO PRIMARY APPL. * OTHERWISE, CALL NVFTDAD TO DETERMINE IF ADDITIONAL DIALOGUE * IS OK. IF SO, THEN CALL NVFTILP TO ISSUE NEXT PROMPT. # IF PTA$LRC[PT] LS RCRC"LSA" THEN BEGIN NVFTDAD(PT,ERRCOD); IF PTA$STATE[PT] EQ PTACST"AWTPRMT" THEN NVFTILP(PT); END ELSE BEGIN # * LOCATE THE *AST* ENTRY OF THE PRIMARY APPL. DECREMENT THE * NUMBER OF RESERVED CONNECTIONS AND INCREMENT THE NUMBER OF T-A * CONNECTIONS. # 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; AST$TACN[AS] = AST$TACN[AS] + 1; AST$ICCN[AS] = AST$ICCN[AS] + 1; END # * SWITCH THE CONNECTION BACK TO THE PRIMARY APPLICATION. # PTA$SWTAPP[PT] = AST$PANAM[AS]; SMOUT = FALSE; NVFTRLC(PT,SMOUT,PTA$LRC[PT]); END END END ELSE BEGIN # * CR/RCN IS FOR A NORMAL RECONNECT. CALL *NVFTPVD* TO ALLOCATE * SPACE FOR A *PTAC* ENTRY AND MAKE VCB READ REQUEST ENTRY IN * *VRQ* QUEUE. UPDATE *PTAC* WITH INFORMATION RECEIVED IN THE * CR/RCN SM. # NVFTPVD(CRVCB[0],CRAN[0],PT); PTA$ACN[PT] = CRACN[0]; # SAVE NEW ACN # PTA$VCB[PT] = CRVCB[0]; PTA$ABL[PT] = CRABL[0]; PTA$DT[PT] = CRDT[0]; PTA$TC[PT] = CRRCTC[0]; PTA$PW[PT] = CRRCPW[0]; PTA$PL[PT] = CRRCPL[0]; PTA$LRC[PT] = CRRRCN[0]; PTA$RC[PT] = ERRCOD + RCNRC$; # * SET THE NEXT APPLICATION NAME IF SPECIFIED. # IF CRANAME[0] NQ 0 THEN # NEW APPLICATION SPECIFIED # BEGIN PTA$VLTAPP[PT] = XSFW(CRANAME[0]); # SAVE NEW APPL NAME # PTA$VAF[PT] = TRUE; # SET VOLUNTEERED APPL FLAG # END # * IF REASON FOR RECONNECT IS APPLICATION FAILURE/NETOFF, THEN * SET APPLICATION FAILED FLAG IN THE *PTAC* ENTRY SO THAT USER * IS GIVEN 25 TRIES VERSUS 4 TO ENTER A LEGAL APPLICATION NAME * (TO TAKE CARE OF TYPE AHEAD DATA), AND ALSO SET APPLICATION * DOWN FLAG IN THE *AST* TABLE. # IF ERRCOD EQ RCRC"N" OR ERRCOD EQ RCRC"ANO" OR ERRCOD EQ RCRC"AF" OR ERRCOD EQ RCRC"SAN" OR ERRCOD EQ RCRC"SAF" THEN BEGIN PTA$AFF[PT] = TRUE; # * LOCATE AST ENTRY FOR PTAC ENTRY. # FOR AS = 0 STEP 1 WHILE (AS LS ASENTRY AND AST$PANAM[AS] NQ PTA$SWTAPP[PT]) DO BEGIN END AST$DNF[AS] = TRUE; # SET APPLICATION DOWN FLAG # END # * SET *PTAC* STATE ACCORDING TO LOAN CONNECTION FLAG STATUS OF * THE PTAC ENTRY. # IF PTA$LRC[PT] LS RCRC"LSA" THEN PTA$STATE[PT] = PTACST"AWTVCBR"; ELSE BEGIN PTA$STATE[PT] = PTACST"AWTVCBL"; # * IF THIS IS AN INTIAL LOAN REQUEST, SAVE THE PRIMARY * APPLICATION NUMBER IN THE PTAC ENTRY. # IF PTA$LRC[PT] EQ RCRC"LSA" THEN BEGIN PTA$PRIAN[PT] = CRAN[0]; END END # * CHECK IF EXTENDED OPTIONAL WORDS ARE APPENDED TO THE CR/RCN/R SM. * IF SO, ALLOCATE SPTAC SPACE AND MOVE THE OPTIONAL WORDS INTO THE * SPTAC, MARK THE PTAC AND LABEL THE SPTAC SO IT CAN BE LOCATED * LATER. # IF SAVETLC GR LCRRCN THEN BEGIN SPSIZ = SAVETLC - LCRRCN + 1; SSTETS(P,0,SPSIZ); SPT$VCB[0] = PTA$VCB[PT]; SPT$ESIZE[0] = SPSIZ; P = LOC(CRROPW[0]); P = LOC(SPT$WRD2[0]); OPTWRDSZ = SPT$ESIZE[0] - 1; FOR I = 0 STEP 1 WHILE I LS OPTWRDSZ DO BEGIN TOWRD[I] = FROMWRD[I]; END PTA$SPTAC[PT] = TRUE; END # * IF A CONSOLE DEVICE, SEARCH THE PDCT TO SEE IF THERE IS * AN ENTRY FOR THIS DEVICE. IF AN ENTRY IS FOUND, THEN SET THE * STATE TO AWAITING CONSOLE VALIDATION. # IF PTA$DT[PT] EQ DT$CONS THEN BEGIN MATCH = FALSE; FOR PD=0 STEP PDT$WC[PD] WHILE (NOT MATCH AND PD LS PDTLNGTH) DO BEGIN IF PTA$VCB[PT] EQ PDT$CVCB[PD+1] THEN BEGIN PDT$CSTAT[PD+1] = PDCTST"AWTCVAL"; MATCH = TRUE; END END END END END # END NVFTRCN # TERM