[comp.sources.x] v03i101: Xaw/Load.c and related patches, Patch1

argv@island.uu.net (Dan Heller) (05/04/89)

Submitted-by: jim@eda.com
Posting-number: Volume 3, Issue 101
Archive-name: xaw.load.patch/patch1

[ I didn't try this -- argv ]

#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create:
#	README
#	XawLoad.diff
#	xperforig.diff
#	xperfdavy.diff
# This archive created: Wed Apr 26 12:25:33 1989
export PATH; PATH=/bin:/usr/bin:$PATH
if test -f 'README'
then
	echo shar: "will not over-write existing file 'README'"
else
sed 's/^X//' << \SHAR_EOF > 'README'
XThis is just some trivial patches to make the xperfmon and load meter
Xwork on the sun386i. The notes below by Dave Curry concerning adding
Xthe -DSUN4_0 and -lkvm apply only to the xperfmon changes.
X
X	jim@eda.com
X
XEnclosed find:
X        README          - this file
X        XawLoad.diff    - diffs to Xaw/Load.c for the sun386 
X        xperforig.diff  - diffs to contrib/clients/xperfmon/system.c
X                          for the sun386 and sunOS4.0. These include the
X                          patches by Dave Curry <davy@riacs.edu> for sunOS4.0.
X                          This diff is between the distributed code and mine.
X        xperfdavy.diff  - diffs between the system.c with Dave's patches
X		                  already applied, and mine.
X
X############## Original README file from Dave Curry ##################
X
XThe distributed X.V11R3 xperfmon does not run under SunOS 4.0, because
XSun changed things to access the kernel via the -lkvm library.
X
XThe other file in this shell archive, "diffs", contains context diffs
Xfor core/contrib/clients/xperfmon/system.c to make xperfmon run under
XSunOS 4.0.
X
XIn addition to applying the diffs, you'll need to modify the Makefile
X(or Imakefile or whatever) to:
X
X	1. Add "-DSUN4_0" to CFLAGS.
X	2. Add "-lkvm" to the load libraries.
X
XSomebody really needs to rewrite this thing to be truly X11-like; it
Xdoesn't use the resource database or anything else.  Oh well.
X
XDave Curry
XResearch Institute for Advanced Computer Science
XMail Stop 230-5
XNASA Ames Research Center
XMoffett Field, CA 94035
Xdavy@riacs.edu
SHAR_EOF
fi
if test -f 'XawLoad.diff'
then
	echo shar: "will not over-write existing file 'XawLoad.diff'"
else
sed 's/^X//' << \SHAR_EOF > 'XawLoad.diff'
X*** /tmp/,RCSt1a05252	Wed Apr 26 08:25:22 1989
X--- Load.c	Wed Apr 26 08:23:55 1989
X***************
X*** 491,497 ****
X--- 491,501 ----
X  #define KERNEL_FILE "/dynix"
X  #endif /* sequent */
X  #ifdef sun
X+ #ifdef sun386
X+ # define KERNEL_LOAD_VARIABLE "avenrun"
X+ #else
X  # define KERNEL_LOAD_VARIABLE "_avenrun"
X+ #endif /* sun386 */
X  #endif /* sun */
X  /*
X   * provide default for everyone else
X***************
X*** 553,559 ****
X--- 557,567 ----
X  	
X  	if(!init)   {
X  	    nlist( KERNEL_FILE, namelist);
X+ #ifdef sun386
X+ 	    if ((namelist[LOADAV].n_type == 0) && (namelist[LOADAV].n_value == 0)){
X+ #else
X  	    if (namelist[LOADAV].n_type == 0){
X+ #endif
X  		xload_error("cannot get name list from", KERNEL_FILE);
X  		exit(-1);
X  	    }
SHAR_EOF
fi
if test -f 'xperforig.diff'
then
	echo shar: "will not over-write existing file 'xperforig.diff'"
else
sed 's/^X//' << \SHAR_EOF > 'xperforig.diff'
X*** /tmp/,RCSt1a05308	Wed Apr 26 08:35:39 1989
X--- system.c	Wed Apr 26 08:35:22 1989
X***************
X*** 16,21 ****
X--- 16,25 ----
X  #include <sys/socket.h>
X  #include <sys/vm.h>
X  #include <sys/dk.h>
X+ #ifdef SUN4_0
X+ #include <kvm.h>
X+ #include <fcntl.h>
X+ #endif
X  #include <nlist.h>
X  #include <sys/buf.h>
X  #ifdef vax
X***************
X*** 59,66 ****
X--- 63,109 ----
X  int debug = 0;
X  #define max(a,b) (a>b ? a:b)
X  
X+ #ifdef sun386
X  struct nlist nl[] = {
X  #define X_CPTIME	0
X+ 	{ "cp_time" },
X+ #define X_RATE	  1
X+ 	{ "rate" },
X+ #define X_TOTAL	 2
X+ 	{ "total" },
X+ #define X_DEFICIT       3
X+ 	{ "deficit" },
X+ #define X_FORKSTAT      4
X+ 	{ "forkstat" },
X+ #define X_SUM	   5
X+ 	{ "sum" },
X+ #define X_FIRSTFREE     6
X+ 	{ "firstfree" },
X+ #define X_MAXFREE       7
X+ 	{ "maxfree" },
X+ #define X_BOOTTIME      8
X+ 	{ "boottime" },
X+ #define X_DKXFER	9
X+ 	{ "dk_xfer" },
X+ #define X_REC	   10
X+ 	{ "rectime" },
X+ #define X_PGIN	  11
X+ 	{ "pgintime" },
X+ #define X_HZ	    12
X+ 	{ "hz" },
X+ #define X_MBDINIT       13
X+ 	{ "mbdinit" },
X+ #define N_IFNET       14
X+ 	{ "ifnet" },
X+ #define X_UBDINIT	15
X+ 	{ "ubdinit" },
X+ #define X_IOCINIT	16
X+ 	{ "ioccdinit" },
X+ 	{ "" },
X+ };
X+ #else
X+ struct nlist nl[] = {
X+ #define X_CPTIME	0
X  	{ "_cp_time" },
X  #define X_RATE	  1
X  	{ "_rate" },
X***************
X*** 96,101 ****
X--- 139,145 ----
X  	{ "_ioccdinit" },
X  	{ "" },
X  };
X+ #endif
X  
X  char dr_name[DK_NDRIVE][10];
X  char dr_unit[DK_NDRIVE];
X***************
X*** 129,135 ****
X--- 173,184 ----
X  int nintv;
X  long t;
X  
X+ #ifdef SUN4_0
X+ kvm_t *kd;
X+ #define steal(where, var) kvm_read(kd, where, &var, sizeof var);
X+ #else
X  #define steal(where, var) lseek(mf, where, 0); read(mf, &var, sizeof var);
X+ #endif
X  #define pgtok(a) ((a)*NBPG/1024)
X  
X  void set_sys_defaults()
X***************
X*** 223,229 ****
X--- 272,283 ----
X    init_stat(USER_CPU_PERCENTAGE, 0, 100, "User", " CPU");
X    init_stat(SYSTEM_CPU_PERCENTAGE, 0, 100, "System", " CPU");
X    init_stat(IDLE_CPU_PERCENTAGE, 0, 100, "Idle", " CPU");
X+ #ifdef SUN4_0
X+   /* Kludge - maxfree isn't kept on Sun 4.0 (sigh) */
X+   init_stat(FREE_MEM, 0, max(pgtok(maxfree), (2 * pgtok(total.t_free))), "Free", " memory");
X+ #else
X    init_stat(FREE_MEM, 0, pgtok(maxfree), "Free", " memory");
X+ #endif
X    init_stat(DISK_TRANSFERS, 0, 40, "Disk", " transfers");
X    init_stat(INTERRUPTS, 0, 60, "Interrupts", "");
X    init_stat(INPUT_PACKETS, 0, (have_disk ? 20 : 40), "Input", " packets");
X***************
X*** 317,326 ****
X--- 371,385 ----
X  
X  	register int i;
X  
X+ #ifdef SUN4_0
X+ 	kvm_read(kd, (long)nl[X_CPTIME].n_value, s.time, sizeof s.time);
X+ 	kvm_read(kd, (long)nl[X_DKXFER].n_value, s.xfer, sizeof s.xfer);
X+ #else
X  	lseek(mf, (long)nl[X_CPTIME].n_value, 0);
X  	read(mf, s.time, sizeof s.time);
X  	lseek(mf, (long)nl[X_DKXFER].n_value, 0);
X  	read(mf, s.xfer, sizeof s.xfer);
X+ #endif
X  	if (nintv != 1) {
X  		steal((long)nl[X_SUM].n_value, rate);
X  	} 
X***************
X*** 378,383 ****
X--- 437,454 ----
X  	register int i;
X  	int nintv;
X  
X+ #ifdef SUN4_0
X+ 	if ((kd = kvm_open(kernel_name, NULL, NULL, O_RDONLY, "xperfmon")) == NULL)
X+ 		exit(1);
X+ #ifdef sun386
X+ 	if ((kvm_nlist(kd, nl) < 0) || ((nl[0].n_type == 0) && (nl[0].n_value == 0))) {
X+ #else
X+ 	if ((kvm_nlist(kd, nl) < 0) || (nl[0].n_type == 0)) {
X+ #endif
X+ 		fprintf(stderr, "no %s namelist\n", kernel_name);
X+ 		exit(1);
X+ 	}
X+ #else
X  	nlist(kernel_name, nl);
X  	if(nl[0].n_type == 0) {
X  		fprintf(stderr, "no %s namelist\n", kernel_name);
X***************
X*** 388,393 ****
X--- 459,465 ----
X  		fprintf(stderr, "cannot open %s\n", memory_name);
X  		exit(1);
X  	}
X+ #endif
X  	steal((long)nl[X_MAXFREE].n_value, maxfree);
X  	steal((long)nl[X_BOOTTIME].n_value, boottime);
X  	steal((long)nl[X_HZ].n_value, hz);
X***************
X*** 434,440 ****
X  	mp = (struct mba_device *) nl[X_MBDINIT].n_value;
X  	up = (struct uba_device *) nl[X_UBDINIT].n_value;
X  	if (up == 0) {
X! 		fprintf(stderr, "perfmon: Disk init info not in namelist\n");
X  		exit(1);
X  	}
X  	if(mp) for (;;) {
X--- 506,512 ----
X  	mp = (struct mba_device *) nl[X_MBDINIT].n_value;
X  	up = (struct uba_device *) nl[X_UBDINIT].n_value;
X  	if (up == 0) {
X! 		fprintf(stderr, "xperfmon: Disk init info not in namelist\n");
X  		exit(1);
X  	}
X  	if(mp) for (;;) {
X***************
X*** 473,479 ****
X  
X  	mp = (struct mb_device *) nl[X_MBDINIT].n_value;
X  	if (mp == 0) {
X! 		fprintf(stderr, "vmstat: Disk init info not in namelist\n");
X  		exit(1);
X  	}
X  	for (;;) {
X--- 545,551 ----
X  
X  	mp = (struct mb_device *) nl[X_MBDINIT].n_value;
X  	if (mp == 0) {
X! 		fprintf(stderr, "xperfmon: Disk init info not in namelist\n");
X  		exit(1);
X  	}
X  	for (;;) {
X***************
X*** 501,507 ****
X  
X  	mp = (struct iocc_device *) nl[X_IOCINIT].n_value;
X  	if (mp == 0) {
X! 		fprintf(stderr, "vmstat: Disk init info not in namelist\n");
X  		exit(1);
X  	}
X  	for (;;) {
X--- 573,579 ----
X  
X  	mp = (struct iocc_device *) nl[X_IOCINIT].n_value;
X  	if (mp == 0) {
X! 		fprintf(stderr, "xperfmon: Disk init info not in namelist\n");
X  		exit(1);
X  	}
X  	for (;;) {
SHAR_EOF
fi
if test -f 'xperfdavy.diff'
then
	echo shar: "will not over-write existing file 'xperfdavy.diff'"
else
sed 's/^X//' << \SHAR_EOF > 'xperfdavy.diff'
X*** /tmp/,RCSt1a05313	Wed Apr 26 08:35:43 1989
X--- system.c	Wed Apr 26 08:35:22 1989
X***************
X*** 63,70 ****
X--- 63,109 ----
X  int debug = 0;
X  #define max(a,b) (a>b ? a:b)
X  
X+ #ifdef sun386
X  struct nlist nl[] = {
X  #define X_CPTIME	0
X+ 	{ "cp_time" },
X+ #define X_RATE	  1
X+ 	{ "rate" },
X+ #define X_TOTAL	 2
X+ 	{ "total" },
X+ #define X_DEFICIT       3
X+ 	{ "deficit" },
X+ #define X_FORKSTAT      4
X+ 	{ "forkstat" },
X+ #define X_SUM	   5
X+ 	{ "sum" },
X+ #define X_FIRSTFREE     6
X+ 	{ "firstfree" },
X+ #define X_MAXFREE       7
X+ 	{ "maxfree" },
X+ #define X_BOOTTIME      8
X+ 	{ "boottime" },
X+ #define X_DKXFER	9
X+ 	{ "dk_xfer" },
X+ #define X_REC	   10
X+ 	{ "rectime" },
X+ #define X_PGIN	  11
X+ 	{ "pgintime" },
X+ #define X_HZ	    12
X+ 	{ "hz" },
X+ #define X_MBDINIT       13
X+ 	{ "mbdinit" },
X+ #define N_IFNET       14
X+ 	{ "ifnet" },
X+ #define X_UBDINIT	15
X+ 	{ "ubdinit" },
X+ #define X_IOCINIT	16
X+ 	{ "ioccdinit" },
X+ 	{ "" },
X+ };
X+ #else
X+ struct nlist nl[] = {
X+ #define X_CPTIME	0
X  	{ "_cp_time" },
X  #define X_RATE	  1
X  	{ "_rate" },
X***************
X*** 100,105 ****
X--- 139,145 ----
X  	{ "_ioccdinit" },
X  	{ "" },
X  };
X+ #endif
X  
X  char dr_name[DK_NDRIVE][10];
X  char dr_unit[DK_NDRIVE];
X***************
X*** 400,406 ****
X--- 440,450 ----
X  #ifdef SUN4_0
X  	if ((kd = kvm_open(kernel_name, NULL, NULL, O_RDONLY, "xperfmon")) == NULL)
X  		exit(1);
X+ #ifdef sun386
X+ 	if ((kvm_nlist(kd, nl) < 0) || ((nl[0].n_type == 0) && (nl[0].n_value == 0))) {
X+ #else
X  	if ((kvm_nlist(kd, nl) < 0) || (nl[0].n_type == 0)) {
X+ #endif
X  		fprintf(stderr, "no %s namelist\n", kernel_name);
X  		exit(1);
X  	}
SHAR_EOF
fi
exit 0
#	End of shell archive
-- 
Jim Budler   address = uucp: ...!{decwrl,uunet}!eda!jim
					 domain: jim@eda.com
			 voice	 = +1 408 986-9585
			 fax	 = +1 408 748-1032