summaryrefslogtreecommitdiff
path: root/sysutils/xperfmon3
diff options
context:
space:
mode:
authorSatoshi Asami <asami@FreeBSD.org>1995-11-14 22:48:42 +0000
committerSatoshi Asami <asami@FreeBSD.org>1995-11-14 22:48:42 +0000
commitb0e19222a0d342a863422771541552db302ff073 (patch)
tree3abfcdfe39adb4a82cb971d87fdacde58dc1a9e1 /sysutils/xperfmon3
parent(1) CATEGORIES is "emulation", not "emulators" (I know, I know! I'm going (diff)
Make it work again.
Submitted by: joerg
Notes
Notes: svn path=/head/; revision=2418
Diffstat (limited to 'sysutils/xperfmon3')
-rw-r--r--sysutils/xperfmon3/files/patch-aa991
-rw-r--r--sysutils/xperfmon3/files/patch-ab90
2 files changed, 521 insertions, 560 deletions
diff --git a/sysutils/xperfmon3/files/patch-aa b/sysutils/xperfmon3/files/patch-aa
index b1bb2a9aa9a8..c73a0099d29f 100644
--- a/sysutils/xperfmon3/files/patch-aa
+++ b/sysutils/xperfmon3/files/patch-aa
@@ -1,561 +1,432 @@
-diff -c -N ../xperfmon++/DEADJOE ./DEADJOE
-*** ../xperfmon++/DEADJOE Thu Jan 1 00:00:00 1970
---- ./DEADJOE Tue Mar 14 21:09:19 1995
-***************
-*** 0 ****
---- 1,9 ----
-+
-+ *** Modified files in JOE when it aborted on Tue Mar 14 21:09:19 1995
-+ *** JOE was aborted by signal 15
-+
-+ *** File '(Unnamed)'
-+ bsd_system.c
-+
-+ *** File '(Unnamed)'
-+ nfs
-diff -c -N ../xperfmon++/Imakefile ./Imakefile
-*** ../xperfmon++/Imakefile Wed Jul 27 20:29:29 1994
---- ./Imakefile Wed Mar 15 12:47:26 1995
-***************
-*** 17,31 ****
- SYS_MODULE= sgi_system
- #endif
+diff -u ../xperfmon++.orig/Imakefile ./Imakefile
+--- ../xperfmon++.orig/Imakefile Wed Jul 27 22:29:29 1994
++++ ./Imakefile Sun Nov 12 00:07:24 1995
+@@ -17,15 +17,21 @@
+ SYS_MODULE= sgi_system
+ #endif
+
+-EXTRA_LIBRARIES = $(SUNFLAGS) $(MIPSFLAGS) $(SGIFLAGS)
++#if defined (i386BsdArchitecture)
++BSDFLAGS= -lkvm
++SYS_MODULE= bsd_system
++CC= gcc
++#endif
++
++EXTRA_LIBRARIES = $(SUNFLAGS) $(MIPSFLAGS) $(SGIFLAGS) $(BSDFLAGS)
+
+ INSTPGMFLAGS = $(INSTKMEMFLAGS)
+ LOCAL_LIBRARIES = $(XAWLIB) $(XTOOLLIB) $(XMULIB) $(XLIB)
+ INCLUDES = -I. -I$(TOOLKITSRC) -I$(TOP) -I$(TOP)/X11
+-# INCLUDES = -I. -I$(TOOLKITSRC) -I$(TOP) -I$(TOP)/X11 -I/usr/include/bsd
+- CDEBUGFLAGS = -O
+- SRCS = TimeChart.c StripChart.c misc.c $(SYS_MODULE).c xperfmon.c nfs.c
+- OBJS = TimeChart.o StripChart.o misc.o $(SYS_MODULE).o xperfmon.o nfs.o
++# SRCS = TimeChart.c StripChart.c misc.c $(SYS_MODULE).c xperfmon.c nfs.c
++# OBJS = TimeChart.o StripChart.o misc.o $(SYS_MODULE).o xperfmon.o nfs.o
++ SRCS = TimeChart.c StripChart.c misc.c $(SYS_MODULE).c xperfmon.c
++ OBJS = TimeChart.o StripChart.o misc.o $(SYS_MODULE).o xperfmon.o
+
+ ComplexProgramTarget(xperfmon++)
+
+diff -u ../xperfmon++.orig/README ./README
+--- ../xperfmon++.orig/README Wed Jul 27 22:29:30 1994
++++ ./README Sun Nov 12 00:07:24 1995
+@@ -18,3 +18,20 @@
+ Research Center, rsmith@proteus.arc.nasa.gov. Imake will build for correct
+ O/S if x11r5 is fully installed in all the right places.
+
++
++3-15-95 Completely new port of systemdependent file (bsd_system.c) for FreeBSD-2.X
++ by Lars Köller @University of Rostock, Germany.
++ E-Mail: <lars.koeller@odie.physik2.uni-rostock.de>
++
++8-16-95 Quick and dirty workaround of -geometry option bug.
++ But there are still some side effects when changing the geometry.
++ Fix memory leak in bsd_system.c
++ by Lars Köller @University of Rostock, Germany.
++ E-Mail: <lars.koeller@odie.physik2.uni-rostock.de>
++
++30-10-95 Change 'Free Mem' graph to 'Free Swap' cause the FreeBSD memory system
++ tries to minimize the free unused amount of memory.
++ Include basic support for FreeBSD > 2.1.
++ Number of interrupts now independent from
++ by Lars Köller @University of Rostock, Germany.
++ E-Mail: <lars.koeller@odie.physik2.uni-rostock.de>
+diff -u ../xperfmon++.orig/TimeChart.h ./TimeChart.h
+--- ../xperfmon++.orig/TimeChart.h Wed Jul 27 22:29:31 1994
++++ ./TimeChart.h Sun Nov 12 00:07:24 1995
+@@ -88,12 +88,12 @@
+ #define XtCFillRect "FillRect"
+
+ #define XtNgetValue "getValue"
+-#define XtNhighlight "highlight"
++/* #define XtNhighlight "highlight" */
+ #define XtNjumpScroll "jumpScroll"
+ #define XtNminScale "minScale"
+ #define XtNscale "scale"
+ #define XtNfillRect "fillRect"
+-#define XtNupdate "update"
++/* #define XtNupdate "update" */
+ #define XtNvmunix "vmunix"
-! EXTRA_LIBRARIES = $(SUNFLAGS) $(MIPSFLAGS) $(SGIFLAGS)
-
- INSTPGMFLAGS = $(INSTKMEMFLAGS)
- LOCAL_LIBRARIES = $(XAWLIB) $(XTOOLLIB) $(XMULIB) $(XLIB)
- INCLUDES = -I. -I$(TOOLKITSRC) -I$(TOP) -I$(TOP)/X11
-! # INCLUDES = -I. -I$(TOOLKITSRC) -I$(TOP) -I$(TOP)/X11 -I/usr/include/bsd
-! CDEBUGFLAGS = -O
-! SRCS = TimeChart.c StripChart.c misc.c $(SYS_MODULE).c xperfmon.c nfs.c
-! OBJS = TimeChart.o StripChart.o misc.o $(SYS_MODULE).o xperfmon.o nfs.o
-
- ComplexProgramTarget(xperfmon++)
-
---- 17,37 ----
- SYS_MODULE= sgi_system
- #endif
-
-! #if defined (i386BsdArchitecture)
-! BSDFLAGS= -lkvm
-! SYS_MODULE= bsd_system
-! CC= gcc
-! #endif
-!
-! EXTRA_LIBRARIES = $(SUNFLAGS) $(MIPSFLAGS) $(SGIFLAGS) $(BSDFLAGS)
-
- INSTPGMFLAGS = $(INSTKMEMFLAGS)
- LOCAL_LIBRARIES = $(XAWLIB) $(XTOOLLIB) $(XMULIB) $(XLIB)
- INCLUDES = -I. -I$(TOOLKITSRC) -I$(TOP) -I$(TOP)/X11
-! # SRCS = TimeChart.c StripChart.c misc.c $(SYS_MODULE).c xperfmon.c nfs.c
-! # OBJS = TimeChart.o StripChart.o misc.o $(SYS_MODULE).o xperfmon.o nfs.o
-! SRCS = TimeChart.c StripChart.c misc.c $(SYS_MODULE).c xperfmon.c
-! OBJS = TimeChart.o StripChart.o misc.o $(SYS_MODULE).o xperfmon.o
-
- ComplexProgramTarget(xperfmon++)
-
-diff -c -N ../xperfmon++/README ./README
-*** ../xperfmon++/README Wed Jul 27 20:29:30 1994
---- ./README Wed Mar 15 12:42:44 1995
-***************
-*** 18,20 ****
---- 18,24 ----
- Research Center, rsmith@proteus.arc.nasa.gov. Imake will build for correct
- O/S if x11r5 is fully installed in all the right places.
-
-+
-+ 3-15-95 Completely new port of systemdependent file (bsd_system.c) for FreeBSD-2.X
-+ by Lars Köller @University of Rostock, Germany.
-+ E-Mail: <lars.koeller@odie.physik2.uni-rostock.de>
-diff -c -N ../xperfmon++/TimeChart.h ./TimeChart.h
-*** ../xperfmon++/TimeChart.h Wed Jul 27 20:29:31 1994
---- ./TimeChart.h Thu Mar 9 15:59:28 1995
-***************
-*** 88,99 ****
- #define XtCFillRect "FillRect"
-
- #define XtNgetValue "getValue"
-! #define XtNhighlight "highlight"
- #define XtNjumpScroll "jumpScroll"
- #define XtNminScale "minScale"
- #define XtNscale "scale"
- #define XtNfillRect "fillRect"
-! #define XtNupdate "update"
- #define XtNvmunix "vmunix"
-
- typedef struct _TimeChartRec *TimeChartWidget;
---- 88,99 ----
- #define XtCFillRect "FillRect"
-
- #define XtNgetValue "getValue"
-! /* #define XtNhighlight "highlight" */
- #define XtNjumpScroll "jumpScroll"
- #define XtNminScale "minScale"
- #define XtNscale "scale"
- #define XtNfillRect "fillRect"
-! /* #define XtNupdate "update" */
- #define XtNvmunix "vmunix"
-
- typedef struct _TimeChartRec *TimeChartWidget;
-diff -c -N ../xperfmon++/XPerfmon++.ad.FreeBSD ./XPerfmon++.ad.FreeBSD
-*** ../xperfmon++/XPerfmon++.ad.FreeBSD Thu Jan 1 00:00:00 1970
---- ./XPerfmon++.ad.FreeBSD Wed Mar 15 10:26:56 1995
-***************
-*** 0 ****
---- 1,37 ----
-+ ! the following specification would set all highAlarm values to 99998.
-+ ! this will turn on a green color background for all graphs, even if no other
-+ ! resources are set for that graph. Note that if this specification is
-+ ! commented out, the "NFS Server" graph background will be the application
-+ ! default color, unless some other resource file has specified it.
-+ ! *PerfChart.highAlarm: 99998
-+ *perfChartUser.highAlarm: 95
-+ *perfChartUser.highWarn: 75
-+
-+ *perfChartSystem.highAlarm: 40
-+ *perfChartSystem.highWarn: 25
-+
-+ *perfChartIdle.lowWarn: 10
-+ *perfChartIdle.lowAlarm: 5
-+
-+ *perfChartFree.lowWarn: 400
-+ *perfChartFree.lowAlarm: 150
-+
-+ *perfChartDisk.highWarn: 50
-+ *perfChartDisk.highAlarm: 100
-+
-+ *perfChartIntrpts.highWarn: 500
-+ *perfChartIntrpts.highAlarm: 1000
-+
-+ *perfChartInput.highWarn: 500
-+ *perfChartInput.highAlarm: 1000
-+
-+ *perfChartOutput.highWarn: 500
-+ *perfChartOutput.highAlarm: 1000
-+
-+ *perfChartCollision.highWarn: 20
-+ *perfChartCollision.highAlarm: 50
-+
-+ *perfChartNFSClient.highWarn: 100
-+ *perfChartNFSClient.highAlarm: 200
-+ *font: 6x13
-+
-diff -c -N ../xperfmon++/bsd_system.c ./bsd_system.c
-*** ../xperfmon++/bsd_system.c Thu Jan 1 00:00:00 1970
---- ./bsd_system.c Thu Mar 23 09:32:02 1995
-***************
-*** 0 ****
---- 1,412 ----
-+ /*
-+ * Perfmon Performance Monitor
-+ *
-+ * Copyright 1985, Massachusetts Institute of Technology
-+ * Copyright 1989, PCS Computer Systeme GmbH, West Germany
-+ * Copyright 1994, Sterling Software @ NASA-Ames Research Center
-+ * Copyright 1995, Regents of the University of California,
-+ * Lars Köller <lars.koeller@odie.physik2.uni-rostock.de
-+ *
-+ * Permission to use, copy, modify, distribute, and sell this software and its
-+ * documentation for any purpose is hereby granted without fee, provided that
-+ * the above copyright notice appear in all copies and that both that
-+ * copyright notice and this permission notice appear in supporting
-+ * documentation, and that the name of PCS and Sterling Software not be used in advertising or
-+ * publicity pertaining to distribution of the software without specific,
-+ * written prior permission. PCS and Sterling Software makes no representations about the
-+ * suitability of this software for any purpose. It is provided "as is"
-+ * without express or implied warranty.
-+ *
-+ * PCS & STERLING SOFTWARE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL PCS & STERLING SOFTWARE
-+ * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * Original Author: Emanuel Jay Berkenbilt, MIT Project Athena
-+ * Author: Thomas A. Baghli, PCS Computer Systeme GmbH, West Germany
-+ * tom@meepmeep.pcs.com
-+ * 1994 Revision
-+ * Author: Roger Smith, Sterling Software @ NASA-Ames Research Center
-+ * Moffett Field, California, rsmith@proteus.arc.nasa.gov
-+ * 1995 FreeBSD 2.x Version
-+ * Author: Lars Koeller, Univerity of Rostock, Germany
-+ * lars.koeller@odie.physik2.uni-rostock.de
-+ */
-+
-+ /* This file contains only system functions - that is the functions that
-+ * get the information the performance monitor is monitoring. No calls
-+ * to any X routines should be made here. The reason for doing this is
-+ * so that as the X toolkit becomes available and the X window system
-+ * improves no changes will have to be made to this file, and as this
-+ * program is made available for a new type of machine, only this file
-+ * will need to be changed.
-+ */
-+ #include <X11/IntrinsicP.h>
-+
-+ #include "system.h"
-+
-+ #include <stdio.h>
-+ #include <strings.h>
-+ #include <unistd.h>
-+ #include <paths.h>
-+ #include <kvm.h>
-+ #include <nlist.h>
-+ #include <limits.h>
-+ #include <errno.h>
-+
-+ #include <sys/file.h>
-+ #include <sys/param.h>
-+ #include <sys/socket.h>
-+ #include <sys/sysctl.h>
-+ #include <sys/dkstat.h>
-+ #include <sys/buf.h>
-+ #include <sys/vmmeter.h>
-+ #include <vm/vm.h>
-+ #include <net/if.h>
-+ #include <netinet/in.h>
-+
-+ #include <sys/mount.h>
-+ #include <nfs/nfsv2.h>
-+ #include <nfs/nfs.h>
-+
-+ #include "is.h"
-+
-+ #ifndef TRUE
-+ #define TRUE 1
-+ #define FALSE 0
-+ #endif
-+
-+ #define WANT_STAT(x) (poss_stats[(x)] != NO_STAT)
-+
-+ /*
-+ Function Prototypes
-+ */
-+ static void kread(int, void *, size_t);
-+
-+ /*
-+ Variables & Structs
-+ */
-+ static unsigned long *intrcnt;
-+ static int nintr, hz;
-+ static kvm_t *kd;
-+ static char errbuf[_POSIX2_LINE_MAX];
-+ static char dr_name[DK_NDRIVE][DK_NAMELEN];
-+ static double etime;
-+ static char *defdrives[] = { "wd0", "wd1", "sd0", "sd1" };
-+ static int num_stats, poss_stats[NUM_POSSIBLE_STATS];
-+
-+ int current_values[NUM_GRAPHS];
-+ stat_type stats;
-+
-+ extern Widget perfmon[NUM_GRAPHS];
-+
-+ static struct packet {
-+ int input, output, collisions;
-+ } packets, old_packets;
-+
-+ static struct nfsstats nfsstats;
-+ static struct _nfsStats {
-+ int nfsServer, nfsClient;
-+ } nfsStats, old_nfsStats;
-+
-+ struct nlist nl[] = {
-+ #define X_CPTIME 0
-+ { "_cp_time" },
-+ #define X_TOTAL 1
-+ { "_total" },
-+ #define X_SUM 2
-+ { "_cnt" },
-+ #define X_BOOTTIME 3
-+ { "_boottime" },
-+ #define X_DKXFER 4
-+ { "_dk_xfer" },
-+ #define X_HZ 5
-+ { "_hz" },
-+ #define N_IFNET 6
-+ { "_ifnet" },
-+ #define X_DK_NAMES 7
-+ { "_dk_names"},
-+ #define X_DK_NDRIVE 8
-+ { "_dk_ndrive" },
-+ #define X_INTRCNT 9
-+ { "_intrcnt" },
-+ #define X_EINTRCNT 10
-+ { "_eintrcnt" },
-+ { "" },
-+ };
-+
-+ struct {
-+ long time[CPUSTATES];
-+ long xfer[DK_NDRIVE];
-+ struct vmtotal Total;
-+ struct vmmeter Sum;
-+ struct vmmeter Rate;
-+ int interrupts;
-+ } s, s1;
-+
-+ #define total s.Total
-+ #define rate s.Rate
-+ #define sum s.Sum
-+ #define pgtok(a) ((a) * sum.v_page_size >> 10)
-+
-+
-+ /*
-+ This routine does all necessary setting up of structures
-+ that will handle system calls.
-+ */
-+ void sys_setup()
-+ {
-+ get_namelist("/kernel", _PATH_KMEM);
-+ collect_stats();
-+ etime = 1.0;
-+ }
-+
-+
-+ /*
-+ Update the data structures
-+ */
-+ void update_stats()
-+ {
-+ int state;
-+ double pct, tot;;
-+
-+ collect_stats();
-+
-+ tot = 0;
-+ for (state = 0; state < CPUSTATES; ++state)
-+ tot += s.time[state];
-+ if (tot)
-+ pct = 100 / tot;
-+ else
-+ pct = 0;
-+ current_values[USER_CPU_PERCENTAGE] = (s.time[CP_USER] + s.time[CP_NICE]) * pct;
-+ current_values[SYSTEM_CPU_PERCENTAGE] = (s.time[CP_SYS] + s.time[CP_INTR]) * pct;;
-+ current_values[IDLE_CPU_PERCENTAGE] = s.time[CP_IDLE] * pct;
-+
-+ if (perfmon[FREE_MEM])
-+ current_values[FREE_MEM] = pgtok(total.t_free);
-+ if (perfmon[DISK_TRANSFERS])
-+ current_values[DISK_TRANSFERS] = total_disk_transfers();
-+ if (perfmon[INTERRUPTS])
-+ current_values[INTERRUPTS] = s.interrupts - s1.interrupts;
-+ if (perfmon[INPUT_PACKETS])
-+ current_values[INPUT_PACKETS] = packets.input - old_packets.input;
-+ if (perfmon[OUTPUT_PACKETS])
-+ current_values[OUTPUT_PACKETS] = packets.output - old_packets.output;
-+ if (perfmon[COLLISION_PACKETS])
-+ current_values[COLLISION_PACKETS] = packets.collisions - old_packets.collisions;
-+ if (perfmon[NFS_CLIENT_CALLS])
-+ current_values[NFS_CLIENT_CALLS] = nfsStats.nfsClient - old_nfsStats.nfsClient;
-+ if (perfmon[NFS_SERVER_CALLS])
-+ current_values[NFS_SERVER_CALLS] = nfsStats.nfsServer - old_nfsStats.nfsServer;
-+ }
-+
-+
-+ /*
-+ Collect the overall disk transfer rates
-+ */
-+ int
-+ total_disk_transfers()
-+ {
-+ register int i, total_xfers = 0;
-+
-+ for(i=0; i < DK_NDRIVE; i++)
-+ total_xfers += s.xfer[i];
-+ return(total_xfers/etime);
-+ }
-+
-+
-+ /*
-+ Collect all the data
-+ */
-+ collect_stats()
-+ {
-+ off_t ifnetaddr;
-+ register int i, tmp;
-+ int mib[3], size, state;
-+
-+ kread(X_CPTIME, s.time, sizeof(s.time));
-+ kread(X_DKXFER, s.xfer, sizeof(s.xfer));
-+ kread(X_SUM, &sum, sizeof(sum) );
-+ size = sizeof(total);
-+ mib[0] = CTL_VM;
-+ mib[1] = VM_METER;
-+ if (sysctl(mib, 2, &total, &size, NULL, 0) < 0) {
-+ printf("Can't get kerninfo: %s\n", strerror(errno));
-+ bzero(&total, sizeof(total));
-+ }
-+
-+ nintr = nl[X_EINTRCNT].n_value - nl[X_INTRCNT].n_value;
-+ intrcnt = (unsigned long *) malloc((size_t) nintr);
-+ nintr /= sizeof(long);
-+ kread(X_INTRCNT, intrcnt, (size_t) nintr*sizeof(long));
-+ s1.interrupts = s.interrupts;
-+ s.interrupts = 0;
-+ for (i = 0; i < nintr; i++)
-+ s.interrupts += *(intrcnt + i);
-+
-+ etime = 0;
-+ for (i=0; i < DK_NDRIVE; i++) {
-+ tmp = s.xfer[i];
-+ s.xfer[i] -= s1.xfer[i];
-+ s1.xfer[i] = tmp;
-+ }
-+ for (i=0; i < CPUSTATES; i++) {
-+ tmp = s.time[i];
-+ s.time[i] -= s1.time[i];
-+ s1.time[i] = tmp;
-+ etime += s.time[i];
-+ }
-+ if(etime == 0.)
-+ etime = 1.;
-+ etime /= hz;
-+
-+ /*
-+ Collect the Network-Traffic
-+ */
-+
-+ if (nl[N_IFNET].n_value != 0) {
-+ struct ifnet ifnet;
-+ kread(N_IFNET, &ifnetaddr, sizeof(ifnetaddr));
-+ old_packets = packets;
-+ packets.input = packets.output = packets.collisions = 0;
-+ while (ifnetaddr) {
-+ kvm_read(kd, ifnetaddr, &ifnet, sizeof ifnet );
-+ packets.input += ifnet.if_ipackets;
-+ packets.output += ifnet.if_opackets;
-+ packets.collisions += ifnet.if_collisions;
-+ ifnetaddr = (u_long) ifnet.if_next;
-+ }
-+ }
-+
-+ /*
-+ Collect the NFS and RPC Calls
-+ */
-+
-+ size = sizeof(nfsstats);
-+ mib[0] = CTL_FS;
-+ mib[1] = MOUNT_NFS;
-+ mib[2] = NFS_NFSSTATS;
-+
-+ if (sysctl( mib, 3, &nfsstats, &size, NULL, 0) < 0)
-+ return;
-+ else {
-+ old_nfsStats = nfsStats;
-+
-+ nfsStats.nfsClient = nfsstats.rpccnt[NFSPROC_GETATTR] +
-+ nfsstats.rpccnt[NFSPROC_SETATTR] +
-+ nfsstats.rpccnt[NFSPROC_LOOKUP] +
-+ nfsstats.rpccnt[NFSPROC_READLINK] +
-+ nfsstats.rpccnt[NFSPROC_READ] +
-+ nfsstats.rpccnt[NFSPROC_WRITE] +
-+ nfsstats.rpccnt[NFSPROC_CREATE] +
-+ nfsstats.rpccnt[NFSPROC_REMOVE] +
-+ nfsstats.rpccnt[NFSPROC_RENAME] +
-+ nfsstats.rpccnt[NFSPROC_LINK] +
-+ nfsstats.rpccnt[NFSPROC_SYMLINK] +
-+ nfsstats.rpccnt[NFSPROC_MKDIR] +
-+ nfsstats.rpccnt[NFSPROC_RMDIR] +
-+ nfsstats.rpccnt[NFSPROC_READDIR] +
-+ nfsstats.rpccnt[NFSPROC_STATFS] +
-+ nfsstats.rpccnt[NQNFSPROC_READDIRLOOK] +
-+ nfsstats.rpccnt[NQNFSPROC_GETLEASE] +
-+ nfsstats.rpccnt[NQNFSPROC_VACATED] +
-+ nfsstats.rpccnt[NQNFSPROC_EVICTED];
-+
-+ nfsStats.nfsServer = nfsstats.srvrpccnt[NFSPROC_GETATTR] +
-+ nfsstats.srvrpccnt[NFSPROC_SETATTR] +
-+ nfsstats.srvrpccnt[NFSPROC_LOOKUP] +
-+ nfsstats.srvrpccnt[NFSPROC_READLINK] +
-+ nfsstats.srvrpccnt[NFSPROC_READ] +
-+ nfsstats.srvrpccnt[NFSPROC_WRITE] +
-+ nfsstats.srvrpccnt[NFSPROC_CREATE] +
-+ nfsstats.srvrpccnt[NFSPROC_REMOVE] +
-+ nfsstats.srvrpccnt[NFSPROC_RENAME] +
-+ nfsstats.srvrpccnt[NFSPROC_LINK] +
-+ nfsstats.srvrpccnt[NFSPROC_SYMLINK] +
-+ nfsstats.srvrpccnt[NFSPROC_MKDIR] +
-+ nfsstats.srvrpccnt[NFSPROC_RMDIR] +
-+ nfsstats.srvrpccnt[NFSPROC_READDIR] +
-+ nfsstats.srvrpccnt[NFSPROC_STATFS] +
-+ nfsstats.srvrpccnt[NQNFSPROC_READDIRLOOK] +
-+ nfsstats.srvrpccnt[NQNFSPROC_GETLEASE] +
-+ nfsstats.srvrpccnt[NQNFSPROC_VACATED] +
-+ nfsstats.srvrpccnt[NQNFSPROC_EVICTED];
-+ }
-+ }
-+
-+
-+ /*
-+ Reads the nlist from the kernel
-+ */
-+ int
-+ get_namelist(kernel_name, memory_name)
-+ char *kernel_name, *memory_name;
-+ {
-+ time_t now;
-+ time_t boottime;
-+ register int i, c;
-+ int nintv;
-+
-+ kd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf);
-+ if (kd == 0) {
-+ (void)fprintf(stderr, "xperfmon++: kvm_openfiles: %s\n", errbuf);
-+ exit(1);
-+ }
-+
-+ if ((c = kvm_nlist(kd, nl)) != 0) {
-+ if (c > 0) {
-+ (void)fprintf(stderr,"xperfmon++: undefined symbols:");
-+ for (c = 0; c < sizeof(nl)/sizeof(nl[0]); c++)
-+ if (nl[c].n_type == 0)
-+ fprintf(stderr, " %s", nl[c].n_name);
-+ (void)fputc('\n', stderr);
-+ } else
-+ (void)fprintf(stderr, "xperfmon++: kvm_nlist: %s\n", kvm_geterr(kd)); exit(1);
-+ }
-+
-+ kread(X_BOOTTIME, &boottime, sizeof(boottime));
-+ kread(X_HZ, &hz, sizeof(hz));
-+ for (i = 0; i < DK_NDRIVE; i++) {
-+ strcpy(dr_name[i], "xx");
-+ }
-+ time(&now);
-+ nintv = now - boottime;
-+ if (nintv <= 0 || nintv > 60*60*24*365*10) {
-+ fprintf(stderr,
-+ "Time makes no sense... namelist must be wrong.\n");
-+ exit(1);
-+ }
-+ return(nintv);
-+ }
-+
-+
-+ /*
-+ Kread reads something from the kernel, given its nlist index.
-+ */
-+ static void
-+ kread(nlx, addr, size)
-+ int nlx;
-+ void *addr;
-+ size_t size;
-+ {
-+ char *sym;
-+
-+ if (nl[nlx].n_type == 0 || nl[nlx].n_value == 0) {
-+ sym = nl[nlx].n_name;
-+ if (*sym == '_')
-+ ++sym;
-+ (void)fprintf(stderr,
-+ "xpermon++: symbol %s not defined\n", sym);
-+ exit(1);
-+ }
-+ if (kvm_read(kd, nl[nlx].n_value, addr, size) != size) {
-+ sym = nl[nlx].n_name;
-+ if (*sym == '_')
-+ ++sym;
-+ (void)fprintf(stderr, "xperfmon++: %s: %s\n", sym, kvm_geterr(kd));
-+ exit(1);
-+ }
-+ }
+ typedef struct _TimeChartRec *TimeChartWidget;
+diff -u ../xperfmon++.orig/XPerfmon++.ad ./XPerfmon++.ad
+--- ../xperfmon++.orig/XPerfmon++.ad Wed Jul 27 22:29:32 1994
++++ ./XPerfmon++.ad Sun Nov 12 00:07:23 1995
+@@ -4,24 +4,37 @@
+ ! commented out, the "NFS Server" graph background will be the application
+ ! default color, unless some other resource file has specified it.
+ ! *PerfChart.highAlarm: 99998
++*perfChartUser.highAlarm: 95
++*perfChartUser.highWarn: 75
++
++*perfChartSystem.highAlarm: 40
++*perfChartSystem.highWarn: 25
++
+ *perfChartIdle.lowWarn: 10
+ *perfChartIdle.lowAlarm: 5
+-*perfChartUser.highAlarm: 90
+-*perfChartUser.highWarn: 75
+-*perfChartSystem.highAlarm: 90
+-*perfChartSystem.highWarn: 75
+-*perfChartFree.lowWarn: 2000
+-*perfChartFree.lowAlarm: 1000
+-*perfChartDisk.highWarn: 25
+-*perfChartDisk.highAlarm: 50
+-*perfChartIntrpts.highWarn: 500
+-*perfChartIntrpts.highAlarm: 750
+-*perfChartInput.highWarn: 300
+-*perfChartInput.highAlarm: 500
+-*perfChartOutput.highWarn: 300
+-*perfChartOutput.highAlarm: 500
++
++*perfChartSwap.highWarn: 50
++*perfChartSwap.highAlarm: 100
++
++*perfChartDisk.highWarn: 50
++*perfChartDisk.highAlarm: 100
++
++*perfChartIntrpts.highWarn: 400
++*perfChartIntrpts.highAlarm: 600
++
++*perfChartInput.highWarn: 500
++*perfChartInput.highAlarm: 1000
++
++*perfChartOutput.highWarn: 500
++*perfChartOutput.highAlarm: 1000
++
+ *perfChartCollision.highWarn: 20
+ *perfChartCollision.highAlarm: 50
+-*perfChartNFSClient.highWarn: 200
+-*perfChartNFSClient.highAlarm: 400
++
++*perfChartNFSClient.highWarn: 100
++*perfChartNFSClient.highAlarm: 200
++
++*perfChartNFSServer.highWarn: 100
++*perfChartNFSServer.highAlarm: 200
+ *font: 6x13
++
+Only in .: bsd_system.c
+diff -u ../xperfmon++.orig/misc.c ./misc.c
+--- ../xperfmon++.orig/misc.c Wed Jul 27 22:29:33 1994
++++ ./misc.c Sun Nov 12 00:07:24 1995
+@@ -58,7 +58,7 @@
+ int i, keycode, length = 0;
+ /* PerfmonWidget pw = (PerfmonWidget) w;*/
+
+- length = XLookupString(event, strbuf, STRBUFSIZE, &keycode, NULL);
++ length = XLookupString((XKeyEvent *)event, strbuf, STRBUFSIZE, (KeySym *)&keycode, NULL);
+ switch (keycode) {
+ case 'Q':
+ case 'q':
+diff -u ../xperfmon++.orig/system.h ./system.h
+--- ../xperfmon++.orig/system.h Wed Jul 27 22:29:34 1994
++++ ./system.h Sun Nov 12 00:07:24 1995
+@@ -149,7 +149,11 @@
+ "User",
+ "System",
+ "Idle",
++#ifdef __FreeBSD__
++ "Swap",
++#else
+ "Free",
++#endif
+ "Disk",
+ "Interrupts",
+ "Input",
+@@ -162,7 +166,11 @@
+ "User",
+ "System",
+ "Idle",
++#ifdef __FreeBSD__
++ "Swap",
++#else
+ "Free",
++#endif
+ "Disk",
+ "Intrpts",
+ "Input",
+@@ -175,7 +183,11 @@
+ "CPU",
+ "CPU",
+ "CPU",
++#ifdef __FreeBSD__
++ "Usage (MB)",
++#else
+ "Memory",
++#endif
+ "Transfers",
+ "",
+ "Packets",
+diff -u ../xperfmon++.orig/xperfmon++.man ./xperfmon++.man
+--- ../xperfmon++.orig/xperfmon++.man Wed Jul 27 22:29:39 1994
++++ ./xperfmon++.man Sun Nov 12 00:14:56 1995
+@@ -94,8 +94,8 @@
+ .B \-idlecpu | \+idlecpu
+ Graph \fIIdle\fP CPU Percentage.
+ .TP 26
+-.B \-freemem | \+freemem
+-Graph \fIFree Memory\fP.
++.B \-{freemem/usedswap} | \+{freemem/usedswap}
++Graph \fIFree Memory/Used Swap (Operating system dependent, swap only for FreeBSD)\fP.
+ .TP 26
+ .B \-diskxfr | \+diskxfr
+ Graph \fIDisk Transfers\fP per interval period.
+@@ -176,8 +176,8 @@
+ .B idle
+ Set \fIlimit\fP value for Idle CPU Percentage.
+ .TP 12
+-.B mem
+-Set \fIlimit\fP value for Free Memory.
++.B mem/swap
++Set \fIlimit\fP value for Free Memory/Used Swap (OS dependent, swap only for FreeBSD).
+ .TP 12
+ .B disk
+ Set \fIlimit\fP value for Disk Transfers.
+@@ -314,7 +314,7 @@
+ Set System CPU Percentage resource.
+ .TP 16
+ .B Free
+-Set Free Memory resource.
++Set Free Memory/Swap resource.
+ .TP 16
+ .B Disk
+ Set Disk Transfer count resource.
+diff -u ../xperfmon++.orig/xperfmon.c ./xperfmon.c
+--- ../xperfmon++.orig/xperfmon.c Wed Jul 27 22:29:39 1994
++++ ./xperfmon.c Sun Nov 12 00:13:55 1995
+@@ -58,6 +58,10 @@
+ *
+ */
+
++#ifdef __FreeBSD__
++#include <osreldate.h>
++#endif
++
+ #include <stdio.h>
+ #include <X11/IntrinsicP.h>
+ #include <X11/StringDefs.h>
+@@ -94,6 +98,11 @@
+ { NULL, NULL },
+ };
+
++/* LK!!! */
++#define MIN_WIDTH 240
++#define MIN_HEIGHT 430
++
++
+ #define XtNinterval "interval"
+ #define XtNcount "count"
+ #define XtCCount "Count"
+@@ -171,11 +180,17 @@
+ static XrmOptionDescRec optionDescList[] = {
+ { "-interval", ".interval", XrmoptionSepArg, (caddr_t) NULL},
+ { "-immediate", "*PerfChart.immediate", XrmoptionNoArg, "True" },
+-
++#if __FreeBSD_version >= 199504
++ { "-lowswapAlarm", "*perfChartFree.lowAlarm", XrmoptionSepArg, NULL },
++ { "-lowswapWarn", "*perfChartFree.lowWarn", XrmoptionSepArg, NULL },
++ { "-highswapAlarm", "*perfChartFree.highAlarm", XrmoptionSepArg, NULL },
++ { "-highswapWarn", "*perfChartFree.highWarn", XrmoptionSepArg, NULL },
++#else
+ { "-lowmemAlarm", "*perfChartFree.lowAlarm", XrmoptionSepArg, NULL },
+ { "-lowmemWarn", "*perfChartFree.lowWarn", XrmoptionSepArg, NULL },
+ { "-highmemAlarm", "*perfChartFree.highAlarm", XrmoptionSepArg, NULL },
+ { "-highmemWarn", "*perfChartFree.highWarn", XrmoptionSepArg, NULL },
++#endif
+
+ { "-lowuserAlarm", "*perfChartUser.lowAlarm", XrmoptionSepArg, NULL },
+ { "-lowuserWarn", "*perfChartUser.lowWarn", XrmoptionSepArg, NULL },
+@@ -237,8 +252,13 @@
+ { "+systemcpu", XtNsystemcpuAdd, XrmoptionNoArg, "TRUE" },
+ { "-idlecpu", XtNidlecpuSub, XrmoptionNoArg, "True" },
+ { "+idlecpu", XtNidlecpuAdd, XrmoptionNoArg, "TRUE" },
++#if __FreeBSD_version >= 199504
++ { "-usedswap", XtNfreememSub, XrmoptionNoArg, "True" },
++ { "+usedswap", XtNfreememAdd, XrmoptionNoArg, "TRUE" },
++#else
+ { "-freemem", XtNfreememSub, XrmoptionNoArg, "True" },
+ { "+freemem", XtNfreememAdd, XrmoptionNoArg, "TRUE" },
++#endif
+ { "-diskxfr", XtNdiskxfrSub, XrmoptionNoArg, "True" },
+ { "+diskxfr", XtNdiskxfrAdd, XrmoptionNoArg, "TRUE" },
+ { "-interrupts", XtNinterruptsSub , XrmoptionNoArg, "True" },
+@@ -344,7 +364,11 @@
+ fprintf(stderr, " [{-+}usercpu] ({remove|add} usercpu to list of graphs\n");
+ fprintf(stderr, " [{-+}systemcpu] ({remove|add} systemcpu to list of graphs\n");
+ fprintf(stderr, " [{-+}idlecpu] ({remove|add} idlecpu to list of graphs\n");
++#if __FreeBSD_version >= 199504
++ fprintf(stderr, " [{-+}usedswap] ({remove|add} usedswap to list of graphs\n");
++#else
+ fprintf(stderr, " [{-+}freemem] ({remove|add} freemem to list of graphs\n");
++#endif
+ fprintf(stderr, " [{-+}diskxfr] ({remove|add} disk transfers to list of graphs\n");
+ fprintf(stderr, " [{-+}interrupts] ({remove|add} interrupts to list of graphs\n");
+ fprintf(stderr, " [{-+}inputpkts] ({remove|add} input packets to list of graphs\n");
+@@ -361,10 +385,18 @@
+ fprintf(stderr, " [-high*Alarm {value}] ( Set High Alarm value for *)\n");
+ fprintf(stderr, " [-high*Warn {value}] ( Set High Warning value for *)\n");
+ fprintf(stderr, " Where \"*\" is one of the following:\n");
++#if __FreeBSD_version >= 199504
++ fprintf(stderr, " [swap | user | sys | idle | disk | intrpts |\n");
++#else
+ fprintf(stderr, " [mem | user | sys | idle | disk | intrpts |\n");
++#endif
+ fprintf(stderr, " input | output | collision | nfsclient | nfsserver]\n");
+ fprintf(stderr, " For Example:\n");
++#if __FreeBSD_version >= 199504
++ fprintf(stderr, " [-lowswapAlarm {value}] ( Set low Free Swap Alarm Value)\n");
++#else
+ fprintf(stderr, " [-lowmemAlarm {value}] ( Set low Free Memory Alarm Value)\n");
++#endif
+ fprintf(stderr, "WARNING: It is an error condition to set both a high, and a low, limit warning or alarm.\n");
+ exit(1);
+ }
+@@ -386,6 +418,7 @@
+ time(&timeStamp);
+ return;
+ }
++
+ /*ARGSUSED*/
+ void handleResize( w, unused, event, contin2disp )
+ Widget w;
+@@ -419,9 +452,15 @@
+ break;
+
+ }
+- if ( neww < 250 + 10 ) {
+- neww = 250 + 10;
+- w->core.width = 250 + 10;
++ if ( neww < MIN_WIDTH + 10 ) {
++ neww = MIN_WIDTH + 10;
++ w->core.width = MIN_WIDTH + 10;
++ XtResizeWindow(w);
++ }
++/* LK!!! */
++ if ( newh < MIN_HEIGHT + 10 ) {
++ newh = MIN_HEIGHT + 10;
++ w->core.height = MIN_HEIGHT + 10;
+ XtResizeWindow(w);
+ }
+ if ( appData.debug )
+@@ -436,6 +475,7 @@
+ Dimension boxH = labelBox->core.height;
+ Dimension timeH = timechart->core.height;
+ Dimension newWidgetH = (newh - (boxH+8) - (timeH+10) - hOverHead) / appData.numGraphsOn;
++
+ if ( oldWidth == neww && oldHeight == newh ) return;
+
+ if ( appData.debug )
+@@ -464,6 +504,9 @@
+ int argc;
+ char **argv;
+ {
++/* LK!!! */
++ Dimension neww, newh, timeH, newWidgetH, hOverHead, boxH;
++
+ Arg arg;
+ Pixmap icon_pixmap = None;
+ Widget loadParent, pappaBox;
+@@ -540,7 +583,6 @@
+ xperfmon_width, xperfmon_height));
+ XtSetValues(appData.toplevel, &arg, 1);
+ }
+-
+ /* create windows */
+
+ pappaBox = XtVaCreateManagedWidget("PappaBox", boxWidgetClass, appData.toplevel,
+@@ -553,8 +595,24 @@
+ c = (char *) ((long) &hostname[0] + (int) strlen(hostname));
+ sprintf(c, "\nUpdate Interval = %5.1f secs", (float)(appData.interval*appData.ms_per_sec)/1000.0);
+
++/* LK!!! quick and dirty hack */
++ XtRealizeWidget(appData.toplevel);
++
++ neww = appData.toplevel->core.width;
++ newh = appData.toplevel->core.height;
++ if ( neww < MIN_WIDTH + 10) {
++ neww = MIN_WIDTH + 10;
++ appData.toplevel->core.width = MIN_WIDTH + 10;
++ XtResizeWindow(appData.toplevel);
++ }
++ if ( newh < MIN_HEIGHT + 10) {
++ newh = MIN_HEIGHT + 10;
++ appData.toplevel->core.height = MIN_HEIGHT + 10;
++ XtResizeWindow(appData.toplevel);
++ }
++ neww -= 10;
+ labelBox = XtVaCreateManagedWidget("LabelBox", labelWidgetClass, pappaBox,
+- XtNwidth, 250,
++ XtNwidth, neww,
+ /* XtNheight, 16,*/
+ XtNjustify, XtJustifyLeft,
+ XtNinternalHeight, 0,
+@@ -562,6 +620,13 @@
+ XtNlabel, hostname,
+ XtNborderWidth, 0,
+ NULL);
++
++/* same as in handleResize */
++ hOverHead = 5 * appData.numGraphsOn;
++ boxH = labelBox->core.height;
++ timeH = 18;
++ newWidgetH = (newh - (boxH+8) - (timeH+10) - hOverHead) / appData.numGraphsOn;
++
+ /* build the graph widgets */
+
+ for ( i=0; i<NUM_GRAPHS; i++ ) {
+@@ -570,8 +635,8 @@
+ perfmon[i] = XtVaCreateManagedWidget(hostname, perfChartWidgetClass, pappaBox,
+ XtNtopLabel, topNames[i],
+ XtNbotLabel, botNames[i],
+- XtNwidth, 250,
+- XtNheight, 36,
++ XtNwidth, neww,
++ XtNheight, newWidgetH,
+ XtNupdate, appData.interval*appData.ms_per_sec,
+ XtNfillRect, (int)appData.fill,
+ XtNjumpScroll, 1,
+@@ -580,7 +645,7 @@
+ }
+ timechart = XtVaCreateManagedWidget("timeChart", timeChartWidgetClass, pappaBox,
+ XtNfromVert, perfmon[1],
+- XtNwidth, 250,
++ XtNwidth, neww,
+ XtNheight, 18,
+ XtNupdate, appData.interval*appData.ms_per_sec,
+ XtNjumpScroll, 1,
+@@ -590,7 +655,7 @@
+
+ for ( i=0; i<NUM_GRAPHS; i++ )
+ if ( appData.graphOn[i] )
+- XtAddCallback(perfmon[i], XtNgetValue, update_stat, i);
++ XtAddCallback(perfmon[i], XtNgetValue, update_stat, (XtPointer)i);
+
+ appData.interval_id = XtAppAddTimeOut(appData.app_context,
+ appData.interval*appData.ms_per_sec, start_graphs, (caddr_t) appData.toplevel);
+@@ -598,3 +663,4 @@
+ XtRealizeWidget(appData.toplevel);
+ XtAppMainLoop(appData.app_context);
+ }
++
diff --git a/sysutils/xperfmon3/files/patch-ab b/sysutils/xperfmon3/files/patch-ab
new file mode 100644
index 000000000000..e88c216bb74f
--- /dev/null
+++ b/sysutils/xperfmon3/files/patch-ab
@@ -0,0 +1,90 @@
+diff -u ../xperfmon++.orig/StripCharP.h ./StripCharP.h
+--- ../xperfmon++.orig/StripCharP.h Wed Jul 27 22:29:30 1994
++++ ./StripCharP.h Sun Nov 12 00:07:24 1995
+@@ -62,10 +62,12 @@
+ #define HIGHLIGHT 1 << 1
+ #define ALL_GCS (FOREGROUND | HIGHLIGHT)
+
++#define NUM_VALUES 2048
++
+ /* New fields for the PerfChart widget instance record */
+
+ typedef struct {
+- double valuedata[2048]; /* record of data points */
++ double valuedata[NUM_VALUES]; /* record of data points */
+ Pixel fgpixel; /* color index for graph */
+ Pixel hipixel; /* color index for lines */
+ Pixel warnColor;
+diff -u ../xperfmon++.orig/StripChart.c ./StripChart.c
+--- ../xperfmon++.orig/StripChart.c Wed Jul 27 22:29:30 1994
++++ ./StripChart.c Sun Nov 12 00:07:24 1995
+@@ -215,8 +215,23 @@
+ static void Initialize (greq, gnew)
+ Widget greq, gnew;
+ {
++ int i;
++
+ PerfChartWidget w = (PerfChartWidget)gnew;
+
++ /*
++ * XXX The missing initializations have been made obvious by FreeBSD 2.2's
++ * new (`phk') malloc that doesn't initialize the malloc'ed areas to 0.
++ * Perhaps more bogons will lurk around, but the floating arithmetic ones
++ * have been the most annoying ones since they most likely cause a trap
++ * at startup time.
++ *
++ * Strange that people in the 90's still rely on malloc()
++ * returning an initialized region.
++ */
++ for ( i = 0; i < NUM_VALUES; i++ )
++ w->strip_chart.valuedata[i] = 0.0;
++
+ /* if we are working with a mono screen then turn off all warnings and alarms */
+
+ if ( mono_screen ) {
+@@ -343,19 +358,19 @@
+
+ if ( checkValue >= w->strip_chart.highAlarm ) { /* check for high alarm */
+ if ( w->strip_chart.currentBG != w->strip_chart.alarmColor ) {
+- XtVaSetValues(w, XtNbackground, w->strip_chart.alarmColor, NULL );
++ XtVaSetValues((Widget)w, XtNbackground, w->strip_chart.alarmColor, NULL );
+ w->strip_chart.currentBG = w->strip_chart.alarmColor;
+ }
+ }
+ else if ( checkValue >= w->strip_chart.highWarn ) { /* check for high warning */
+ if ( w->strip_chart.currentBG != w->strip_chart.warnColor ) {
+- XtVaSetValues(w, XtNbackground, w->strip_chart.warnColor, NULL );
++ XtVaSetValues((Widget)w, XtNbackground, w->strip_chart.warnColor, NULL );
+ w->strip_chart.currentBG = w->strip_chart.warnColor;
+ }
+ }
+ else {
+ if ( w->strip_chart.currentBG != w->strip_chart.okColor ) { /* reset to okColor? */
+- XtVaSetValues(w, XtNbackground, w->strip_chart.okColor, NULL );
++ XtVaSetValues((Widget)w, XtNbackground, w->strip_chart.okColor, NULL );
+ w->strip_chart.currentBG = w->strip_chart.okColor;
+ }
+ }
+@@ -373,19 +388,19 @@
+
+ if ( checkValue <= w->strip_chart.lowAlarm ) { /* check for low alarm */
+ if ( w->strip_chart.currentBG != w->strip_chart.alarmColor ) {
+- XtVaSetValues(w, XtNbackground, w->strip_chart.alarmColor, NULL );
++ XtVaSetValues((Widget)w, XtNbackground, w->strip_chart.alarmColor, NULL );
+ w->strip_chart.currentBG = w->strip_chart.alarmColor;
+ }
+ }
+ else if ( checkValue <= w->strip_chart.lowWarn ) { /* check for low warning */
+ if ( w->strip_chart.currentBG != w->strip_chart.warnColor ) {
+- XtVaSetValues(w, XtNbackground, w->strip_chart.warnColor, NULL );
++ XtVaSetValues((Widget)w, XtNbackground, w->strip_chart.warnColor, NULL );
+ w->strip_chart.currentBG = w->strip_chart.warnColor;
+ }
+ }
+ else {
+ if ( w->strip_chart.currentBG != w->strip_chart.okColor ) { /* reset to okColor? */
+- XtVaSetValues(w, XtNbackground, w->strip_chart.okColor, NULL );
++ XtVaSetValues((Widget)w, XtNbackground, w->strip_chart.okColor, NULL );
+ w->strip_chart.currentBG = w->strip_chart.okColor;
+ }
+ }