*DECK     NVFOPPC 
USETEXT TEXTNVF 
USETEXT TEXTSS
USETEXT TXTAPSS 
      PROC NVFOPPC; 
# TITLE - PERFORM PROGRAM CONTROL.                                     #
      BEGIN 
# 
**    NVFOPPC - PERFORM PROGRAM CONTROL.
* 
*     D.K. ENDO    82/05/20 
* 
*     THIS PROCEDIRE ACTIONS DEBUG COMMANDS FROM THE HOP. 
* 
*     PROC NVFOPPC
* 
*     ENTRY        1. ENTRIES IN THE HOP PROGRAM CONTROL QUEUE(HCQ).
* 
*     EXIT         1. APPROPRIATE ACTION TAKEN. 
* 
# 
# 
****  PROC NVFOPPC - XREF LIST BEGINS.
# 
      XREF
        BEGIN 
        PROC NETDBG;         # TURNS AIP TRACE ON OR OFF               #
        PROC NETDMB;         # DUMPS APPLICATION-S FIELD LENGTH        #
        PROC NETREL;         # RELEASES THE AIP TRACE FILE             #
        PROC NETSTC;         # CLEARS AND/OR STARTS STATISTICS         #
        PROC NVFUMQE;        # MAKE QUEUE ENTRY                        #
        PROC SSBSBF;         # STORE BITFIELD IN TABLE                 #
        PROC SSSPSI;         # PREPARE (SS) STATISTICS INFORMATION     #
        PROC SSTRQE;         # REMOVE QUEUE ENTRY                      #
        FUNC XCHD;           # CONVERT INTEGER TO HEXIDECIMAL DISPLAY  #
        END 
# 
****
# 
  
  
      DEF LEVTMSG$  #40#;    # LENGTH OF EVENT MESSAGES IN CHARACTERS  #
      DEF ALTMTYP$   #6#;    # HOP ALERT MESSAGE TYPE FOR *NVFUMQE*    #
  
  
      ITEM I;                # LOOP INDUCTION VARIABLE                 #
      ITEM STATIS;           # STATUS RETURNED FROM, NET PROC-S        #
      ITEM WP;               # WORD POS FOR DISP CODE PFC/SFC IN EVENT #
      ITEM BP;               # BIT POS FOR DISP CODE PFC/SFC IN ENENT  #
  
  
# 
      THIS ARRAY DEFINES THE FIELDS IN THE DUMP I.D.  THIS IS SET WHEN
      NVF RECEIVES A HOP/DU/U SM FROM NAM.
# 
      ARRAY DUMP$ID [00:00] S(1); 
        BEGIN 
        ITEM DID$NIN    U(00,42,09);   # NETWORK INVOCATION NUMBER     #
        ITEM DID$PID    U(00,51,06);   # PROCDUCT I.D.(FOR NVF)        #
        ITEM DID$DPN    U(00,57,03);   # DUMP NUMBER                   #
        ITEM DID$WORD   I(00,00,60) = [0];
         END
  
  
# 
*     THIS ARRAY DEFINES THE LFN USED FOR THE NETREL CALL.
# 
      ARRAY NTRL$LFN [00:00] S(1);
        BEGIN 
        ITEM NRL$NAM    C(00,00,04) = ["NRF2"]; 
        ITEM NRL$ZFIL   U(00,24,36) = [0];
        END 
  
  
# 
*     THE FOLLOWING ARRAYS ARE EVENT MESSAGES FOR UNRECOGNIZED AND
*     ERR/LGL SUPERVISORY MESSAGES. 
# 
      ARRAY BADSM [00:00] S(4); 
        BEGIN 
        ITEM BS$TEXT    C(00,00,30) = ["UNRECOGNIZED SM, PFC/SFC = "];
        ITEM BS$ZERO    U(03,00,60) = [0];
        END 
  
      ARRAY LOGERR [00:00] S(4);
        BEGIN 
        ITEM LE$TEXT    C(00,00,30) = ["LOGICAL ERROR, PFC/SFC = "];
        ITEM LE$ZERO    U(03,00,60) = [0];
        END 
  
  
  
  
  
      CONTROL EJECT;
#                                                                      #
#                            NVFOPPC CODE BEGINS HERE                  #
#                                                                      #
# 
*     FOR EACH ENTRY IN THE HOP PROGRAM CONTROL QUEUE (HCQ), EXTRACT THE
*     ENTRY AND TAKE THE APPROPRIATE ACTION:  
# 
      FOR I=0 WHILE HCQLNGTH GR 0 
      DO
        BEGIN 
        SSTRQE(P<HCQ>,WCBUF[0],ABHBUF[0],MSGBUF[0]);
  
  
