Deleted Added
full compact
swap.c (65062) swap.c (74671)
1/*-
2 * Copyright (c) 1980, 1992, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by the University of
16 * California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34#ifndef lint
35#if 0
36static char sccsid[] = "@(#)swap.c 8.3 (Berkeley) 4/29/95";
37#endif
38static const char rcsid[] =
1/*-
2 * Copyright (c) 1980, 1992, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by the University of
16 * California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34#ifndef lint
35#if 0
36static char sccsid[] = "@(#)swap.c 8.3 (Berkeley) 4/29/95";
37#endif
38static const char rcsid[] =
39 "$FreeBSD: head/usr.bin/systat/swap.c 65062 2000-08-24 20:22:44Z peter $";
39 "$FreeBSD: head/usr.bin/systat/swap.c 74671 2001-03-23 03:58:25Z tmm $";
40#endif /* not lint */
41
42/*
43 * swapinfo - based on a program of the same name by Kevin Lahey
44 */
45
46#include <sys/param.h>
47#include <sys/ioctl.h>
48#include <sys/stat.h>
49
50#include <kvm.h>
51#include <nlist.h>
52#include <stdio.h>
53#include <stdlib.h>
54#include <unistd.h>
55#include <string.h>
56#include <err.h>
57
58#include "systat.h"
59#include "extern.h"
60
61extern char *getbsize __P((int *headerlenp, long *blocksizep));
62void showspace __P((char *header, int hlen, long blocksize));
63
64kvm_t *kd;
65
66static long blocksize;
67static int hlen;
68
69WINDOW *
70openswap()
71{
72 return (subwin(stdscr, LINES-5-1, 0, 5, 0));
73}
74
75void
76closeswap(w)
77 WINDOW *w;
78{
79 if (w == NULL)
80 return;
81 wclear(w);
82 wrefresh(w);
83 delwin(w);
84}
85
86/*
87 * The meat of all the swap stuff is stolen from pstat(8)'s
88 * swapmode(), which is based on a program called swapinfo written by
89 * Kevin Lahey <kml@rokkaku.atl.ga.us>.
90 */
91
92int
93initswap()
94{
40#endif /* not lint */
41
42/*
43 * swapinfo - based on a program of the same name by Kevin Lahey
44 */
45
46#include <sys/param.h>
47#include <sys/ioctl.h>
48#include <sys/stat.h>
49
50#include <kvm.h>
51#include <nlist.h>
52#include <stdio.h>
53#include <stdlib.h>
54#include <unistd.h>
55#include <string.h>
56#include <err.h>
57
58#include "systat.h"
59#include "extern.h"
60
61extern char *getbsize __P((int *headerlenp, long *blocksizep));
62void showspace __P((char *header, int hlen, long blocksize));
63
64kvm_t *kd;
65
66static long blocksize;
67static int hlen;
68
69WINDOW *
70openswap()
71{
72 return (subwin(stdscr, LINES-5-1, 0, 5, 0));
73}
74
75void
76closeswap(w)
77 WINDOW *w;
78{
79 if (w == NULL)
80 return;
81 wclear(w);
82 wrefresh(w);
83 delwin(w);
84}
85
86/*
87 * The meat of all the swap stuff is stolen from pstat(8)'s
88 * swapmode(), which is based on a program called swapinfo written by
89 * Kevin Lahey <kml@rokkaku.atl.ga.us>.
90 */
91
92int
93initswap()
94{
95 int i;
96 char msgbuf[BUFSIZ];
95 char msgbuf[BUFSIZ];
97 char *cp;
98 static int once = 0;
96 static int once = 0;
99 u_long ptr;
100 struct kvm_swap dummy;
101
102 if (once)
103 return (1);
104
105 if (kvm_getswapinfo(kd, &dummy, 1, 0) < 0) {
106 snprintf(msgbuf, sizeof(msgbuf), "systat: kvm_getswapinfo failed");
107 error(msgbuf);
108 return (0);
109 }
110
111 once = 1;
112 return (1);
113}
114
115static struct kvm_swap kvmsw[16];
116static int kvnsw;
117
118void
119fetchswap()
120{
121 kvnsw = kvm_getswapinfo(kd, kvmsw, 16, 0);
122}
123
124void
125labelswap()
126{
97 struct kvm_swap dummy;
98
99 if (once)
100 return (1);
101
102 if (kvm_getswapinfo(kd, &dummy, 1, 0) < 0) {
103 snprintf(msgbuf, sizeof(msgbuf), "systat: kvm_getswapinfo failed");
104 error(msgbuf);
105 return (0);
106 }
107
108 once = 1;
109 return (1);
110}
111
112static struct kvm_swap kvmsw[16];
113static int kvnsw;
114
115void
116fetchswap()
117{
118 kvnsw = kvm_getswapinfo(kd, kvmsw, 16, 0);
119}
120
121void
122labelswap()
123{
127 char *header, *p;
124 char *header;
128 int row, i;
129
130 fetchswap();
131
132 row = 0;
133 wmove(wnd, row, 0); wclrtobot(wnd);
134 header = getbsize(&hlen, &blocksize);
135 mvwprintw(wnd, row++, 0, "%-5s%*s%9s %55s",
136 "Disk", hlen, header, "Used",
137 "/0% /10% /20% /30% /40% /50% /60% /70% /80% /90% /100");
138
139 for (i = 0; i < kvnsw; ++i) {
140 mvwprintw(wnd, i + 1, 0, "%-5s", kvmsw[i].ksw_devname);
141 }
142}
143
144void
145showswap()
146{
147 int i;
148 int pagesize = getpagesize();
149
150#define CONVERT(v) ((int)((quad_t)(v) * pagesize / blocksize))
151
152 for (i = 0; i <= kvnsw; ++i) {
153 int col = 5;
154 int count;
155
156 if (i == kvnsw) {
157 if (kvnsw == 1)
158 break;
159 mvwprintw(
160 wnd,
161 i + 1,
162 col,
163 "%-5s",
164 "Total"
165 );
166 col += 5;
167 }
168 if (kvmsw[i].ksw_total == 0) {
169 mvwprintw(
170 wnd,
171 i + 1,
172 col + 5,
173 "(swap not configured)"
174 );
175 continue;
176 }
177
178 mvwprintw(
179 wnd,
180 i + 1,
181 col,
182 "%*d",
183 hlen,
184 CONVERT(kvmsw[i].ksw_total)
185 );
186 col += hlen;
187
188 mvwprintw(
189 wnd,
190 i + 1,
191 col,
192 "%9d ",
193 CONVERT(kvmsw[i].ksw_used)
194 );
195
196 count = (int)((double)kvmsw[i].ksw_used * 49.999 /
197 (double)kvmsw[i].ksw_total);
198
199 while (count >= 0) {
200 waddch(wnd, 'X');
201 --count;
202 }
203 }
204}
125 int row, i;
126
127 fetchswap();
128
129 row = 0;
130 wmove(wnd, row, 0); wclrtobot(wnd);
131 header = getbsize(&hlen, &blocksize);
132 mvwprintw(wnd, row++, 0, "%-5s%*s%9s %55s",
133 "Disk", hlen, header, "Used",
134 "/0% /10% /20% /30% /40% /50% /60% /70% /80% /90% /100");
135
136 for (i = 0; i < kvnsw; ++i) {
137 mvwprintw(wnd, i + 1, 0, "%-5s", kvmsw[i].ksw_devname);
138 }
139}
140
141void
142showswap()
143{
144 int i;
145 int pagesize = getpagesize();
146
147#define CONVERT(v) ((int)((quad_t)(v) * pagesize / blocksize))
148
149 for (i = 0; i <= kvnsw; ++i) {
150 int col = 5;
151 int count;
152
153 if (i == kvnsw) {
154 if (kvnsw == 1)
155 break;
156 mvwprintw(
157 wnd,
158 i + 1,
159 col,
160 "%-5s",
161 "Total"
162 );
163 col += 5;
164 }
165 if (kvmsw[i].ksw_total == 0) {
166 mvwprintw(
167 wnd,
168 i + 1,
169 col + 5,
170 "(swap not configured)"
171 );
172 continue;
173 }
174
175 mvwprintw(
176 wnd,
177 i + 1,
178 col,
179 "%*d",
180 hlen,
181 CONVERT(kvmsw[i].ksw_total)
182 );
183 col += hlen;
184
185 mvwprintw(
186 wnd,
187 i + 1,
188 col,
189 "%9d ",
190 CONVERT(kvmsw[i].ksw_used)
191 );
192
193 count = (int)((double)kvmsw[i].ksw_used * 49.999 /
194 (double)kvmsw[i].ksw_total);
195
196 while (count >= 0) {
197 waddch(wnd, 'X');
198 --count;
199 }
200 }
201}