*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 
  
  
