*DECK     NVFOLNE 
USETEXT    TEXTNVF
USETEXT    TEXTSS 
USETEXT    TXCMDNV
USETEXT    TXTAPSS
PROC NVFOLNE; 
# TITLE NVFOLNE - LOG NETWORK EVENTS.                                  #
  
      BEGIN    # NVFOLNE #
# 
**    NVFOLNE - LOG NETWORK EVENTS. 
* 
*     A. LIM.    82/03/18.
* 
*     THIS PROCEDURE LOGS NETWORK EVENTS TO THE NETWORK-LOG FILE(OR NIP 
*     DAYFILE), HISTORY BUFFER, AND K-DISPLAY.
*     IT IS CALLED INTO EXECUTION WHENEVER THERE IS DATA IN UNSOLICITED-
*     STATUS-QUEUE *USQ*. 
* 
*     PROC NVFOLNE
* 
*     ENTRY    NETWORK EVENTS IN UNSOLICITED-STATUS-QUEUE *USQ*.
* 
*     EXIT     NETWORK EVENTS LOGGED TO NETWORK-LOG FILE, HISTORY BUFFER
*              AND K-DISPLAY. 
* 
*     METHOD   THIS PROCEDURE CONSISTS PRIMARY A LARGE LOOP, EACH TIME
*              THROUGH THE LOOP, *SSTRQE* IS CALLED TO REMOVE AN ENTRY
*              FROM THE *USQ*.  THEN A HOP/LG SM IS BUILT AND SENT TO 
*              OUTGOING-TRAFFIC-QUEUE *OTQ* DESTINED FOR NETWORK-LOG
*              FILE.  THEN IT IS LOGGED TO HISTORY BUFFER, AND
*              IS SENT TO THE CONNECTION-TRAFFIC-QUEUE *CTQ* REGARDLESS 
*              OF K-DISPLAY ASSIGNED/UNASSIGNED.
*              IT TERMINATES WHEN *USQ* IS EXHAUSTED. 
# 
  
  
# 
****  PROC NVFOLNE XREF LIST
# 
      XREF
        BEGIN 
        PROC MOVE;           # MACREL- MOVE CM WORDS                   #
        PROC SSTAQE;         # SS- ACCEPT A QUEUE ENTRY                #
        PROC SSTATS;         # SS- ALLOCATE TABLE SPACE                #
        PROC SSTRQE;         # SS- REMOVE QUEUE ENTRY TO FIXED BUFFER  #
        PROC SSTRTS;         # SS- REMOVE TABLE SPACE                  #
        END 
# 
****
# 
  
  
      ITEM DONE       B;     # LOOP EXIT VARIABLE                      #
      ITEM I          I;     # LOOP INDUCTION VARIABLE                 #
      ITEM L          U;     # INDEX TO HISTORY BUFFER                 #
      ITEM WC         I;     # WORD-COUNT WORDS TO ALLOCATE TABLE SPACE#
  
  
# 
*     PROCESS ALL ENTRIES IN *USQ*
# 
  
      FOR I = 0 WHILE USQLNGTH NQ 0 
      DO
        BEGIN 
        SSTRQE(P<USQ>,WCBUF[0],ABHBUF[0],MSGBUF[3]);  # MOVE TO FIX BUF#
  
# 
*     BUILD A HOP/LG SM AND SEND IT TO *OTQ*
# 
        MSG$WORD[0] = 0;
        MSG$PSFC[0] = HOPLG;           # PFC/SFC FOR HOP/LG            #
        IF ABHABT[0] EQ 5 
        THEN
          MSG$WORD[1] = HOCMDID$;      # ID = *NV/HOSTNVF*           #
        ELSE
          MSG$WORD[1] = USMSGID$;      # ID = *NV/       *           #
        MSG$WORD[2] = CTM$CLOCK[0];    # TIME STAMP THE MESSAGE        #
        WCB$WORD[1] = 0;               # CLEAR WC WORD 1               #
        ABHWORD[1] = 0;                # CLEAR ABH WORD 1              #
        WCB$WC[1] = WCB$WC[0]+3;       # WC=PSFC+TIME+ID+ORIGINAL MSG  #
        ABHABT[1] = APPCMD; 
        ABHACT[1] = CT60TRANS;
        ABHTLC[1] = WCB$WC[1] - 2;
        SSTAQE(P<OTQ>,WCBUF[1],ABHBUF[1],MSGBUF[0]);  # SEND HOP/LG    #
# 
*     LOG THE MESSAGE TO HISTORY BUFFER.
# 
        IF HSBCNT EQ MXHSBCNT$
        THEN
          BEGIN              # HISTORY BUF FULL, DELETE FIRST ENTRY    #
          DONE = FALSE; 
          FOR I = 0 STEP 1 WHILE     (NOT DONE) 
                                 AND (I LS HSBL)
          DO
            BEGIN            # SEARCH ZERO BYTE FOR END OF ENTRY       #
            IF HSB$ZERO[I] EQ 0 
            THEN
              DONE = TRUE;   # FOUND IT#
            END 
          SSTRTS(P<HSBUF>,0,I);        # DELETE THIS FIRST ENTRY       #
          HSBCNT = HSBCNT - 1;
          END 
        WC = WCB$WC[0] - 1; 
        L = HSBL;            # SAVE INDEX TO END OF HISTORY BUF        #
        SSTATS(P<HSBUF>, WC);# ALLOC SPACE FOR THIS NEW MSG LINE       #
        MOVE(WC,MSGBUF[2],HSBUF[L]);   # MOVE LINE TO HISTROY BUF      #
        HSBCNT = HSBCNT + 1; # INCREMENT HISTORY LINES COUNT           #
# 
*     SEND THE MESSAGE AS TERMINAL TEXT TO *CTQ* IF THIS IS NOT A 
*     COMMAND TEXT. 
# 
        IF ABHABT[0] NQ 5 
        THEN
          BEGIN 
          WCB$WORD[1] = 0;
          ABHWORD[1] = 0; 
          WCB$WC[1] = WCB$WC[0] + 1;
          WCB$IAF[1] = FALSE; 
          WCB$HAF[1] = WCB$HAF[0];
          ABHABT[1] = HOPTX$; 
          SSTAQE(P<CTQ>,WCBUF[1],ABHBUF[1],MSGBUF[2]);
          END 
        END                  # FOR I LOOP                              #
  
      END 
  
TERM
