[net.sources.bugs] modifications to mon

korner@ut-sally.UUCP (Kim Korner) (03/08/85)

	In porting mon to our Sun machines two modules were changed
(readnames.c and vm.c). Of general interest is the rewrite of readnames.c
which reads the names of disks from /etc/mtab instead of wandering through
kernel space. A listing for the rewritten readnames.c and a diff -c listing
of vm.c follows ...

/*
 *      R E A D N A M E S
 * 
 * purpose: Reads the names of the disks from /etc/mtab
 *
 */
#include "mon.h"
#include <fstab.h>
#include <mtab.h>

read_names()
{
int	mtab_fd, i, j;
struct mtab buf;

        mtab_fd = open("/etc/mtab", 0);
        if(mtab_fd < 0) {
                printf("cannot open /etc/mtab\n");
                exit(1);
        }
	for (i = 0; i < DK_NDRIVE	/* for each device in mtab */
		    && (j = read (mtab_fd,
				  &buf, sizeof (struct mtab))) > 0; ) {
					/* don't consider the network dsk */
		if (! strcmp (buf.m_dname, "ndp0")) continue;
		for (j=0; j < i; j++)	/* weed out duplicate devices */
			if (! strncmp (dr_name[j], buf.m_dname, 3)) break;
		if (i != j) continue;	/* if duplicate */
		strncpy (dr_name[i], buf.m_dname, 3);	/* copy the unique */
                dr_unit[i++] = buf.m_dname[2] - '0';	/* guess the dev # */
	}
}


*** vm.c	Thu Mar  7 08:37:14 1985
--- vm.new	Thu Feb 14 14:08:56 1985
***************
*** 13,24
  #include "mon.h"
  #include <machine/param.h>	/* defines bytes/page */
  
- /* Temporary defines */
- #define	PROCS	2
- #define	CPUY	5
- #define	TIMEY	8
- #define	PAGE	11
- 
  vm()
  {
          register i,j;

--- 13,18 -----
  #include "mon.h"
  #include <machine/param.h>	/* defines bytes/page */
  
  vm()
  {
          register i,j;
***************
*** 27,32
          lseek(kmem, (long)namelist[X_CP_TIME].n_value, 0);
          read(kmem, s.cp_time, sizeof s.cp_time);
  	/* Check for 2nd CPU stats */
  	if (dualcpu) {
  	        lseek(kmem, (long)namelist[X_CP_TIME2].n_value, 0);
  	        read(kmem, s.cp_time2, sizeof s.cp_time2);

--- 21,27 -----
          lseek(kmem, (long)namelist[X_CP_TIME].n_value, 0);
          read(kmem, s.cp_time, sizeof s.cp_time);
  	/* Check for 2nd CPU stats */
+ #ifdef DUALCPU
  	if (dualcpu) {
  	        lseek(kmem, (long)namelist[X_CP_TIME2].n_value, 0);
  	        read(kmem, s.cp_time2, sizeof s.cp_time2);
***************
*** 31,36
  	        lseek(kmem, (long)namelist[X_CP_TIME2].n_value, 0);
  	        read(kmem, s.cp_time2, sizeof s.cp_time2);
  	}
          lseek(kmem, (long)namelist[X_DK_XFER].n_value, 0);
          read(kmem, s.dk_xfer, sizeof s.dk_xfer);
          lseek(kmem, (long)namelist[X_RATE].n_value, 0);

--- 26,32 -----
  	        lseek(kmem, (long)namelist[X_CP_TIME2].n_value, 0);
  	        read(kmem, s.cp_time2, sizeof s.cp_time2);
  	}
+ #endif DUALCPU
          lseek(kmem, (long)namelist[X_DK_XFER].n_value, 0);
          read(kmem, s.dk_xfer, sizeof s.dk_xfer);
          lseek(kmem, (long)namelist[X_RATE].n_value, 0);
***************
*** 44,49
                  t = s.cp_time[i];
                  s.cp_time[i] -= s1.cp_time[i];
                  s1.cp_time[i] = t;
          	if (dualcpu) {
  	                t = s.cp_time2[i];
          	        s.cp_time2[i] -= s1.cp_time2[i];

--- 40,46 -----
                  t = s.cp_time[i];
                  s.cp_time[i] -= s1.cp_time[i];
                  s1.cp_time[i] = t;
+ #ifdef DUALCPU
          	if (dualcpu) {
  	                t = s.cp_time2[i];
          	        s.cp_time2[i] -= s1.cp_time2[i];
***************
*** 49,54
          	        s.cp_time2[i] -= s1.cp_time2[i];
                  	s1.cp_time2[i] = t;
          	}
                  etime += s.cp_time[i];	/* interval must count 1 CPU only */
          }
          if(etime == 0.)

--- 46,52 -----
          	        s.cp_time2[i] -= s1.cp_time2[i];
                  	s1.cp_time2[i] = t;
          	}
+ #endif DUALCPU
                  etime += s.cp_time[i];	/* interval must count 1 CPU only */
          }
          if(etime == 0.)
