*DECK NP$SN 
*IF,DEF,STAT
USETEXT NP$MODE 
USETEXT NP$STAT 
*ENDIF
PROC NP$SN((STNUM));
*IF DEF,IMS 
 #
*1DC  NP$SN 
* 
*     1. PROC NAME         AUTHOR               DATE
*        NP$SN             S.KRULEVITCH         77/07/01
* 
*     2. FUNCTIONAL DESCRIPTION 
*        WRITES STATISTICS COUNT TO THE NAM STATISTICS FILE ZZZZZSN.
* 
*     3. METHOD USED
*        EACH LINE OF THE LOG ENTRY IS FORMATTED AND WRITTEN TO FILE
*        ZZZZZSN USING MACREL FUNCTION AND PROCEDURE CALLS. 
* 
*     4. ENTRY CONDITIONS 
*        STNUM - NUMBER TO IDENTIFY WHICH STATISTIC IS TO BE LOGGED 
*                ON THE ZZZZZSN FILE. THE NUMBER GIVES THE POSITION 
*                IN THE STATISTICS ARRAY. 
*        SN$FET - FET FOR FILE ZZZZZSN
*        PRNT - TRUE IF STATISTICS COUNT IS TO BE WRITTEN TO ZZZZZSN. 
*               FALSE IF STATISTICS COUNTER IS BEING INCREMENTED. 
* 
*     5. EXIT CONDITIONS
*        NONE 
* 
*     6. COMDECKS CALLED AND SYMPL TEXTS USED.
*        NP$CRT    NP$MODE   NP$STAT
* 
*     7. PROCEDURES/FUNCTIONS CALLED
*        NP$PIOE             PROCESS I/O ERROR ON DISK FILE 
*        NP$WRTW
*        NP$XCDD
* 
*     8. DAYFILE MESSAGES 
*        NONE 
* 
 #
*ENDIF
    BEGIN 
*CALL NP$CRT
#                                                                     # 
#     FORMAL PARAMETER                                                # 
#                                                                     # 
      ITEM
        STNUM           I;              #IDENTIFIES STATISTIC TO BE  #
                                        #UPDATED OR PRINTED           # 
*IF DEF,STAT
#                                                                     # 
#     ROUTINES CALLED                                                 # 
#                                                                     # 
      XREF
        BEGIN 
        PROC NP$PIOE;        # PROCESS I/O ERROR ON DISK FILE          #
        PROC NP$WRTW; 
        FUNC NP$XCDD    C(10);
        END 
#                                                                     # 
#     LOCAL VARIABLES                                                 # 
#                                                                     # 
      DEF OVERFLOW  #1000000#;          #STATISTICS FIELD OVERFLOW    # 
      ITEM
        I               I;               #TEMPORARY VARIABLE          # 
      ARRAY TOOBIG P(4);
        ITEM
          TOOBIGCC      C(0,0,10)=["0         "], #DOUBLE SPACE       # 
          TOOBIGMSG     C(1,0,24)=["****COUNTER OVERFLOW****"], 
          TOOBIGEOL     I(4,0,60)=[0];
      ARRAY STATISTIC[0:STATSIZE] P(2); 
        ITEM
          STATNAME      C(0,0,20)=
             ["    NETCHEK        ",
              "    NETDMB         ",
              "    NETFUNC        ",
              "    NETGET         ",
              "    NETGETF        ",
              "    NETGETL        ",
              "    NETGETQ        ",
              "    NETGTFL        ",
              "    NETGTLQ        ",
              "    NETLGS         ",
              "    NETLOG         ",
              "    NETPUT         ",
              "    NETPUTF        ",
              "    NETSETP        ",
              "    NETWAIT        ",
              "    NETXFR         ",
              "    NETXFRC        ",
              "                   ",
              "                   ",
              "                   ",
              "                   ",
              "                   ",
              "                   ",
              "                   ",
              "                   ",
              "                   ",
              "                   ",
              "                   ",
              "                   ",
              "    SUCCESSFUL     ",
              "    UNSUCCESSFUL   ",
              "    INPUT   ABT=0  ",
              "    INPUT   ABT=1  ",
              "    INPUT   ABT=2  ",
              "    INPUT   ABT=3  ",
              "    INPUT   ABT=4  ",
              , 
              "    INPUT   ABT=6  ",     # INPUT QBLK BLOCK TYPE       #
              "    INPUT   ABT=7  ",     # INPUT QMSG BLOCK TYPE       #
              "    OUTPUT  ABT=1  ",
              "    OUTPUT  ABT=2  ",
              "    OUTPUT  ABT=3  ",
              "    OUTPUT  ABT=4  ",
              , 
              "    OUTPUT  ABT=6  ",     # OUTPUT QBLK BLOCK TYPE      #
              "    OUTPUT  ABT=7  ",     # OUTPUT QMSG BLOCK TYPE      #
              "    LOGICAL ERRORS ",
              "    NAK-S          ",
              "                   "]; 
      ARRAY STLOG P(5); 
        ITEM
          STLOG$CC      C(0,0,10)=["          "], 
          STLOGA        C(1,0,20),
          STLOGB        C(3,0,10),
          STLOG$EOL     I(4,0,60)=[0];
      CONTROL EJECT;
#                                                                     # 
#     NP$SN EXECUTION BEGINS HERE                                     # 
#                                                                     # 
#     STEP 1: CHECK IF STATISTICS GATHERING IS ON.                    # 
      IF ACCEPTED 
      THEN
        BEGIN 
#       STEP 2: INCREMENT COUNTER UNLESS NP$SN HAS BEEN CALLED FOR    # 
#               PRINTOUT ONLY                                         # 
        IF NOT PRNT AND STATON
        THEN
          STAT[STNUM] = STAT[STNUM] + 1;
#       STEP 3: WRITE OVERFLOW MESSAGE IF COUNTER GETS TOO LARGE      # 
        IF STAT[STNUM] GQ OVERFLOW
        THEN
          NP$WRTW(SN$FET,TOOBIG,4); 
#       STEP 4: WRITE STATISTIC TO FILE ZZZZZSN.                      # 
        IF (STAT[STNUM] GR 0 AND PRNT) OR STAT[STNUM] GQ OVERFLOW 
        THEN
          BEGIN 
          STLOGA = STATNAME[STNUM]; 
          STLOGB = NP$XCDD(STAT[STNUM]);
          NP$WRTW(SN$FET,STLOG,5);
          STAT[STNUM] = 0;              #CLEAR COUNTER                # 
          END 
# 
        CHECK FOR I/O ERROR IN STATISTICS FILE
# 
        IF SN$AT[0] NQ 0
        THEN                           # I/O ERROR HAS OCCURRED ON FILE#
          BEGIN 
          NP$PIOE(SN$FET);             # PROCESS I/O ERROR             #
          END 
        END #STATON#
*ENDIF
        RETURN; 
  END #NP$SN# 
TERM
