From 9694733979216c0c4ac9e6408bdcf1da7942d0e0 Mon Sep 17 00:00:00 2001 From: Doug Torrance Date: Tue, 7 Apr 2015 02:45:08 -0500 Subject: [PATCH] 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 --- wmload/INSTALL | 8 + wmload/Imakefile | 17 ++ wmload/README | 189 ++++++++++++++++++ wmload/back.xpm | 118 ++++++++++++ wmload/mask.xpm | 67 +++++++ wmload/mask2.xbm | 35 ++++ wmload/wmload.c | 491 +++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 925 insertions(+) create mode 100644 wmload/INSTALL create mode 100644 wmload/Imakefile create mode 100644 wmload/README create mode 100644 wmload/back.xpm create mode 100644 wmload/mask.xpm create mode 100644 wmload/mask2.xbm create mode 100644 wmload/wmload.c diff --git a/wmload/INSTALL b/wmload/INSTALL new file mode 100644 index 0000000..2217d98 --- /dev/null +++ b/wmload/INSTALL @@ -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!!!! (;-) + diff --git a/wmload/Imakefile b/wmload/Imakefile new file mode 100644 index 0000000..d91cbce --- /dev/null +++ b/wmload/Imakefile @@ -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) diff --git a/wmload/README b/wmload/README new file mode 100644 index 0000000..4ce5e1e --- /dev/null +++ b/wmload/README @@ -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. + + + -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. + +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 + + + + ------ + + + +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 diff --git a/wmload/back.xpm b/wmload/back.xpm new file mode 100644 index 0000000..f8f02b9 --- /dev/null +++ b/wmload/back.xpm @@ -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" +}; diff --git a/wmload/mask.xpm b/wmload/mask.xpm new file mode 100644 index 0000000..9ea9766 --- /dev/null +++ b/wmload/mask.xpm @@ -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" +}; diff --git a/wmload/mask2.xbm b/wmload/mask2.xbm new file mode 100644 index 0000000..a28f4fb --- /dev/null +++ b/wmload/mask2.xbm @@ -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}; diff --git a/wmload/wmload.c b/wmload/wmload.c new file mode 100644 index 0000000..cad9970 --- /dev/null +++ b/wmload/wmload.c @@ -0,0 +1,491 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#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 updatespeed", +" -exe program to start on click", +" -led 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) 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)); +}