Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fcd19adc54 | ||
|
|
75987c50d6 | ||
|
|
3b3d39c18c | ||
|
|
06227deb08 | ||
|
|
53ca874f25 | ||
|
|
fbedd2a351 | ||
|
|
fb1974ef9b | ||
|
|
00ce2bed2a | ||
|
|
a1d643c4ca |
72
Makefile
72
Makefile
@@ -1,28 +1,54 @@
|
||||
CFLAGS += -Wall -I/usr/X11R6/include/
|
||||
BINDIR=/usr/local/bin
|
||||
MANDIR=/usr/local/man/man1
|
||||
LDFLAGS=-L/usr/X11R6/lib -lX11 -lXt -lXaw -lXmu
|
||||
# OS=$(uname) make
|
||||
|
||||
xmem: xmem.o get_mem.o MemStripChart.o
|
||||
$(CC) -o xmem xmem.o get_mem.o MemStripChart.o $(LDFLAGS)
|
||||
### OS = FreeBSD
|
||||
PROG= xmem
|
||||
VERSION= 1.27
|
||||
FreeBSD_lflag= -lkvm
|
||||
LDFLAGS+= -L/usr/X11R6/lib -L/usr/local/lib/ -lX11 -lXt -lXaw -lXmu
|
||||
LDFLAGS+= $($(OS)_lflag)
|
||||
CFLAGS+= -Wall -I/usr/X11R6/include/ -I/usr/local/include/
|
||||
OBJECTS= xmem.o MemStripChart.o
|
||||
FreeBSD_stub = get_mem_fbsd.o
|
||||
OpenBSD_stub = get_mem.o
|
||||
OBJECTS += $($(OS)_stub)
|
||||
|
||||
xmem.o: xmem.c
|
||||
$(CC) $(CFLAGS) -c xmem.c
|
||||
|
||||
get_mem.o: get_mem.c
|
||||
$(CC) $(CFLAGS) -c get_mem.c
|
||||
|
||||
MemStripChart.o: MemStripChart.c
|
||||
$(CC) $(CFLAGS) -c MemStripChart.c
|
||||
|
||||
clean:
|
||||
-rm xmem *.o *~
|
||||
|
||||
all: xmem
|
||||
|
||||
install: all
|
||||
/usr/bin/install -c -m 0555 xmem $(DESTDIR)$(BINDIR)
|
||||
/usr/bin/install -c -m 0444 xmem.1 $(DESTDIR)$(MANDIR)
|
||||
/usr/bin/install -c -m 0644 XMem.ad $(DESTDIR)/usr/local/lib/X11/app-defaults/XMem
|
||||
/usr/bin/install -d -m 0755 $(DESTDIR)/usr/local/share/xmem/
|
||||
/usr/bin/install -c -m 0644 xmem.bit $(DESTDIR)/usr/local/share/xmem/
|
||||
xmem.full:
|
||||
echo "full not supported yet"
|
||||
|
||||
xmem.debug:
|
||||
echo "debug not supported yet"
|
||||
|
||||
xmem: $(OBJECTS)
|
||||
$(CC) -o xmem $(OBJECTS) $(LDFLAGS)
|
||||
|
||||
%.o: %c
|
||||
$(CC) $(CFLAGS) -c $<
|
||||
|
||||
clean:
|
||||
-rm -rf $(OBJECTS) $(PROG)
|
||||
|
||||
dist:
|
||||
mkdir -p ${PROG}-${VERSION}
|
||||
cp *.h *.c Makefile xmem.1 xmem.bit copyright XMem.ad ${PROG}-${VERSION}
|
||||
tar cfvz ${PROG}-${VERSION}.tar.gz ${PROG}-${VERSION}
|
||||
rm -rf ${PROG}-${VERSION}
|
||||
|
||||
dist-clean:
|
||||
-rm ${PROG}-${VERSION}.tar.gz
|
||||
|
||||
install:
|
||||
install -d -m 755 {PREFIX}/bin/
|
||||
install -c -S -s -o root -g bin -m 755 xmem ${PREFIX}/bin/xmem
|
||||
install -d -m 755 ${PREFIX}/man/man1/
|
||||
install -c -o root -g bin -m 644 xmem.1 ${PREFIX}/man/man1/xmem.1
|
||||
install -d -m 755 ${PREFIX}/lib/X11/app-defaults/
|
||||
install -c -o root -g bin -m 644 XMem.ad ${PREFIX}/lib/X11/app-defaults/XMem
|
||||
install -d -m 755 ${PREFIX}/share/${PROG}/
|
||||
install -c -o root -g bin -m 644 xmem.bit ${PREFIX}/share/${PROG}/xmem.bit
|
||||
install -c -o root -g bin -m 644 copyright ${PREFIX}/share/${PROG}/copyright
|
||||
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
|
||||
BIN
MemStripChart.o
BIN
MemStripChart.o
Binary file not shown.
37
copyright
Normal file
37
copyright
Normal file
@@ -0,0 +1,37 @@
|
||||
This package was debianized by Daniel Baumann <daniel@debian.org> on
|
||||
Sun, 22 Jan 2006 14:26:00 +0100.
|
||||
|
||||
This xmem was resurrected from the xfree86 sources of the bo release.
|
||||
|
||||
Copyright Holder: X Consortium
|
||||
|
||||
License:
|
||||
|
||||
Copyright (C) 1987 X Consortium
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of the X Consortium shall
|
||||
not be used in advertising or otherwise to promote the sale, use or
|
||||
other dealings in this Software without prior written authorization from
|
||||
the X Consortium.
|
||||
|
||||
The Debian packaging is (C) 2006-2007, Daniel Baumann <daniel@debian.org> and
|
||||
is licensed under the GPL, see `/usr/share/common-licenses/GPL'.
|
||||
@@ -1,6 +1,7 @@
|
||||
/* $Id: get_mem.c,v 1.4 2017/02/26 16:03:48 bch Exp $
|
||||
/* $Id: get_mem.c,v 1.5 2018/12/26 18:46:04 bch Exp $
|
||||
*
|
||||
* Adapted: get memory usage on OpenBSD
|
||||
* Author: Christian Barthel <bch@vcs.onfire.org>
|
||||
* Author: Christian Barthel <bch@online.de>
|
||||
*
|
||||
* get memory usage, from get_load.c derived
|
||||
*
|
||||
@@ -9,6 +10,7 @@
|
||||
* Modified for more recent kernels Helmut Geyer Oct. 1996
|
||||
*/
|
||||
|
||||
|
||||
#include <sys/param.h> /* DEV_BSIZE MAXCOMLEN PZERO */
|
||||
#include <sys/sysctl.h>
|
||||
#include <sys/swap.h>
|
||||
|
||||
113
get_mem_fbsd.c
Normal file
113
get_mem_fbsd.c
Normal file
@@ -0,0 +1,113 @@
|
||||
/* $Id: get_mem_fbsd.c,v 1.1 2018/12/26 18:46:16 bch Exp $
|
||||
*
|
||||
* Author: Christian Barthel <bch@online.de>
|
||||
*/
|
||||
|
||||
|
||||
#include <sys/types.h> /* DEV_BSIZE MAXCOMLEN PZERO */
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
#include <unistd.h>
|
||||
#include <kvm.h>
|
||||
|
||||
#include <X11/Xos.h>
|
||||
#include <X11/Intrinsic.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <err.h>
|
||||
#include "MemStripChart.h"
|
||||
|
||||
static int pageshift = -1;
|
||||
static int pagesize = 0;
|
||||
static kvm_t *kd = 0;
|
||||
#define pagetok(size) ((size) << pageshift)
|
||||
#define LOG1024 10
|
||||
|
||||
static unsigned int allmem_pages = 0;
|
||||
|
||||
static void initPageShift(void)
|
||||
{
|
||||
pagesize = getpagesize();
|
||||
size_t len = sizeof(allmem_pages);
|
||||
int mib[len];
|
||||
pageshift = 0;
|
||||
while (pagesize > 1) {
|
||||
pageshift++;
|
||||
pagesize >>= 1;
|
||||
}
|
||||
pageshift -= LOG1024;
|
||||
|
||||
kd = kvm_open(NULL, "/dev/null" ,NULL, O_RDONLY, "kvm_open");
|
||||
|
||||
if (sysctlbyname("vm.stats.vm.v_page_count", &allmem_pages, &len, NULL, 0) == -1)
|
||||
perror("sysctl");
|
||||
#ifdef DEBUG
|
||||
printf("page_count: %d\n", allmem_pages);
|
||||
#endif
|
||||
}
|
||||
|
||||
static double getSwapFrac()
|
||||
{
|
||||
/* XXX Borrowed from top(1) code: */
|
||||
int n;
|
||||
struct kvm_swap swapary[1];
|
||||
static int pagesize = 0;
|
||||
static unsigned long swap_maxpages = 0;
|
||||
size_t sz = sizeof(swap_maxpages);
|
||||
|
||||
int retavail = 0;
|
||||
int retfree = 0;
|
||||
|
||||
|
||||
n = kvm_getswapinfo(kd, swapary, 1, 0);
|
||||
if (n < 0 || swapary[0].ksw_total == 0)
|
||||
return (0);
|
||||
|
||||
if (swap_maxpages == 0)
|
||||
sysctlbyname("vm.swap_maxpages", &swap_maxpages, &sz, NULL, 0);
|
||||
|
||||
if ( swapary[0].ksw_total > swap_maxpages )
|
||||
swapary[0].ksw_total = swap_maxpages;
|
||||
|
||||
retavail = swapary[0].ksw_total;
|
||||
retfree = swapary[0].ksw_total - swapary[0].ksw_used;
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("swap: %d %d %d %d\n", retavail, retavail, swapary[0].ksw_total,
|
||||
swapary[0].ksw_used);
|
||||
#endif
|
||||
return (double)(retavail-retfree)/(double)retavail;
|
||||
}
|
||||
|
||||
void GetMemLoadPoint(Widget w, caddr_t closure, caddr_t call_data)
|
||||
{
|
||||
MemStripChartCallbackData ret;
|
||||
int a, b;
|
||||
size_t sz = sizeof(int);
|
||||
double cache = 0;
|
||||
|
||||
if (pageshift < 0)
|
||||
initPageShift();
|
||||
|
||||
sysctlbyname("vm.stats.vm.v_wire_count", &a, &sz, NULL, 0);
|
||||
ret.code = (double)a / (double)allmem_pages;
|
||||
|
||||
sysctlbyname("vm.stats.vm.v_active_count", &a, &sz, NULL, 0);
|
||||
ret.buffer = (double)a / (double)allmem_pages;
|
||||
|
||||
/* v_cache_count and v_inactive_count are treated similarly */
|
||||
sysctlbyname("vm.stats.vm.v_inactive_count", &a, &sz, NULL, 0);
|
||||
sysctlbyname("vm.stats.vm.v_cache_count", &b, &sz, NULL, 0);
|
||||
ret.cached = (double)(a + b) / allmem_pages;
|
||||
|
||||
|
||||
sysctlbyname("vm.stats.vm.v_free_count", &a, &sz, NULL, 0);
|
||||
ret.free = (double)a / allmem_pages;
|
||||
ret.swap = getSwapFrac();
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("%u %lf %lf %lf %lf\n", allmem_pages,
|
||||
ret.code, ret.cached, ret.free, ret.swap);
|
||||
#endif
|
||||
memcpy(call_data, &ret, sizeof(MemStripChartCallbackData));
|
||||
}
|
||||
12
xmem.1
12
xmem.1
@@ -1,4 +1,4 @@
|
||||
.TH XMEM 1x "Release 5, X Version 11" "memory display utility"
|
||||
.TH XMEM 1 "Release 5, X Version 11" "memory display utility"
|
||||
.SH NAME
|
||||
xmem \- memory/swap usage display utility for X
|
||||
.SH SYNOPSIS
|
||||
@@ -55,15 +55,15 @@ second. The default is 10.
|
||||
(Xresource: *mem.update)
|
||||
.TP
|
||||
.B \-codecolor color
|
||||
Color for used code and stack memory. The default is red.
|
||||
Color for used code and stack memory. The default is blue.
|
||||
(Xresource: *mem.codecolor)
|
||||
.TP
|
||||
.B \-cachedcolor color
|
||||
Color for cached memory. The default is yellow.
|
||||
Color for cached memory. The default is orange.
|
||||
(Xresource: *mem.cachedcolor)
|
||||
.TP
|
||||
.B \-buffercolor color
|
||||
Color for buffer memory. The default is blue.
|
||||
Color for buffer memory. See BUGS.
|
||||
(Xresource: *mem.buffercolor)
|
||||
.TP
|
||||
.B \-freecolor color
|
||||
@@ -109,7 +109,7 @@ stored in the RESOURCE_MANAGER property.
|
||||
.SH SEE ALSO
|
||||
X(1), xrdb(1), mem(4), Athena StripChart Widget.
|
||||
.SH BUGS
|
||||
The buffer-memory is always 0.
|
||||
The buffer-memory is always 0. There is no distinction on BSDs.
|
||||
.SH COPYRIGHT
|
||||
Copyright 1988, Massachusetts Institute of Technology.
|
||||
.br
|
||||
@@ -121,4 +121,4 @@ Della Fera (MIT-Athena), and Chris Peterson (MIT-LCS).
|
||||
.P
|
||||
Updated 2007/04 by Michelle Konzack <linux4michelle@freenet.de>
|
||||
.P
|
||||
Update by Christian Barthel <bch@onfire.org>, 2017/01, OpenBSD support.
|
||||
Update by Christian Barthel <bch@onfire.org>, 2017/01, OpenBSD support.
|
||||
|
||||
233
xmem.c
233
xmem.c
@@ -1,7 +1,8 @@
|
||||
/*
|
||||
* xmem - display memory/swap usage utility for X
|
||||
*
|
||||
* Copyright 2017 Christian Barthel <bch@onfire.org>
|
||||
* Updated by Christian Barthel <bch@online.de>
|
||||
*
|
||||
* Copyright 1989 Massachusetts Institute of Technology
|
||||
*
|
||||
* $XConsortium: xload.c,v 1.36 91/05/24 16:57:46 converse Exp $
|
||||
@@ -46,19 +47,19 @@ typedef struct _XLoadResources {
|
||||
*/
|
||||
|
||||
static XrmOptionDescRec options_mem[] = {
|
||||
{"-scale", "*mem.minScale", XrmoptionSepArg, NULL},
|
||||
{"-update", "*mem.update", XrmoptionSepArg, NULL},
|
||||
{"-hl", "*mem.highlight", XrmoptionSepArg, NULL},
|
||||
{"-highlight", "*mem.highlight", XrmoptionSepArg, NULL},
|
||||
{"-codecolor", "*mem.codecolor", XrmoptionSepArg, NULL},
|
||||
{"-cachedcolor", "*mem.cachedcolor", XrmoptionSepArg, NULL},
|
||||
{"-buffercolor", "*mem.buffercolor", XrmoptionSepArg, NULL},
|
||||
{"-freecolor", "*mem.freecolor", XrmoptionSepArg, NULL},
|
||||
{"-swapcolor", "*mem.swapcolor", XrmoptionSepArg, NULL},
|
||||
{"-jumpscroll", "*mem.jumpScroll", XrmoptionSepArg, NULL},
|
||||
{"-label", "*label.label", XrmoptionSepArg, NULL},
|
||||
{"-nolabel", "*showLabel", XrmoptionNoArg, "False"},
|
||||
{"-lights", "*useLights", XrmoptionNoArg, "True"},
|
||||
{"-scale", "*mem.minScale", XrmoptionSepArg, NULL},
|
||||
{"-update", "*mem.update", XrmoptionSepArg, NULL},
|
||||
{"-hl", "*mem.highlight", XrmoptionSepArg, NULL},
|
||||
{"-highlight", "*mem.highlight", XrmoptionSepArg, NULL},
|
||||
{"-codecolor", "*mem.codecolor", XrmoptionSepArg, NULL},
|
||||
{"-cachedcolor", "*mem.cachedcolor", XrmoptionSepArg, NULL},
|
||||
{"-buffercolor", "*mem.buffercolor", XrmoptionSepArg, NULL},
|
||||
{"-freecolor", "*mem.freecolor", XrmoptionSepArg, NULL},
|
||||
{"-swapcolor", "*mem.swapcolor", XrmoptionSepArg, NULL},
|
||||
{"-jumpscroll", "*mem.jumpScroll", XrmoptionSepArg, NULL},
|
||||
{"-label", "*label.label", XrmoptionSepArg, NULL},
|
||||
{"-nolabel", "*showLabel", XrmoptionNoArg, "False"},
|
||||
{"-lights", "*useLights", XrmoptionNoArg, "True"},
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -70,7 +71,7 @@ static XrmOptionDescRec options_mem[] = {
|
||||
|
||||
static XtResource my_resources_mem[] = {
|
||||
{"showLabel", XtCBoolean, XtRBoolean, sizeof(Boolean),
|
||||
Offset(show_label), XtRImmediate, (XtPointer) TRUE},
|
||||
Offset(show_label), XtRImmediate, (XtPointer) TRUE},
|
||||
};
|
||||
|
||||
#undef Offset
|
||||
@@ -78,7 +79,7 @@ static XtResource my_resources_mem[] = {
|
||||
static XLoadResources resources;
|
||||
|
||||
static XtActionsRec xload_actions[] = {
|
||||
{ "quit", quit },
|
||||
{ "quit", quit },
|
||||
};
|
||||
static Atom wm_delete_window;
|
||||
|
||||
@@ -91,38 +92,38 @@ void usage(char *progname)
|
||||
fprintf (stderr, "usage: %s [-options ...]\n\n", progname);
|
||||
fprintf (stderr, "where options include:\n");
|
||||
fprintf (stderr,
|
||||
" -display dpy X server on which to display\n");
|
||||
" -display dpy X server on which to display\n");
|
||||
fprintf (stderr,
|
||||
" -geometry geom size and location of window\n");
|
||||
" -geometry geom size and location of window\n");
|
||||
fprintf (stderr,
|
||||
" -fn font font to use in label\n");
|
||||
" -fn font font to use in label\n");
|
||||
fprintf (stderr,
|
||||
" -update seconds interval between updates\n");
|
||||
" -update seconds interval between updates\n");
|
||||
fprintf (stderr,
|
||||
" -label string annotation text\n");
|
||||
" -label string annotation text\n");
|
||||
fprintf (stderr,
|
||||
" -bg color background color\n");
|
||||
" -bg color background color\n");
|
||||
fprintf (stderr,
|
||||
" -fg color text color\n");
|
||||
" -fg color text color\n");
|
||||
|
||||
fprintf (stderr,
|
||||
" -hl color scale color\n");
|
||||
" -hl color scale color\n");
|
||||
fprintf (stderr,
|
||||
" -codecolor color used code and stack memory color\n");
|
||||
" -codecolor color used code and stack memory color\n");
|
||||
fprintf (stderr,
|
||||
" -cachedcolor color used cached memory color\n");
|
||||
" -cachedcolor color used cached memory color\n");
|
||||
fprintf (stderr,
|
||||
" -buffercolor color used buffer memory color\n");
|
||||
" -buffercolor color used buffer memory color\n");
|
||||
fprintf (stderr,
|
||||
" -freecolor color used free memory color\n");
|
||||
" -freecolor color used free memory color\n");
|
||||
fprintf (stderr,
|
||||
" -swapcolor color used swap memory color\n");
|
||||
" -swapcolor color used swap memory color\n");
|
||||
fprintf (stderr,
|
||||
" -nolabel removes the label from above the chart.\n");
|
||||
" -nolabel removes the label from above the chart.\n");
|
||||
fprintf (stderr,
|
||||
" -jumpscroll value number of pixels to scroll on overflow\n");
|
||||
" -jumpscroll value number of pixels to scroll on overflow\n");
|
||||
fprintf (stderr,
|
||||
"The reference line refers to the avaible installed ram\n");
|
||||
"The reference line refers to the avaible installed ram\n");
|
||||
|
||||
fprintf (stderr, "\n");
|
||||
exit(1);
|
||||
@@ -130,94 +131,96 @@ void usage(char *progname)
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
XtAppContext app_con;
|
||||
Widget toplevel, load, pane, label_wid, load_parent;
|
||||
Arg args[1];
|
||||
Pixmap icon_pixmap = None;
|
||||
char *label, host[256];
|
||||
|
||||
/* For security reasons, we reset our uid/gid after doing the necessary
|
||||
system initialization and before calling any X routines. */
|
||||
|
||||
if (setgid(getgid()) == -1)
|
||||
errx(1, "%s: setgid failed: %s\n", argv[0], strerror(errno));
|
||||
if (setuid(getuid()) == -1)
|
||||
errx(1, "%s: setuid failed: %s\n", argv[0], strerror(errno));
|
||||
|
||||
toplevel = XtAppInitialize(&app_con, "XMem", options_mem, XtNumber(options_mem),
|
||||
&argc, argv, NULL, NULL, (Cardinal) 0);
|
||||
|
||||
if (argc != 1) usage(argv[0]);
|
||||
|
||||
XtGetApplicationResources( toplevel, (XtPointer) &resources,
|
||||
my_resources_mem, XtNumber(my_resources_mem),
|
||||
NULL, (Cardinal) 0);
|
||||
/*
|
||||
* This is a hack so that f.delete will do something useful in this
|
||||
* single-window application.
|
||||
*/
|
||||
XtAppAddActions (app_con, xload_actions, XtNumber(xload_actions));
|
||||
XtOverrideTranslations(toplevel,
|
||||
XtParseTranslationTable ("<Message>WM_PROTOCOLS: quit()"));
|
||||
|
||||
XtSetArg (args[0], XtNiconPixmap, &icon_pixmap);
|
||||
XtGetValues(toplevel, args, ONE);
|
||||
if (icon_pixmap == None) {
|
||||
XtSetArg(args[0], XtNiconPixmap,
|
||||
XCreateBitmapFromData(XtDisplay(toplevel),
|
||||
XtScreen(toplevel)->root,
|
||||
(char *)xload_bits,
|
||||
xload_width, xload_height));
|
||||
XtSetValues (toplevel, args, ONE);
|
||||
}
|
||||
|
||||
if (resources.show_label) {
|
||||
pane = XtCreateManagedWidget ("paned", panedWidgetClass,
|
||||
toplevel, NULL, ZERO);
|
||||
|
||||
label_wid = XtCreateManagedWidget ("label", labelWidgetClass,
|
||||
pane, NULL, ZERO);
|
||||
|
||||
XtSetArg (args[0], XtNlabel, &label);
|
||||
XtGetValues(label_wid, args, ONE);
|
||||
|
||||
if ( strcmp("label", label) == 0 ) {
|
||||
(void) XmuGetHostname (host, 255);
|
||||
XtSetArg (args[0], XtNlabel, host);
|
||||
XtSetValues (label_wid, args, ONE);
|
||||
}
|
||||
|
||||
load_parent = pane;
|
||||
}
|
||||
else
|
||||
load_parent = toplevel;
|
||||
|
||||
|
||||
load = XtCreateManagedWidget ("mem", memStripChartWidgetClass,
|
||||
load_parent, NULL, ZERO);
|
||||
XtAddCallback(load, XtNgetValue, (void*)GetMemLoadPoint, NULL);
|
||||
|
||||
XtRealizeWidget (toplevel);
|
||||
wm_delete_window = XInternAtom (XtDisplay(toplevel), "WM_DELETE_WINDOW",
|
||||
False);
|
||||
(void) XSetWMProtocols (XtDisplay(toplevel), XtWindow(toplevel),
|
||||
&wm_delete_window, 1);
|
||||
XtAppContext app_con;
|
||||
Widget toplevel, load, pane, label_wid, load_parent;
|
||||
Arg args[1];
|
||||
Pixmap icon_pixmap = None;
|
||||
char *label, host[256];
|
||||
|
||||
/* For security reasons, we reset our uid/gid after doing the necessary
|
||||
system initialization and before calling any X routines. */
|
||||
|
||||
if (setgid(getgid()) == -1)
|
||||
errx(1, "%s: setgid failed: %s\n", argv[0], strerror(errno));
|
||||
if (setuid(getuid()) == -1)
|
||||
errx(1, "%s: setuid failed: %s\n", argv[0], strerror(errno));
|
||||
|
||||
toplevel = XtAppInitialize(&app_con, "XMem", options_mem, XtNumber(options_mem),
|
||||
&argc, argv, NULL, NULL, (Cardinal) 0);
|
||||
|
||||
if (argc != 1) usage(argv[0]);
|
||||
|
||||
XtGetApplicationResources( toplevel, (XtPointer) &resources,
|
||||
my_resources_mem, XtNumber(my_resources_mem),
|
||||
NULL, (Cardinal) 0);
|
||||
/*
|
||||
* This is a hack so that f.delete will do something useful in this
|
||||
* single-window application.
|
||||
*/
|
||||
XtAppAddActions (app_con, xload_actions, XtNumber(xload_actions));
|
||||
XtOverrideTranslations(toplevel,
|
||||
XtParseTranslationTable ("<Message>WM_PROTOCOLS: quit()"));
|
||||
|
||||
XtSetArg (args[0], XtNiconPixmap, &icon_pixmap);
|
||||
XtGetValues(toplevel, args, ONE);
|
||||
if (icon_pixmap == None) {
|
||||
XtSetArg(args[0], XtNiconPixmap,
|
||||
XCreateBitmapFromData(XtDisplay(toplevel),
|
||||
XtScreen(toplevel)->root,
|
||||
(char *)xload_bits,
|
||||
xload_width, xload_height));
|
||||
XtSetValues (toplevel, args, ONE);
|
||||
}
|
||||
|
||||
if (resources.show_label) {
|
||||
pane = XtCreateManagedWidget ("paned", panedWidgetClass,
|
||||
toplevel, NULL, ZERO);
|
||||
|
||||
label_wid = XtCreateManagedWidget ("label", labelWidgetClass,
|
||||
pane, NULL, ZERO);
|
||||
|
||||
XtSetArg (args[0], XtNlabel, &label);
|
||||
XtGetValues(label_wid, args, ONE);
|
||||
|
||||
if ( strcmp("label", label) == 0 ) {
|
||||
(void) XmuGetHostname (host, 255);
|
||||
XtSetArg (args[0], XtNlabel, host);
|
||||
XtSetValues (label_wid, args, ONE);
|
||||
}
|
||||
|
||||
load_parent = pane;
|
||||
}
|
||||
else
|
||||
load_parent = toplevel;
|
||||
|
||||
|
||||
load = XtCreateManagedWidget ("mem", memStripChartWidgetClass,
|
||||
load_parent, NULL, ZERO);
|
||||
XtAddCallback(load, XtNgetValue, (void*)GetMemLoadPoint, NULL);
|
||||
|
||||
XtRealizeWidget (toplevel);
|
||||
wm_delete_window = XInternAtom (XtDisplay(toplevel), "WM_DELETE_WINDOW",
|
||||
False);
|
||||
(void) XSetWMProtocols (XtDisplay(toplevel), XtWindow(toplevel),
|
||||
&wm_delete_window, 1);
|
||||
|
||||
if (pledge("ps vminfo stdio", NULL) == -1)
|
||||
errx(1, "pledge failed: %s", strerror(errno));
|
||||
#if __OpenBSD__
|
||||
if (pledge("ps vminfo stdio", NULL) == -1)
|
||||
errx(1, "pledge failed: %s", strerror(errno));
|
||||
#endif
|
||||
|
||||
XtAppMainLoop(app_con);
|
||||
return 0;
|
||||
XtAppMainLoop(app_con);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void quit (Widget w, XEvent *event, String *params, Cardinal *num_params)
|
||||
{
|
||||
if (event->type == ClientMessage &&
|
||||
event->xclient.data.l[0] != wm_delete_window) {
|
||||
XBell (XtDisplay(w), 0);
|
||||
return;
|
||||
}
|
||||
XtDestroyApplicationContext(XtWidgetToApplicationContext(w));
|
||||
exit (0);
|
||||
if (event->type == ClientMessage &&
|
||||
event->xclient.data.l[0] != wm_delete_window) {
|
||||
XBell (XtDisplay(w), 0);
|
||||
return;
|
||||
}
|
||||
XtDestroyApplicationContext(XtWidgetToApplicationContext(w));
|
||||
exit (0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user