C  CBUG - COC BUFFER USAGE GRAPH              PROGRAMMER - PAUL STENDAL CBUG   1
C     CBUG PERIODICALLY SAMPLES THE NUMBER OF COC BUFFERS IN USE,       CBUG   2
C     THEN GENERATES A HISTOGRAM AND SUMMARY OF THE USAGE.  THE SAMPLE  CBUG   3
C     PERIOD, NUMBER OF SAMPLES, AND NUMBER OF BUFFERS PER GRAPH DIVISIOCBUG   4
C     ARE USER-SPECIFIED.  DEPRESSING THE BREAK KEY TERMINATES SAMPLING CBUG   5
C     AND STARTS THE GRAPHING PROCESS.                                  CBUG   6
      IMPLICIT INTEGER (A-Z); EXTERNAL COCBUFS, LNOL, HRBA, COCBUF, SOUICBUG   7
      REAL CV, REAL; DIMENSION CV(31), COUNT(0:500), TIMEBUF(24)        CBUG   8
      DATA CV/0,.0599,.0774,.1,.129,.166,.2,.278,.359,.5,.599,.774,1,   CBUG   9
     *1.29,1.66,2,2.78,3.59,5,5.99,7.74,10,12.9,16.6,20,27.8,35.9,50,   CBUG  10
     *59.9,77.4,100/COUNT,TOTBUFS,HIVAL/0/LOVAL/500/                    CBUG  11
      OUTPUT 'SAMPLE INTERVAL (IN 1.2 SEC UNITS)  '; INPUT PERIOD       CBUG  12
   20 OUTPUT 'NUMBER OF SAMPLES  '; INPUT MAXSAMP; AVAIL=LI(HRBA)/4     CBUG  13
      OUTPUT 'NUMBER OF BUFFERS PER GRAPH DIVISION  '; INPUT BUFSPDIV   CBUG  14
      IF(AVAIL/BUFSPDIV.GT.500) WRITE(108,1030) AVAIL/BUFSPDIV; GOTO 20 CBUG  15
      CALL INTTRC(100S); CALL TRUNCATE; DO 60 NUMSAMP=0,MAXSAMP-1       CBUG  16
      CALL WAIT(PERIOD); BUFS=LW(COCBUFS)                               CBUG  17
      I=BUFS/BUFSPDIV; COUNT(I)=COUNT(I)+1; TOTBUFS=TOTBUFS+BUFS        CBUG  18
      LOVAL=MIN(LOVAL,BUFS); HIVAL=MAX(HIVAL,BUFS)                      CBUG  19
   60 CONTINUE                                                          CBUG  20
  100 CALL ITIME(TIMEBUF); WRITE(108,1040) (TIMEBUF(I),I=1,16),LW(SOUIS)CBUG  21
      OUTPUT 'BUFFERS  TIMES      %  .1 .2 .5  1  2  5 10 20 50 100%'   CBUG  22
      OUTPUT ' IN USE  OBSRV  OBSRV   |  |  |  |  |  |  |  |  |  |'     CBUG  23
      DO 200 J=31,1,-1                                                  CBUG  25
  200 IF(REAL(COUNT(I)*100)/NUMSAMP.GE.CV(J)) GOTO 210                  CBUG  26
  210 WRITE(108,1010) I*BUFSPDIV+1000, (I+1)*BUFSPDIV-1+1000,           CBUG  27
     *COUNT(I), REAL(COUNT(I))*100/NUMSAMP, J-1                         CBUG  28
  230 DO 240 I=AVAIL*4,4,-4                                             CBUG  29
  240 IF(LW(COCBUF,I+1)+LW(COCBUF,I+2)+LW(COCBUF,I+3).NE.0) GO TO 250   CBUG  30
  250 WRITE(108,1020) AVAIL, I/4, TOTBUFS/NUMSAMP, LOVAL, HIVAL         CBUG  31
 1010 FORMAT(XI3'-'I3I7F7.1X10'  |'-30XN'*')                            CBUG  32
 1020 FORMAT(/I5' = # AVAILABLE'/I5' = MAXIMUM # EVER IN USE'/          CBUG  33
     *I5' = AVERAGE # IN USE'/I5' = MINIMUM # IN USE'/                  CBUG  34
     *I5' = MAXIMUM # OBSERVED IN USE')                                 CBUG  35
 1030 FORMAT(' CAN''T BE GREATER THAN 'I4)                              CBUG  36
 1040 FORMAT('1'//X16A1' - 'I5' ONLINE USERS IN SYSTEM'/); END          CBUG  37
