summaryrefslogtreecommitdiff
path: root/sysutils/top
diff options
context:
space:
mode:
authoragc <agc>1999-12-08 16:18:48 +0000
committeragc <agc>1999-12-08 16:18:48 +0000
commita5dae7fb72853d9c5d26ea1d98a50ce18b12092b (patch)
tree94005585c079a24a4778053dfc177bfdf4f81122 /sysutils/top
parent28fb41531077095e5176e7aa97c684d706730509 (diff)
downloadpkgsrc-a5dae7fb72853d9c5d26ea1d98a50ce18b12092b.tar.gz
Split patch-aa into multiple files.
Make the patch to util.c apply without fuzz.
Diffstat (limited to 'sysutils/top')
-rw-r--r--sysutils/top/files/patch-sum8
-rw-r--r--sysutils/top/patches/patch-aa602
-rw-r--r--sysutils/top/patches/patch-af570
-rw-r--r--sysutils/top/patches/patch-ag9
-rw-r--r--sysutils/top/patches/patch-ah13
-rw-r--r--sysutils/top/patches/patch-ai8
6 files changed, 607 insertions, 603 deletions
diff --git a/sysutils/top/files/patch-sum b/sysutils/top/files/patch-sum
index 1a297d7c4ec..d5ac6dc5dd9 100644
--- a/sysutils/top/files/patch-sum
+++ b/sysutils/top/files/patch-sum
@@ -1,6 +1,10 @@
-$NetBSD: patch-sum,v 1.2 1999/09/29 14:04:35 agc Exp $
+$NetBSD: patch-sum,v 1.3 1999/12/08 16:18:48 agc Exp $
-MD5 (patch-aa) = 844e706c26ce094c0620ae0d44ae51eb
+MD5 (patch-aa) = 233a2cce23bbbc15181093662c27e2e1
MD5 (patch-ab) = 71a6230b5eb767d8cd1a9366339d66f3
MD5 (patch-ac) = cff80f7b4ce2067d12d0b306a1f62b90
MD5 (patch-ae) = 3edecc1bc00be6512c21b7320fd6aa5f
+MD5 (patch-af) = af572aee1b594fff3f66c815d2538f56
+MD5 (patch-ag) = d844db470a4f8e935a577a5cd5cff61f
+MD5 (patch-ah) = c1c0e385a2b912e960a9303fbc23abce
+MD5 (patch-ai) = ed0af1479f0f18d6ecb51738cbff9702
diff --git a/sysutils/top/patches/patch-aa b/sysutils/top/patches/patch-aa
index 70a932fd649..b492fbe0c73 100644
--- a/sysutils/top/patches/patch-aa
+++ b/sysutils/top/patches/patch-aa
@@ -1,6 +1,5 @@
-$NetBSD: patch-aa,v 1.6 1998/12/03 20:02:53 thorpej Exp $
+$NetBSD: patch-aa,v 1.7 1999/12/08 16:18:49 agc Exp $
-diff -1 -uBbNr commands.c commands.c
--- commands.c Tue Aug 27 16:13:57 1996
+++ commands.c Sat Oct 4 03:25:02 1997
@@ -25,4 +25,7 @@
@@ -31,602 +30,3 @@ diff -1 -uBbNr commands.c commands.c
+ puts(")");
+ }
#endif
-diff -1 -uBbNr machine/m_netbsd10.c machine/m_netbsd10.c
---- machine/m_netbsd10.c Fri Jan 26 06:27:18 1996
-+++ machine/m_netbsd10.c Sat Oct 4 03:27:03 1997
-@@ -3,3 +3,3 @@
- *
-- * SYNOPSIS: For a NetBSD-1.0 (4.4BSD) system
-+ * SYNOPSIS: For a NetBSD-1.0 through NetBSD-1.2.1 system
- * Note process resident sizes could be wrong, but ps shows
-@@ -9,5 +9,5 @@
- * Originally written for BSD4.4 system by Christos Zoulas.
-- * Based on the FreeBSD 2.0 version by Steven Wallace && Wolfram Schneider
-- * NetBSD-1.0 port by Arne Helme
-- * .
-+ * Based on the FreeBSD 2.0 version by Steven Wallace && Wolfram Schneider.
-+ * NetBSD-1.0 port by Arne Helme. Process ordering added by Luke Mewburn.
-+ *
- * This is the machine-dependent module for NetBSD-1.0
-@@ -15,2 +15,5 @@
- * NetBSD-1.0
-+ * NetBSD-1.1
-+ * NetBSD-1.2
-+ * NetBSD-1.2.1
- *
-@@ -18,3 +21,3 @@
- *
-- * CFLAGS: -DHAVE_GETOPT
-+ * CFLAGS: -DHAVE_GETOPT -DORDER
- *
-@@ -24,2 +27,4 @@
- * Arne Helme <arne@acm.org>
-+ * Luke Mewburn <lukem@netbsd.org>
-+ *
- *
-@@ -30,4 +35,4 @@
-
--#define LASTPID /**/ /* use last pid, compiler depended */
--/* #define LASTPID_FIXED /**/
-+/* #define LASTPID */ /* use last pid, compiler depended */
-+/* #define LASTPID_FIXED */
- #define VM_REAL /**/ /* use the same values as vmstat -s */
-@@ -53,2 +58,11 @@
-
-+#include "os.h"
-+
-+#include <err.h>
-+#include <kvm.h>
-+#include <math.h>
-+#include <nlist.h>
-+#include <stdio.h>
-+#include <unistd.h>
-+
- #ifdef USE_SWAP
-@@ -87,3 +101,4 @@
- /* what we consider to be process size: */
--#define PROCSIZE(pp) (VP((pp), vm_tsize) + VP((pp), vm_dsize) + VP((pp), vm_ssize))
-+#define PROCSIZE(pp) \
-+ (VP((pp), vm_tsize) + VP((pp), vm_dsize) + VP((pp), vm_ssize))
-
-@@ -171,3 +186,3 @@
- {
-- "", "start", "run\0\0\0", "sleep", "stop", "zomb", "WAIT"
-+ "", "start", "run\0\0\0", "sleep", "stop", "zomb"
- };
-@@ -196,3 +211,2 @@
- static unsigned long cnt_offset;
--static long cnt;
- #endif
-@@ -239,2 +253,33 @@
-
-+
-+/* these are names given to allowed sorting orders -- first is default */
-+char *ordernames[] = {
-+ "cpu",
-+ "pri",
-+ "res",
-+ "size",
-+ "state",
-+ "time",
-+ NULL
-+};
-+
-+/* forward definitions for comparison functions */
-+int compare_cpu();
-+int compare_prio();
-+int compare_res();
-+int compare_size();
-+int compare_state();
-+int compare_time();
-+
-+int (*proc_compares[])() = {
-+ compare_cpu,
-+ compare_prio,
-+ compare_res,
-+ compare_size,
-+ compare_state,
-+ compare_time,
-+ NULL
-+};
-+
-+
- /* these are for keeping track of the proc array */
-@@ -260,8 +305,6 @@
- machine_init(statics)
--
--struct statics *statics;
--
-+ struct statics *statics;
- {
-- register int i = 0;
-- register int pagesize;
-+ int i = 0;
-+ int pagesize;
-
-@@ -293,6 +336,2 @@
-
--#if (defined DEBUG)
-- fprintf(stderr, "Hertz: %d\n", hz);
--#endif
--
- (void) getkval(nlst[X_CCPU].n_value, (int *)(&ccpu), sizeof(ccpu),
-@@ -333,2 +372,3 @@
- statics->memory_names = memorynames;
-+ statics->order_names = ordernames;
-
-@@ -338,8 +378,7 @@
-
--char *format_header(uname_field)
--
--register char *uname_field;
--
-+char *
-+format_header(uname_field)
-+ char *uname_field;
- {
-- register char *ptr;
-+ char *ptr;
-
-@@ -360,8 +399,5 @@
- get_system_info(si)
--
--struct system_info *si;
--
-+ struct system_info *si;
- {
- long total;
-- load_avg avenrun[3];
-
-@@ -370,31 +406,13 @@
- nlst[X_CP_TIME].n_name);
-- (void) getkval(avenrun_offset, (int *)avenrun, sizeof(avenrun),
-- nlst[X_AVENRUN].n_name);
-
- #ifdef LASTPID
-- (void) getkval(lastpid_offset, (int *)(&lastpid), sizeof(lastpid),
-- "!");
-+ (void) getkval(lastpid_offset, (int *)(&lastpid), sizeof(lastpid), "!");
- #endif
-
-- /* convert load averages to doubles */
-- {
-- register int i;
-- register double *infoloadp;
-- load_avg *avenrunp;
-+ if (getloadavg(si->load_avg, NUM_AVERAGES) < 0) {
-+ int i;
-
--#ifdef notyet
-- struct loadavg sysload;
-- int size;
-- getkerninfo(KINFO_LOADAVG, &sysload, &size, 0);
--#endif
--
-- infoloadp = si->load_avg;
-- avenrunp = avenrun;
-- for (i = 0; i < 3; i++)
-- {
--#ifdef notyet
-- *infoloadp++ = ((double) sysload.ldavg[i]) / sysload.fscale;
--#endif
-- *infoloadp++ = loaddouble(*avenrunp++);
-- }
-+ warn("can't getloadavg");
-+ for (i = 0; i < NUM_AVERAGES; i++)
-+ si->load_avg[i] = 0.0;
- }
-@@ -426,4 +444,4 @@
- memory_stats[7] = pagetok(total.t_free);
-- }
--#else
-+
-+#else /* !VM_REAL */
- struct vmmeter sum;
-@@ -455,5 +473,5 @@
- /* swap_delay++; XXX Arne */
--#else
-+#else /* !USE_SWAP */
- memory_stats[4] = 0;
--#endif
-+#endif /* !USE_SWAP */
-
-@@ -461,4 +479,5 @@
- memory_stats[7] = -1;
-+#endif /* !VM_REAL */
- }
--#endif
-+
- /* set arrays and strings */
-@@ -480,14 +498,13 @@
-
--caddr_t get_process_info(si, sel, compare)
--
--struct system_info *si;
--struct process_select *sel;
--int (*compare)();
--
-+caddr_t
-+get_process_info(si, sel, compare)
-+ struct system_info *si;
-+ struct process_select *sel;
-+ int (*compare)();
- {
-- register int i;
-- register int total_procs;
-- register int active_procs;
-- register struct kinfo_proc **prefp;
-- register struct kinfo_proc *pp;
-+ int i;
-+ int total_procs;
-+ int active_procs;
-+ struct kinfo_proc **prefp;
-+ struct kinfo_proc *pp;
-
-@@ -564,11 +581,10 @@
-
--char *format_next_process(handle, get_userid)
--
--caddr_t handle;
--char *(*get_userid)();
--
-+char *
-+format_next_process(handle, get_userid)
-+ caddr_t handle;
-+ char *(*get_userid)();
- {
-- register struct kinfo_proc *pp;
-- register long cputime;
-- register double pct;
-+ struct kinfo_proc *pp;
-+ long cputime;
-+ double pct;
- struct handle *hp;
-@@ -633,8 +649,7 @@
-
--static int check_nlist(nlst)
--
--register struct nlist *nlst;
--
-+static int
-+check_nlist(nlst)
-+ struct nlist *nlst;
- {
-- register int i;
-+ int i;
-
-@@ -672,9 +687,8 @@
-
--static int getkval(offset, ptr, size, refstr)
--
--unsigned long offset;
--int *ptr;
--int size;
--char *refstr;
--
-+static int
-+getkval(offset, ptr, size, refstr)
-+ unsigned long offset;
-+ int *ptr;
-+ int size;
-+ char *refstr;
- {
-@@ -696,12 +710,13 @@
-
--/* comparison routine for qsort */
-+/* comparison routines for qsort */
-
- /*
-- * proc_compare - comparison function for "qsort"
-- * Compares the resource consumption of two processes using five
-- * distinct keys. The keys (in descending order of importance) are:
-- * percent cpu, cpu ticks, state, resident set size, total virtual
-- * memory usage. The process states are ordered as follows (from least
-- * to most important): WAIT, zombie, sleep, stop, start, run. The
-- * array declaration below maps a process state index into a number
-+ * There are currently four possible comparison routines. main selects
-+ * one of these by indexing in to the array proc_compares.
-+ *
-+ * Possible keys are defined as macros below. Currently these keys are
-+ * defined: percent cpu, cpu ticks, process state, resident set size,
-+ * total virtual memory usage. The process states are ordered as follows
-+ * (from least to most important): WAIT, zombie, sleep, stop, start, run.
-+ * The array declaration below maps a process state index into a number
- * that reflects this ordering.
-@@ -709,24 +724,79 @@
-
--static unsigned char sorted_state[] =
--{
-- 0, /* not used */
-- 3, /* sleep */
-- 1, /* ABANDONED (WAIT) */
-- 6, /* run */
-- 5, /* start */
-- 2, /* zombie */
-- 4 /* stop */
-+/*
-+ * First, the possible comparison keys. These are defined in such a way
-+ * that they can be merely listed in the source code to define the actual
-+ * desired ordering.
-+ */
-+
-+#define ORDERKEY_PCTCPU \
-+ if (lresult = PP(p2, p_pctcpu) - PP(p1, p_pctcpu),\
-+ (result = lresult > 0 ? 1 : lresult < 0 ? -1 : 0) == 0)
-+
-+#define ORDERKEY_CPTICKS \
-+ if (lresult = PP(p2, p_rtime).tv_sec - PP(p1, p_rtime).tv_sec,\
-+ (result = lresult > 0 ? 1 : lresult < 0 ? -1 : 0) == 0)
-+
-+#define ORDERKEY_STATE \
-+ if ((result = sorted_state[(int)PP(p2, p_stat)] - \
-+ sorted_state[(int)PP(p1, p_stat)] ) == 0)
-+
-+#define ORDERKEY_PRIO \
-+ if ((result = PP(p2, p_priority) - PP(p1, p_priority)) == 0)
-+
-+#define ORDERKEY_RSSIZE \
-+ if ((result = VP(p2, vm_rssize) - VP(p1, vm_rssize)) == 0)
-+
-+#define ORDERKEY_MEM \
-+ if ((result = (PROCSIZE(p2) - PROCSIZE(p1))) == 0)
-+
-+/*
-+ * Now the array that maps process state to a weight.
-+ * The order of the elements should match those in state_abbrev[]
-+ */
-+
-+static int sorted_state[] = {
-+ 0, /* (not used) ? */
-+ 4, /* "start" SIDL */
-+ 5, /* "run" SRUN */
-+ 2, /* "sleep" SSLEEP */
-+ 3, /* "stop" SSTOP */
-+ 1, /* "zomb" SZOMB */
- };
-
-+/* compare_cpu - the comparison function for sorting by cpu percentage */
-+
- int
--proc_compare(pp1, pp2)
-+compare_cpu(pp1, pp2)
-+ struct proc **pp1, **pp2;
-+{
-+ struct kinfo_proc *p1;
-+ struct kinfo_proc *p2;
-+ int result;
-+ pctcpu lresult;
-+
-+ /* remove one level of indirection */
-+ p1 = *(struct kinfo_proc **) pp1;
-+ p2 = *(struct kinfo_proc **) pp2;
-
--struct proc **pp1;
--struct proc **pp2;
-+ ORDERKEY_PCTCPU
-+ ORDERKEY_CPTICKS
-+ ORDERKEY_STATE
-+ ORDERKEY_PRIO
-+ ORDERKEY_RSSIZE
-+ ORDERKEY_MEM
-+ ;
-
-+ return (result);
-+}
-+
-+/* compare_prio - the comparison function for sorting by process priority */
-+
-+int
-+compare_prio(pp1, pp2)
-+ struct proc **pp1, **pp2;
- {
-- register struct kinfo_proc *p1;
-- register struct kinfo_proc *p2;
-- register int result;
-- register pctcpu lresult;
-+ struct kinfo_proc *p1;
-+ struct kinfo_proc *p2;
-+ int result;
-+ pctcpu lresult;
-
-@@ -736,31 +806,115 @@
-
-- /* compare percent cpu (pctcpu) */
-- if ((lresult = PP(p2, p_pctcpu) - PP(p1, p_pctcpu)) == 0)
-- {
-- /* use cpticks to break the tie */
-- if ((result = PP(p2, p_cpticks) - PP(p1, p_cpticks)) == 0)
-- {
-- /* use process state to break the tie */
-- if ((result = sorted_state[(unsigned char) PP(p2, p_stat)] -
-- sorted_state[(unsigned char) PP(p1, p_stat)]) == 0)
-- {
-- /* use priority to break the tie */
-- if ((result = PP(p2, p_priority) - PP(p1, p_priority)) == 0)
-- {
-- /* use resident set size (rssize) to break the tie */
-- if ((result = VP(p2, vm_rssize) - VP(p1, vm_rssize)) == 0)
-- {
-- /* use total memory to break the tie */
-- result = PROCSIZE(p2) - PROCSIZE(p1);
-- }
-- }
-- }
-- }
-- }
-- else
-- {
-- result = lresult < 0 ? -1 : 1;
-- }
-+ ORDERKEY_PRIO
-+ ORDERKEY_PCTCPU
-+ ORDERKEY_CPTICKS
-+ ORDERKEY_STATE
-+ ORDERKEY_RSSIZE
-+ ORDERKEY_MEM
-+ ;
-
-- return(result);
-+ return (result);
-+}
-+
-+/* compare_res - the comparison function for sorting by resident set size */
-+
-+int
-+compare_res(pp1, pp2)
-+ struct proc **pp1, **pp2;
-+{
-+ struct kinfo_proc *p1;
-+ struct kinfo_proc *p2;
-+ int result;
-+ pctcpu lresult;
-+
-+ /* remove one level of indirection */
-+ p1 = *(struct kinfo_proc **) pp1;
-+ p2 = *(struct kinfo_proc **) pp2;
-+
-+ ORDERKEY_RSSIZE
-+ ORDERKEY_MEM
-+ ORDERKEY_PCTCPU
-+ ORDERKEY_CPTICKS
-+ ORDERKEY_STATE
-+ ORDERKEY_PRIO
-+ ;
-+
-+ return (result);
-+}
-+
-+/* compare_size - the comparison function for sorting by total memory usage */
-+
-+int
-+compare_size(pp1, pp2)
-+ struct proc **pp1, **pp2;
-+{
-+ struct kinfo_proc *p1;
-+ struct kinfo_proc *p2;
-+ int result;
-+ pctcpu lresult;
-+
-+ /* remove one level of indirection */
-+ p1 = *(struct kinfo_proc **) pp1;
-+ p2 = *(struct kinfo_proc **) pp2;
-+
-+ ORDERKEY_MEM
-+ ORDERKEY_RSSIZE
-+ ORDERKEY_PCTCPU
-+ ORDERKEY_CPTICKS
-+ ORDERKEY_STATE
-+ ORDERKEY_PRIO
-+ ;
-+
-+ return (result);
-+}
-+
-+/* compare_state - the comparison function for sorting by process state */
-+
-+int
-+compare_state(pp1, pp2)
-+ struct proc **pp1, **pp2;
-+{
-+ struct kinfo_proc *p1;
-+ struct kinfo_proc *p2;
-+ int result;
-+ pctcpu lresult;
-+
-+ /* remove one level of indirection */
-+ p1 = *(struct kinfo_proc **) pp1;
-+ p2 = *(struct kinfo_proc **) pp2;
-+
-+ ORDERKEY_STATE
-+ ORDERKEY_PCTCPU
-+ ORDERKEY_CPTICKS
-+ ORDERKEY_PRIO
-+ ORDERKEY_RSSIZE
-+ ORDERKEY_MEM
-+ ;
-+
-+ return (result);
-+}
-+
-+/* compare_time - the comparison function for sorting by total cpu time */
-+
-+int
-+compare_time(pp1, pp2)
-+ struct proc **pp1, **pp2;
-+{
-+ struct kinfo_proc *p1;
-+ struct kinfo_proc *p2;
-+ int result;
-+ pctcpu lresult;
-+
-+ /* remove one level of indirection */
-+ p1 = *(struct kinfo_proc **) pp1;
-+ p2 = *(struct kinfo_proc **) pp2;
-+
-+ ORDERKEY_CPTICKS
-+ ORDERKEY_PCTCPU
-+ ORDERKEY_STATE
-+ ORDERKEY_PRIO
-+ ORDERKEY_MEM
-+ ORDERKEY_RSSIZE
-+ ;
-+
-+ return (result);
- }
-@@ -778,10 +932,9 @@
-
--int proc_owner(pid)
--
--int pid;
--
-+int
-+proc_owner(pid)
-+ int pid;
- {
-- register int cnt;
-- register struct kinfo_proc **prefp;
-- register struct kinfo_proc *pp;
-+ int cnt;
-+ struct kinfo_proc **prefp;
-+ struct kinfo_proc *pp;
-
-@@ -832,2 +985,3 @@
-
-+ l = 0;
- KGET(VM_NSWAP, nswap);
-@@ -938,4 +1092,2 @@
-
--
--#endif
--
-+#endif /* USE_SWAP */
-diff -1 -uBbNr top.c top.c
---- top.c Thu Sep 12 21:50:53 1996
-+++ top.c Sat Oct 4 03:25:02 1997
-@@ -716,3 +716,3 @@
- clear();
-- show_help();
-+ show_help(&statics);
- standout("Hit any key to continue: ");
-diff -1 -uBbNr utils.c utils.c
---- utils.c Tue Sep 10 22:15:14 1996
-+++ utils.c Sat Oct 4 03:25:02 1997
-@@ -18,2 +18,4 @@
-
-+#include <errno.h>
-+
- int atoiwi(str)
-@@ -334,5 +336,5 @@
- extern char *sys_errlist[];
--#endif
-
- extern int sys_nerr;
-+#endif
-
-diff -1 -uBbNr Configure Configure
---- Configure Thu Dec 3 11:56:33 1998
-+++ Configure Thu Dec 3 11:57:30 1998
-@@ -355,3 +355,2 @@
- set t_mode = 4711
-- set mode = 4711
- endif
diff --git a/sysutils/top/patches/patch-af b/sysutils/top/patches/patch-af
new file mode 100644
index 00000000000..c5f80df7b6d
--- /dev/null
+++ b/sysutils/top/patches/patch-af
@@ -0,0 +1,570 @@
+$NetBSD: patch-af,v 1.1 1999/12/08 16:18:49 agc Exp $
+
+--- machine/m_netbsd10.c Fri Jan 26 06:27:18 1996
++++ machine/m_netbsd10.c Sat Oct 4 03:27:03 1997
+@@ -3,3 +3,3 @@
+ *
+- * SYNOPSIS: For a NetBSD-1.0 (4.4BSD) system
++ * SYNOPSIS: For a NetBSD-1.0 through NetBSD-1.2.1 system
+ * Note process resident sizes could be wrong, but ps shows
+@@ -9,5 +9,5 @@
+ * Originally written for BSD4.4 system by Christos Zoulas.
+- * Based on the FreeBSD 2.0 version by Steven Wallace && Wolfram Schneider
+- * NetBSD-1.0 port by Arne Helme
+- * .
++ * Based on the FreeBSD 2.0 version by Steven Wallace && Wolfram Schneider.
++ * NetBSD-1.0 port by Arne Helme. Process ordering added by Luke Mewburn.
++ *
+ * This is the machine-dependent module for NetBSD-1.0
+@@ -15,2 +15,5 @@
+ * NetBSD-1.0
++ * NetBSD-1.1
++ * NetBSD-1.2
++ * NetBSD-1.2.1
+ *
+@@ -18,3 +21,3 @@
+ *
+- * CFLAGS: -DHAVE_GETOPT
++ * CFLAGS: -DHAVE_GETOPT -DORDER
+ *
+@@ -24,2 +27,4 @@
+ * Arne Helme <arne@acm.org>
++ * Luke Mewburn <lukem@netbsd.org>
++ *
+ *
+@@ -30,4 +35,4 @@
+
+-#define LASTPID /**/ /* use last pid, compiler depended */
+-/* #define LASTPID_FIXED /**/
++/* #define LASTPID */ /* use last pid, compiler depended */
++/* #define LASTPID_FIXED */
+ #define VM_REAL /**/ /* use the same values as vmstat -s */
+@@ -53,2 +58,11 @@
+
++#include "os.h"
++
++#include <err.h>
++#include <kvm.h>
++#include <math.h>
++#include <nlist.h>
++#include <stdio.h>
++#include <unistd.h>
++
+ #ifdef USE_SWAP
+@@ -87,3 +101,4 @@
+ /* what we consider to be process size: */
+-#define PROCSIZE(pp) (VP((pp), vm_tsize) + VP((pp), vm_dsize) + VP((pp), vm_ssize))
++#define PROCSIZE(pp) \
++ (VP((pp), vm_tsize) + VP((pp), vm_dsize) + VP((pp), vm_ssize))
+
+@@ -171,3 +186,3 @@
+ {
+- "", "start", "run\0\0\0", "sleep", "stop", "zomb", "WAIT"
++ "", "start", "run\0\0\0", "sleep", "stop", "zomb"
+ };
+@@ -196,3 +211,2 @@
+ static unsigned long cnt_offset;
+-static long cnt;
+ #endif
+@@ -239,2 +253,33 @@
+
++
++/* these are names given to allowed sorting orders -- first is default */
++char *ordernames[] = {
++ "cpu",
++ "pri",
++ "res",
++ "size",
++ "state",
++ "time",
++ NULL
++};
++
++/* forward definitions for comparison functions */
++int compare_cpu();
++int compare_prio();
++int compare_res();
++int compare_size();
++int compare_state();
++int compare_time();
++
++int (*proc_compares[])() = {
++ compare_cpu,
++ compare_prio,
++ compare_res,
++ compare_size,
++ compare_state,
++ compare_time,
++ NULL
++};
++
++
+ /* these are for keeping track of the proc array */
+@@ -260,8 +305,6 @@
+ machine_init(statics)
+-
+-struct statics *statics;
+-
++ struct statics *statics;
+ {
+- register int i = 0;
+- register int pagesize;
++ int i = 0;
++ int pagesize;
+
+@@ -293,6 +336,2 @@
+
+-#if (defined DEBUG)
+- fprintf(stderr, "Hertz: %d\n", hz);
+-#endif
+-
+ (void) getkval(nlst[X_CCPU].n_value, (int *)(&ccpu), sizeof(ccpu),
+@@ -333,2 +372,3 @@
+ statics->memory_names = memorynames;
++ statics->order_names = ordernames;
+
+@@ -338,8 +378,7 @@
+
+-char *format_header(uname_field)
+-
+-register char *uname_field;
+-
++char *
++format_header(uname_field)
++ char *uname_field;
+ {
+- register char *ptr;
++ char *ptr;
+
+@@ -360,8 +399,5 @@
+ get_system_info(si)
+-
+-struct system_info *si;
+-
++ struct system_info *si;
+ {
+ long total;
+- load_avg avenrun[3];
+
+@@ -370,31 +406,13 @@
+ nlst[X_CP_TIME].n_name);
+- (void) getkval(avenrun_offset, (int *)avenrun, sizeof(avenrun),
+- nlst[X_AVENRUN].n_name);
+
+ #ifdef LASTPID
+- (void) getkval(lastpid_offset, (int *)(&lastpid), sizeof(lastpid),
+- "!");
++ (void) getkval(lastpid_offset, (int *)(&lastpid), sizeof(lastpid), "!");
+ #endif
+
+- /* convert load averages to doubles */
+- {
+- register int i;
+- register double *infoloadp;
+- load_avg *avenrunp;
++ if (getloadavg(si->load_avg, NUM_AVERAGES) < 0) {
++ int i;
+
+-#ifdef notyet
+- struct loadavg sysload;
+- int size;
+- getkerninfo(KINFO_LOADAVG, &sysload, &size, 0);
+-#endif
+-
+- infoloadp = si->load_avg;
+- avenrunp = avenrun;
+- for (i = 0; i < 3; i++)
+- {
+-#ifdef notyet
+- *infoloadp++ = ((double) sysload.ldavg[i]) / sysload.fscale;
+-#endif
+- *infoloadp++ = loaddouble(*avenrunp++);
+- }
++ warn("can't getloadavg");
++ for (i = 0; i < NUM_AVERAGES; i++)
++ si->load_avg[i] = 0.0;
+ }
+@@ -426,4 +444,4 @@
+ memory_stats[7] = pagetok(total.t_free);
+- }
+-#else
++
++#else /* !VM_REAL */
+ struct vmmeter sum;
+@@ -455,5 +473,5 @@
+ /* swap_delay++; XXX Arne */
+-#else
++#else /* !USE_SWAP */
+ memory_stats[4] = 0;
+-#endif
++#endif /* !USE_SWAP */
+
+@@ -461,4 +479,5 @@
+ memory_stats[7] = -1;
++#endif /* !VM_REAL */
+ }
+-#endif
++
+ /* set arrays and strings */
+@@ -480,14 +498,13 @@
+
+-caddr_t get_process_info(si, sel, compare)
+-
+-struct system_info *si;
+-struct process_select *sel;
+-int (*compare)();
+-
++caddr_t
++get_process_info(si, sel, compare)
++ struct system_info *si;
++ struct process_select *sel;
++ int (*compare)();
+ {
+- register int i;
+- register int total_procs;
+- register int active_procs;
+- register struct kinfo_proc **prefp;
+- register struct kinfo_proc *pp;
++ int i;
++ int total_procs;
++ int active_procs;
++ struct kinfo_proc **prefp;
++ struct kinfo_proc *pp;
+
+@@ -564,11 +581,10 @@
+
+-char *format_next_process(handle, get_userid)
+-
+-caddr_t handle;
+-char *(*get_userid)();
+-
++char *
++format_next_process(handle, get_userid)
++ caddr_t handle;
++ char *(*get_userid)();
+ {
+- register struct kinfo_proc *pp;
+- register long cputime;
+- register double pct;
++ struct kinfo_proc *pp;
++ long cputime;
++ double pct;
+ struct handle *hp;
+@@ -633,8 +649,7 @@
+
+-static int check_nlist(nlst)
+-
+-register struct nlist *nlst;
+-
++static int
++check_nlist(nlst)
++ struct nlist *nlst;
+ {
+- register int i;
++ int i;
+
+@@ -672,9 +687,8 @@
+
+-static int getkval(offset, ptr, size, refstr)
+-
+-unsigned long offset;
+-int *ptr;
+-int size;
+-char *refstr;
+-
++static int
++getkval(offset, ptr, size, refstr)
++ unsigned long offset;
++ int *ptr;
++ int size;
++ char *refstr;
+ {
+@@ -696,12 +710,13 @@
+
+-/* comparison routine for qsort */
++/* comparison routines for qsort */
+
+ /*
+- * proc_compare - comparison function for "qsort"
+- * Compares the resource consumption of two processes using five
+- * distinct keys. The keys (in descending order of importance) are:
+- * percent cpu, cpu ticks, state, resident set size, total virtual
+- * memory usage. The process states are ordered as follows (from least
+- * to most important): WAIT, zombie, sleep, stop, start, run. The
+- * array declaration below maps a process state index into a number
++ * There are currently four possible comparison routines. main selects
++ * one of these by indexing in to the array proc_compares.
++ *
++ * Possible keys are defined as macros below. Currently these keys are
++ * defined: percent cpu, cpu ticks, process state, resident set size,
++ * total virtual memory usage. The process states are ordered as follows
++ * (from least to most important): WAIT, zombie, sleep, stop, start, run.
++ * The array declaration below maps a process state index into a number
+ * that reflects this ordering.
+@@ -709,24 +724,79 @@
+
+-static unsigned char sorted_state[] =
+-{
+- 0, /* not used */
+- 3, /* sleep */
+- 1, /* ABANDONED (WAIT) */
+- 6, /* run */
+- 5, /* start */
+- 2, /* zombie */
+- 4 /* stop */
++/*
++ * First, the possible comparison keys. These are defined in such a way
++ * that they can be merely listed in the source code to define the actual
++ * desired ordering.
++ */
++
++#define ORDERKEY_PCTCPU \
++ if (lresult = PP(p2, p_pctcpu) - PP(p1, p_pctcpu),\
++ (result = lresult > 0 ? 1 : lresult < 0 ? -1 : 0) == 0)
++
++#define ORDERKEY_CPTICKS \
++ if (lresult = PP(p2, p_rtime).tv_sec - PP(p1, p_rtime).tv_sec,\
++ (result = lresult > 0 ? 1 : lresult < 0 ? -1 : 0) == 0)
++
++#define ORDERKEY_STATE \
++ if ((result = sorted_state[(int)PP(p2, p_stat)] - \
++ sorted_state[(int)PP(p1, p_stat)] ) == 0)
++
++#define ORDERKEY_PRIO \
++ if ((result = PP(p2, p_priority) - PP(p1, p_priority)) == 0)
++
++#define ORDERKEY_RSSIZE \
++ if ((result = VP(p2, vm_rssize) - VP(p1, vm_rssize)) == 0)
++
++#define ORDERKEY_MEM \
++ if ((result = (PROCSIZE(p2) - PROCSIZE(p1))) == 0)
++
++/*
++ * Now the array that maps process state to a weight.
++ * The order of the elements should match those in state_abbrev[]
++ */
++
++static int sorted_state[] = {
++ 0, /* (not used) ? */
++ 4, /* "start" SIDL */
++ 5, /* "run" SRUN */
++ 2, /* "sleep" SSLEEP */
++ 3, /* "stop" SSTOP */
++ 1, /* "zomb" SZOMB */
+ };
+
++/* compare_cpu - the comparison function for sorting by cpu percentage */
++
+ int
+-proc_compare(pp1, pp2)
++compare_cpu(pp1, pp2)
++ struct proc **pp1, **pp2;
++{
++ struct kinfo_proc *p1;
++ struct kinfo_proc *p2;
++ int result;
++ pctcpu lresult;
++
++ /* remove one level of indirection */
++ p1 = *(struct kinfo_proc **) pp1;
++ p2 = *(struct kinfo_proc **) pp2;
+
+-struct proc **pp1;
+-struct proc **pp2;
++ ORDERKEY_PCTCPU
++ ORDERKEY_CPTICKS
++ ORDERKEY_STATE
++ ORDERKEY_PRIO
++ ORDERKEY_RSSIZE
++ ORDERKEY_MEM
++ ;
+
++ return (result);
++}
++
++/* compare_prio - the comparison function for sorting by process priority */
++
++int
++compare_prio(pp1, pp2)
++ struct proc **pp1, **pp2;
+ {
+- register struct kinfo_proc *p1;
+- register struct kinfo_proc *p2;
+- register int result;
+- register pctcpu lresult;
++ struct kinfo_proc *p1;
++ struct kinfo_proc *p2;
++ int result;
++ pctcpu lresult;
+
+@@ -736,31 +806,115 @@
+
+- /* compare percent cpu (pctcpu) */
+- if ((lresult = PP(p2, p_pctcpu) - PP(p1, p_pctcpu)) == 0)
+- {
+- /* use cpticks to break the tie */
+- if ((result = PP(p2, p_cpticks) - PP(p1, p_cpticks)) == 0)
+- {
+- /* use process state to break the tie */
+- if ((result = sorted_state[(unsigned char) PP(p2, p_stat)] -
+- sorted_state[(unsigned char) PP(p1, p_stat)]) == 0)
+- {
+- /* use priority to break the tie */
+- if ((result = PP(p2, p_priority) - PP(p1, p_priority)) == 0)
+- {
+- /* use resident set size (rssize) to break the tie */
+- if ((result = VP(p2, vm_rssize) - VP(p1, vm_rssize)) == 0)
+- {
+- /* use total memory to break the tie */
+- result = PROCSIZE(p2) - PROCSIZE(p1);
+- }
+- }
+- }
+- }
+- }
+- else
+- {
+- result = lresult < 0 ? -1 : 1;
+- }
++ ORDERKEY_PRIO
++ ORDERKEY_PCTCPU
++ ORDERKEY_CPTICKS
++ ORDERKEY_STATE
++ ORDERKEY_RSSIZE
++ ORDERKEY_MEM
++ ;
+
+- return(result);
++ return (result);
++}
++
++/* compare_res - the comparison function for sorting by resident set size */
++
++int
++compare_res(pp1, pp2)
++ struct proc **pp1, **pp2;
++{
++ struct kinfo_proc *p1;
++ struct kinfo_proc *p2;
++ int result;
++ pctcpu lresult;
++
++ /* remove one level of indirection */
++ p1 = *(struct kinfo_proc **) pp1;
++ p2 = *(struct kinfo_proc **) pp2;
++
++ ORDERKEY_RSSIZE
++ ORDERKEY_MEM
++ ORDERKEY_PCTCPU
++ ORDERKEY_CPTICKS
++ ORDERKEY_STATE
++ ORDERKEY_PRIO
++ ;
++
++ return (result);
++}
++
++/* compare_size - the comparison function for sorting by total memory usage */
++
++int
++compare_size(pp1, pp2)
++ struct proc **pp1, **pp2;
++{
++ struct kinfo_proc *p1;
++ struct kinfo_proc *p2;
++ int result;
++ pctcpu lresult;
++
++ /* remove one level of indirection */
++ p1 = *(struct kinfo_proc **) pp1;
++ p2 = *(struct kinfo_proc **) pp2;
++
++ ORDERKEY_MEM
++ ORDERKEY_RSSIZE
++ ORDERKEY_PCTCPU
++ ORDERKEY_CPTICKS
++ ORDERKEY_STATE
++ ORDERKEY_PRIO
++ ;
++
++ return (result);
++}
++
++/* compare_state - the comparison function for sorting by process state */
++
++int
++compare_state(pp1, pp2)
++ struct proc **pp1, **pp2;
++{
++ struct kinfo_proc *p1;
++ struct kinfo_proc *p2;
++ int result;
++ pctcpu lresult;
++
++ /* remove one level of indirection */
++ p1 = *(struct kinfo_proc **) pp1;
++ p2 = *(struct kinfo_proc **) pp2;
++
++ ORDERKEY_STATE
++ ORDERKEY_PCTCPU
++ ORDERKEY_CPTICKS
++ ORDERKEY_PRIO
++ ORDERKEY_RSSIZE
++ ORDERKEY_MEM
++ ;
++
++ return (result);
++}
++
++/* compare_time - the comparison function for sorting by total cpu time */
++
++int
++compare_time(pp1, pp2)
++ struct proc **pp1, **pp2;
++{
++ struct kinfo_proc *p1;
++ struct kinfo_proc *p2;
++ int result;
++ pctcpu lresult;
++
++ /* remove one level of indirection */
++ p1 = *(struct kinfo_proc **) pp1;
++ p2 = *(struct kinfo_proc **) pp2;
++
++ ORDERKEY_CPTICKS
++ ORDERKEY_PCTCPU
++ ORDERKEY_STATE
++ ORDERKEY_PRIO
++ ORDERKEY_MEM
++ ORDERKEY_RSSIZE
++ ;
++
++ return (result);
+ }
+@@ -778,10 +932,9 @@
+
+-int proc_owner(pid)
+-
+-int pid;
+-
++int
++proc_owner(pid)
++ int pid;
+ {
+- register int cnt;
+- register struct kinfo_proc **prefp;
+- register struct kinfo_proc *pp;
++ int cnt;
++ struct kinfo_proc **prefp;
++ struct kinfo_proc *pp;
+
+@@ -832,2 +985,3 @@
+
++ l = 0;
+ KGET(VM_NSWAP, nswap);
+@@ -938,4 +1092,2 @@
+
+-
+-#endif
+-
++#endif /* USE_SWAP */
diff --git a/sysutils/top/patches/patch-ag b/sysutils/top/patches/patch-ag
new file mode 100644
index 00000000000..adf490a4203
--- /dev/null
+++ b/sysutils/top/patches/patch-ag
@@ -0,0 +1,9 @@
+$NetBSD: patch-ag,v 1.1 1999/12/08 16:18:50 agc Exp $
+
+--- top.c Thu Sep 12 21:50:53 1996
++++ top.c Sat Oct 4 03:25:02 1997
+@@ -716,3 +716,3 @@
+ clear();
+- show_help();
++ show_help(&statics);
+ standout("Hit any key to continue: ");
diff --git a/sysutils/top/patches/patch-ah b/sysutils/top/patches/patch-ah
new file mode 100644
index 00000000000..9500ada5d66
--- /dev/null
+++ b/sysutils/top/patches/patch-ah
@@ -0,0 +1,13 @@
+$NetBSD: patch-ah,v 1.1 1999/12/08 16:18:50 agc Exp $
+
+--- utils.c.orig Mon Jun 1 18:58:17 1998
++++ utils.c Wed Dec 8 16:09:50 1999
+@@ -16,6 +16,8 @@
+ #include "top.h"
+ #include "os.h"
+
++#include <errno.h>
++
+ int atoiwi(str)
+
+ char *str;
diff --git a/sysutils/top/patches/patch-ai b/sysutils/top/patches/patch-ai
new file mode 100644
index 00000000000..68d73077646
--- /dev/null
+++ b/sysutils/top/patches/patch-ai
@@ -0,0 +1,8 @@
+$NetBSD: patch-ai,v 1.1 1999/12/08 16:18:50 agc Exp $
+
+--- Configure Thu Dec 3 11:56:33 1998
++++ Configure Thu Dec 3 11:57:30 1998
+@@ -355,3 +355,2 @@
+ set t_mode = 4711
+- set mode = 4711
+ endif