wmload: Add version 0.9.2 to repository.

Obtained from [1].

[1] http://snapshot.debian.org/archive/debian-archive/20090802T004153Z/debian/pool/main/w/wmload/wmload_0.9.2.orig.tar.gz
This commit is contained in:
Doug Torrance 2015-04-07 02:45:08 -05:00 committed by Carlos R. Mafra
parent 4e7d572d13
commit 9694733979
7 changed files with 925 additions and 0 deletions

8
wmload/INSTALL Normal file
View file

@ -0,0 +1,8 @@
1. Check the Imakefile to see if all the LIBS are ok for your system.
ALSO, check DESTDIR and BINDIR; as they are now, a `make install'
will put the wmload binary in /usr/local/bin.
2. `xmkmf'
3. `make'
4. `make install'
5. Enjoy!!!! (;-)

17
wmload/Imakefile Normal file
View file

@ -0,0 +1,17 @@
/* installation directory is the combination of $(DESTDIR) and $(BINDIR)*/
DESTDIR = /usr/local
BINDIR = /bin
XPMLIB = -L/usr/lib/X11 -lXpm -lm
DEPLIBS = $(DEPXLIB)
LOCAL_LIBRARIES = $(XPMLIB) $(XLIB)
LINTLIBS = $(LINTXLIB)
EXTRA_DEFINES = -Debug /* CFLAGS = -Debug */
SRCS = wmload.c
OBJS = wmload.o
ComplexProgramTarget(wmload)

189
wmload/README Normal file
View file

