[Pkg-wmaker-commits] [wmsysmon] 01/02: *: initial git commit using 0.7.7

Doug Torrance dtorrance-guest at moszumanska.debian.org
Tue Aug 25 03:10:02 UTC 2015


This is an automated email from the git hooks/post-receive script.

dtorrance-guest pushed a commit to branch upstream
in repository wmsysmon.

commit 75fadf9ef9f194ecb22c5e0f0b8d30c1fb99114e
Author: Vito Caputo <vcaputo at gnugeneration.com>
Date:   Thu Jul 16 23:45:34 2015 -0700

    *: initial git commit using 0.7.7
---
 .gitignore                    |   3 +
 COPYING                       | 339 ++++++++++++++++
 ChangeLog                     | 104 +++++
 README                        |  29 ++
 src/Makefile                  |  21 +
 src/wmgeneral.c               | 374 ++++++++++++++++++
 src/wmgeneral.h               |  62 +++
 src/wmsysmon-master-alpha.xpm | 183 +++++++++
 src/wmsysmon-master-i386.xpm  | 183 +++++++++
 src/wmsysmon.c                | 875 ++++++++++++++++++++++++++++++++++++++++++
 10 files changed, 2173 insertions(+)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..dc311c0
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+src/wmsysmon
+src/*.o
+*.swp
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..a43ea21
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,339 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                          675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+

+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+

+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+

+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+

+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+

+	Appendix: How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    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.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..1bc8ca9
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,104 @@
+-- end --
+- Aug 4 2002 - Vito Caputo (swivel at gnugeneration.com) -
+	* a few changes, i can't recall, the interrupt meters have been refined
+	  a bit, main event loop changed but theres a slight bug with the
+	  event loop timing, the timeout doesnt get updated dynamically if the
+	  main select() exits before the timeout...  you can see this by say
+	  dragging an icon over wmsysmon a bunch, the meters will all shrink
+	  if interrupts are ocurring, because the time between polls of
+	  the interrupt counts is shorter than before, causing it to think
+	  theres less interrupts, when in fact, there was less time for them
+	  to occur, minor bug.
+
+- Dec 24 2001 - Vito Caputo (swivel at gnugeneration.com) -
+	* minor cleanups, in wmgeneral.c added static int where was just static.
+	  (int is assumed but caused warning in -Wall), also removed some
+	  unused variables...
+
+- Dec 23 2001 - Vito Caputo (swivel at gnugeneration.com) -
+	* removed profiling instrumentation, it's no longer needed.
+	* updated meters, the behaviour is changed a bit, interrupts that
+	  never occur dont get the _ level so you can see which are inactive
+	  in the system, and they should be more responsive.
+	* removed usleep() usage and switched to poll() with a timeout on the
+	  X connection fd, more efficient and allows expose events to be handled
+	  with less latency.
+
+- Jul 11 2000 - Vito Caputo (swivel at gnugeneration.com) -
+	* eliminated the memcpy() used for copying interrupt statistics into
+	  backups for comparison in next iteration, now simply swaps pointers.
+	* made new profile, organized existing profiles.
+
+- Jun 29 2000 - Vito Caputo (swivel at gnugeneration.com) -
+	* added profiling instrumentation to code for TAU
+	* optimized DrawMem() routine, which profiling revealed as being 96%
+	  of the total CPU time used in 0.6.0.
+	* optimized DrawStuff() routine
+	* added simple drawing management code, not quite drawing list but
+	  more efficient in most cases than blitting whole tile.  Anything
+	  more complex will probably outweigh the benefits since we're
+	  dealing with such a small area.
+	* removed some unused routines that were left behind from Dave Clarks
+	  release, and some junk in wmgeneral.c, next release may have no
+	  wmgeneral.c, even though it would be pointless to remove it since
+	  the same code would be sitting in wmsysmon.c, its probably more
+	  tidy as-is.
+	* after extensive profiling, it has been discovered that polling
+	  /proc/meminfo is expensive no matter how you go about parsing it,
+	  linux 2.4 in theory does this faster, but I have changed the meminfo
+	  polling to be a fraction of the refresh rate used, this makes things
+	  alot more CPU (system) friendly. 
+	* fix to drawing management code, was not adding all dirty's properly
+	* added small test program for benchmarking /proc/meminfo
+	* line #'s are calculated at startup now for /proc/meminfo and
+	  /proc/stat entries we use, so no strchr()'s every iteration, and order
+	  changes in /proc/meminfo and /proc/stat formatting shouldnt break it.
+	* some code cleanup
+	* fix to Makefile, some systems were not finding includes in
+	  /usr/X11R6/include without -I/usr/X11R6/include
+
+- Apr 24 2000 - Vito Caputo (swivel at gnugeneration.com) -
+	* added interrupt meters, i like i like :)
+	* set intterrupt meters to default behavior, added -l to arguements
+	  to set old lights behavior and to help screen.
+	* new feature, 0.6.0 now :)
+
+- Apr 2 2000 - Vito Caputo (swivel at gnugeneration.com) -
+	* fixed some problems with parsing files in /proc, much much faster
+	  now. (toyed with drawing lists and some other things but broke most
+	  of wmsysmon, will be rewriting the stuff in wmgeneral.c eventually)
+
+- Mar 5 2000 - Vito Caputo (swivel at gnugeneration.com) -
+	* fixed typo in HI_INTS version of help (wmsysmon -h) interrupts 0-24
+	  to 0-23
+	* upped version # to 0.5.1
+	* another fix to the lights, Ignacy's fix fixed blinking but broke
+	  optimization (if lights were off they were always refreshed)
+
+- Mar 5 2000 - Ignacy Gawedzki (ouaou at relou.net)
+	* little fix to the lights, which kept blinking.
+
+- Feb 12 2000 - Vito Caputo (swivel at gnugeneration.com) -
+	* created this changelog
+	* reformatted code to my liking
+	* converted c++ style comments (bleh, ick) to C style.
+	* upgraded version # to 0.5
+	* changed link to old non-maintained (dead?) wmsysmon site in usage
+	  to GNU Generation site with maintained wmsysmon.
+	* added the ascii diagram to the usage dialog
+	* removed wmgeneral/ and misc.c and list.c, pointless.
+	* added proper GNU GPL notice to wmsysmon.c
+
+- Jan 25 2000 - Vito Caputo (swivel at gnugeneration.com) -
+	* After sending updates to previous maintainer decided to simply
+	  takeover maintennance of wmsysmon, if anyone objects, tough, get off
+	  your a*s and maintain it yourself, nothings stopping you, behold the
+	  power of the GNU GPL.
+	* optimized uptime refresh to only redraw uptime when changed
+	* optimized swap & mem usage percent bars to only redraw when changed
+	* optimized IO usage percent bar to only redraw when changed
+	* optimized interrupt lites to only redraw when changed
+	* rewrote Makefile, chaged ALPHA_VERSION to HI_INTS (SMP x86 boxes use
+	  this too so its not alpha only)
+
+-- begin --
diff --git a/README b/README
new file mode 100644
index 0000000..22cbb9c
--- /dev/null
+++ b/README
@@ -0,0 +1,29 @@
+You have downloaded wmsysmon, a small dock application for use with
+WindowMaker (www.windowmaker.org) to show system information on interrupt
+activity, memory use, swap use, and IO.  wmsysmon was originally written by
+Dave Clark, I saw room for improvement in wmsysmon and sent some updates in
+to Dave Clark, after nearly a month went by with no response I decided to
+takeover development.  Dave Clark is OK with this, it appears he is
+too overworked to keep up with everything, if you are management over Dave
+Clark give him a break :).  This program is licensed under the GNU GPL, see
+file COPYING.
+
+Simply enter the 'src' directory and type 'make' to build wmsysmon, if you are
+using a SMP x86 machine or an alpha machine you may want to edit the Makefile
+and uncomment -DHI_INTS before building, this enables monitoring the 24
+interrupts available on such machines.  After building successfully, execute
+'make install' to install the binary into /usr/local/bin, root will be required
+to write the binary in /usr/local/bin, but it is not required to install the
+binary in /usr/local/bin to use wmsysmon, it may be run from anywhere in
+the filesystem, but on a multi-user system it is preferred to have it available
+for everyone to use, hence /usr/local/bin.
+
+For information on running wmsysmon, execute 'wmsysmon -h' after building (and
+installing) using the above instructions.
+
+Cheers.
+
+- Vito Caputo
+  swivel at gnugeneration.com
+  GNU Generation
+  www.gnugeneration.com
diff --git a/src/Makefile b/src/Makefile
new file mode 100644
index 0000000..c167d22
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,21 @@
+CC = gcc
+
+LIBDIR += -L/usr/X11R6/lib
+LDFLAGS += -lXpm -lXext -lX11 -lm -s
+#CFLAGS = -g #-DMONDEBUG
+CFLAGS += -Wall -O3 -m486 -fomit-frame-pointer -I/usr/X11R6/include #-DHI_INTS #undefine HI_INTS if your x86 SMP or alpha
+
+BIN = wmsysmon
+OBJS =	wmgeneral.o \
+	wmsysmon.o
+
+$(BIN): $(OBJS)
+	$(CC) -o $(BIN) $(OBJS) $(LIBDIR) $(LDFLAGS)
+
+all: wmsysmon
+
+clean:
+	rm -f $(OBJS) $(BIN)
+
+install:
+	install -g root -o root $(BIN) /usr/local/bin
diff --git a/src/wmgeneral.c b/src/wmgeneral.c
new file mode 100644
index 0000000..29c2cfa
--- /dev/null
+++ b/src/wmgeneral.c
@@ -0,0 +1,374 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <stdarg.h>
+
+#include <X11/Xlib.h>
+#include <X11/xpm.h>
+#include <X11/extensions/shape.h>
+
+#include "wmgeneral.h"
+
+Window		Root;
+int		screen;
+int		x_fd;
+int		d_depth;
+XSizeHints	mysizehints;
+XWMHints	mywmhints;
+Pixel		back_pix, fore_pix;
+char		*Geometry = "";
+Window		iconwin, win;
+GC		NormalGC;
+XpmIcon		wmgen;
+Pixmap		pixmask;
+
+
+static void GetXPM(XpmIcon *, char **);
+static Pixel GetColor(char *);
+void RedrawWindow(void);
+
+
+static void GetXPM(XpmIcon *wmgen, char *pixmap_bytes[]) {
+
+	XWindowAttributes	attributes;
+	int			err;
+
+	/* For the colormap */
+	XGetWindowAttributes(display, Root, &attributes);
+
+	wmgen->attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions);
+
+	err = XpmCreatePixmapFromData(display, Root, pixmap_bytes, &(wmgen->pixmap),
+					&(wmgen->mask), &(wmgen->attributes));
+	wmgen->dirty_x = wmgen->attributes.width;
+	wmgen->dirty_y = wmgen->attributes.height;
+	wmgen->dirty_w = 0;
+	wmgen->dirty_h = 0;
+	
+	if (err != XpmSuccess) {
+		fprintf(stderr, "Not enough free colorcells.\n");
+		exit(1);
+	}
+}
+
+
+static Pixel GetColor(char *name) {
+
+	XColor				color;
+	XWindowAttributes	attributes;
+
+	XGetWindowAttributes(display, Root, &attributes);
+
+	color.pixel = 0;
+	if (!XParseColor(display, attributes.colormap, name, &color)) {
+		fprintf(stderr, "wm.app: can't parse %s.\n", name);
+	} else if (!XAllocColor(display, attributes.colormap, &color)) {
+		fprintf(stderr, "wm.app: can't allocate %s.\n", name);
+	}
+
+	return color.pixel;
+}
+
+
+void RedrawWindow(void) {
+	
+	if(wmgen.dirty_w && wmgen.dirty_h)
+	XCopyArea(display,
+		  wmgen.pixmap,
+		  iconwin,
+		  NormalGC, 
+		  wmgen.dirty_x,
+		  wmgen.dirty_y,
+		  wmgen.dirty_w,
+		  wmgen.dirty_h,
+		  wmgen.dirty_x,
+		  wmgen.dirty_y);
+
+	if(wmgen.dirty_w && wmgen.dirty_h)
+	XCopyArea(display,
+		  wmgen.pixmap,
+		  win,
+		  NormalGC,
+		  wmgen.dirty_x,
+		  wmgen.dirty_y,
+		  wmgen.dirty_w,
+		  wmgen.dirty_h,
+		  wmgen.dirty_x,
+		  wmgen.dirty_y);
+
+#ifdef MONDEBUG
+	printf("Dirty X: %i Y: %i width: %i height: %i\n",
+		wmgen.dirty_x,
+		wmgen.dirty_y,
+		wmgen.dirty_w,
+		wmgen.dirty_h);
+#endif
+
+	XFlush(display);
+	wmgen.dirty_x = wmgen.attributes.width;
+	wmgen.dirty_y = wmgen.attributes.height;
+	wmgen.dirty_w = 0;
+	wmgen.dirty_h = 0;
+
+}
+
+
+void RedrawWindowXY(int x, int y) {
+	
+	XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, 
+				x, y, wmgen.attributes.width, wmgen.attributes.height, 0,0);
+	XCopyArea(display, wmgen.pixmap, win, NormalGC,
+				x, y, wmgen.attributes.width, wmgen.attributes.height, 0,0);
+}
+
+
+void DirtyWindow(int x, int y, unsigned int w, unsigned int h) {
+	static	int	nx, ny, nw, nh;
+
+#ifdef MONDEBUG
+	printf("currently dirty: X: %i Y: %i W: %u H: %u new: X: %i Y: %i W: %u H: %u\n",
+		wmgen.dirty_x,
+		wmgen.dirty_y,
+		wmgen.dirty_w,
+		wmgen.dirty_h,
+		x,
+		y,
+		w,
+		h);
+#endif
+
+        if(x < wmgen.dirty_x) nx = x;
+        else nx = wmgen.dirty_x;
+
+        if(y < wmgen.dirty_y) ny = y;
+        else ny = wmgen.dirty_y;
+
+        if((x + w) > (wmgen.dirty_x + wmgen.dirty_w)) nw = (x + w) - nx;
+        else nw = (wmgen.dirty_x + wmgen.dirty_w) - nx;
+
+        if((y + h) > (wmgen.dirty_y + wmgen.dirty_h)) nh = (y + h) - ny;
+        else nh = (wmgen.dirty_y + wmgen.dirty_h) - ny;
+
+	wmgen.dirty_x = nx;
+	wmgen.dirty_y = ny;
+	wmgen.dirty_w = nw;
+	wmgen.dirty_h = nh;
+#ifdef MONDEBUG
+	printf("Dirty: X: %i Y: %i W: %i H: %i\n",
+		wmgen.dirty_x,
+		wmgen.dirty_y,
+		wmgen.dirty_w,
+		wmgen.dirty_h);
+#endif
+};
+
+
+void createXBMfromXPM(char *xbm, char **xpm, int sx, int sy) {
+
+	int		i,j,k;
+	int		width, height, numcol, depth;
+    int 	zero=0;
+	unsigned char	bwrite;
+    int		bcount;
+    int     curpixel;
+
+	
+	sscanf(*xpm, "%d %d %d %d", &width, &height, &numcol, &depth);
+
+
+    for (k=0; k!=depth; k++)
+    {
+        zero <<=8;
+        zero |= xpm[1][k];
+    }
+        
+	for (i=numcol+1; i < numcol+sy+1; i++) {
+		bcount = 0;
+		bwrite = 0;
+		for (j=0; j<sx*depth; j+=depth) {
+            bwrite >>= 1;
+
+            curpixel=0;
+            for (k=0; k!=depth; k++)
+            {
+                curpixel <<=8;
+                curpixel |= xpm[i][j+k];
+            }
+                
+            if ( curpixel != zero ) {
+				bwrite += 128;
+			}
+			bcount++;
+			if (bcount == 8) {
+				*xbm = bwrite;
+				xbm++;
+				bcount = 0;
+				bwrite = 0;
+			}
+		}
+	}
+
+}
+
+
+void copyXPMArea(int sx, int sy, unsigned int w, unsigned int h, int dx, int dy) {
+
+	XCopyArea(display,
+		  wmgen.pixmap,
+		  wmgen.pixmap,
+		  NormalGC,
+		  sx,
+		  sy,
+		  w,
+		  h,
+		  dx,
+		  dy);
+
+	DirtyWindow(dx, dy, w, h);
+}
+
+
+void copyXBMArea(int sx, int sy, unsigned int w, unsigned int h, int dx, int dy) {
+
+	XCopyArea(display,
+		  wmgen.mask,
+		  wmgen.pixmap,
+		  NormalGC,
+		  sx,
+		  sy,
+		  w,
+		  h,
+		  dx,
+		  dy);
+
+	DirtyWindow(dx, dy, w, h);
+
+}
+
+
+void setMaskXY(int x, int y) {
+
+	 XShapeCombineMask(display, win, ShapeBounding, x, y, pixmask, ShapeSet);
+	 XShapeCombineMask(display, iconwin, ShapeBounding, x, y, pixmask, ShapeSet);
+}
+
+
+int openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bits, int pixmask_width, int pixmask_height) {
+
+	unsigned int	borderwidth = 1;
+	XClassHint		classHint;
+	char			*display_name = NULL;
+	char			*wname = argv[0];
+	XTextProperty	name;
+
+	XGCValues		gcv;
+	unsigned long	gcm;
+
+	char			*geometry = NULL;
+
+	int				dummy=0;
+	int				i, wx, wy, fd;
+
+	for (i=1; argv[i]; i++) {
+		if (!strcmp(argv[i], "-display")) {
+			display_name = argv[i+1];
+			i++;
+		}
+		if (!strcmp(argv[i], "-geometry")) {
+			geometry = argv[i+1];
+			i++;
+		}
+	}
+
+	if (!(display = XOpenDisplay(display_name))) {
+		fprintf(stderr, "%s: can't open display %s\n", 
+						wname, XDisplayName(display_name));
+		return -1;
+	}
+	fd = ConnectionNumber(display);
+	screen  = DefaultScreen(display);
+	Root    = RootWindow(display, screen);
+	d_depth = DefaultDepth(display, screen);
+	x_fd    = XConnectionNumber(display);
+
+	/* Convert XPM to XImage */
+	GetXPM(&wmgen, pixmap_bytes);
+
+	/* Create a window to hold the stuff */
+	mysizehints.flags = USSize | USPosition;
+	mysizehints.x = 0;
+	mysizehints.y = 0;
+
+	back_pix = GetColor("white");
+	fore_pix = GetColor("black");
+
+	XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
+				&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
+
+	mysizehints.width = 64;
+	mysizehints.height = 64;
+	DirtyWindow(0, 0, 64, 64);
+		
+	win = XCreateSimpleWindow(display, Root, mysizehints.x, mysizehints.y,
+				mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix);
+	
+	iconwin = XCreateSimpleWindow(display, win, mysizehints.x, mysizehints.y,
+				mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix);
+
+	/* Activate hints */
+	XSetWMNormalHints(display, win, &mysizehints);
+	classHint.res_name = wname;
+	classHint.res_class = wname;
+	XSetClassHint(display, win, &classHint);
+
+	XSelectInput(display, win, ExposureMask | StructureNotifyMask);
+	XSelectInput(display, iconwin, ExposureMask | StructureNotifyMask);
+
+	if (XStringListToTextProperty(&wname, 1, &name) == 0) {
+		fprintf(stderr, "%s: can't allocate window name\n", wname);
+		return -1;
+	}
+
+	XSetWMName(display, win, &name);
+
+	/* Create GC for drawing */
+	
+	gcm = GCForeground | GCBackground | GCGraphicsExposures;
+	gcv.foreground = fore_pix;
+	gcv.background = back_pix;
+	gcv.graphics_exposures = 0;
+	NormalGC = XCreateGC(display, Root, gcm, &gcv);
+
+	/* ONLYSHAPE ON */
+
+	pixmask = XCreateBitmapFromData(display, win, pixmask_bits, pixmask_width, pixmask_height);
+
+	XShapeCombineMask(display, win, ShapeBounding, 0, 0, pixmask, ShapeSet);
+	XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0, pixmask, ShapeSet);
+
+	/* ONLYSHAPE OFF */
+
+	mywmhints.initial_state = WithdrawnState;
+	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(display, win, &mywmhints);
+
+	XSetCommand(display, win, argv, argc);
+	XMapWindow(display, win);
+
+	if (geometry) {
+		if (sscanf(geometry, "+%d+%d", &wx, &wy) != 2) {
+			fprintf(stderr, "Bad geometry string.\n");
+			return -1;
+		}
+		XMoveWindow(display, win, wx, wy);
+	}
+
+	return fd;
+}
diff --git a/src/wmgeneral.h b/src/wmgeneral.h
new file mode 100644
index 0000000..22ed3df
--- /dev/null
+++ b/src/wmgeneral.h
@@ -0,0 +1,62 @@
+#ifndef WMGENERAL_H_INCLUDED
+#define WMGENERAL_H_INCLUDED
+
+  /***********/
+ /* Defines */
+/***********/
+
+#define MAX_MOUSE_REGION (16)
+
+  /************/
+ /* Typedefs */
+/************/
+
+typedef struct _rckeys rckeys;
+
+struct _rckeys {
+	const char	*label;
+	char		**var;
+};
+
+typedef struct _rckeys2 rckeys2;
+
+struct _rckeys2 {
+	const char	*family;
+	const char	*label;
+	char		**var;
+};
+
+typedef struct {
+	Pixmap		pixmap;
+	Pixmap		mask;
+	XpmAttributes	attributes;
+	int		dirty_x, dirty_y;
+	unsigned int	dirty_w, dirty_h;
+} XpmIcon;
+
+  /*******************/
+ /* Global variable */
+/*******************/
+
+Display		*display;
+
+  /***********************/
+ /* Function Prototypes */
+/***********************/
+
+void AddMouseRegion(int index, int left, int top, int right, int bottom);
+int CheckMouseRegion(int x, int y);
+
+int openXwindow(int argc, char *argv[], char **, char *, int, int);
+void RedrawWindow(void);
+void RedrawWindowXY(int x, int y);
+
+void createXBMfromXPM(char *, char **, int, int);
+void copyXPMArea(int, int, unsigned int, unsigned int, int, int);
+void copyXBMArea(int, int, unsigned int, unsigned int, int, int);
+void setMaskXY(int, int);
+
+void parse_rcfile(const char *, rckeys *);
+inline void DirtyWindow(int, int, unsigned int, unsigned int);
+
+#endif
diff --git a/src/wmsysmon-master-alpha.xpm b/src/wmsysmon-master-alpha.xpm
new file mode 100644
index 0000000..1f18d69
--- /dev/null
+++ b/src/wmsysmon-master-alpha.xpm
@@ -0,0 +1,183 @@
+/* XPM */
+static char * wmsysmon_master_xpm[] = {
+"240 100 80 1",
+".	c #0000FF",
+" 	c None",
+"+	c #202020",
+"@	c #000000",
+"#	c #C7C3C7",
+"$	c #004941",
+"%	c #20B2AE",
+"&	c #107D79",
+"*	c #188A86",
+"=	c #007D71",
+"-	c #00FF0F",
+";	c #04FA0F",
+">	c #09F50F",
+",	c #0DF10F",
+"'	c #12EC0E",
+")	c #16E80E",
+"!	c #1BE30E",
+"~	c #1FDF0D",
+"{	c #24DA0D",
+"]	c #28D60D",
+"^	c #2DD10D",
+"/	c #32CC0C",
+"(	c #36C80C",
+"_	c #3BC30C",
+":	c #3FBF0B",
+"<	c #44BA0B",
+"[	c #48B60B",
+"}	c #4DB10B",
+"|	c #51AD0A",
+"1	c #56A80A",
+"2	c #5BA30A",
+"3	c #5F9F09",
+"4	c #649A09",
+"5	c #689609",
+"6	c #6D9109",
+"7	c #718D08",
+"8	c #768808",
+"9	c #7A8408",
+"0	c #7F7F07",
+"a	c #847A07",
+"b	c #887607",
+"c	c #8D7107",
+"d	c #916D06",
+"e	c #966806",
+"f	c #9A6406",
+"g	c #9F5F05",
+"h	c #A35B05",
+"i	c #A85605",
+"j	c #AD5105",
+"k	c #B14D04",
+"l	c #B64804",
+"m	c #BA4404",
+"n	c #BF3F03",
+"o	c #C33B03",
+"p	c #C83603",
+"q	c #CC3203",
+"r	c #D12D02",
+"s	c #D62802",
+"t	c #DA2402",
+"u	c #DF1F01",
+"v	c #E31B01",
+"w	c #E81601",
+"x	c #EC1201",
+"y	c #F10D00",
+"z	c #F50900",
+"A	c #FA0400",
+"B	c #FF0000",
+"C	c #283C38",
+"D	c #B60418",
+"E	c #00EB00",
+"F	c #0E7973",
+"G	c #F7F3FF",
+"H	c #11817B",
+"I	c #E80426",
+"J	c #71E371",
+"K	c #138984",
+"L	c #16918C",
+"M	c #494949",
+"N	c #7A7A7A",
+"O	c #BCBCBC",
+"................................................................+...............................................................................................................................................................................",
+"................................................................+...............................................................................................................................................................................",
+"................................................................+...............................................................................................................................................................................",
+"..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..+...............................................................................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+...............................................................................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+...............................................................................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+...............................................................................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+...............................................................................................................................................................................",
+"..@###########################################################..+...............................................................................................................................................................................",
+"................................................................+.+++++++++++++++++++++++++++++++++++++++++++++++++++...........................................................................................................................",
+"................................................................+.++$$$$+++$$$$+++++++$$$$+++$$$$+++++++$$$$+++$$$$++...........................................................................................................................",
+"..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..+.+$++++$+$++++$++$++$++++$+$++++$++$++$++++$+$++++$+...........................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+.+$++++$+$++++$++$++$++++$+$++++$++$++$++++$+$++++$+...........................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+.+$++++$+$++++$+++++$++++$+$++++$+++++$++++$+$++++$+...........................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+.++$$$$+++$$$$+++++++$$$$+++$$$$+++++++$$$$+++$$$$++...........................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+.+$++++$+$++++$+++++$++++$+$++++$+++++$++++$+$++++$+...........................................................................................................................",
+"..@###########################################################..+.+$++++$+$++++$++$++$++++$+$++++$++$++$++++$+$++++$+...........................................................................................................................",
+"................................................................+.+$++++$+$++++$++$++$++++$+$++++$++$++$++++$+$++++$+...........................................................................................................................",
+"................................................................+.++$$$$+++$$$$+++++++$$$$+++$$$$+++++++$$$$+++$$$$++...........................................................................................................................",
+"..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..+.+++++++++++++++++++++++++++++++++++++++++++++++++++...........................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+...............................................................................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+..+++%%%%+++$$$$&+&%%%%*+&%%%%&+&$$$$&+&%%%%&+&%%%%*+&%%%%&+&%%%%*+&%%%%*++++++................................................................................................",
+"..@###########################################################..+..++%++++%+$++++%+$++++%+$++++%+%++++%+%++++$+%++++$+$++++%+%++++%+%++++%++%+++................................................................................................",
+"................................................................+..++%++++%+$++++%+$++++%+$++++%+%++++%+%++++$+%++++$+$++++%+%++++%+%++++%++%+++................................................................................................",
+"................................................................+..++%++++%+$++++%+$++++%+$++++%+%++++%+%++++$+%++++$+$++++%+%++++%+%++++%++++++................................................................................................",
+"................................................................+..++&$$$$&++$$$$&+&%%%%&+&%%%%&+&%%%%&+&%%%%&+&%%%%&++$$$$&+&%%%%&+&%%%%&++++++................................................................................................",
+"..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..+..++%++++%+$++++%+%++++$+$++++%+$++++%+$++++%+%++++%+$++++%+%++++%+$++++%++++++................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+..++%++++%+$++++%+%++++$+$++++%+$++++%+$++++%+%++++%+$++++%+%++++%+$++++%++%+++................................................................................................",
+".. at +++++$$$+++$$$+++$$$++++++++$$$+++$$$+++++++$$$+++$$$+++++#..+..++%++++%+$++++%+%++++$+$++++%+$++++%+$++++%+%++++%+$++++%+%++++%+$++++%++%+++................................................................................................",
+".. at ++++$+++$+$+++$+$+++$++++++$+++$+$+++$+++++$+++$+$+++$++++#..+..+++%%%%+++$$$$&+&%%%%&+&%%%%&++$$$$&+&%%%%&+&%%%%&++$$$$&+&%%%%&+&%%%%&++++++................................................................................................",
+".. at ++++$+++$+$+++$+$+++$++%+++$+++$+$+++$++%++$+++$+$+++$++++#..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++................................................................................................",
+".. at +++++$$$+++$$$+++$$$+++=++++$$$+++$$$+++=+++$$$+++$$$+++++#..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++................................................................................................",
+".. at ++++$+++$+$+++$+$+++$++++++$+++$+$+++$+++++$+++$+$+++$++++#..+...............................................................................................................................................................................",
+".. at ++++$+++$+$+++$+$+++$++%+++$+++$+$+++$++%++$+++$+$+++$++++#..+...............................................................................................................................................................................",
+".. at +++++$$$+++$$$+++$$$+++=++++$$$+++$$$+++=+++$$$+++$$$+++++#..+..--;>,')!~{]^/(_:<[}|1234567890abcdefghijklmnopqrstuvwxyzAB...................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+..--;>,')!~{]^/(_:<[}|1234567890abcdefghijklmnopqrstuvwxyzAB...................................................................................................................",
+"..############################################################..+..--;>,')!~{]^/(_:<[}|1234567890abcdefghijklmnopqrstuvwxyzAB...................................................................................................................",
+"................................................................+..--;>,')!~{]^/(_:<[}|1234567890abcdefghijklmnopqrstuvwxyzAB...................................................................................................................",
+"................................................................+..--;>,')!~{]^/(_:<[}|1234567890abcdefghijklmnopqrstuvwxyzAB...................................................................................................................",
+"..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....@@@@@@@@@@@@#..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..................................................................................................................",
+".. at +++++++++++++++++++++++++++++++++++++++++#.... at +++++++++++#..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..................................................................................................................",
+".. at ++CC+++CC+++CC+++CC+++CC+++CC+++CC+++CC++#.... at ++CC+++CC++#..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..................................................................................................................",
+".. at +CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+#.... at +CCCC+CCCC+#..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..................................................................................................................",
+".. at +CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+#.... at +CCCC+CCCC+#..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..................................................................................................................",
+".. at ++CC+++CC+++CC+++CC+++CC+++CC+++CC+++CC++#.... at ++CC+++CC++#..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..................................................................................................................",
+".. at +++++++++++++++++++++++++++++++++++++++++#.... at +++++++++++#..+...............................................................................................................................................................................",
+".. at ++CC+++CC+++CC+++CC+++CC+++CC+++CC+++CC++#.... at ++CC+++CC++#..+...............................................................................................................................................................................",
+".. at +CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+#.... at +CCCC+CCCC+#..+...............................................................................................................................................................................",
+".. at +CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+#.... at +CCCC+CCCC+#..+...............................................................................................................................................................................",
+".. at ++CC+++CC+++CC+++CC+++CC+++CC+++CC+++CC++#.... at ++CC+++CC++#..+...............................................................................................................................................................................",
+".. at +++++++++++++++++++++++++++++++++++++++++#.... at +++++++++++#..+...............................................................................................................................................................................",
+".. at ++CC+++CC+++CC+++CC+++CC+++CC+++CC+++CC++#.... at ++CC+++CC++#..+...............................................................................................................................................................................",
+".. at +CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+#.... at +CCCC+CCCC+#..+...............................................................................................................................................................................",
+".. at +CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+#.... at +CCCC+CCCC+#..+...............................................................................................................................................................................",
+".. at ++CC+++CC+++CC+++CC+++CC+++CC+++CC+++CC++#.... at ++CC+++CC++#..+...............................................................................................................................................................................",
+".. at +++++++++++++++++++++++++++++++++++++++++#.... at +++++++++++#..+...............................................................................................................................................................................",
+"..###########################################....#############..+...............................................................................................................................................................................",
+"................................................................+...............................................................................................................................................................................",
+"................................................................+...............................................................................................................................................................................",
+"................................................................+...............................................................................................................................................................................",
+"................................................................+...............................................................................................................................................................................",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+...............................................................................................................................................................................",
+"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.................................................................................................................................................................",
+"++%%%+++$$$=+=%%%=+=%%%=+=$$$=+=%%%=+=%%%=+=%%%=+=%%%=+=%%%=+++++++++++++++++++.................................................................................................................................................................",
+"+%+++%+$+++%+$+++%+$+++%+%+++%+%+++$+%+++$+$+++%+%+++%+%+++%++++++++++++%++++++..+DD++.+EE++.+CC++..........FFFF....++++....++++....++++....++++................................................................................................",
+"+%+++%+$+++%+$+++%+$+++%+%+++%+%+++$+%+++$+$+++%+%+++%+%+++%++%++++%++++%++++++..DGDD+.EGEE+.CCCC+..........HHHH....HHHH....++++....++++....+II+................................................................................................",
+"+=$$$=++$$$=+=%%%=++%%%=+=%%%=+=%%%=+=%%%=++$$$=+$%%%$+=%%%=++=++++=+++%+++++++..DDDD+.EEEE+.CCCC+..+%$J....KKKK....KKKK....KKKK....++++....+II+................................................................................................",
+"+%+++%+$+++%+%+++$+$+++%+$+++%+$+++%+%+++%+$+++%+%+++%+$+++%+++++++++++%+++++++..+DD++.+EE++.+CC++..........LLLL....LLLL....LLLL....LLLL....++++................................................................................................",
+"+%+++%+$+++%+%+++$+$+++%+$+++%+$+++%+%+++%+$+++%+%+++%+$+++%++%++++%++%++++++++.................................................................................................................................................................",
+"++%%%+++$$$%+=%%%=+=%%%=++$$$=+=%%%=+=%%%=++$$$=+=%%%=+=%%%=++=++++=++%++++++++.................................................................................................................................................................",
+"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.................................................................................................................................................................",
+"................................................................................................................................................................................................................................................",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++................................................................................",
+"+$%%%$+=%%%++=%%%=+=%%%++=%%%=+=%%%=+=%%%=+=$$$=++$$$=++$$$=+=$$$=+=$$$++%$$$%+=%%%++=%%%=+=%%%=+=%%%=+=%%%=+=%%%=+=%%%=+=$$$=+=$$$=+=$$$=+=$$$=+=$$$=+=%%%=++++................................................................................",
+"+%+++%+%+++%+%+++$+%+++%+%+++$+%+++$+%+++$+%+++%+$+++%+$+++%+%+++%+%+++$+%%+%%+%+++%+%+++%+%+++%+%+++%+%+++%+%+++$+$+%+$+%+++%+%+++%+%+++%+%+++%+%+++%+$+++%++++................................................................................",
+"+%+++%+%+++%+%+++$+%+++%+%+++$+%+++$+%+++$+%+++%+$+++%+$+++%+%++%$+%+++$+%+%+%+%+++%+%+++%+%+++%+%+++%+%+++%+%+++$+$+%+$+%+++%+%+++%+%+++%+$%+%$+%+++%+$++%$++++................................................................................",
+"+=%%%=+=%%%++=$$$++=$$$=+=%%%++=%%%++=$%%=+=%%%=++$$$=++$$$=+=%%$++=$$$++=$$$=+=$$$=+=$$$=+=%%%=+=%$$=+=%%%++=%%%=++$=$++=$$$=+=$$$=+=$$$=++$%$++=%%%=++$%$+++++................................................................................",
+"+%+++%+%+++%+%+++$+%+++%+%+++$+%+++$+%+++%+%+++%+$+++%+$+++%+%++%$+%+++$+%+++%+%+++%+%+++%+%+++$+%+%+%+%+++%+$+++%+$+%+$+%+++%+%+++%+%+%+%+$%+%$+$+++%+$%++$++++................................................................................",
+"+%+++%+%+++%+%+++$+%+++%+%+++$+%+++$+%+++%+%+++%+$+++%+$+++%+%+++%+%+++$+%+++%+%+++%+%+++%+%+++$+%++%%+%+++%+$+++%+$+%+$+%+++%+%+++%+%%+%%+%+++%+$+++%+%+++$++++................................................................................",
+"+=$$$=+=%%%++=%%%=+%%%%++=%%%=+%$$$++=%%%=+=$$$=++$$$%+=%%%=+=$$$=+=%%%$+=$$$=+%$$$%+=%%%=+=$$$++=%%%=+=$$$=+=%%%=++$=$++$%%%%++%%%++%$$$%+=$$$%==%%%=+=%%%=++++................................................................................",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++................................................................................",
+"................................................................................................................................................................................................................................................",
+".... at ++++++++++++++++++++++++++++++++++++++++++++++++++++++#....+...............................................................................................................................................................................",
+".....++$$$+++$$$+++$$$+++$$$+++$$$+++++++$$$+++$$$+++$$$+++.....................................................................................................................................................................................",
+".....+$+++$+$+++$+$+++$+$+++$+$+++$+++++$+++$+$+++$+$+++$++.....................................................................................................................................................................................",
+".....+$+++$+$+++$+$+++$+$+++$+$+++$++$++$+++$+$+++$+$+++$++.....................................................................................................................................................................................",
+".....++$$$+++$$$+++$$$+++$$$+++$$$+++$+++$$$+++$$$+++$$$+++.....................................................................................................................................................................................",
+".....+$+++$+$+++$+$+++$+$+++$+$+++$+++++$+++$+$+++$+$+++$++.....................................................................................................................................................................................",
+".....+$+++$+$+++$+$+++$+$+++$+$+++$++$++$+++$+$+++$+$+++$++.....................................................................................................................................................................................",
+".....++$$$+++$$$+++$$$+++$$$+++$$$+++$+++$$$+++$$$+++$$$+++.....................................................................................................................................................................................",
+".....++++++++++++++++++++++++++++++++++++++++++++++++++++++.....................................................................................................................................................................................",
+".....++++++++++++++++++++++++++++++++++++++++++++++++++++++.....................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................",
+"$=%.............................................................................................................................................................................................................................................",
+"MNO.............................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................"};
diff --git a/src/wmsysmon-master-i386.xpm b/src/wmsysmon-master-i386.xpm
new file mode 100644
index 0000000..fc172b0
--- /dev/null
+++ b/src/wmsysmon-master-i386.xpm
@@ -0,0 +1,183 @@
+/* XPM */
+static char * wmsysmon_master_xpm[] = {
+"240 100 80 1",
+".	c #0000FF",
+" 	c None",
+"+	c #202020",
+"@	c #000000",
+"#	c #C7C3C7",
+"$	c #004941",
+"%	c #20B2AE",
+"&	c #107D79",
+"*	c #188A86",
+"=	c #00FF0F",
+"-	c #04FA0F",
+";	c #09F50F",
+">	c #0DF10F",
+",	c #12EC0E",
+"'	c #16E80E",
+")	c #1BE30E",
+"!	c #1FDF0D",
+"~	c #24DA0D",
+"{	c #28D60D",
+"]	c #2DD10D",
+"^	c #32CC0C",
+"/	c #36C80C",
+"(	c #3BC30C",
+"_	c #3FBF0B",
+":	c #44BA0B",
+"<	c #48B60B",
+"[	c #4DB10B",
+"}	c #51AD0A",
+"|	c #56A80A",
+"1	c #5BA30A",
+"2	c #5F9F09",
+"3	c #649A09",
+"4	c #689609",
+"5	c #6D9109",
+"6	c #718D08",
+"7	c #768808",
+"8	c #7A8408",
+"9	c #7F7F07",
+"0	c #847A07",
+"a	c #887607",
+"b	c #8D7107",
+"c	c #916D06",
+"d	c #966806",
+"e	c #9A6406",
+"f	c #9F5F05",
+"g	c #A35B05",
+"h	c #A85605",
+"i	c #AD5105",
+"j	c #B14D04",
+"k	c #B64804",
+"l	c #BA4404",
+"m	c #BF3F03",
+"n	c #C33B03",
+"o	c #C83603",
+"p	c #CC3203",
+"q	c #D12D02",
+"r	c #D62802",
+"s	c #DA2402",
+"t	c #DF1F01",
+"u	c #E31B01",
+"v	c #E81601",
+"w	c #EC1201",
+"x	c #F10D00",
+"y	c #F50900",
+"z	c #FA0400",
+"A	c #FF0000",
+"B	c #007D71",
+"C	c #283C38",
+"D	c #B60418",
+"E	c #00EB00",
+"F	c #0E7973",
+"G	c #F7F3FF",
+"H	c #11817B",
+"I	c #E80426",
+"J	c #71E371",
+"K	c #138984",
+"L	c #16918C",
+"M	c #494949",
+"N	c #7A7A7A",
+"O	c #BCBCBC",
+"................................................................+...............................................................................................................................................................................",
+"................................................................+...............................................................................................................................................................................",
+"................................................................+...............................................................................................................................................................................",
+"..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..+...............................................................................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+...............................................................................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+...............................................................................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+...............................................................................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+...............................................................................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+...............................................................................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+.+++++++++++++++++++++++++++++++++++++++++++++++++++...........................................................................................................................",
+"..@###########################################################..+.++$$$$+++$$$$+++++++$$$$+++$$$$+++++++$$$$+++$$$$++...........................................................................................................................",
+"................................................................+.+$++++$+$++++$++$++$++++$+$++++$++$++$++++$+$++++$+...........................................................................................................................",
+"................................................................+.+$++++$+$++++$++$++$++++$+$++++$++$++$++++$+$++++$+...........................................................................................................................",
+"................................................................+.+$++++$+$++++$+++++$++++$+$++++$+++++$++++$+$++++$+...........................................................................................................................",
+"..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..+.++$$$$+++$$$$+++++++$$$$+++$$$$+++++++$$$$+++$$$$++...........................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+.+$++++$+$++++$+++++$++++$+$++++$+++++$++++$+$++++$+...........................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+.+$++++$+$++++$++$++$++++$+$++++$++$++$++++$+$++++$+...........................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+.+$++++$+$++++$++$++$++++$+$++++$++$++$++++$+$++++$+...........................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+.++$$$$+++$$$$+++++++$$$$+++$$$$+++++++$$$$+++$$$$++...........................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+.+++++++++++++++++++++++++++++++++++++++++++++++++++...........................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+...............................................................................................................................................................................",
+"..@###########################################################..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++................................................................................................",
+"................................................................+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++................................................................................................",
+"................................................................+..+++%%%%+++$$$$&+&%%%%*+&%%%%&+&$$$$&+&%%%%&+&%%%%*+&%%%%&+&%%%%*+&%%%%*++++++................................................................................................",
+"................................................................+..++%++++%+$++++%+$++++%+$++++%+%++++%+%++++$+%++++$+$++++%+%++++%+%++++%++%+++................................................................................................",
+"..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..+..++%++++%+$++++%+$++++%+$++++%+%++++%+%++++$+%++++$+$++++%+%++++%+%++++%++%+++................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+..++%++++%+$++++%+$++++%+$++++%+%++++%+%++++$+%++++$+$++++%+%++++%+%++++%++++++................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+..++&$$$$&++$$$$&+&%%%%&+&%%%%&+&%%%%&+&%%%%&+&%%%%&++$$$$&+&%%%%&+&%%%%&++++++................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+..++%++++%+$++++%+%++++$+$++++%+$++++%+$++++%+%++++%+$++++%+%++++%+$++++%++++++................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+..++%++++%+$++++%+%++++$+$++++%+$++++%+$++++%+%++++%+$++++%+%++++%+$++++%++%+++................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+..++%++++%+$++++%+%++++$+$++++%+$++++%+$++++%+%++++%+$++++%+%++++%+$++++%++%+++................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+..+++%%%%+++$$$$&+&%%%%&+&%%%%&++$$$$&+&%%%%&+&%%%%&++$$$$&+&%%%%&+&%%%%&++++++................................................................................................",
+"..@###########################################################..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++................................................................................................",
+"................................................................+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++................................................................................................",
+"................................................................+...............................................................................................................................................................................",
+"................................................................+...............................................................................................................................................................................",
+"..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..+..==-;>,')!~{]^/(_:<[}|1234567890abcdefghijklmnopqrstuvwxyzA...................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+..==-;>,')!~{]^/(_:<[}|1234567890abcdefghijklmnopqrstuvwxyzA...................................................................................................................",
+".. at +++++$$$+++$$$+++$$$++++++++$$$+++$$$+++++++$$$+++$$$+++++#..+..==-;>,')!~{]^/(_:<[}|1234567890abcdefghijklmnopqrstuvwxyzA...................................................................................................................",
+".. at ++++$+++$+$+++$+$+++$++++++$+++$+$+++$+++++$+++$+$+++$++++#..+..==-;>,')!~{]^/(_:<[}|1234567890abcdefghijklmnopqrstuvwxyzA...................................................................................................................",
+".. at ++++$+++$+$+++$+$+++$++%+++$+++$+$+++$++%++$+++$+$+++$++++#..+..==-;>,')!~{]^/(_:<[}|1234567890abcdefghijklmnopqrstuvwxyzA...................................................................................................................",
+".. at +++++$$$+++$$$+++$$$+++B++++$$$+++$$$+++B+++$$$+++$$$+++++#..+..==-;>,')!~{]^/(_:<[}|1234567890abcdefghijklmnopqrstuvwxyzA...................................................................................................................",
+".. at ++++$+++$+$+++$+$+++$++++++$+++$+$+++$+++++$+++$+$+++$++++#..+...............................................................................................................................................................................",
+".. at ++++$+++$+$+++$+$+++$++%+++$+++$+$+++$++%++$+++$+$+++$++++#..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..................................................................................................................",
+".. at +++++$$$+++$$$+++$$$+++B++++$$$+++$$$+++B+++$$$+++$$$+++++#..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..................................................................................................................",
+".. at ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..................................................................................................................",
+"..############################################################..+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..................................................................................................................",
+"................................................................+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..................................................................................................................",
+"................................................................+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..................................................................................................................",
+"..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@....@@@@@@@@@@@@#..+...............................................................................................................................................................................",
+".. at +++++++++++++++++++++++++++++++++++++++++#.... at +++++++++++#..+...............................................................................................................................................................................",
+".. at ++CC+++CC+++CC+++CC+++CC+++CC+++CC+++CC++#.... at ++CC+++CC++#..+...............................................................................................................................................................................",
+".. at +CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+#.... at +CCCC+CCCC+#..+...............................................................................................................................................................................",
+".. at +CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+#.... at +CCCC+CCCC+#..+...............................................................................................................................................................................",
+".. at ++CC+++CC+++CC+++CC+++CC+++CC+++CC+++CC++#.... at ++CC+++CC++#..+...............................................................................................................................................................................",
+".. at +++++++++++++++++++++++++++++++++++++++++#.... at +++++++++++#..+...............................................................................................................................................................................",
+".. at ++CC+++CC+++CC+++CC+++CC+++CC+++CC+++CC++#.... at ++CC+++CC++#..+...............................................................................................................................................................................",
+".. at +CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+#.... at +CCCC+CCCC+#..+...............................................................................................................................................................................",
+".. at +CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+CCCC+#.... at +CCCC+CCCC+#..+...............................................................................................................................................................................",
+".. at ++CC+++CC+++CC+++CC+++CC+++CC+++CC+++CC++#.... at ++CC+++CC++#..+...............................................................................................................................................................................",
+".. at +++++++++++++++++++++++++++++++++++++++++#.... at +++++++++++#..+...............................................................................................................................................................................",
+"..###########################################....#############..+...............................................................................................................................................................................",
+"................................................................+...............................................................................................................................................................................",
+"................................................................+...............................................................................................................................................................................",
+"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.................................................................................................................................................................",
+"++%%%+++$$$B+B%%%B+B%%%B+B$$$B+B%%%B+B%%%B+B%%%B+B%%%B+B%%%B+++++++++++++++++++.................................................................................................................................................................",
+"+%+++%+$+++%+$+++%+$+++%+%+++%+%+++$+%+++$+$+++%+%+++%+%+++%++++++++++++%++++++..+DD+..+EE+..+CC+...........FFFF....++++....++++....++++....++++................................................................................................",
+"+%+++%+$+++%+$+++%+$+++%+%+++%+%+++$+%+++$+$+++%+%+++%+%+++%++%++++%++++%++++++..DGDD..EGEE..CCCC...........HHHH....HHHH....++++....++++....+II+................................................................................................",
+"+B$$$B++$$$B+B%%%B++%%%B+B%%%B+B%%%B+B%%%B++$$$B+$%%%$+B%%%B++B++++B+++%+++++++..DDDD..EEEE..CCCC...+%$J....KKKK....KKKK....KKKK....++++....+II+................................................................................................",
+"+%+++%+$+++%+%+++$+$+++%+$+++%+$+++%+%+++%+$+++%+%+++%+$+++%+++++++++++%+++++++..+DD+..+EE+..+CC+...........LLLL....LLLL....LLLL....LLLL....++++................................................................................................",
+"+%+++%+$+++%+%+++$+$+++%+$+++%+$+++%+%+++%+$+++%+%+++%+$+++%++%++++%++%++++++++.................................................................................................................................................................",
+"++%%%+++$$$%+B%%%B+B%%%B++$$$B+B%%%B+B%%%B++$$$B+B%%%B+B%%%B++B++++B++%++++++++.................................................................................................................................................................",
+"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.................................................................................................................................................................",
+"................................................................................................................................................................................................................................................",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++................................................................................",
+"+$%%%$+B%%%++B%%%B+B%%%++B%%%B+B%%%B+B%%%B+B$$$B++$$$B++$$$B+B$$$B+B$$$++%$$$%+B%%%++B%%%B+B%%%B+B%%%B+B%%%B+B%%%B+B%%%B+B$$$B+B$$$B+B$$$B+B$$$B+B$$$B+B%%%B++++................................................................................",
+"+%+++%+%+++%+%+++$+%+++%+%+++$+%+++$+%+++$+%+++%+$+++%+$+++%+%+++%+%+++$+%%+%%+%+++%+%+++%+%+++%+%+++%+%+++%+%+++$+$+%+$+%+++%+%+++%+%+++%+%+++%+%+++%+$+++%++++................................................................................",
+"+%+++%+%+++%+%+++$+%+++%+%+++$+%+++$+%+++$+%+++%+$+++%+$+++%+%++%$+%+++$+%+%+%+%+++%+%+++%+%+++%+%+++%+%+++%+%+++$+$+%+$+%+++%+%+++%+%+++%+$%+%$+%+++%+$++%$++++................................................................................",
+"+B%%%B+B%%%++B$$$++B$$$B+B%%%++B%%%++B$%%B+B%%%B++$$$B++$$$B+B%%$++B$$$++B$$$B+B$$$B+B$$$B+B%%%B+B%$$B+B%%%++B%%%B++$B$++B$$$B+B$$$B+B$$$B++$%$++B%%%B++$%$+++++................................................................................",
+"+%+++%+%+++%+%+++$+%+++%+%+++$+%+++$+%+++%+%+++%+$+++%+$+++%+%++%$+%+++$+%+++%+%+++%+%+++%+%+++$+%+%+%+%+++%+$+++%+$+%+$+%+++%+%+++%+%+%+%+$%+%$+$+++%+$%++$++++................................................................................",
+"+%+++%+%+++%+%+++$+%+++%+%+++$+%+++$+%+++%+%+++%+$+++%+$+++%+%+++%+%+++$+%+++%+%+++%+%+++%+%+++$+%++%%+%+++%+$+++%+$+%+$+%+++%+%+++%+%%+%%+%+++%+$+++%+%+++$++++................................................................................",
+"+B$$$B+B%%%++B%%%B+%%%%++B%%%B+%$$$++B%%%B+B$$$B++$$$%+B%%%B+B$$$B+B%%%$+B$$$B+%$$$%+B%%%B+B$$$++B%%%B+B$$$B+B%%%B++$B$++$%%%%++%%%++%$$$%+B$$$%BB%%%B+B%%%B++++................................................................................",
+"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++................................................................................",
+"................................................................................................................................................................................................................................................",
+".... at ++++++++++++++++++++++++++++++++++++++++++++++++++++++#....+...............................................................................................................................................................................",
+".....++$$$+++$$$+++$$$+++$$$+++$$$+++++++$$$+++$$$+++$$$+++.....................................................................................................................................................................................",
+".....+$+++$+$+++$+$+++$+$+++$+$+++$+++++$+++$+$+++$+$+++$++.....................................................................................................................................................................................",
+".....+$+++$+$+++$+$+++$+$+++$+$+++$++$++$+++$+$+++$+$+++$++.....................................................................................................................................................................................",
+".....++$$$+++$$$+++$$$+++$$$+++$$$+++$+++$$$+++$$$+++$$$+++.....................................................................................................................................................................................",
+".....+$+++$+$+++$+$+++$+$+++$+$+++$+++++$+++$+$+++$+$+++$++.....................................................................................................................................................................................",
+".....+$+++$+$+++$+$+++$+$+++$+$+++$++$++$+++$+$+++$+$+++$++.....................................................................................................................................................................................",
+".....++$$$+++$$$+++$$$+++$$$+++$$$+++$+++$$$+++$$$+++$$$+++.....................................................................................................................................................................................",
+".....++++++++++++++++++++++++++++++++++++++++++++++++++++++.....................................................................................................................................................................................",
+".....++++++++++++++++++++++++++++++++++++++++++++++++++++++.....................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................",
+"$B%.............................................................................................................................................................................................................................................",
+"MNO.............................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................",
+"................................................................................................................................................................................................................................................"};
diff --git a/src/wmsysmon.c b/src/wmsysmon.c
new file mode 100644
index 0000000..b780ead
--- /dev/null
+++ b/src/wmsysmon.c
@@ -0,0 +1,875 @@
+/*
+	wmsysmon -- system monitoring dockapp
+
+	Copyright (C) 1998-1999 Dave Clark - clarkd at skynet.ca
+        Copyright (C) 2000 Vito Caputo - swivel at gnugeneration.com
+
+        wmsysmon 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.
+
+        wmsysmon 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.
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <time.h>
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <math.h>
+#include <sys/poll.h>
+#include <sys/wait.h>
+#include <sys/stat.h>
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/time.h>
+#include <X11/Xlib.h>
+#include <X11/xpm.h>
+#include <X11/extensions/shape.h>
+
+
+#include "wmgeneral.h"
+
+#ifdef HI_INTS
+#include "wmsysmon-master-alpha.xpm"
+#else
+#include "wmsysmon-master-i386.xpm"
+#endif
+
+#define WMSYSMON_VERSION "0.7.7"
+
+#define CHAR_WIDTH 5
+#define CHAR_HEIGHT 7
+
+#define BCHAR_WIDTH 6
+#define BCHAR_HEIGHT 9
+
+#define BOFFX   (93)
+#define BOFFY   (66)
+#define BREDX   (81)
+#define BREDY   (66)
+#define BGREENX (87)
+#define BGREENY (66)
+
+#define LITEW   (4)
+#define LITEH   (4)
+
+#define B_OFF   (0)
+#define B_RED   (1)
+#define B_GREEN (2)
+
+/* meter definitions */
+#define VBAR_W	(4)
+#define VBAR_H	(4)
+
+#define INT_LITES	(1)
+#define INT_METERS	(2)
+
+char	wmsysmon_mask_bits[64*64];
+int	wmsysmon_mask_width = 64;
+int	wmsysmon_mask_height = 64;
+
+long	start_time = 0;
+long	start_uptime = 0;
+int	counter = 0;
+int	Mem_l; /* line in /proc/meminfo "Mem:" is on */
+int	Swap_l; /* line in /proc/meminfo "Swap:" is on */
+int	intr_l;	/* line in /proc/stat "intr" is on */
+int	rio_l; /* line in /proc/stat "disk_rio" is on */
+int	wio_l; /* line in /proc/stat "disk_wio" is on */
+int	page_l; /* line in /proc/stat "page" is on */
+int	swap_l; /* line in /proc/stat "swap" is on */
+
+long	io_max;
+long	io_max_diff;
+
+int	meter[4][2];
+
+#ifdef HI_INTS
+long	_last_ints[24];
+long	_ints[24];
+int	int_peaks[24];
+#else
+long	_last_ints[16];
+long	_ints[16];
+int	int_peaks[16];
+#endif
+long	*last_ints;
+long	*ints;
+long	int_mode = INT_METERS;
+
+long	last_pageins=0;
+long	last_pageouts=0;
+
+long	last_swapins=0;
+long	last_swapouts=0;
+
+char	buf[1024];
+FILE	*statfp;
+FILE	*memfp;
+
+int	update_rate = 50;
+
+char	*ProgName;
+
+time_t	curtime;
+time_t	prevtime;
+
+
+void usage(void);
+void printversion(void);
+void BlitString(char *name, int x, int y);
+void BlitNum(int num, int x, int y);
+void wmsysmon_routine(int, char **);
+void DrawBar(int sx, int sy, int w, int h, float percent, int dx, int dy);
+void DrawLite(int state, int dx, int dy);
+void DrawUptime(void);
+void DrawStuff( void );
+void DrawMem( void );
+void DrawMeter(unsigned int, unsigned int, int, int);
+
+int main(int argc, char *argv[]) {
+	int	i;
+
+	/* set meter x,y pairs */
+	meter[3][0] = 108;
+	meter[3][1] = 66;
+	meter[2][0] = 116;
+	meter[2][1] = 66;
+	meter[1][0] = 124;
+	meter[1][1] = 66;
+	meter[0][0] = 132;
+	meter[0][1] = 66;
+
+	last_ints = _last_ints;
+	ints = _ints;
+    
+	/* Parse Command Line */
+
+	ProgName = argv[0];
+	if (strlen(ProgName) >= 5)
+		ProgName += (strlen(ProgName) - 5);
+
+	for (i = 1; i < argc; i++) {
+		char *arg = argv[i];
+
+		if (*arg == '-') {
+			switch (arg[1]) {
+			case 'd':
+				if (strcmp(arg + 1, "display")) {
+					usage();
+					exit(1);
+				}
+				break;
+			case 'g':
+				if (strcmp(arg+1, "geometry")) {
+					usage();
+					exit(1);
+				}
+				break;
+			case 'v':
+				printversion();
+				exit(0);
+				break;
+			case 'r':
+				if (argc > (i + 1)) {
+					update_rate = (atoi(argv[i + 1]));
+					i++;
+				}
+				break;
+			case 'l':
+				int_mode = INT_LITES;
+				break;
+
+			default:
+				usage();
+				exit(0);
+				break;
+			}
+		}
+	}
+
+	wmsysmon_routine(argc, argv);
+
+
+	return 0;
+}
+
+
+void wmsysmon_routine(int argc, char **argv)
+{
+	int		i;
+	XEvent		Event;
+	FILE		*fp;
+	int		xfd;
+	struct pollfd	pfd;
+    
+
+	createXBMfromXPM(wmsysmon_mask_bits, wmsysmon_master_xpm, wmsysmon_mask_width, wmsysmon_mask_height);
+    
+	xfd = openXwindow(argc, argv, wmsysmon_master_xpm, wmsysmon_mask_bits, wmsysmon_mask_width, wmsysmon_mask_height);
+	if(xfd < 0) exit(1);
+
+	pfd.fd = xfd;
+	pfd.events = (POLLIN);
+
+    /* init ints */
+	bzero(&_last_ints, sizeof(_last_ints));
+	bzero(&_ints, sizeof(_ints));
+	bzero(&int_peaks, sizeof(int_peaks));
+
+    
+    /* init uptime */
+	fp = fopen("/proc/uptime", "r");
+	if (fp) {
+		fscanf(fp, "%ld", &start_time);
+		fclose(fp);
+		start_uptime = time(NULL);
+	}
+
+	statfp = fopen("/proc/stat", "r");
+	memfp = fopen("/proc/meminfo", "r");
+
+	/* here we find tags in /proc/stat & /proc/meminfo and note their
+	 * lines, for faster lookup throughout execution.
+	 */
+	/* /proc/meminfo */
+	for(i = 0; fgets(buf, 1024, memfp); i++) {
+		if(strstr(buf, "Mem:")) Mem_l = i;
+		else if(strstr(buf, "Swap:")) Swap_l = i;
+	}
+
+	/* /proc/stat */
+	for(i = 0; fgets(buf, 1024, statfp); i++) {
+		if(strstr(buf, "disk_wio")) wio_l = i;
+		else if(strstr(buf, "disk_rio")) rio_l = i;
+		else if(strstr(buf, "page")) page_l = i;
+		else if(strstr(buf, "swap")) swap_l = i;
+		else if(strstr(buf, "intr")) intr_l = i;
+	}
+
+	while(1) {
+        
+		curtime = time(0);
+
+		DrawUptime();
+		DrawStuff();
+		DrawMem();
+		RedrawWindow();
+        
+		/* X Events */
+		poll(&pfd, 1, update_rate);
+		while (XPending(display)) {
+			XNextEvent(display, &Event);
+			switch (Event.type) {
+			case Expose:
+				DirtyWindow(Event.xexpose.x,
+					    Event.xexpose.y,
+					    Event.xexpose.width,
+					    Event.xexpose.height);
+				break;
+			case DestroyNotify:
+				XCloseDisplay(display);
+				exit(0);
+				break;
+
+			default:
+#ifdef MONDEBUG
+				printf("got: %i\n", Event.type);
+#endif
+			}
+		}
+
+/*		usleep(update_rate); */
+	}
+}
+
+
+void DrawMeter(unsigned int level, unsigned int peak, int dx, int dy)
+{
+	static unsigned int	a;
+
+	/* meters are on a per interruptscale, dictated by the peak, maintain
+	 * this peak outside of here, you can use a fixed peak for all ints but
+	 * since we're using only 4 lines for our level, the timer interrupt
+	 * usually kills the peak for the others so they never move. */
+
+	if(peak) {
+		a = level * 3 / peak;
+	} else a = 0;
+
+#ifdef MONDEBUG
+	printf("level: %u peak: %u selection: %u\n", level, peak, a);
+	fflush(stdout);
+#endif
+
+	if(a > 3) a = 3;
+
+	copyXPMArea(meter[a][0],
+		    meter[a][1],
+		    VBAR_W,
+		    VBAR_H,
+		    dx,
+		    dy);
+}
+
+
+
+void DrawBar(int sx, int sy, int w, int h, float percent, int dx, int dy)
+{
+	static int	tx;
+
+	tx = (float)((float)w * ((float)percent / (float)100.0));
+
+	copyXPMArea(sx, sy, tx, h, dx, dy);
+
+	copyXPMArea(sx, sy + h + 1, w - tx, h, dx + tx, dy);
+
+}
+
+
+void DrawLite(int state, int dx, int dy)
+{
+
+	switch(state) {
+		case B_RED:
+			copyXPMArea(BREDX, BREDY, LITEW, LITEH, dx, dy);
+			break;
+		case B_GREEN:
+			copyXPMArea(BGREENX, BGREENY, LITEW, LITEH, dx, dy);
+			break;
+		default:
+		case B_OFF:
+			copyXPMArea(BOFFX, BOFFY, LITEW, LITEH, dx, dy);
+			break;
+	}
+
+}
+
+
+void DrawUptime(void)
+{
+	static int	first = 1;
+	static int	old_days = 0, old_hours = 0, old_minutes = 0;
+	static long	uptime;
+    	static int	i;
+
+    
+	uptime = curtime - start_uptime + start_time;
+
+	/* blit minutes */
+	uptime /=60;
+	i = uptime % 60;
+
+	if(old_minutes != i || first) {
+		old_minutes = i;
+		sprintf(buf, "%02i", i);
+#ifdef HI_INTS
+		BlitString(buf, 45, 29);
+#else
+		BlitString(buf, 45, 37);
+#endif
+	}
+    
+	/* blit hours */
+	uptime /=60;
+	i = uptime % 24;
+
+	if(old_hours != i || first) {
+		old_hours = i;
+		sprintf(buf, "%02i", i);
+#ifdef HI_INTS
+		BlitString(buf, 29, 29);
+#else
+		BlitString(buf, 29, 37);
+#endif
+	}
+
+    
+	/* blit days */
+	uptime /= 24;
+	i = uptime;
+	if(old_days != i || first) {
+		old_days = i;
+		sprintf(buf, "%03i", i);
+#ifdef HI_INTS
+		BlitString(buf, 6, 29);
+#else
+		BlitString(buf, 6, 37);
+#endif
+	}
+
+	first = 0;
+}
+
+
+void DrawStuff( void )
+{
+	static int	io_last = 0, first = 1;
+#ifdef HI_INTS
+	static int	int_lites[24] =
+	{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+		/* to keep track of on/off status */
+#else
+    	static int	int_lites[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+#endif
+	static int	pagein_lite = 0, pageout_lite = 0, swapin_lite = 0, swapout_lite = 0;
+    	static char	*tok;
+	static char	seps[] = {" "};
+	static int	i, ents;
+
+	static long	io;
+	static long	iodiff;
+	static int	iopercent;
+
+	static long	pageins;
+	static long	pageouts;
+	static long	swapins;
+	static long	swapouts;
+	static long	intdiff;
+	static long	stage;
+	static long	*tints;
+
+	stage = io = iodiff = iopercent = pageins = pageouts = swapins = swapouts = 0;
+
+	statfp = freopen("/proc/stat", "r", statfp);
+
+
+	for(i = 0, ents = 0; ents < 5 && fgets(buf, 1024, statfp); i++) {
+		if(i == rio_l) {
+			tok = strtok(buf, seps);
+
+			io += atoi(tok);
+			tok = strtok(NULL, seps);
+
+			io += atoi(tok);
+			tok = strtok(NULL, seps);
+
+			io += atoi(tok);
+			tok = strtok(NULL, seps);
+
+			io += atoi(tok);
+			tok = strtok(NULL, seps);
+			ents++;
+		} else if(i == wio_l) {
+			tok = strtok(buf, seps);
+
+			io += atoi(tok);
+			tok = strtok(NULL, seps);
+
+			io += atoi(tok);
+			tok = strtok(NULL, seps);
+
+			io += atoi(tok);
+			tok = strtok(NULL, seps);
+
+			io += atoi(tok);
+			tok = strtok(NULL, seps);
+			ents++;
+		} else if(i == page_l) {
+			sscanf(buf, "%*s %ld %ld", &pageins, &pageouts);
+			ents++;
+		} else if(i == swap_l) {
+			sscanf(buf, "%*s %ld %ld",
+				&swapins, &swapouts);
+			ents++;
+		} else if(i == intr_l) {
+			sscanf(	buf,
+	#ifdef HI_INTS
+				"%*s %*d %ld %ld %ld %ld %ld"
+				"%ld %ld %ld %ld %ld %ld %ld"
+				"%ld %ld %ld %ld %ld %ld %ld"
+				"%ld %ld %ld %ld %ld",
+				&ints[0], &ints[1], &ints[2],
+				&ints[3], &ints[4], &ints[5],
+				&ints[6], &ints[7], &ints[8],
+				&ints[9], &ints[10], &ints[11],
+				&ints[12], &ints[13], &ints[14],
+				&ints[15], &ints[16], &ints[17],
+				&ints[18], &ints[19], &ints[20],
+				&ints[21], &ints[22], &ints[23]);
+	#else
+				"%*s %*d %ld %ld %ld %ld %ld"
+				"%ld %ld %ld %ld %ld %ld %ld"
+				"%ld %ld %ld %ld",
+				&ints[0], &ints[1], &ints[2],
+				&ints[3], &ints[4], &ints[5],
+				&ints[6], &ints[7], &ints[8],
+				&ints[9], &ints[10], &ints[11],
+				&ints[12], &ints[13], &ints[14],
+				&ints[15]);
+	#endif
+			ents++;
+		}
+	}
+
+
+	/* ------------------ IO bar ------------------ */
+	if(io_max == 0) io_max = io;
+    
+	if(io > io_max) iodiff = abs(io_max - io);
+	else iodiff = 0;
+
+	io_max = io;
+
+    
+	if(io_max_diff !=0) iopercent = ((float) iodiff / (float) io_max_diff) * 100.0;
+	else iopercent = 0;
+
+	if(iodiff > io_max_diff) io_max_diff = iodiff;
+
+	if (iopercent > 100) iopercent = 100;
+    
+
+	if(iopercent != io_last || first) {
+		io_last = iopercent;
+#ifdef HI_INTS
+		DrawBar(67, 36, 58, 4, iopercent, 3, 20);
+#else
+		DrawBar(67, 36, 58, 6, iopercent, 3, 26);
+#endif
+	}
+
+
+	if(int_mode == INT_LITES) {
+		/* top 8 ints */
+		for (i = 0; i < 8; i++) {
+			if ( ints[i] > last_ints[i] && !int_lites[i]) {
+				int_lites[i] = 1;
+#ifdef HI_INTS
+				DrawLite(B_GREEN, 4 + (i * LITEW) + i, 43);
+#else
+				DrawLite(B_GREEN, 4 + (i * LITEW) + i, 51);
+#endif
+			} else if(ints[i] == last_ints[i] && int_lites[i]) {
+				int_lites[i] = 0;
+#ifdef HI_INTS
+				DrawLite(B_OFF, 4 + (i * LITEW) + i, 43);
+#else
+				DrawLite(B_OFF, 4 + (i * LITEW) + i, 51);
+#endif
+			}
+		}
+		/* middle/bottom 8 */
+		for (i = 8; i < 16; i++) {
+			if ( ints[i] > last_ints[i] && !int_lites[i]) {
+				int_lites[i] = 1;
+#ifdef HI_INTS
+				DrawLite(B_GREEN, 4 + ((i - 8) *LITEW) + (i - 8), 48);
+#else
+				DrawLite(B_GREEN, 4 + ((i - 8) *LITEW) + (i - 8), 56);
+#endif
+			} else if(ints[i] == last_ints[i] && int_lites[i]) {
+				int_lites[i] = 0;
+#ifdef HI_INTS
+				DrawLite(B_OFF, 4 + ((i - 8) * LITEW) + (i - 8), 48);
+#else
+				DrawLite(B_OFF, 4 + ((i - 8) * LITEW) + (i - 8), 56);
+#endif
+			}
+		}
+
+#ifdef HI_INTS
+		/* bottom 8 on alpha/smp x86 */
+		for (i = 16; i < 24; i++) {
+			if (ints[i] > last_ints[i] && !int_lites[i] ) {
+				int_lites[i] = 1;
+				DrawLite(B_GREEN, 4 + ((i - 16) * LITEW) + (i - 16), 53);
+			} else if(ints[i] == last_ints[i] && int_lites[i]) {
+				int_lites[i] = 0;
+				DrawLite(B_OFF, 4 + ((i -16) * LITEW) + (i - 16), 53);
+			}
+		}
+#endif
+	} else if(int_mode == INT_METERS) {
+		for (i = 0; i < 8; i++) {
+			if(last_ints[i]) {
+				intdiff = ints[i] - last_ints[i];
+				int_peaks[i] = (int_peaks[i] + intdiff) >> 1;
+#ifdef HI_INTS
+				DrawMeter(intdiff,
+					  int_peaks[i],
+					  VBAR_H + (i * VBAR_W) + i,
+					  43);
+#else
+				DrawMeter(intdiff,
+					  int_peaks[i],
+					  VBAR_H + (i * VBAR_W) + i,
+					  51);
+#endif
+			}
+		}
+
+		for (i = 8; i < 16; i++) {
+			if(last_ints[i]) {
+				intdiff = ints[i] - last_ints[i];
+				int_peaks[i] = (int_peaks[i] + intdiff) >> 1;
+#ifdef HI_INTS
+				DrawMeter(intdiff,
+					  int_peaks[i],
+					  VBAR_H + ((i - 8) * VBAR_W) + (i - 8),
+					  48);
+#else
+				DrawMeter(intdiff,
+					  int_peaks[i],
+					  VBAR_H + ((i - 8) * VBAR_W) + (i - 8),
+					  56);
+#endif
+			}
+		}
+
+#ifdef HI_INTS
+		for (i = 16; i < 24; i++) {
+			if(last_ints[i]) {
+				intdiff = ints[i] - last_ints[i];
+				int_peaks[i] = (int_peaks[i] + intdiff) >> 1;
+
+				DrawMeter(intdiff,
+					  int_peaks[i],
+					  VBAR_H + ((i - 16) * VBAR_W) + (i - 16),
+					  53);
+			}
+		}
+#endif
+	}
+
+	tints = last_ints;
+	last_ints = ints;
+	ints = tints;
+
+	/* page in / out */
+
+	if (pageins > last_pageins && !pagein_lite) {
+		pagein_lite = 1;
+#ifdef HI_INTS
+		DrawLite(B_RED, 51, 43);
+#else
+		DrawLite(B_RED, 51, 51);
+#endif
+	} else if(pagein_lite) {
+		pagein_lite = 0;
+#ifdef HI_INTS
+		DrawLite(B_OFF, 51, 43);
+#else
+		DrawLite(B_OFF, 51, 51);
+#endif
+	}
+
+	if (pageouts > last_pageouts && !pageout_lite) {
+		pageout_lite = 1;
+#ifdef HI_INTS
+		DrawLite(B_RED, 56, 43);
+#else
+		DrawLite(B_RED, 56, 51);
+#endif
+	} else if(pageout_lite) {
+		pageout_lite = 0;
+#ifdef HI_INTS
+		DrawLite(B_OFF, 56, 43);
+#else
+		DrawLite(B_OFF, 56, 51);
+#endif
+	}
+
+	last_pageins = pageins;
+	last_pageouts = pageouts;
+
+	/* swap in/out */
+
+	if(swapins > last_swapins && !swapin_lite) {
+		swapin_lite = 1;
+#ifdef HI_INTS
+		DrawLite(B_RED, 51, 48);
+#else
+		DrawLite(B_RED, 51, 56);
+#endif
+	} else if(swapin_lite) {
+		swapin_lite = 0;
+#ifdef HI_INTS
+		DrawLite(B_OFF, 51, 48);
+#else
+		DrawLite(B_OFF, 51, 56);
+#endif
+	}
+
+	if (swapouts > last_swapouts && !swapout_lite) {
+		swapout_lite = 1;
+#ifdef HI_INTS
+		DrawLite(B_RED, 56, 48);
+#else
+		DrawLite(B_RED, 56, 56);
+#endif
+	} else if(swapout_lite) {
+		swapout_lite = 0;
+#ifdef HI_INTS
+		DrawLite(B_OFF, 56, 48);
+#else
+		DrawLite(B_OFF, 56, 56);
+#endif
+	}
+
+	last_swapins = swapins;
+	last_swapouts = swapouts;
+
+	first = 0;
+
+}
+
+
+void DrawMem(void)
+{
+	static int	last_mem = 0, last_swap = 0, first = 1;
+	static long 	mem_total = 0;
+	static long 	mem_used = 0;
+	static long 	mem_buffers = 0;
+	static long 	mem_cache = 0;
+	static long 	swap_total = 0;
+	static long 	swap_used = 0;
+	static long 	swap_free = 0;
+
+	static int 	mempercent = 0;
+	static int 	swappercent = 0;
+	static int	i, ents;
+
+
+	counter--;
+
+	if(counter >= 0) return; /* polling /proc/meminfo is EXPENSIVE */
+	counter = 3000000 / update_rate;
+
+	memfp = freopen("/proc/meminfo", "r", memfp);
+
+	for(i = 0, ents = 0; ents < 2 && fgets(buf, 1024, memfp); i++) {
+		if(i == Mem_l) {
+			sscanf(buf, "%*s %ld %ld %*d %*d %ld %ld",
+				&mem_total,
+				&mem_used,
+				&mem_buffers,
+				&mem_cache);
+			ents++;
+		} else if(i == Swap_l) {
+			sscanf(buf, "%*s %ld %ld %ld",
+				&swap_total,
+				&swap_used,
+				&swap_free);
+			ents++;
+		}
+	}
+
+	/* could speed this up but we'd lose precision, look more into it to see
+	 * if precision change would be noticable, and if speed diff is significant
+	 */
+	mempercent = ((float)(mem_used - mem_buffers - mem_cache)
+		     /
+		     (float)mem_total) * 100;
+
+	swappercent = ((float)(swap_used)
+		      /
+		      (float)swap_total) * 100;
+
+	if(mempercent != last_mem || first) {
+		last_mem = mempercent;
+#ifdef HI_INTS
+		DrawBar(67, 36, 58,4 , mempercent, 3, 4);
+#else
+		DrawBar(67, 36, 58, 6, mempercent, 3, 4);
+#endif
+	}
+	    
+	if(swappercent != last_swap || first) {
+		last_swap = swappercent;
+#ifdef HI_INTS
+		DrawBar(67, 36, 58, 4, swappercent, 3, 12);
+#else
+		DrawBar(67, 36, 58, 6, swappercent, 3, 15);
+#endif
+	}
+
+	first = 0;
+
+}
+
+
+/* Blits a string at given co-ordinates */
+void BlitString(char *name, int x, int y)
+{
+	static int	i, c, k;
+
+	k = x;
+	for (i=0; name[i]; i++) {
+
+		c = toupper(name[i]); 
+		if (c >= 'A' && c <= 'Z') {
+			c -= 'A';
+			copyXPMArea(c * 6, 74, 6, 8, k, y);
+			k += 6;
+		} else {
+			c -= '0';
+			copyXPMArea(c * 6, 64, 6, 8, k, y);
+			k += 6;
+		}
+	}
+
+}
+
+
+void BlitNum(int num, int x, int y)
+{
+	static int	newx;
+
+
+	newx = x;
+
+	sprintf(buf, "%03i", num);
+
+	BlitString(buf, newx, y);
+
+}
+    
+
+void usage(void)
+{
+	fprintf(stderr, "\nwmsysmon - http://www.gnugeneration.com\n");
+	fprintf(stderr, "\n-------------------\n"
+			"|[---------------]|  <--- Memory Use %%\n"
+			"|[---------------]|  <--- Swap Use %%\n"
+			"|[---------------]|  <--- I/O %%\n"
+			"|                 |\n"
+			"|   000:00:00     |  <--- Uptime days:hours:minutes\n"
+			"|                 |\n"
+#ifdef HI_INTS
+			"| 01234567   UV   |  <--- 0-N are hardware interrupts 0-23\n"
+			"| 89ABCDEF   WX   |  <--- U,V are Page IN/OUT, W,X are Swap IN/OUT\n"
+			"| GHIJKLMN   YZ   |\n"
+#else
+			"| 01234567   WX   |  <--- 0-F are hardware interrupts 0-15\n"
+			"| 89ABCDEF   YZ   |  <--- W,X are Page IN/OUT, W,X are Swap IN/OUT\n"
+#endif
+			"-------------------\n");
+
+	fprintf(stderr, "usage:\n");
+	fprintf(stderr, "\t-display <display name>\n");
+	fprintf(stderr, "\t-geometry +XPOS+YPOS\tinitial window position\n");
+	fprintf(stderr, "\t-r\t\t\tupdate rate in milliseconds (default:300)\n");
+	fprintf(stderr, "\t-l\t\t\tblinky lights for interrupts vs. meters(default)\n");
+	fprintf(stderr, "\t-h\t\t\tthis help screen\n");
+	fprintf(stderr, "\t-v\t\t\tprint the version number\n");
+	fprintf(stderr, "\n");
+}
+
+
+void printversion(void)
+{
+	fprintf(stderr, "wmsysmon v%s\n", WMSYSMON_VERSION);
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-wmaker/wmsysmon.git



More information about the Pkg-wmaker-commits mailing list