***************
*** 56,62
          etime /= (float) hz;
  
  	/* Display the procs line */
!         mvprintw(PROCS+1,6,"%2d%2d%2d%2d %2d", total.t_rq, total.t_dw, total.t_pw, total.t_sw, total.t_sl);
  #define pgtok(a) ((a)*NBPG/1024)
          mvprintw(PROCS+1,23,"%5d %5d", pgtok(total.t_rm), pgtok(total.t_arm) );
          mvprintw(PROCS+1,34,"%6d %5d", pgtok(total.t_vm), pgtok(total.t_avm) );

--- 54,60 -----
          etime /= (float) hz;
  
  	/* Display the procs line */
!         mvprintw(PROCY+1,6,"%2d%2d%2d%2d %2d", total.t_rq, total.t_dw, total.t_pw, total.t_sw, total.t_sl);
  #define pgtok(a) ((a)*NBPG/1024)
          mvprintw(PROCY+1,23,"%5d %5d", pgtok(total.t_rm), pgtok(total.t_arm) );
          mvprintw(PROCY+1,34,"%6d %5d", pgtok(total.t_vm), pgtok(total.t_avm) );
***************
*** 58,66
  	/* Display the procs line */
          mvprintw(PROCS+1,6,"%2d%2d%2d%2d %2d", total.t_rq, total.t_dw, total.t_pw, total.t_sw, total.t_sl);
  #define pgtok(a) ((a)*NBPG/1024)