@ -0,0 +1,189 @@
>================================================<
wmload - WindowMaker load gauge
Updated, cleaned up and "fixed"
==================================================
VERSION: 0.9.2
RELEASE DATE: 17 July 1997
-Minor cosmetic changes.
The graph zone is now perfectly square, 54x54.
<I didn't like it's odd width! (;-)>
-All values dealing with pixmap size have been
adjusted to accomodate the new `look'.
VERSION: 0.9.1
RELEASE DATE: 8 July 1997
-Uses correct ordering of PROC data.
-Increases the differentiation between tones,
just a smidgion.
-Catches a "Once In A Blue Moon" condition.
Under various circumstances rounding error
results in a pixel count of 55 or 53.
To prevent the 55 count from writing one
pixel into the edge of the frame, wmload
now catches these occurrences and corrects
for them.
VERSION: 0.9.0
RELEASE DATE: 6 July 1997
-Fixed the grayscale problem that occurred
whenever the "-shape" argument was used.
-Implemented the "-led" argument...
...the last release had the argument,
however it wasn't implemented...
...ie: it did nothing.
Called without the "-led" argument, wmload
uses it's default color "LightSeaGreen"
[which is the same as the asclock readout].
Called with the argument, it uses the
named color. If the default color is
unavailable, or the named color is invalid,
wmload simply uses the 3 green tones
found in the "back.xpm" pixmap.
-Added a "-ver" argument...
When used, it prints the current version
on stdout. If it is called alone with no
other arguments, wmload exits after
printing its' version. Called with other
arguments... wmload prints its' version
and continues as normal.
-Trapped bad arguments that don't start
with "-".
-Cleaned up the code a bit.
-Removed unnecessary files from the
distribution. <kept README's though>
NOTE:
This is a load monitor which is designed
to work with the PROC filesystem. Generally
all Linux systems come with the PROC fs.
If you're using a different Unix and it
doesn't have the PROC fs, first see if
there is one available... otherwise this
monitor won't work!
Work is currently underway to produce a
more `portable' wmload that Solaris/Sun/HP etc.
users can also enjoy.
INSTALL:
1. Check the Imakefile to see if all the
LIBS are ok for your system.
ALSO, check DESTDIR and BINDIR; as they
are now, a `make install' will put the
wmload binary in /usr/local/bin.
2. `xmkmf'
3. `make'
4. `make install'
5. Enjoy!!!! (;-)
SUGGESTED INVOCATION (for WindowMaker!):
`wmload -shape -withdrawn &'
OR for a different graph color:
`wmload -led ??? -shape -withdrawn &'
...replace "???" with a color name
eg. green, red, orange, yellow, orchid, purple....
any of your systems standard X color symbols.
SUGGESTED INVOCATION (for AfterStep):
To load wmload in Wharf, add a line in .steprc:
*Wharf wmload nil MaxSwallow "wmload" wmload -led green -shape &
...or to run it as a normal app: wmload -led "???" &
NOTE: AfterStep doesn't require the "-withdrawn" option.
AVAILABILITY:
The latest release should be available from:
ftp://afterstep.foo.net/pub/apps/wmload/
http://www.bc1.com/users/rland/
TODO LIST:
-Implement alternative `load' algorithms?
LIABILITY & USABILITY:
As usual, this software is bound by the
GNU public license. You can use it however
you see fit, as long as all the README's
accompany any copy/version of it.
THE KIND SOLES WHO HAVE WRITTEN/CONTRIBUTED
TO THIS SOFTWARE, IN NO WAY ACCEPT LIABILITY
OR ANY RESPONSIBILITY FOR THE USE OF, OR FOR
ANY CONSEQUENCES RESULTING FROM THE USE OF
THIS SOFTWARE.
...that having been said, I think you'll
like this new version and shouldn't have
problems with it. Happy load monitoring!
FEEDBACK etc:
Maintainer of the current version...
Ryan Land, rland@bc1.com
---<o>---
the contents of the initial WM patch and original
asload README's now follow...
>================================================<
wmload - WindowMaker performance monitor
adapted from asload by Nic Bernstein
==================================================
added withdrawn option, added WM hints.
changed trace color
original README contents follow...
>================================================<
asload - afterstep performance monitor
the best perfmonitor for the best X-windowmanager!
==================================================
RELEASE 1
30th November 1996
by Beat Christen, bchriste@iiic.ethz.ch
VERSION 0.1
AVAILABILITY
the latest release should be available from
ftp://sunsite.unc.edu/pub/Linux/X11/xutils/asload.tgz
http://rif3.ethz.ch:1313/spiff/asload/asload.tgz
INSTALL
1. Check in the Imakefile if all LIBS are ok for your system.
2. `make` (Send me the output if this fails)
TODO
write a todo list.
FEEDBACK
I prefer uuencoded mail.
You can register this software at
http://rif3.ethz.ch:1313/spiff/asload/register.html
AUTHOR
Beat Christen
CONTRIBUTORS
CHANGES
28Nov96 First Version for Linux /proc
END OF FILE

118
wmload/back.xpm Normal file
View file

@ -0,0 +1,118 @@
/* XPM */
static char *back_xpm[] = {
/* width height num_colors chars_per_pixel */
" 64 64 47 1",
/* colors */
". c #010103",
"# c #818183",
"a c #414143",
"b c #c1c1c3",
"c c #a1a1a3",
"d c #616163",
"e c #919193",
"f c #515153",
"g c #b1b1b3",
"h c #717173",
"i c #29292b",
"j c #fdfdfb",
"k c #cdcdcb",
"l c #353533",
"m c #89898b",
"n c #49494b",
"o c #a9a9ab",
"p c #69696b",
"q c #99999b",
"r c #59595b",
"s c #b9b9bb",
"t c #79797b",
"u c #bdbdbb",
"v c #c9c9cb",
"w c #3d3d3b",
"x c #313133",
"y c #7d7d7b",
"z c #d1d1d3",
"A c #39393b",
"B c #858583",
"C c #454543",
"D c #c5c5c3",
"E c #a5a5a3",
"F c #656563",
"G c #959593",
"H c #555553",
"I c #b5b5b3",
"J c #757573",
"K c #8d8d8b",
"L c #4d4d4b",
"M c #adadab",
"N c #6d6d6b",
"O c #9d9d9b",
"P c #5d5d5b",
"Q c #009f00",
"R c #00a600",
"S c #00b600",
/* pixels */
"qqqqqqqqqqqqqqqOOOOOOccccccEEEEEEEooooooMMMMMMggggggIIIIIIIIsssN",
"OOOOOOOOOOOOOOOqOOOccOOcccEcEEEEEoEEoooMoMMgggMgggIIgIIIssubbDGC",
"qqxxxxxxxxxxxlAAAwwwaaaCnnLLLffffHrHrPPddddFpppNNNNhhJJJttyyy#AC",
"qqxxxlllllllAAAAwwaaaCCnnnLLfffHHrHPPPdddFpppNNNhhJJhJtttyy#BBwC",
"OqllxlllllAAwwwaaaCCCnnnLLfffHrrrPrPdddFpFpppNNhhhhtJttyy##BBBaC",
"OOxll.....................................................iBBman",
"OOxll.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijmmman",
"Oqxll.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijmmKCC",
"OOxxl.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijKmKCn",
"OOxll.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijKKKnn",
"OOxxl.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijKeenn",
"OclAA.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijeeeCL",
"OOxAA.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijeeGnL",
"OOAAw.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijeGGnn",
"ccAAw.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijeGGnL",
"ccAww.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijqGqLL",
"ccAwa.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijGGGLL",
"EEwwa.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijqqOnL",
"Ecwaa.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijGOOLf",
"EEaaC.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijOqOLL",
"EEwaC.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijOOcff",
"ooaCC.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijOccLf",
"EoaCn.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijOcEff",
"ooCnn.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijEccff",
"ooCnL.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijcEEfH",
"oMnLL.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijEEEHf",
"MMnLL.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijEEEHH",
"MMLLH.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijEoMfH",
"MMLLf.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijooMHH",
"ggffH.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijMMMfH",
"MgffH.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijoMgHH",
"gMfHr.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijgMgrr",
"ggHHr.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijgggHr",
"ggHHr.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijgggrr",
"IgHrP.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijIIIHr",
"gIrrP.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijIIIrr",
"IIrPd.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijsIsrr",
"IIPPd.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijIssrP",
"IIPdd.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijusurP",
"ssddF.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijsuuPP",
"ssPdF.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijuuurP",
"ssFFp.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijuubPP",
"usFFp.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijbDDPd",
"suFpp.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijbDDdP",
"uuFpN.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijbDvdd",
"uupNN.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijvvvdd",
"bbppN.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijDvvdd",
"uuNhh.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijvkzFF",
"buNNh.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijkkkdd",
"bDNhh.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijkzzdF",
"bbhhJ.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijzkzdd",
"bbNJJ.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijkzkdF",
"DDhJJ.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijkzzdd",
"bDJJt.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijzkkdF",
"bDJJt.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijzzzdd",
"DDJtt.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijkkkdF",
"DDtyy.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijzzzdd",
"Dvty#.QRSiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijzkkdF",
"vvy##ijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjzzzdd",
"vvy#BBmmmmmKeeGGGGGGGqqOOccEoMMMgggMggIIIsubbbDDvkkkvvvvkkkkkkdF",
"vk#BBBmmKKeeGGGGGGOOOcEccEEEMMMMgIIIssuuuubDvvkkkzkzzzzzzzzzzzdd",
"kk##mmmKKKKeeGGGqOqOOccEEEoMoMMgggIIsssuuDDDDvvkzkzkkkkkkkkkkkdF",
"vGxxllllAAAAAAwAwawaaaaCCCCnnnnLLLfLfffHfHHrrPPPPPPPPddddddddddd",
"GxlxlllllAAAAwwwwwaaaCCCCCnCnnLnLLLLffffHHHrrrPrPPPddPPPPddddddF"
};

67
wmload/mask.xpm Normal file
View file

@ -0,0 +1,67 @@
/* XPM */
static char *mask_xpm[] = {
/* width height num_colors chars_per_pixel */
" 54 54 6 1",
/* colors */
". c #000000",
"# c #282828",
"a c #ffffff",
"b c #5a5a5a",
"c c #979797",
"d c #e6e6e6",
/* pixels */
".....................................................#",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
".bcd#################################################a",
"#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
};

35
wmload/mask2.xbm Normal file
View file

@ -0,0 +1,35 @@
#define mask2_width 54
#define mask2_height 54
static unsigned char mask2_bits[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff};

491
wmload/wmload.c Normal file
View file

@ -0,0 +1,491 @@
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/xpm.h>
#include <X11/extensions/shape.h>
#include <time.h>
#include <math.h>
#include <fcntl.h>
#include <X11/Xatom.h>
#include "back.xpm"
#include "mask2.xbm"
#include "mask.xpm"
#define major_VER 0
#define minor_VER 9
#define patch_VER 2
#define MW_EVENTS (ExposureMask | ButtonPressMask | StructureNotifyMask)
#define FALSE 0
#define Shape(num) (ONLYSHAPE ? num-5 : num)
#define NCPUSTATES 4
/* Global Data storage/structures ********************************************/
static long cp_time[NCPUSTATES];
static long last[NCPUSTATES];
int ONLYSHAPE=0; /* default value is noshape */
int updatespeed = 4;
static char *help_message[] = {
"where options include:",
" -u <secs> updatespeed",
" -exe <program> program to start on click",
" -led <color> color of the led",
" -position [+|-]x[+|-]y position of wmload",
" -shape without groundplate",
" -iconic start up as icon",
" -withdrawn start up withdrawn",
" -ver output version",
NULL
};
/* X11 Variables *************************************************************/
Display *dpy; /* welches DISPLAY */
Window Root; /* Hintergrund-Drawable */
int screen;
int x_fd;
int d_depth;
XSizeHints mysizehints;
XWMHints mywmhints;
Pixel back_pix, fore_pix;
GC NormalGC;
Window iconwin, win; /* My home is my window */
char *ProgName;
char *Geometry;
char *LedColor = "LightSeaGreen";
char Execute[] = "echo no program has been specified >/dev/console";
char *ERR_colorcells = "not enough free color cells\n";
char *ampers = " &";
/* XPM Structures & Variables ************************************************/
typedef struct _XpmIcon {
Pixmap pixmap;
Pixmap mask;
XpmAttributes attributes;
} XpmIcon;
XpmIcon wmload;
XpmIcon visible;
time_t actualtime;
long actualmin;
/* Function definitions ******************************************************/
void GetXPM(void);
Pixel GetColor(char *name);
void RedrawWindow( XpmIcon *v);
void InitLoad();
void InsertLoad();
/*****************************************************************************/
/* Source Code <--> Function Implementations */
/*****************************************************************************/
void usage()
{
char **cpp;
fprintf(stderr,"\nusage: %s [-options ...] \n", ProgName);
for (cpp = help_message; *cpp; cpp++) {
fprintf(stderr, "%s\n", *cpp);
}
fprintf(stderr,"\n");
exit(1);
}
int main(int argc,char *argv[])
{
int i;
unsigned int borderwidth ;
char *display_name = NULL;
char *wname = "wmload";
XGCValues gcv;
unsigned long gcm;
XEvent Event;
XTextProperty name;
XClassHint classHint;
Pixmap pixmask;
Geometry = "";
mywmhints.initial_state = NormalState;
/* Parse command line options */
ProgName = argv[0];
for(i=1;i<argc;i++) {
char *arg= argv[i];
if (arg[0] == '-') {
switch(arg[1]) {
case 'u':
if(++i >=argc) usage();
sscanf(argv[i], "%d", &updatespeed);
continue;
case 'e':
if(++i >=argc) usage();
strcpy(&Execute[0], argv[i]);
strcat(&Execute[0], " &");
continue;
case 's':
ONLYSHAPE=1;
continue;
case 'p':
if(++i >=argc) usage();
Geometry = argv[i];
continue;
case 'i':
mywmhints.initial_state = IconicState;
continue;
case 'w':
mywmhints.initial_state = WithdrawnState;
continue;
case 'l':
if(++i >=argc) usage();
LedColor = argv[i];
continue;
case 'v':
fprintf(stdout, "\nwmload version: %i.%i.%i\n", major_VER, minor_VER, patch_VER);
if(argc == 2) exit(0);
continue;
default:
usage();
}
}
else
{
fprintf(stderr, "\nInvalid argument: %s\n", arg);
usage();
}
}
/* Open the display */
if (!(dpy = XOpenDisplay(display_name)))
{
fprintf(stderr,"wmload: can't open display %s\n",
XDisplayName(display_name));
exit (1);
}
screen= DefaultScreen(dpy);
Root = RootWindow(dpy, screen);
d_depth = DefaultDepth(dpy, screen);
x_fd = XConnectionNumber(dpy);
/* Convert XPM Data to XImage */
GetXPM();
/* Create a window to hold the banner */
mysizehints.flags= USSize|USPosition;
mysizehints.x = 0;
mysizehints.y = 0;
back_pix = GetColor("white");
fore_pix = GetColor("black");
XWMGeometry(dpy, screen, Geometry, NULL, (borderwidth =1), &mysizehints,
&mysizehints.x,&mysizehints.y,&mysizehints.width,&mysizehints.height, &i);
mysizehints.width = wmload.attributes.width;
mysizehints.height= wmload.attributes.height;
win = XCreateSimpleWindow(dpy,Root,mysizehints.x,mysizehints.y,
mysizehints.width,mysizehints.height,
borderwidth,fore_pix,back_pix);
iconwin = XCreateSimpleWindow(dpy,win,mysizehints.x,mysizehints.y,
mysizehints.width,mysizehints.height,
borderwidth,fore_pix,back_pix);
/* activate hints */
XSetWMNormalHints(dpy, win, &mysizehints);
classHint.res_name = "wmload";
classHint.res_class = "WMLoad";
XSetClassHint(dpy, win, &classHint);
XSelectInput(dpy,win,MW_EVENTS);
XSelectInput(dpy,iconwin,MW_EVENTS);
XSetCommand(dpy,win,argv,argc);
if (XStringListToTextProperty(&wname, 1, &name) ==0) {
fprintf(stderr, "wmload: can't allocate window name\n");
exit(-1);
}
XSetWMName(dpy, win, &name);
/* Create a GC for drawing */
gcm = GCForeground|GCBackground|GCGraphicsExposures;
gcv.foreground = fore_pix;
gcv.background = back_pix;
gcv.graphics_exposures = FALSE;
NormalGC = XCreateGC(dpy, Root, gcm, &gcv);
if (ONLYSHAPE) { /* try to make shaped window here */
pixmask = XCreateBitmapFromData(dpy, win, mask2_bits, mask2_width,
mask2_height);
XShapeCombineMask(dpy, win, ShapeBounding, 0, 0, pixmask, ShapeSet);
XShapeCombineMask(dpy, iconwin, ShapeBounding, 0, 0, pixmask, ShapeSet);
}
mywmhints.icon_window = iconwin;
mywmhints.icon_x = mysizehints.x;
mywmhints.icon_y = mysizehints.y;
mywmhints.window_group = win;
mywmhints.flags = StateHint | IconWindowHint | IconPositionHint
| WindowGroupHint;
XSetWMHints(dpy, win, &mywmhints);
XMapWindow(dpy,win);
InitLoad();
InsertLoad();
RedrawWindow(&visible);
while(1)
{
if (actualtime != time(0))
{
actualtime = time(0);
if(actualtime % updatespeed == 0)
InsertLoad();
RedrawWindow(&visible);
}
/* read a packet */
while (XPending(dpy))
{
XNextEvent(dpy,&Event);
switch(Event.type)
{
case Expose:
if(Event.xexpose.count == 0 )
RedrawWindow(&visible);
break;
case ButtonPress:
system(Execute);
break;
case DestroyNotify:
XFreeGC(dpy, NormalGC);
XDestroyWindow(dpy, win);
XDestroyWindow(dpy, iconwin);
XCloseDisplay(dpy);
exit(0);
default:
break;
}
}
XFlush(dpy);
#ifdef SYSV
poll((struct poll *) 0, (size_t) 0, 50);
#else
usleep(50000L); /* 5/100 sec */
#endif
}
return 0;
}
/*****************************************************************************/
void nocolor(char *a, char *b)
{
fprintf(stderr,"wmload: can't %s %s\n", a,b);
}
/*****************************************************************************/
/* convert the XPMIcons to XImage */
void GetXPM(void)
{
static char **alt_xpm;
XColor col;
XWindowAttributes attributes;
int ret;
char tempc1[12],tempc2[12],tempc3[12];
float colr,colg,colb;
alt_xpm =ONLYSHAPE ? mask_xpm : back_xpm;
/* for the colormap */
XGetWindowAttributes(dpy,Root,&attributes);
/* get user-defined color or validate the default */
if (!XParseColor (dpy, attributes.colormap, LedColor, &col))
{
nocolor("parse",LedColor);
}
else
{
/* scale down the Xcolor values */
colr = col.red / 257;
colg = col.green / 257;
colb = col.blue / 257;
/* the brightest color */
sprintf(tempc1, "S c #%.2x%.2x%.2x", (int)colr, (int)colg, (int)colb);
back_xpm[47] = tempc1;
/* make medium color */
colr = (colr /100) *89;
colg = (colg /100) *89;
colb = (colb /100) *89;
sprintf(tempc2, "R c #%.2x%.2x%.2x", (int)colr, (int)colg, (int)colb);
back_xpm[46] = tempc2;
/* make darkest color */
colr = (colr /100) *89;
colg = (colg /100) *89;
colb = (colb /100) *89;
sprintf(tempc3, "Q c #%.2x%.2x%.2x", (int)colr, (int)colg, (int)colb);
back_xpm[45] = tempc3;
}
wmload.attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions);
ret = XpmCreatePixmapFromData(dpy, Root, alt_xpm, &wmload.pixmap,
&wmload.mask, &wmload.attributes);
if(ret != XpmSuccess)
{fprintf(stderr, ERR_colorcells);exit(1);}
visible.attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions);
ret = XpmCreatePixmapFromData(dpy, Root, back_xpm, &visible.pixmap,
&visible.mask, &visible.attributes);
if(ret != XpmSuccess)
{fprintf(stderr, ERR_colorcells);exit(1);}
}
/*****************************************************************************/
/* Removes expose events for a specific window from the queue */
int flush_expose (Window w)
{
XEvent dummy;
int i=0;
while (XCheckTypedWindowEvent (dpy, w, Expose, &dummy))i++;
return i;
}
/*****************************************************************************/
/* Draws the icon window */
void RedrawWindow( XpmIcon *v)
{
flush_expose (iconwin);
XCopyArea(dpy,v->pixmap,iconwin,NormalGC,
0,0,v->attributes.width, v->attributes.height,0,0);
flush_expose (win);
XCopyArea(dpy,v->pixmap,win,NormalGC,
0,0,v->attributes.width, v->attributes.height,0,0);
}
/*****************************************************************************/
Pixel GetColor(char *name)
{
XColor color;
XWindowAttributes attributes;
XGetWindowAttributes(dpy,Root,&attributes);
color.pixel = 0;
if (!XParseColor (dpy, attributes.colormap, name, &color))
{
nocolor("parse",name);
}
else if(!XAllocColor (dpy, attributes.colormap, &color))
{
nocolor("alloc",name);
}
return color.pixel;
}
/*****************************************************************************/
void InitLoad()
{
/* Save the 4 base colors in wmload */
XCopyArea(dpy, visible.pixmap, wmload.pixmap, NormalGC,
6,6,3,52, Shape(6), Shape(6));
/* Copy the base panel to visible */
XCopyArea(dpy, wmload.pixmap, visible.pixmap, NormalGC,
0,0,mysizehints.width, mysizehints.height, 0 ,0);
/* Remove the 4 base colors from visible */
XCopyArea(dpy, visible.pixmap, visible.pixmap, NormalGC,
Shape(9),Shape(6),3,52, Shape(6), Shape(6));
}
static char *
skip_token(const char *p)
{
while (isspace(*p)) p++;
while (*p && !isspace(*p)) p++;
return (char *)p;
}
void GetLoad(int Maximum, int *usr, int *nice, int *sys, int *free)
{
char buffer[100];/*[4096+1];*/
int fd, len;
int total;
char *p;
fd = open("/proc/stat", O_RDONLY);
len = read(fd, buffer, sizeof(buffer)-1);
close(fd);
buffer[len] = '\0';
p = skip_token(buffer); /* "cpu" */
cp_time[0] = strtoul(p, &p, 0); /* user */
cp_time[1] = strtoul(p, &p, 0); /* nice */
cp_time[2] = strtoul(p, &p, 0); /* system */
cp_time[3] = strtoul(p, &p, 0); /* idle */
*usr = cp_time[0] - last[0];
*nice = cp_time[1] - last[1];
*sys = cp_time[2] - last[2];
*free = cp_time[3] - last[3];
total = *usr + *nice + *sys + *free;
last[0] = cp_time[0];
last[1] = cp_time[1];
last[2] = cp_time[2];
last[3] = cp_time[3];
*usr = rint(Maximum * (float)(*usr) /total);
*nice =rint(Maximum * (float)(*nice) /total);
*sys = rint(Maximum * (float)(*sys) /total);
*free = rint(Maximum * (float)(*free) /total);
}
void InsertLoad()
{
int UserTime, NiceTime, SystemTime, FreeTime, act, constrain;
GetLoad( 52, &UserTime, &NiceTime, &SystemTime, &FreeTime);
constrain = (UserTime + NiceTime + SystemTime + FreeTime);
if(constrain == 53)
{
if(FreeTime > 0) FreeTime--;
else if(SystemTime > 0) SystemTime--;
else if(NiceTime > 0) NiceTime--;
else if(UserTime > 0) UserTime--;
}
else if(constrain == 51) FreeTime++;
/* Move the area */
XCopyArea(dpy, visible.pixmap, visible.pixmap, NormalGC,
Shape(7), Shape(6), 51, 52, Shape(6), Shape(6));
/* User Time */
act = 58 - UserTime;
if(UserTime > 0)
XCopyArea(dpy, wmload.pixmap, visible.pixmap, NormalGC,
Shape(6), Shape(6), 1, UserTime, Shape(57), Shape(act));
/* Nice Time */
act = act - NiceTime;
if(NiceTime > 0)
XCopyArea(dpy, wmload.pixmap, visible.pixmap, NormalGC,
Shape(7), Shape(6), 1, NiceTime, Shape(57), Shape(act));
/* System Time */
act = act - SystemTime;
if(SystemTime > 0)
XCopyArea(dpy, wmload.pixmap, visible.pixmap, NormalGC,
Shape(8), Shape(6), 1, SystemTime, Shape(57), Shape(act));
/* Free Time */
if(FreeTime > 0)
XCopyArea(dpy, wmload.pixmap, visible.pixmap, NormalGC,
Shape(9), Shape(6), 1, FreeTime, Shape(57), Shape(6));
}