# 
*     IF THIS SM IS HOP/DU/U, THEN SET THE DUMP I.D. AND ISSUE THE DUMP 
*     REQUEST.  IF THE DEMP I.D. IS GREATER THAN OR EQUAL TO SIX, THEN
*     SET IT TO ZERO, ELSE INCREMENT IT BY ONE. 
# 
        IF PFCSFC[0] EQ HOPDU 
        THEN
          BEGIN 
          DID$NIN[0] = CRNT$NIN;
          DID$PID[0] = NVFPID$; 
          DID$DPN[0] = CRNT$DPN;
  
          NETDMB(DUMP$ID,FALSE);
  
          IF CRNT$DPN GQ 6
          THEN
            BEGIN 
            CRNT$DPN = 0; 
            END 
          ELSE
            BEGIN 
            CRNT$DPN = CRNT$DPN + 1;
            END 
          END 
  
  
# 
*     IF THIS SM IS HOP/TRCE/U, THEN CALL NETDBG TO TURN ALL TRACING
*     ON. 
# 
        ELSE IF PFCSFC[0] EQ HOPTRCE
        THEN
          BEGIN 
          NETDBG(FALSE,FALSE,STATIS); 
          END 
  
  
# 
*     IF THIS SM IS HOP/NOTR/U, THEN CALL NETDBG TO TURN ALL TRACING
*     OFF.
# 
        ELSE IF PFCSFC[0] EQ HOPNOTR
        THEN
          BEGIN 
          NETDBG(TRUE,TRUE,STATIS); 
          END 
  
  
# 
*     IF THIS SM IS HOP/RS/U, THEN CALL NETSTC TO CLEAR THE CURRENT 
*     STATISTICS AND RESTART THE STATISTICS GATHERING.
# 
        ELSE IF PFCSFC[0] EQ HOPRS
        THEN
          BEGIN 
  
          $BEGIN
          SSSPSI; 
          $END
  
          NETSTC(TRUE,STATIS);
  
          NETSTC(FALSE,STATIS); 
          END 
  
  
# 
*     IF THIS SM IS HOP/REL/U, THEN CALL NETREL TO RELEASE THE CURRENT
*     DEBUG LOG FILE. 
# 
        ELSE IF PFCSFC[0] EQ HOPREL 
        THEN
          BEGIN 
          IF MC NQ 0
          THEN
            BEGIN 
            NETREL(NTRL$LFN,0,FALSE); 
            END 
          END 
  
  
# 
*     IF THIS SM IS HOP/DB/U,THEN SET THE DEBUG FLAG IN THE NVF CONTROL 
*     BLOCK.
# 
        ELSE IF PFCSFC[0] EQ HOPDB
        THEN
          BEGIN 
          DBGFLAG = TRUE; 
          END 
  
  
# 
*     IF THIS SM IS HOP/DE/U, THEN CLEAR THE DEBUG FLAG IN THE NVF
*     CONTROL BLOCK.
# 
        ELSE IF PFCSFC[0] EQ HOPDE
        THEN
          BEGIN 
          DBGFLAG = FALSE;
          END 
  
  
# 
*     IF THIS SM IS ERR/LGL/U, THEN ISSUE AN EVENT MESSAGE (WILL BE 
*     SENT TO THE HOP AND THE NETWORK LOG FILE).  STORE DISPLAY CODED 
*     PFC/SFC IN MESSAGE TEXT.  SET HOP ALERT.
# 
        ELSE IF PFCSFC[0] EQ ERRLGL 
        THEN
          BEGIN 
          WP = 2;                      # SET POS OF DISP CODED PFC/SFC #
          BP = 30;
          SSBSBF (LOGERR, WP, BP, 24, XCHD(X"10000" + ERPSFC[0]));
          NVFUMQE (P<USQ>, LOGERR, ALTMTYP$, 0, LEVTMSG$);
          END 
  
  
# 
*     AT THIS POINT THE SM MUST BE ONE THAT NVF (AT LEAST, OR PERHAPS 
*     THE WHOLE NETWORK) DOES NOT RECOGNIZE.  ISSUE AN EVENT MESSAGE
*     (WILL BE SENT TO THE HOP AND THE NETWORK LOG FILE).  STORE
*     DISPLAY CODED PFC/SFC IN MESSAGE TEXT.  SET HOP ALERT.
# 
        ELSE                 # UNRECOGNEZED SUPERVISORY MESSAGE        #
          BEGIN 
          WP = 2;                      # SET POS OF DISP CODED PFC/SFC #
          BP = 42;
          SSBSBF (BADSM, WP, BP, 24, XCHD(X"10000" + PFCSFC[0])); 
          NVFUMQE (P<USQ>, BADSM, ALTMTYP$, 0, LEVTMSG$); 
          END 
  
  
        END 
  
  
      RETURN;                # **** RETURN ****                        #
  
      END # NVFOPPC # 
      TERM
