*DECK NVFAACC
USETEXT TEXTSS
USETEXT TEXTNVF
USETEXT TXSMNVF
USETEXT TXTAPSS
USETEXT TXTANVF
PROC NVFAACC;
# TITLE NVFAACC - A-A PROCESS CR/ACC SMS. #
BEGIN #NVFAACC#
#
** NVFAACC - PROCESS CR/ACC SMS FOR A-A.
*
* C. BRION 82/09/25, 83/12/12.
*
* THE FUNCTION OF THIS PROCEDURE IS PROCESS THE CR/ACC SMS. THE
* PROCESSING OF THE CR/ACC COMPLETES THE SWITCHING OF AN A-A
* CONNECTION TO THE APPLICATION.
*
* PROC NVFAACC
*
* ENTRY:
*
* THE CR/ACC SM IS IN MSGBUF AND THE WORD COUNT AND BLOCK HEADER
* WORDS ARE IN WCBUF AND ABHBUF RESPECTIVELY.
*
* EXIT:
*
* THE VCB FILE ENTRY IS MADE.
* THE ABAC OR ABAA ACCOUNT MSGS ARE ISSUED.
* THE PAAC ENTRY AND ACPID TABLE SPACE IS RELEASED VIA NVFACTC
* CALL.
#
#
**** PROC NVFAACC XREF LIST
#
XREF
BEGIN
PROC NVFUMQE; # MAKE QUEUE ENTRY #
PROC NVFAIAM; # ISSUE A-A ACCOUNT MSG #
PROC SSTRTS; # SS-RELEASE TABLE SPACE #
PROC ABORT;
PROC SSTATS; # SS-ALLOCATE TABLE SPACE #
PROC MESSAGE; # ISSUE DAYFILE MESSAGE #
PROC MOVE; # MACREL MOVE WORD #
PROC NVFACTC; # CLEANUP TERM CONNECTION #
END
#
****
#
ITEM PAC I; # PAAC ENTRY INDEX #
ITEM NENTRY I; # NUMBER PAAC ENTRIES #
ITEM VCB I; # LOCAL VCB VAR #
ITEM I I; # LOOP VAR #
ITEM LEN I; # LENGTH OF VCB IN CHAR #
ITEM MTYP I; # ACCOUNT MSG TYPE #
ITEM VCBREL B; # VCB RELEASE FLAG #
#
** CLEARVCB - ARRAY FOR CLEARING VCB AREA .
#
BASED ARRAY CLEARVCB [00:00] S(1);
BEGIN
ITEM CLE$WORD U(00,00,60);
END
$BEGIN
#
* NOPAC - NO PAAC ENTRY WAS FOUND.
#
ARRAY NOPAC [00:00] S(4);
BEGIN
ITEM NO$MSG C(00,00,32) =
[" NVFAACC: PAAC ENTRY NOT FOUND."];
ITEM NO$ZERO U(03,12,48) = [0];
END
$END
#
* **** PROC NVFAACC ENTRY START ****
#
#
LOCATE THE PAAC ENTRY WITH SAME VCB ORDINAL AS IN THE CR/ACC SM.
FIRST CALCULATE NUMBER OF PAAC ENTRIES FOR SEARCH LIMIT.
#
NENTRY = PACLNGTH / PAACSIZ$;
FOR PAC = 0 STEP 1 WHILE
((PAC LS NENTRY) AND
(PA$VCB[PAC] NQ CRVCB[0]))
DO
BEGIN
END
$BEGIN
#
* IF PAAC ENTRY NOT FOUND, SERIOUS ERROR, ABORT NVF.
#
IF PAC EQ NENTRY
THEN
BEGIN
MESSAGE(NOPAC,0);
ABORT;
END
$END
#
OTHERWISE CONTINUE BY SAVING VCB ORDINAL LOCALLY, AND THEN DETER-
MINE THE SWITCH TIME.
THE VCB WILL THEN HAVE TO BE SET UP FOR WRITING TO THE VCB FILE.
CLEAR THE VCB BUFFER AND SET UP.
#
VCB = PA$VCB[PAC];
PA$SWTIME[PAC] = CTM$PDT[0];
P<CLEARVCB> = LOC(MSGBUF[LCRACC]);
P<VCBBUF> = LOC(MSGBUF[LCRACC]);
FOR I = 0 STEP 1 UNTIL (VCBSIZ$ - 1)
DO
BEGIN
CLE$WORD[I] = 0;
END
#
* DEPENDING ON THE STATE OF THE PAAC, SET THE ACCOUNT MESSAGE
* TYPE AND THE VCB STATE.
#
IF PA$STATE[PAC] EQ PAACST"PAIAP"
THEN
BEGIN
MTYP = ABAA$;
PA$VSTATE[PAC] = PAACST"PAISWT";
END
ELSE
BEGIN
MTYP = ABAC$;
PA$VSTATE[PAC] = PAACST"PARSWT";
END
#
* SEND THE ACCOUNT MESSAGE VIA CALL TO NVFAIAM.
#
NVFAIAM(PAC,MTYP);
#
SAVE INFO IN THE VCB BUFFER.
#
VCB$ATN[0] = "AACON ";
VCB$ACNAA[0] = CRAACN[0];
VCB$APORT[0] = PA$PORT[PAC];
VCB$AVCB[0] = PA$VCB[PAC];
VCB$WRD1[0] = PA$TIMWRD[PAC];
VCB$WRD2[0] = PA$FWORD[PAC];
VCB$WRD3[0] = PA$RHWRD[PAC];
VCB$WRD4[0] = PA$UWORD[PAC];
VCB$ASWAPAN[0] = PA$SWAPAN[PAC];
VCB$ASWAP[0] = PA$SWAP[PAC];
VCB$ASL[0] = PA$SL[PAC];
VCB$ASTATE[0] = PA$STATE[PAC];
VCB$AIAPRC[0] = PA$IAPRC[PAC];
VCB$ANUMOUT[0] = PA$NUMOUT[PAC];
VCB$ASNODE[0] = PA$SNODE[PAC];
VCB$ADNOD[0] = PA$DNOD[PAC];
VCB$AVSTATE[0] = PA$VSTATE[PAC];
VCB$ADT[0] = PA$DT[PAC];
VCB$ICMCN[0] = PA$ICMCN[PAC];
#
ISSUE VCB WRITE REQUEST.
#
LEN = VCBSIZ$ * 10;
NVFUMQE(P<VRQ>,VCBBUF[0],0,VCB,LEN);
#
* RELEASE ACPID ENTRY SPACE AND PAAC ENTRY VIA CALL
* TO NVFACTC. NOTE VCB NOT RELEASED.
#
VCBREL = FALSE;
NVFACTC(PAC,VCBREL);
ENDEXIT:
END #NVFAACC#
TERM