!         mvprintw(PROCS+1,23,"%5d %5d", pgtok(total.t_rm), pgtok(total.t_arm) );
!         mvprintw(PROCS+1,34,"%6d %5d", pgtok(total.t_vm), pgtok(total.t_avm) );
!         mvprintw(PROCS+1,47,"%5d", pgtok(total.t_free));
  
  	/* Display paging info */
          mvprintw(PAGE+1,6,"%4d %3d",

--- 56,64 -----
  	/* Display the procs line */
          mvprintw(PROCY+1,6,"%2d%2d%2d%2d %2d", total.t_rq, total.t_dw, total.t_pw, total.t_sw, total.t_sl);
  #define pgtok(a) ((a)*NBPG/1024)
!         mvprintw(PROCY+1,23,"%5d %5d", pgtok(total.t_rm), pgtok(total.t_arm) );
!         mvprintw(PROCY+1,34,"%6d %5d", pgtok(total.t_vm), pgtok(total.t_avm) );
!         mvprintw(PROCY+1,47,"%5d", pgtok(total.t_free));
  
  	/* Display paging info */
          mvprintw(PAGEY+1,6,"%4d %3d",
***************
*** 63,69
          mvprintw(PROCS+1,47,"%5d", pgtok(total.t_free));
  
  	/* Display paging info */
!         mvprintw(PAGE+1,6,"%4d %3d",
                  (rate.v_pgrec - (rate.v_xsfrec+rate.v_xifrec)),
                  (rate.v_xsfrec+rate.v_xifrec));
          mvprintw(PAGE+1,14,"%4d %4d", pgtok(rate.v_pgpgin),

--- 61,67 -----
          mvprintw(PROCY+1,47,"%5d", pgtok(total.t_free));
  
  	/* Display paging info */
!         mvprintw(PAGEY+1,6,"%4d %3d",
                  (rate.v_pgrec - (rate.v_xsfrec+rate.v_xifrec)),
                  (rate.v_xsfrec+rate.v_xifrec));
          mvprintw(PAGEY+1,14,"%4d %4d", pgtok(rate.v_pgpgin),
***************
*** 66,72
          mvprintw(PAGE+1,6,"%4d %3d",
                  (rate.v_pgrec - (rate.v_xsfrec+rate.v_xifrec)),
                  (rate.v_xsfrec+rate.v_xifrec));
!         mvprintw(PAGE+1,14,"%4d %4d", pgtok(rate.v_pgpgin),
                  pgtok(rate.v_pgpgout));
  	/* operations per time is (pgin + pgout)  */
          mvprintw(PAGE+1,24,"%4d", (pgtok(rate.v_pgin)+

--- 64,70 -----
          mvprintw(PAGEY+1,6,"%4d %3d",
                  (rate.v_pgrec - (rate.v_xsfrec+rate.v_xifrec)),
                  (rate.v_xsfrec+rate.v_xifrec));
!         mvprintw(PAGEY+1,14,"%4d %4d", pgtok(rate.v_pgpgin),
                  pgtok(rate.v_pgpgout));
  	/* operations per time is (pgin + pgout)  */
          mvprintw(PAGEY+1,25,"%4d", (pgtok(rate.v_pgin)+
***************
*** 69,75
          mvprintw(PAGE+1,14,"%4d %4d", pgtok(rate.v_pgpgin),
                  pgtok(rate.v_pgpgout));
  	/* operations per time is (pgin + pgout)  */
!         mvprintw(PAGE+1,24,"%4d", (pgtok(rate.v_pgin)+
                  pgtok(rate.v_pgout)));
          mvprintw(PAGE+1,29,"%4d %4d %4d", pgtok(rate.v_dfree)
                  , pgtok(deficit), rate.v_scan);

--- 67,73 -----
          mvprintw(PAGEY+1,14,"%4d %4d", pgtok(rate.v_pgpgin),
                  pgtok(rate.v_pgpgout));
  	/* operations per time is (pgin + pgout)  */
!         mvprintw(PAGEY+1,25,"%4d", (pgtok(rate.v_pgin)+
                  pgtok(rate.v_pgout)));
          mvprintw(PAGEY+1,29,"%4d %4d %4d", pgtok(rate.v_dfree)
                  , pgtok(deficit), rate.v_scan);
***************
*** 71,77
  	/* operations per time is (pgin + pgout)  */
          mvprintw(PAGE+1,24,"%4d", (pgtok(rate.v_pgin)+
                  pgtok(rate.v_pgout)));
!         mvprintw(PAGE+1,29,"%4d %4d %4d", pgtok(rate.v_dfree)
                  , pgtok(deficit), rate.v_scan);
  
  	/* Display CPU info */

--- 69,75 -----
  	/* operations per time is (pgin + pgout)  */
          mvprintw(PAGEY+1,25,"%4d", (pgtok(rate.v_pgin)+
                  pgtok(rate.v_pgout)));
!         mvprintw(PAGEY+1,29,"%4d %4d %4d", pgtok(rate.v_dfree)
                  , pgtok(deficit), rate.v_scan);
  
  	/* Display CPU info */
***************
*** 75,81
                  , pgtok(deficit), rate.v_scan);
  
  	/* Display CPU info */
!         mvprintw(CPUY+1,4,"%4d  %4d", (rate.v_intr) - hz, rate.v_syscall);
          mvprintw(CPUY+1,17,"%4d", rate.v_swtch);
  	if (dualcpu)
  	        mvprintw(CPUY+1,30,"%4d", rate.v_swtch2);

--- 73,83 -----
                  , pgtok(deficit), rate.v_scan);
  
  	/* Display CPU info */
! #ifndef sun
!         mvprintw(CPUY+1,5,"%4d   %4d", (rate.v_intr) - hz, rate.v_syscall);
! #else
!         mvprintw(CPUY+1,5,"%4d   %4d", rate.v_intr, rate.v_syscall);
! #endif
          mvprintw(CPUY+1,17,"%4d", rate.v_swtch);
  #ifdef DUALCPU
  	if (dualcpu)
***************
*** 77,82
  	/* Display CPU info */
          mvprintw(CPUY+1,4,"%4d  %4d", (rate.v_intr) - hz, rate.v_syscall);
          mvprintw(CPUY+1,17,"%4d", rate.v_swtch);
  	if (dualcpu)
  	        mvprintw(CPUY+1,30,"%4d", rate.v_swtch2);
          cputime();

--- 79,85 -----
          mvprintw(CPUY+1,5,"%4d   %4d", rate.v_intr, rate.v_syscall);
  #endif
          mvprintw(CPUY+1,17,"%4d", rate.v_swtch);
+ #ifdef DUALCPU
  	if (dualcpu)
  	        mvprintw(CPUY+1,30,"%4d", rate.v_swtch2);
  #endif DUALCPU
***************
*** 79,84
          mvprintw(CPUY+1,17,"%4d", rate.v_swtch);
  	if (dualcpu)
  	        mvprintw(CPUY+1,30,"%4d", rate.v_swtch2);
          cputime();
  
  	/* Display additional stuff */

--- 82,88 -----
  #ifdef DUALCPU
  	if (dualcpu)
  	        mvprintw(CPUY+1,30,"%4d", rate.v_swtch2);
+ #endif DUALCPU
          cputime();
  
  	/* Display additional stuff */
***************
*** 82,88
          cputime();
  
  	/* Display additional stuff */
! 	mvprintw(PAGE+4,6,"%4d%4d %4d%4d %4d%4d %4d %4d%4d",
  		rate.v_nexfod, rate.v_exfod,
  		rate.v_nzfod, rate.v_zfod,
  		rate.v_nvrfod, rate.v_vrfod,

--- 86,92 -----
          cputime();
  
  	/* Display additional stuff */
! 	mvprintw(PAGEY+4,6,"%4d%4d %4d%4d %4d%4d %4d %4d%4d",
  		rate.v_nexfod, rate.v_exfod,
  		rate.v_nzfod, rate.v_zfod,
  		rate.v_nvrfod, rate.v_vrfod,
***************
*** 109,115
  		t = 1.;
  	if (t2 == 0.)
  		t2 = 1.;
!         x = 6;
          for(i=0; i<CPUSTATES; i++){
                  mvprintw(TIMEY+1,x,"%3.0f", 100 * s.cp_time[i]/t);
          	if (dualcpu)

--- 113,119 -----
  		t = 1.;
  	if (t2 == 0.)
  		t2 = 1.;
!         x = 7;
          for(i=0; i<CPUSTATES; i++){
                  mvprintw(TIMEY+1,x,"%3.0f", 100 * s.cp_time[i]/t);
  #ifdef DUALCPU
***************
*** 112,117
          x = 6;
          for(i=0; i<CPUSTATES; i++){
                  mvprintw(TIMEY+1,x,"%3.0f", 100 * s.cp_time[i]/t);
          	if (dualcpu)
  	                mvprintw(TIMEY+1,x+27,"%3.0f", 100 * s.cp_time2[i]/t2);
                  x += 5;

--- 116,122 -----
          x = 7;
          for(i=0; i<CPUSTATES; i++){
                  mvprintw(TIMEY+1,x,"%3.0f", 100 * s.cp_time[i]/t);
+ #ifdef DUALCPU
          	if (dualcpu)
  	                mvprintw(TIMEY+1,x+27,"%3.0f", 100 * s.cp_time2[i]/t2);
  #endif DUALCPU
***************
*** 114,119
                  mvprintw(TIMEY+1,x,"%3.0f", 100 * s.cp_time[i]/t);
          	if (dualcpu)
  	                mvprintw(TIMEY+1,x+27,"%3.0f", 100 * s.cp_time2[i]/t2);
                  x += 5;
          }
  }

--- 119,125 -----
  #ifdef DUALCPU
          	if (dualcpu)
  	                mvprintw(TIMEY+1,x+27,"%3.0f", 100 * s.cp_time2[i]/t2);
+ #endif DUALCPU
                  x += 5;
          }
  }