summaryrefslogtreecommitdiff
path: root/desktop/wmmon
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/wmmon')
-rw-r--r--desktop/wmmon/README6
-rw-r--r--desktop/wmmon/doinst.sh2
-rw-r--r--desktop/wmmon/patches/manpage_window_not_clock.diff21
-rw-r--r--desktop/wmmon/patches/rc_file_parser.diff12
-rw-r--r--desktop/wmmon/patches/wmmon_1.0b2-p14.diff996
-rw-r--r--desktop/wmmon/slack-desc19
-rw-r--r--desktop/wmmon/wmmon.SlackBuild84
-rw-r--r--desktop/wmmon/wmmon.info8
-rw-r--r--desktop/wmmon/wmmonrc11
9 files changed, 1159 insertions, 0 deletions
diff --git a/desktop/wmmon/README b/desktop/wmmon/README
new file mode 100644
index 0000000000..0da8e71022
--- /dev/null
+++ b/desktop/wmmon/README
@@ -0,0 +1,6 @@
+WMMon monitors the your CPU, Disk I/O, Memory and Swap usage, and shows
+an average load for CPU and Disk I/O. It also displays your uptime. You
+just click on it to toggle the display.
+
+This build includes security fixes and 2.6 kernel support added by Simon
+Law (maintainer of the wmmon Debian package).
diff --git a/desktop/wmmon/doinst.sh b/desktop/wmmon/doinst.sh
new file mode 100644
index 0000000000..0d298a369b
--- /dev/null
+++ b/desktop/wmmon/doinst.sh
@@ -0,0 +1,2 @@
+[ ! -r etc/wmmonrc ] && cat etc/wmmonrc.sample > etc/wmmonrc
+
diff --git a/desktop/wmmon/patches/manpage_window_not_clock.diff b/desktop/wmmon/patches/manpage_window_not_clock.diff
new file mode 100644
index 0000000000..d32d08ee2d
--- /dev/null
+++ b/desktop/wmmon/patches/manpage_window_not_clock.diff
@@ -0,0 +1,21 @@
+diff -Naur wmmon.app/wmmon/wmmon.1 wmmon.app.patched/wmmon/wmmon.1
+--- wmmon.app/wmmon/wmmon.1 2009-04-20 17:55:39.000000000 -0400
++++ wmmon.app.patched/wmmon/wmmon.1 2009-04-20 17:56:52.000000000 -0400
+@@ -64,7 +64,7 @@
+
+ .TP
+ .BI \-geometry \ geometry
+-This option specifies the preferred position of clock; see
++This option specifies the preferred position of the window; see
+ .IR X(7x) .
+
+ .TP
+@@ -159,7 +159,7 @@
+ .B WMMon
+ detects a
+ .I $HOME/.wmmonrc
+-file, it will launch the appropriate command when you click on the clock.
++file, it will launch the appropriate command when you click on the window.
+
+ The system administrator can define default commands in
+ .IR /etc/wmmonrc .
diff --git a/desktop/wmmon/patches/rc_file_parser.diff b/desktop/wmmon/patches/rc_file_parser.diff
new file mode 100644
index 0000000000..376fcc72d1
--- /dev/null
+++ b/desktop/wmmon/patches/rc_file_parser.diff
@@ -0,0 +1,12 @@
+diff -Naur wmmon.app/wmgeneral/wmgeneral.c wmmon.app.patched/wmgeneral/wmgeneral.c
+--- wmmon.app/wmgeneral/wmgeneral.c 2009-04-20 17:03:25.000000000 -0400
++++ wmmon.app.patched/wmgeneral/wmgeneral.c 2009-04-20 17:02:58.000000000 -0400
+@@ -95,6 +95,8 @@
+ fp = fopen(filename, "r");
+ if (fp) {
+ while (getline(&line, &line_size, fp) >= 0) {
++ if(*line == '#')
++ continue;
+ key = 0;
+ while (key >= 0 && keys[key].label) {
+ if ((p = strstr(line, keys[key].label))) {
diff --git a/desktop/wmmon/patches/wmmon_1.0b2-p14.diff b/desktop/wmmon/patches/wmmon_1.0b2-p14.diff
new file mode 100644
index 0000000000..acb1979f5a
--- /dev/null
+++ b/desktop/wmmon/patches/wmmon_1.0b2-p14.diff
@@ -0,0 +1,996 @@
+--- wmmon-1.0b2.orig/wmgeneral/wmgeneral.c
++++ wmmon-1.0b2/wmgeneral/wmgeneral.c
+@@ -12,6 +12,8 @@
+ ---
+ CHANGES:
+ ---
++ 10/10/2003 (Simon Law, sfllaw@debian.org)
++ * changed the parse_rcfile function to use getline instead of fgets.
+ 02/05/1998 (Martijn Pieterse, pieterse@xs4all.nl)
+ * changed the read_rc_file to parse_rcfile, as suggester by Marcelo E. Magallon
+ * debugged the parse_rc file.
+@@ -21,6 +23,7 @@
+
+ */
+
++#define _GNU_SOURCE
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <string.h>
+@@ -83,17 +86,18 @@
+ void parse_rcfile(const char *filename, rckeys *keys) {
+
+ char *p;
+- char temp[128];
++ char *line = NULL;
++ size_t line_size = 0;
+ char *tokens = " :\t\n";
+ FILE *fp;
+ int i,key;
+
+ fp = fopen(filename, "r");
+ if (fp) {
+- while (fgets(temp, 128, fp)) {
++ while (getline(&line, &line_size, fp) >= 0) {
+ key = 0;
+ while (key >= 0 && keys[key].label) {
+- if ((p = strstr(temp, keys[key].label))) {
++ if ((p = strstr(line, keys[key].label))) {
+ p += strlen(keys[key].label);
+ p += strspn(p, tokens);
+ if ((i = strcspn(p, "#\n"))) p[i] = 0;
+@@ -270,6 +274,7 @@
+ unsigned int borderwidth = 1;
+ XClassHint classHint;
+ char *display_name = NULL;
++ char *geometry = NULL;
+ char *wname = argv[0];
+ XTextProperty name;
+
+@@ -282,7 +287,9 @@
+
+ for (i=1; argv[i]; i++) {
+ if (!strcmp(argv[i], "-display"))
+- display_name = argv[i+1];
++ display_name = argv[++i];
++ else if (!strcmp(argv[i], "-geometry"))
++ geometry = argv[++i];
+ }
+
+ if (!(display = XOpenDisplay(display_name))) {
+@@ -307,7 +314,11 @@
+ fore_pix = GetColor("black");
+
+ XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
+- &mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
++ &mysizehints.x, &mysizehints.y,
++ &mysizehints.width, &mysizehints.height, &dummy);
++ if (geometry)
++ XParseGeometry(geometry, &mysizehints.x, &mysizehints.y,
++ &mysizehints.width, &mysizehints.height);
+
+ mysizehints.width = 64;
+ mysizehints.height = 64;
+@@ -364,3 +375,6 @@
+ XMapWindow(display, win);
+
+ }
++
++/* vim: sw=4 ts=4 columns=82
++ */
+--- wmmon-1.0b2.orig/wmmon/wmmon.c
++++ wmmon-1.0b2/wmmon/wmmon.c
+@@ -28,6 +28,12 @@
+ Changes:
+ ----
+
++ 15/05/2004 (Simon Law, sfllaw@debian.org)
++ * Support disabling of mode-cycling
++ 23/10/2003 (Simon Law, sfllaw@debian.org)
++ * Eliminated exploitable static buffers
++ * Added -geometry support.
++ * /proc/meminfo support for Linux 2.6
+ 18/05/1998 (Antoine Nulle, warp@xs4all.nl)
+ * MEM/SWAP/UPTIME only updated when visible
+ * Using global file descriptors to reduce file
+@@ -65,6 +71,7 @@
+ * First Working Version
+ */
+
++#define _GNU_SOURCE
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <time.h>
+@@ -100,31 +107,28 @@
+ /* Global Variables */
+ /********************/
+
+-char *ProgName;
+ int stat_current = 0; /* now global */
++int mode_cycling = 1; /* Allow mode-cycling */
+ FILE *fp_meminfo;
+ FILE *fp_stat;
+ FILE *fp_loadavg;
+
+ /* functions */
+-void usage(void);
++void usage(char*);
+ void printversion(void);
+ void DrawStats(int *, int, int, int, int);
+ void DrawStats_io(int *, int, int, int, int);
+
+ void wmmon_routine(int, char **);
+
+-void main(int argc, char *argv[]) {
++int main(int argc, char *argv[]) {
+
+ int i;
++ char *name = argv[0];
+
+
+ /* Parse Command Line */
+
+- ProgName = argv[0];
+- if (strlen(ProgName) >= 5)
+- ProgName += (strlen(ProgName) - 5);
+-
+ for (i=1; i<argc; i++) {
+ char *arg = argv[i];
+
+@@ -132,13 +136,17 @@
+ switch (arg[1]) {
+ case 'd' :
+ if (strcmp(arg+1, "display")) {
+- usage();
+- exit(1);
++ usage(name);
++ return 1;
+ }
+ break;
+- case 'v' :
+- printversion();
+- exit(0);
++ case 'g' :
++ if (strcmp(arg+1, "geometry")) {
++ usage(name);
++ return 1;
++ }
++ case 'l' :
++ mode_cycling = 0;
+ break;
+ case 'i' :
+ stat_current = 1;
+@@ -146,15 +154,20 @@
+ case 's' :
+ stat_current = 2;
+ break;
++ case 'v' :
++ printversion();
++ return 0;
+ default:
+- usage();
+- exit(0);
+- break;
++ usage(name);
++ return 1;
+ }
+ }
+ }
+
+ wmmon_routine(argc, argv);
++
++ exit (0);
++
+ }
+
+ /*******************************************************************************\
+@@ -214,8 +227,7 @@
+ long idle;
+
+ FILE *fp;
+- char temp[128];
+- char *p;
++ char *conffile = NULL;
+
+ int xpm_X = 0, xpm_Y = 0;
+
+@@ -246,16 +258,21 @@
+ if (RIGHT_ACTION) right_action = strdup(RIGHT_ACTION);
+ if (MIDDLE_ACTION) middle_action = strdup(MIDDLE_ACTION);
+
+- strcpy(temp, "/etc/wmmonrc");
+- parse_rcfile(temp, wmmon_keys);
++ /* Scan through the .rc files */
++ if (asprintf(&conffile, "/etc/wmmonrc") >= 0) {
++ parse_rcfile(conffile, wmmon_keys);
++ free(conffile);
++ }
+
+- p = getenv("HOME");
+- strcpy(temp, p);
+- strcat(temp, "/.wmmonrc");
+- parse_rcfile(temp, wmmon_keys);
+-
+- strcpy(temp, "/etc/wmmonrc.fixed");
+- parse_rcfile(temp, wmmon_keys);
++ if (asprintf(&conffile, "%s/.wmmonrc", getenv("HOME")) >= 0) {
++ parse_rcfile(conffile, wmmon_keys);
++ free(conffile);
++ }
++
++ if (asprintf(&conffile, "/etc/wmmonrc.fixed") >= 0) {
++ parse_rcfile(conffile, wmmon_keys);
++ free(conffile);
++ }
+
+ stat_online = checksysdevs();
+
+@@ -269,26 +286,36 @@
+ starttime = time(0);
+ nexttime = starttime + 10;
+
++ /* Collect information on each panel */
+ for (i=0; i<stat_online; i++) {
+ get_statistics(stat_device[i].name, &k, &istat, &idle);
+ stat_device[i].statlast = istat;
+ stat_device[i].idlelast = idle;
+ }
+- if (stat_current == 0) DrawStats(stat_device[stat_current].his, 54, 40, 5, 58);
+- if (stat_current == 1) {
+- DrawStats_io(stat_device[stat_current].his, 54, 40, 5, 58);
+- }
+- if (stat_current == 2) {
+- xpm_X = 64;
+- setMaskXY(-64, 0);
+- } else {
+- xpm_X = 0;
+- setMaskXY(0, 0);
++
++ /* Set the mask for the current window */
++ switch (stat_current) {
++ case 0:
++ case 1:
++ xpm_X = 0;
++ setMaskXY(0, 0);
++ break;
++ case 2:
++ xpm_X = 64;
++ setMaskXY(-64, 0);
++ default:
++ break;
+ }
++
++ /* Draw statistics */
++ if (stat_current == 0)
++ DrawStats(stat_device[stat_current].his, 54, 40, 5, 58);
++ if (stat_current == 1)
++ DrawStats_io(stat_device[stat_current].his, 54, 40, 5, 58);
+ DrawActive(stat_device[stat_current].name);
+
+ while (1) {
+- curtime = time(0);
++ curtime = time(NULL);
+
+ waitpid(0, NULL, WNOHANG);
+
+@@ -377,6 +404,9 @@
+ if (curtime >= nexttime) {
+ nexttime+=10;
+
++ if (curtime > nexttime) /* dont let APM suspends make this crazy */
++ nexttime = curtime;
++
+ for (i=0; i<stat_online; i++) {
+ if (stat_device[i].his[54])
+ stat_device[i].his[54] /= stat_device[i].hisaddcnt;
+@@ -411,7 +441,7 @@
+ break;
+ case ButtonRelease:
+ i = CheckMouseRegion(Event.xbutton.x, Event.xbutton.y);
+- if (but_stat == i && but_stat >= 0) {
++ if (but_stat == i && but_stat >= 0 && mode_cycling) {
+ switch (but_stat) {
+ case 0:
+ switch (Event.xbutton.button) {
+@@ -430,7 +460,6 @@
+ }
+ case 1:
+ stat_current++;
+- printf("current stat is :%d\n", stat_current);
+ if (stat_current == stat_online)
+ stat_current = 0;
+
+@@ -499,43 +528,80 @@
+
+ void update_stat_mem(stat_dev *st, stat_dev *st2) {
+
+- char temp[128];
++ static char *line = NULL;
++ static size_t line_size = 0;
++
++ unsigned long swapfree;
+ unsigned long free, shared, buffers, cached;
+
+ freopen("/proc/meminfo", "r", fp_meminfo);
+- while (fgets(temp, 128, fp_meminfo)) {
+- if (strstr(temp, "Mem:")) {
+- sscanf(temp, "Mem: %ld %ld %ld %ld %ld %ld",
+- &st->rt_idle, &st->rt_stat,
+- &free, &shared, &buffers, &cached);
+- st->rt_idle >>= 10;
+- st->rt_stat -= buffers+cached;
+- st->rt_stat >>= 10;
+-// break;
+- }
+- if (strstr(temp, "Swap:")) {
+- sscanf(temp, "Swap: %ld %ld", &st2->rt_idle, &st2->rt_stat);
+- st2->rt_idle >>= 10;
+- st2->rt_stat >>= 10;
+- break;
++ while ((getline(&line, &line_size, fp_meminfo)) > 0) {
++ /* The original format for the first two lines of /proc/meminfo was
++ * Mem: total used free shared buffers cached
++ * Swap: total used free
++ *
++ * As of at least 2.5.47 these two lines were removed, so that the
++ * required information has to come from the rest of the lines.
++ * On top of that, used is no longer recorded - you have to work
++ * this out yourself, from total - free.
++ *
++ * So, these changes below should work. They should also work with
++ * older kernels, too, since the new format has been available for
++ * ages.
++ */
++ if (strstr(line, "MemTotal:")) {
++ sscanf(line, "MemTotal: %ld", &st->rt_idle);
++ }
++ else if (strstr(line, "MemFree:")) {
++ sscanf(line, "MemFree: %ld", &free);
++ }
++ else if (strstr(line, "MemShared:")) {
++ sscanf(line, "MemShared: %ld", &shared);
++ }
++ else if (strstr(line, "Buffers:")) {
++ sscanf(line, "Buffers: %ld", &buffers);
++ }
++ else if (strstr(line, "Cached:")) {
++ sscanf(line, "Cached: %ld", &cached);
++ }
++ else if (strstr(line, "SwapTotal:")) {
++ sscanf(line, "SwapTotal: %ld", &st2->rt_idle);
++ }
++ else if (strstr(line, "SwapFree:")) {
++ sscanf(line, "SwapFree: %ld", &swapfree);
+ }
+ }
++
++ /* memory use - rt_stat is the amount used, it seems, and this isn't
++ * recorded in current version of /proc/meminfo (as of 2.5.47), so we
++ * calculate it from MemTotal - MemFree
++ */
++ st->rt_stat = st->rt_idle - free;
++ st->rt_stat -= buffers+cached;
++ /* As with the amount of memory used, it's not recorded any more, so
++ * we have to calculate it ourselves.
++ */
++ st2->rt_stat = st2->rt_idle - swapfree;
+ }
+
+ void update_stat_swp(stat_dev *st) {
+
+- char temp[128];
++ static char *line = NULL;
++ static size_t line_size = 0;
++ unsigned long swapfree;
+
+ fseek(fp_meminfo, 0, SEEK_SET);
+- while (fgets(temp, 128, fp_meminfo)) {
+- if (strstr(temp, "Swap:")) {
+- sscanf(temp, "Swap: %ld %ld", &st->rt_idle, &st->rt_stat);
+- st->rt_idle >>= 10;
+- st->rt_stat >>= 10;
+- break;
++ while ((getline(&line, &line_size, fp_meminfo)) > 0) {
++ /* As with update_stat_mem(), the format change to /proc/meminfo has
++ * forced some changes here. */
++ if (strstr(line, "SwapTotal:")) {
++ sscanf(line, "SwapTotal: %ld", &st->rt_idle);
++ }
++ else if (strstr(line, "SwapFree:")) {
++ sscanf(line, "SwapFree: %ld", &swapfree);
+ }
+ }
+-
++ st->rt_stat = st->rt_idle - swapfree;
+ }
+
+ /*******************************************************************************\
+@@ -545,11 +611,11 @@
+ void get_statistics(char *devname, long *is, long *ds, long *idle) {
+
+ int i;
+- char temp[128];
++ static char *line = NULL;
++ static size_t line_size = 0;
+ char *p;
+ char *tokens = " \t\n";
+ float f;
+- long maxdiskio=0;
+
+ *is = 0;
+ *ds = 0;
+@@ -557,9 +623,9 @@
+
+ if (!strncmp(devname, "cpu", 3)) {
+ fseek(fp_stat, 0, SEEK_SET);
+- while (fgets(temp, 128, fp_stat)) {
+- if (strstr(temp, "cpu")) {
+- p = strtok(temp, tokens);
++ while ((getline(&line, &line_size, fp_stat)) > 0) {
++ if (strstr(line, "cpu ")) {
++ p = strtok(line, tokens);
+ /* 1..3, 4 == idle, we don't want idle! */
+ for (i=0; i<3; i++) {
+ p = strtok(NULL, tokens);
+@@ -577,17 +643,35 @@
+ if (!strncmp(devname, "i/o", 3)) {
+
+ fseek(fp_stat, 0, SEEK_SET);
+- while (fgets(temp, 128, fp_stat)) {
+- if (strstr(temp, "disk_rio") || strstr(temp, "disk_wio")) {
+- p = strtok(temp, tokens);
++ while ((getline(&line, &line_size, fp_stat)) > 0) {
++ if (strstr(line, "disk_rio") || strstr(line, "disk_wio")) {
++ p = strtok(line, tokens);
+ /* 1..4 */
+ for (i=0; i<4; i++) {
+ p = strtok(NULL, tokens);
+ *ds += atol(p);
+ }
+ }
++ else if (strstr(line, "disk_io")) {
++ int val;
++ unsigned int a, b, c, d, e, h, g;
++
++ p = strtok(line, tokens);
++
++ while ((p = strtok(NULL, tokens))) {
++ val = sscanf (p,
++ "(%d,%d):(%d,%d,%d,%d,%d)",
++ &a, &b, &c, &d, &e, &h,
++ &g);
++
++ if (val != 7)
++ continue;
++
++ *ds += d;
++ *ds += h;
++ }
++ }
+ }
+- if (*ds > maxdiskio) maxdiskio = *ds;
+ }
+ }
+
+@@ -715,16 +799,17 @@
+ |* usage *|
+ \*******************************************************************************/
+
+-void usage(void) {
+-
+- fprintf(stderr, "\nwmmon - programming: tijno, (de)bugging & design warp, webhosting: bobby\n\n");
+- fprintf(stderr, "usage:\n");
+- fprintf(stderr, "\t-display <display name>\n");
+- fprintf(stderr, "\t-h\tthis screen\n");
+- fprintf(stderr, "\t-v\tprint the version number\n");
+- fprintf(stderr, "\t-i\tstartup in DiskIO mode\n");
+- fprintf(stderr, "\t-s\tstartup in SysInfo mode\n");
+- fprintf(stderr, "\n");
++void usage(char *name) {
++ printf("Usage: %s [OPTION]...\n", name);
++ printf("WindowMaker dockapp that displays system information.\n");
++ printf("\n");
++ printf(" -display DISPLAY contact the DISPLAY X server\n");
++ printf(" -geometry GEOMETRY position the clock at GEOMETRY\n");
++ printf(" -l locked view - cannot cycle modes\n");
++ printf(" -i start in Disk I/O mode\n");
++ printf(" -s start in System Info mode\n");
++ printf(" -h display this help and exit\n");
++ printf(" -v output version information and exit\n");
+ }
+
+ /*******************************************************************************\
+@@ -733,7 +818,7 @@
+
+ void printversion(void) {
+
+- if (!strcmp(ProgName, "wmmon")) {
+- fprintf(stderr, "%s\n", WMMON_VERSION);
+- }
++ printf("WMMon version %s\n", WMMON_VERSION);
+ }
++/* vim: sw=4 ts=4 columns=82
++ */
+--- wmmon-1.0b2.orig/wmmon/wmmon.1
++++ wmmon-1.0b2/wmmon/wmmon.1
+@@ -0,0 +1,192 @@
++'\" t
++.\" Man page for wmmon
++.\" Copyright (c) 2003 Software in the Public Interest, Inc.
++.\"
++.\" This program is free software; you can redistribute it and/or modify
++.\" it under the terms of the GNU General Public License as published by
++.\" the Free Software Foundation; either version 2 of the License, or (at
++.\" your option) any later version.
++.\"
++.\" This program is distributed in the hope that it will be useful, but
++.\" WITHOUT ANY WARRANTY; without even the implied warranty of
++.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++.\" General Public License for more details.
++.\"
++.\" You should have received a copy of the GNU General Public License
++.\" along with this program; if not, write to the Free Software
++.\" Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
++.\"
++.TH wmmon 1 "May 1998" "WMMON 1.0b2"
++
++.SH NAME
++wmmon \- Window Maker dockapp for monitoring system information
++
++.SH SYNOPSIS
++
++.B wmmon
++[
++.I OPTION
++]
++
++.SH DESCRIPTION
++
++.B WMMon
++monitors the realtime CPU load as well as the average system load,
++and gives you some nice additional features too. It is intended for
++docking in Window Maker.
++
++It currently provides:
++
++.IP \(bu 4
++a realtime CPU stress meter;
++.IP \(bu
++an auto-scaled average system load meter, like
++.B xload
++and
++.BR wmavgload ;
++.IP \(bu
++a realtime disk I/O stress meter;
++.IP \(bu
++auto-scaled disk I/O load meter;
++.IP \(bu
++realtime memory and swap usage meters;
++.IP \(bu
++a display for system uptime;
++.IP \(bu
++three user-defined commands to launch.
++
++.SH OPTIONS
++
++.TP
++.BI \-display \ display
++This option specifies the X server to contact; see
++.IR X(7x) .
++
++.TP
++.BI \-geometry \ geometry
++This option specifies the preferred position of clock; see
++.IR X(7x) .
++
++.TP
++.BR \-l
++Lock the mode, so that it cannot be cycled by clicking on the upper-left
++widget. You can use this to open multiple copies of
++.BR WMMon ,
++each set to a different mode.
++
++.TP
++.BR \-i
++Start in disk I/O mode, which displays instantaneous disk usage and
++average disk load.
++
++.TP
++.BR \-s
++Start in system information mode, which displays memory usage, swap usage,
++and uptime.
++
++.TP
++.B \-h
++Show help information.
++
++.TP
++.B \-v
++Print the version number.
++
++.SH USAGE
++The
++.B WMMon
++display can be cycled between CPU, disk I/O, and system
++information displays by clicking on the upper-left widget. This
++displays CPU information by default.
++
++WMMon can also be used to launch programs. You may click either left,
++middle, or right mouse buttons in the average-load section of the
++window. The pre-configured program will be launched according to the
++mouse button clicked. (see
++.B CONFIGURATION FILE
++below.)
++
++In order to move
++.BR WMMon ,
++drag on the outer edges. These are not sensitive to mouse clicks.
++
++.SH "DOCKING IN WINDOW MANAGERS"
++
++.TP
++Window Maker
++
++Window Maker users should drag and drop the
++.B WMMon
++window on the Dock. Then, right-click on the border of the window and
++select \*(lqSettings...\*(rq. Check \*(lqStart when Window Maker
++is started\*(rq.
++
++.TP
++AfterStep
++
++AfterStep users should put the following in their
++.I $HOME/.steprc
++
++.RS 16
++Wharf wmmon \- MaxSwallow "wmmon" wmmon &
++.RE
++
++.TP
++Other window managers
++
++.B WMMon
++runs nicely as a 64x64 shaped icon on your desktop.
++
++.SH "CONFIGURATION FILE"
++
++.B WMMon
++can launch three user-defined commands, triggered by left, middle and
++right mouse button clicks. You can define the commands to launch in
++.I $HOME/.wmmonrc
++
++.RS
++.PD 0
++left: xterm
++.PP
++middle: xload
++.PP
++right: xcalc
++.PP
++.PD
++.RE
++
++If
++.B WMMon
++detects a
++.I $HOME/.wmmonrc
++file, it will launch the appropriate command when you click on the clock.
++
++The system administrator can define default commands in
++.IR /etc/wmmonrc .
++The administrator may also choose to \*(lqfix\*(rq particular commands,
++making it impossible for users to change. These commands can be defined in
++.IR /etc/wmmonrc.fixed ,
++although this isn't a nice thing to do.
++
++.SH FILES
++
++.I /etc/wmmonrc
++.br
++.I $HOME/.wmmonrc
++.br
++.I /etc/wmmonrc.fixed
++
++.SH AUTHORS
++
++.B WMMon
++was written by Martijn Pieterse and Antoine Nulle.
++
++This manual page was written by Simon Law <sfllaw@debian.org> for the
++.B Debian
++system (but may be used by others). It is based on the documentation provided
++by the original program.
++
++This manual is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2 of the License, or (at
++your option) any later version.
+--- wmmon-1.0b2.orig/debian/examples
++++ wmmon-1.0b2/debian/examples
+@@ -0,0 +1 @@
++debian/wmmonrc
+--- wmmon-1.0b2.orig/debian/dirs
++++ wmmon-1.0b2/debian/dirs
+@@ -0,0 +1 @@
++usr/bin
+--- wmmon-1.0b2.orig/debian/rules
++++ wmmon-1.0b2/debian/rules
+@@ -0,0 +1,96 @@
++#!/usr/bin/make -f
++#
++# debian/rules file for wmmon.
++# Copyright (C) 2003 Software in the Public Interest.
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or (at
++# your option) any later version.
++#
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++# General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++#
++# Based on the sample debian/rules that uses debhelper.
++# GNU copyright 1997 to 1999 by Joey Hess.
++
++# Uncomment this to turn on verbose mode.
++#export DH_VERBOSE=1
++
++ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
++ CFLAGS += -g
++endif
++ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
++ INSTALL_PROGRAM += -s
++endif
++
++build: build-stamp
++
++build-stamp:
++ dh_testdir
++
++ # Add here commands to compile the package.
++ cd wmmon; $(MAKE)
++
++ touch build-stamp
++
++clean:
++ dh_testdir
++ dh_testroot
++ rm -f build-stamp
++
++ # Add here commands to clean up after the build process.
++ -cd wmmon; $(MAKE) clean
++
++ dh_clean
++
++install: build
++ dh_testdir
++ dh_testroot
++ dh_clean -k
++ dh_installdirs
++
++ # Add here commands to install the package into debian/wmmon.
++ install -m 755 wmmon/wmmon $(CURDIR)/debian/wmmon/usr/bin
++
++# Build architecture-independent files here.
++binary-indep: build install
++# We have nothing to do by default.
++
++# Build architecture-dependent files here.
++binary-arch: build install
++ dh_testdir
++ dh_testroot
++ dh_installdebconf
++ dh_installdocs
++ dh_installexamples
++ dh_installmenu
++# dh_installlogrotate
++# dh_installemacsen
++# dh_installpam
++# dh_installmime
++# dh_installinit
++# dh_installcron
++ dh_installman
++# dh_installinfo
++ dh_installchangelogs CHANGES
++ dh_link
++ dh_strip
++ dh_compress
++ dh_fixperms
++# dh_makeshlibs
++ dh_installdeb
++# dh_perl
++ dh_shlibdeps
++ dh_gencontrol
++ dh_md5sums
++ dh_builddeb
++
++binary: binary-indep binary-arch
++.PHONY: build clean binary-indep binary-arch binary install
+--- wmmon-1.0b2.orig/debian/menu
++++ wmmon-1.0b2/debian/menu
+@@ -0,0 +1,6 @@
++?package(wmmon):\
++ needs="X11"\
++ section="Apps/System"\
++ title="WMmon"\
++ command="/usr/bin/wmmon"\
++ hints="Monitoring,Dockapp"
+--- wmmon-1.0b2.orig/debian/changelog
++++ wmmon-1.0b2/debian/changelog
+@@ -0,0 +1,100 @@
++wmmon (1.0b2-14) unstable; urgency=medium
++
++ * Fixed build dependencies so we no longer depend on libxpm4-dev.
++ * Quoted all strings in /usr/lib/menu/wmtime.
++ * Add the ability to lock the mode, preventing cycling. Thanks go to
++ Chris Bechberger <bechberger@yahoo.com>.
++
++ -- Simon Law <sfllaw@debian.org> Tue, 10 Aug 2004 21:22:17 -0400
++
++wmmon (1.0b2-13) unstable; urgency=low
++
++ * Removed a memory leak that I introduced. (Closes: Bug#223338)
++
++ -- Simon Law <sfllaw@debian.org> Tue, 09 Dec 2003 12:42:41 -0500
++
++wmmon (1.0b2-12) unstable; urgency=low
++
++ * Changed section to x11.
++
++ -- Simon Law <sfllaw@debian.org> Fri, 05 Dec 2003 11:17:21 -0500
++
++wmmon (1.0b2-11) unstable; urgency=low
++
++ * New maintainer.
++ * Added a manual page.
++ * Added the -geometry option.
++ * Ensure that I/O mode works the same no matter how it is started.
++ (Closes: Bug#94277)
++ * Support new /proc/meminfo format in 2.6 kernels. (Closes: Bug#169160)
++ * Fixed some buffer overflow problems. (Closes: Bug#174949)
++
++ -- Simon Law <sfllaw@debian.org> Wed, 26 Nov 2003 23:47:47 -0500
++
++wmmon (1.0b2-10) unstable; urgency=low
++
++ * Fixed build depends (closes: #170133)
++ * Applied patch from Simon Fowler <simon@himi.org> to fix /proc/meminfo
++ parsing for linux 2.5.
++
++ -- Fredrik Hallenberg <hallon@debian.org> Fri, 22 Nov 2002 14:17:26 +0100
++
++wmmon (1.0b2-9) unstable; urgency=low
++
++ * Remove debug message (closes: #139408)
++ * Applied patch from Frederik Schueler <fs@lowpingbastards.de>
++ to fix /proc/stat parsing on linux 2.4 (closes: #144122)
++
++ -- Fredrik Hallenberg <hallon@debian.org> Tue, 23 Apr 2002 21:39:09 +0200
++
++wmmon (1.0b2-8) unstable; urgency=low
++
++ * Fixed menu path (closes: #129353)
++
++ -- Fredrik Hallenberg <hallon@debian.org> Thu, 17 Jan 2002 21:35:03 +0100
++
++wmmon (1.0b2-7) unstable; urgency=low
++
++ * Updated description (closes: #125496)
++ * Don't install INSTALL (closes: #116940)
++ * Changed section to utils
++
++ -- Fredrik Hallenberg <hallon@debian.org> Wed, 2 Jan 2002 23:19:06 +0100
++
++wmmon (1.0b2-6) unstable; urgency=low
++
++ * Updated menu with patch from Arthur Korn <arthur@korn.ch>
++ (closes: #82315)
++
++ -- Fredrik Hallenberg <hallon@debian.org> Mon, 15 Jan 2001 07:56:10 +0100
++
++wmmon (1.0b2-5) unstable; urgency=low
++
++ * Build without xpm4.7 (closes: #77466)
++
++ -- Fredrik Hallenberg <hallon@debian.org> Sun, 19 Nov 2000 22:17:03 +0100
++
++wmmon (1.0b2-4) unstable; urgency=low
++
++ * Added menu entry (closes: #76969)
++
++ -- Fredrik Hallenberg <hallon@debian.org> Sat, 18 Nov 2000 21:14:56 +0100
++
++wmmon (1.0b2-3) unstable; urgency=low
++
++ * Rebuild to update libxmp dependency. (closes: #67990)
++
++ -- Fredrik Hallenberg <hallon@debian.org> Mon, 31 Jul 2000 07:25:09 +0200
++
++wmmon (1.0b2-2) unstable; urgency=low
++
++ * Patch from Salvador Pinto Abreu <spa@sc.uevora.pt>:
++ Fixed behavior when APM causes the system to sleep/suspend.
++
++ -- Fredrik Hallenberg <hallon@debian.org> Sat, 17 Oct 1998 13:35:55 +0200
++
++wmmon (1.0b2-1) unstable; urgency=low
++
++ * Initial Release.
++
++ -- Fredrik Hallenberg <hallon@debian.org> Wed, 15 Jul 1998 18:18:37 +0200
+--- wmmon-1.0b2.orig/debian/control
++++ wmmon-1.0b2/debian/control
+@@ -0,0 +1,24 @@
++Source: wmmon
++Section: x11
++Priority: optional
++Maintainer: Simon Law <sfllaw@debian.org>
++Standards-Version: 3.6.1
++Build-Depends: debhelper (>> 4.0.0), libx11-dev, libxpm-dev, libxext-dev
++
++Package: wmmon
++Architecture: any
++Depends: ${shlibs:Depends}, ${misc:Depends}
++Description: Window Maker dockapp for monitoring system information
++ WMMon monitors the realtime CPU load as well as the average system load,
++ and gives you some nice additional features too. It is intended for
++ docking in Window Maker.
++ .
++ It currently provides:
++ .
++ * a realtime CPU stress meter;
++ * an auto-scaled average system load meter, like xload and wmavgload;
++ * a realtime disk I/O stress meter;
++ * auto-scaled disk I/O load meter;
++ * realtime memory and swap usage meters;
++ * a display for system uptime;
++ * three user-defined commands to launch.
+--- wmmon-1.0b2.orig/debian/copyright
++++ wmmon-1.0b2/debian/copyright
+@@ -0,0 +1,25 @@
++This package was debianized by Fredrik Hallenberg hallon@debian.org on
++Wed, 15 Jul 1998 18:18:37 +0200.
++
++It was downloaded from http://www.xs4all.nl/~warp/files/wmmon-1.0b2.tar.gz
++
++Upstream Copyright:
++
++ Copyright (c) 1997, 1998 by Martijn Pieterse and Antoine Nulle
++
++ This program is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published by the
++ Free Software Foundation; either version 2, or (at your option) any
++ later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++On Debian GNU/Linux systems, the complete text of the GNU General
++Public License can be found in `/usr/share/common-licenses/GPL'.
+--- wmmon-1.0b2.orig/debian/manpages
++++ wmmon-1.0b2/debian/manpages
+@@ -0,0 +1 @@
++wmmon/wmmon.1
+--- wmmon-1.0b2.orig/debian/compat
++++ wmmon-1.0b2/debian/compat
+@@ -0,0 +1 @@
++4
+--- wmmon-1.0b2.orig/debian/wmmonrc
++++ wmmon-1.0b2/debian/wmmonrc
+@@ -0,0 +1,3 @@
++left: xterm
++middle: xload
++right: xcalc
diff --git a/desktop/wmmon/slack-desc b/desktop/wmmon/slack-desc
new file mode 100644
index 0000000000..103ba08449
--- /dev/null
+++ b/desktop/wmmon/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+wmmon: wmmon (windowmaker dockapp to monitor CPU, disk, and memory usage)
+wmmon:
+wmmon: WMMon monitors the your CPU, Disk I/O, Memory and Swap usage, and
+wmmon: shows an average load for CPU and Disk I/O. It also displays your
+wmmon: uptime. You just click on it to toggle the display.
+wmmon:
+wmmon:
+wmmon:
+wmmon:
+wmmon:
+wmmon:
diff --git a/desktop/wmmon/wmmon.SlackBuild b/desktop/wmmon/wmmon.SlackBuild
new file mode 100644
index 0000000000..f5027c54c2
--- /dev/null
+++ b/desktop/wmmon/wmmon.SlackBuild
@@ -0,0 +1,84 @@
+#!/bin/sh
+
+# Slackware build script for wmmon
+
+# Written by B. Watson (yalhcru@gmail.com)
+
+PRGNAM=wmmon
+VERSION=1.0b2_p14
+ARCH=${ARCH:-i486}
+BUILD=${BUILD:-1}
+TAG=${TAG:-_SBo}
+
+SRCVER=$(echo $VERSION | cut -d_ -f1)
+PATCHVER=$(echo $VERSION | cut -d_ -f2)
+
+CWD=$(pwd)
+TMP=${TMP:-/tmp/SBo}
+PKG=$TMP/package-$PRGNAM
+OUTPUT=${OUTPUT:-/tmp}
+
+if [ "$ARCH" = "i486" ]; then
+ SLKCFLAGS="-O2 -march=i486 -mtune=i686"
+ LIBDIR=-L/usr/lib
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+ LIBDIR=-L/usr/lib
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIR=-L/usr/lib64
+fi
+
+set -e
+
+rm -rf $PKG
+mkdir -p $TMP $PKG $OUTPUT
+cd $TMP
+rm -rf $PRGNAM.app
+tar xvf $CWD/$PRGNAM-$SRCVER.tar.gz
+cd $PRGNAM.app
+chown -R root:root .
+chmod -R a-s,u+w,go+r-w .
+
+# wmmon was pretty much abandoned by the original developer 10+ years ago.
+# The Debian maintainer has added some security-related fixes, a man page,
+# better support for 2.6 kernels, and some extra features. Most people
+# would prefer to run the patched version...
+patch -p1 < $CWD/patches/${PRGNAM}_$SRCVER-$PATCHVER.diff
+
+# This patch is necessary because the $#!%^#$^ wmmonrc file parser doesn't
+# fully support comments: they are allowed, but a commented-out (but
+# otherwise valid) config directive is still processed as though it
+# weren't commented out! Ack!
+patch -p1 < $CWD/patches/rc_file_parser.diff
+
+# The man page refers to "the clock" (probably copied from wmclock docs),
+# change to "the window".
+patch -p1 < $CWD/patches/manpage_window_not_clock.diff
+
+cd $PRGNAM
+ sed -i -e "s/-O2/$SLKCFLAGS/" Makefile
+ make LIBDIR="$LIBDIR"
+ strip $PRGNAM
+ mkdir -p $PKG/usr/bin
+ install -m0755 -o root -g root $PRGNAM $PKG/usr/bin
+ mkdir -p $PKG/usr/man/man1
+ gzip -9c $PRGNAM.1 > $PKG/usr/man/man1/$PRGNAM.1.gz
+cd -
+
+mkdir -p $PKG/etc
+cat $CWD/wmmonrc > $PKG/etc/wmmonrc.sample
+
+mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
+cp -a \
+ BUGS CHANGES COPYING HINTS INSTALL README TODO \
+ $PKG/usr/doc/$PRGNAM-$VERSION
+cp -a debian/changelog $PKG/usr/doc/$PRGNAM-$VERSION/changelog.debian
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+cat $CWD/doinst.sh > $PKG/install/doinst.sh
+
+cd $PKG
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.tgz
diff --git a/desktop/wmmon/wmmon.info b/desktop/wmmon/wmmon.info
new file mode 100644
index 0000000000..6d236aa558
--- /dev/null
+++ b/desktop/wmmon/wmmon.info
@@ -0,0 +1,8 @@
+PRGNAM="wmmon"
+VERSION="1.0b2_14"
+HOMEPAGE="http://web.cs.mun.ca/~gstarkes/wmaker/dockapps/sys.html#wmmon"
+DOWNLOAD="http://web.cs.mun.ca/~gstarkes/wmaker/dockapps/files/wmmon-1.0b2.tar.gz"
+MD5SUM="1b8c780b8c24a6958c69330fef4171df"
+MAINTAINER="B. Watson"
+EMAIL="yalhcru@gmail.com"
+APPROVED="rworkman"
diff --git a/desktop/wmmon/wmmonrc b/desktop/wmmon/wmmonrc
new file mode 100644
index 0000000000..1cfef21879
--- /dev/null
+++ b/desktop/wmmon/wmmonrc
@@ -0,0 +1,11 @@
+# Sample rc file for wmmon
+
+# Syntax is simple: each line may be a comment introduced with # (like this
+# line), blank, or "[button_name]: [command]", where the [button_name] is
+# one of "left", "middle", "right", and [command] is the command to be
+# executed when that button is clicked, on the dockapp. The commands
+# are searched for in the PATH, if they're not given as absolute paths.
+
+# left: xterm
+# middle: xload
+right: xterm -e top