[Pkg-wmaker-commits] [wmbutton] 01/09: Import Upstream version 0.4

Doug Torrance dtorrance-guest at moszumanska.debian.org
Sun Jul 16 03:13:30 UTC 2017


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

dtorrance-guest pushed a commit to branch master
in repository wmbutton.

commit 17a22a00a2d5e80dacc6fc5c686e349a659df547
Author: Doug Torrance <dtorrance at piedmont.edu>
Date:   Sat Jul 15 23:11:56 2017 -0400

    Import Upstream version 0.4
---
 .wmbutton             |  47 ++++
 COPYING               | 339 ++++++++++++++++++++++++
 Makefile              |  16 ++
 README                | 170 ++++++++++++
 backdrop.xpm          | 126 +++++++++
 buttons.xpm           | 715 ++++++++++++++++++++++++++++++++++++++++++++++++++
 icons/audio.xpm       |  32 +++
 icons/blankbutton.xpm |  25 ++
 icons/edit.xpm        |  29 ++
 icons/ftp.xpm         | 111 ++++++++
 icons/graph.xpm       |  32 +++
 icons/gv.xpm          |  84 ++++++
 icons/netscape.xpm    | 135 ++++++++++
 icons/paint.xpm       | 232 ++++++++++++++++
 icons/wp.xpm          |  27 ++
 icons/xterm.xpm       | 202 ++++++++++++++
 mask.xbm              |  68 +++++
 readln.c              |  59 +++++
 wmbutton.c            | 593 +++++++++++++++++++++++++++++++++++++++++
 19 files changed, 3042 insertions(+)

diff --git a/.wmbutton b/.wmbutton
new file mode 100644
index 0000000..6da6a5e
--- /dev/null
+++ b/.wmbutton
@@ -0,0 +1,47 @@
+# .wmbutton - Configuration file for wmbutton
+# Last Modified 3/7/99
+
+# Buttons are numbered as follows 
+# 	Left	1 2 3	Middle	11 12 13	Right	21 22 23
+# 	button	4 5 6	button	14 15 16	button	24 25 26
+#		7 8 9		17 18 19		27 28 29
+#
+
+1	netscape &
+11	netscape &
+21	netscape &
+
+2	nxterm -geometry 80x35 -sb -T 'nxterm' -fg white -bg grey30 &
+12	aterm -tr -geometry 80x35 -sb -T 'Aterm' -fg white -bg black &
+22	rxvt -geometry 80x35 -T 'Rxvt' &
+
+3	wxftp &
+13	nxterm -fg black -bg grey70 -T 'FTP' -e ftp &
+23
+
+4	xwp &
+14	nxterm -fg black -bg grey80 -T 'Pine' -e pine &
+24	nxterm -fg black -bg grey80 -T 'Pine' -e pine &
+
+5	nxterm -geometry 120x20 -fg white -bg grey20 -T 'Gnuplot' -e gnuplot &
+15	nxterm -geometry 120x20 -fg white -bg grey20 -T 'Gnuplot' -e gnuplot &
+25	xspread -fg white -bg midnightblue &
+
+6	xemacs &
+16	nxterm -fg black -bg grey50 -T 'Pico Editor' -e pico -w &
+26	nxterm -geometry 120x35 -fg black -bg grey70 -T 'WMButton Config Editor' -e pico -w ~/.wmbutton &
+
+7	gimp &
+17	xpaint &
+27	xv &
+
+8	gv &
+18	xdvi &
+28	xpdf &
+
+9	x11amp -b 128 &
+19	xmixer &
+29	xplaycd &
+
+# The above don't need to be in any particular order.
+# Repeated entries should be ignored
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/Makefile b/Makefile
new file mode 100644
index 0000000..288c412
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,16 @@
+INCLUDES =-I/usr/X11R6/include/X11 -I/usr/local/include -I/usr/include/X11R6/X11
+LIBINC =-L/usr/X11R6/lib -L/usr/include/lib
+LIBS = -lX11 -lXpm -lXext
+
+TARGET = wmbutton
+OBJECTS = wmbutton.o readln.o
+
+.c.o:
+	gcc -O2 -c -Wall ${INCLUDES} ${FLAGS} $< -o $*.o
+
+${TARGET}: ${OBJECTS}
+	gcc -O2 -o ${TARGET} ${OBJECTS} ${LIBINC} ${LIBS}
+
+clean::
+	for i in ${OBJECTS}; do if [ -e $$i ] ; then rm $$i; fi; done 
+	if [ -e ${TARGET} ] ; then rm ${TARGET}; fi
diff --git a/README b/README
new file mode 100644
index 0000000..2d94aee
--- /dev/null
+++ b/README
@@ -0,0 +1,170 @@
+wmbutton Ver. 0 Rel 4
+-------------------------------------------------------------
+   Code is based on wmppp, wmload, wmtime, wmcp, and asbutton
+   Author: Edward H. Flora <ehflora at ksu.edu>
+   Ver 0 Rel 4    March 8, 1999
+
+DESCRIPTION:
+------------
+wmbutton is a simple application launching program that sits in the
+dock in WindowMaker, can be swallowed by Wharf in Afterstep, and
+should be fairly configurable.
+
+LICENSING:
+----------
+This program is released under the GPL license.  A copy (in case you
+don't already have hundreds of then floating around) can be found in
+this distribution in the file COPYING
+
+CONTRIBUTORS:
+-------------
+              Ben Cohen <buddog at aztec.asu.edu>
+                  original author of wmcp (et al.)
+              Thomas Nemeth <tnemeth at multimania.com>
+                  contributor to wmcp
+              Casey Harkins <charkins at cs.wisc.edu> 
+                  Bug fix reading config file path - 3/6/99
+                  Added button-presses, and other - denoted by *charkins*
+              Michael Henderson <mghenderson at lanl.gov>
+                  Application ideas, suggestions
+              Ryan ?? <pancake at mindspring.com> 
+                  Modified wmbutton to asbutton.
+                  Note: asbutton is a seperate program, not associated 
+                        with wmbutton (just as wmbutton is not associated
+                        with wmcp)
+              Jon Bruno
+                  Web Page Development
+ The contributors listed above are not necessarily involved with the 
+development of wmbutton.  I'm listing them here partially as thanks for 
+helping out, catching bugs in the code, etc.
+
+INSTALLATION:
+-------------
+	Untar the file: 
+		tar xvzf wmbutton-0.4.tar.gz
+
+	CD to source directory:  
+		cd wmbutton-0.4
+
+	Edit background xpm, and buttons.xpm to your preferences
+	There are icon files in ./icons to work from
+
+	Compile it:
+	 	make clean; make
+
+	Copy the config file:
+		cp .wmbutton ~
+
+	Put the executable somewhere in your path:
+		mv wmbutton /usr/local/bin (or anyhere in your path)
+	
+	Run it:
+		wmbutton &
+
+	Grab the appicon and move it to the dock. 
+	Change the settings to start with Windowmaker
+
+	Afterstep Wharf 1.6.??:
+	*Wharf wmbutton -Swallow "wmbutton" wmbutton &
+
+    ***Note***: 
+	The appicon has only a two pixel border where you can grab 
+	and move it.
+
+	If make doesn't work, you may need to fiddle with the settings in 
+	the Makefile.
+
+	Tested on: (Well, it runs, I don't know if 'Tested' is quite right...)
+		WindowMaker-0.50.2, 0.51
+		Afterstep 1.6.?
+		X Clients: Red Hat 5.1, Kernel 2.0.36, 2.0.35
+		X Servers: XFree86 S3V 3.3.3.1
+
+USAGE:
+------
+usage: wmbutton [-g geometry] [-d dpy] [-v] [-f config file] [-h]
+
+-g  <geometry>   Window Geometry - ie: 64x64+10+10
+-d  <display>    Display -  ie: 127.0.0.1:0.0
+-f  <filename>   Full path to configuration file.
+-v               Verbose Mode. 
+-h               Help. This message.
+-m               Enable Middle Mouse functionality.
+
+Left mouse button:
+	Selects the application to launch, numbered 1 through 9
+
+Middle mouse button: (If enabled (-m))
+	Selects the application to launch, numbered 11 through 19
+
+Right mouse button:
+	Selects the application to launch, numbered 21 through 29
+
+NOTES:
+------
+This is a simple application launching tool for use in WindowMaker, and 
+possibly Afterstep.  (Who knows, it should run for other window managers too, 
+by why bother??  It is taken from wmcp, by Ben Cohen, and modified just
+enough to run applications rather than send ALT-[1..9] key sequences to 
+WindowMaker.  It has also taken some ideas from asbuttons, and
+included them back into the original.  There may still be some code
+left over from wmcp that is no longer needed, but...  This was written 
+in a couple of hours, as my first Dock App.  
+
+The mini-icons must be combined into a single graphic, buttons.xpm.  The 
+background border is defined in backdrop.xpm.  Both must be edited in your
+favorite graphics editor (GIMP??), and then recompiled.  wmbuttons uses a
+configuration file (usually ~/.wmbutton) for which applications to launch.
+There is no need to restart wmbuttons when simply changing the configuration, 
+as wmbutton searches the file whenever a button is pressed.
+
+An example file is included, related to the the buttons.xpm graphic file.
+
+"C code.  C code run.  Run, code, run.
+			PLEASE!?!?!?!?!?!?"
+
+CHANGE LOG:
+-----------
+0.4	Added Modifications submitted by Casey Harkins. 
+	  Start application on mouse button release, 
+	  Only start app if cursor is still on application button
+	  Added 3-D button press look
+	Added new .wmbutton configuration file
+
+0.3	Graphics changed to incorporate most changes made by asbutton
+	Removed Middle/Right mouse click on button to turn off buttons
+	  after it.
+	Added Middle and Right mouse buttons to run more Applications
+	  (Yes, you can now really run 27 different Apps from a single 
+	  instance of wmbuttons, if you would want too...)
+	Fixed bug for finding config file .wmbutton.
+	  It used to not look in the home directory, but in the
+	  startup directory.  Thanks to Casey harkins for the fix.
+	Included the icons directory from the asbutton distribution,
+	  plus a few more.
+
+0.2	Added single configuration file, user selectable.
+
+0.1	Origional version.
+	  Shamelessly taken from wmcp 1.2.5, 
+	  by Ben Cohen <buddog at aztec.asu.edu>
+
+TODO:
+-----
+Make changing icons and/or background graphics easier.
+Allow for less than 9 icons, 4 would be nicer on the mini-icon size.
+
+BUGS: 
+-----
+Remember, they're just undocumented FEATURES!!!
+
+Probably Lots.  Send comments (preferably with fixes) to
+<ehflora at ksu.edu>
+
+Note:  	I am a graduate student trying to finish a thesis this spring,
+	so I am not likely to do a lot of work on this for a while.
+
+Good Luck.
+
+
+
diff --git a/backdrop.xpm b/backdrop.xpm
new file mode 100644
index 0000000..9d1a3de
--- /dev/null
+++ b/backdrop.xpm
@@ -0,0 +1,126 @@
+/* XPM */
+static char * backdrop_xpm[] = {
+"64 64 59 1",
+" 	c None",
+".	c #F3F3F3",
+"+	c #000000",
+"@	c #E0E0E0",
+"#	c #516161",
+"$	c #A2A2B2",
+"%	c #A2A2A2",
+"&	c #A292B2",
+"*	c #92A2A2",
+"=	c #A292A2",
+"-	c #9292A2",
+";	c #929292",
+">	c #9282A2",
+",	c #829292",
+"'	c #928292",
+")	c #828292",
+"!	c #828282",
+"~	c #827192",
+"{	c #615161",
+"]	c #92A2B2",
+"^	c #9292B2",
+"/	c #8292A2",
+"(	c #8282A2",
+"_	c #718292",
+":	c #718282",
+"<	c #282828",
+"[	c #515161",
+"}	c #858595",
+"|	c #C7C3C7",
+"1	c #515151",
+"2	c #827182",
+"3	c #415151",
+"4	c #514151",
+"5	c #717192",
+"6	c #717182",
+"7	c #717171",
+"8	c #414151",
+"9	c #617182",
+"0	c #415141",
+"a	c #716182",
+"b	c #414141",
+"c	c #617171",
+"d	c #413041",
+"e	c #304141",
+"f	c #716171",
+"g	c #616171",
+"h	c #616182",
+"i	c #303030",
+"j	c #616161",
+"k	c #303041",
+"l	c #516171",
+"m	c #304130",
+"n	c #615171",
+"o	c #203030",
+"p	c #302030",
+"q	c #515171",
+"r	c #202030",
+"s	c #202020",
+"t	c #413051",
+"...............................................................+",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+",
+".@$%$%&%&%&%&*=-&*=-=-=---=--;>;>;>;>,>,>,')',')')'))!)))!~!~!{+",
+".@$$*$]$*$*$*&*&*^*-*-*-*-*-/---,-,-,>,>,(,>,(,),),)))))_)_):)#+",
+".@$%<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~![+",
+".@]$<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|:~1+",
+".@&%<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|~:[+",
+".@*$<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|:~1+",
+".@&%<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|2:[+",
+".@*&<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|:~3+",
+".@=%<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|~:4+",
+".@*$<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|:53+",
+".@&*<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|264+",
+".@*&<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|:63+",
+".@=-<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|264+",
+".@*=<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|:63+",
+".@=*<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|264+",
+".@*^<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|:63+",
+".@=-<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|664+",
+".@*-<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|663+",
+".@=-<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|674+",
+". at --<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|668+",
+".@=-<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|674+",
+".@*-<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|960+",
+". at -;<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|a78+",
+". at --<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|96b+",
+".@>;<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|acd+",
+". at --<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|cab+",
+". at -;<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|a7b+",
+".@,-<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|cae+",
+".@>;<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|acd+",
+".@,-<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|cae+",
+".@>,<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|fcd+",
+".@,><}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|cae+",
+".@',<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|agd+",
+".@,><}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|che+",
+".@>,<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|fgd+",
+".@,><}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|cge+",
+".@')<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|ggd+",
+".@,'<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|cge+",
+".@',<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|fgd+",
+".@,(<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|ggi+",
+".@')<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|gjk+",
+".@,)<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|lgm+",
+".@'!<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|njk+",
+".@))<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|ggo+",
+".@))<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|njp+",
+".@))<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|#go+",
+".@)!<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|nji+",
+".@))<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|lgo+",
+".@~!<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|n#p+",
+". at _)<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|#no+",
+".@)!<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|njp+",
+".@:~<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|#no+",
+".@~!<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|n#p+",
+".@:)<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|#qo+",
+".@~:<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|{[p+",
+".@:~<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|#no+",
+".@~:<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|{[p+",
+".@:~||||||||||||||||||||||||||||||||||||||||||||||||||||||||#qo+",
+".@~:262626262667a767a7aca7acfcfcfgfgfggjgggjnjnjnjn#n#n#{[{[{[r+",
+".@:5:~:5:666666666c696cacacacachcgggcggggglglg#nln#n#n#q#q[q#[s+",
+".@{1[1[1[141434340484b4b8btb8bdbdededmdikikikipipipipoprpspsrsr+",
+".+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"};
diff --git a/buttons.xpm b/buttons.xpm
new file mode 100644
index 0000000..8992ecd
--- /dev/null
+++ b/buttons.xpm
@@ -0,0 +1,715 @@
+/* XPM */
+static char * buttons_xpm[] = {
+"54 54 658 2",
+"  	c None",
+". 	c #FFFFFF",
+"+ 	c #000000",
+"@ 	c #AEAAAE",
+"# 	c #000A0D",
+"$ 	c #000F11",
+"% 	c #001111",
+"& 	c #001113",
+"* 	c #001114",
+"= 	c #001112",
+"- 	c #000E10",
+"; 	c #00080A",
+"> 	c #D5D6D5",
+", 	c #6F706F",
+"' 	c #686868",
+") 	c #001718",
+"! 	c #00171B",
+"~ 	c #00191D",
+"{ 	c #001A1F",
+"] 	c #001C1F",
+"^ 	c #001C21",
+"/ 	c #001C20",
+"( 	c #00191C",
+"_ 	c #EFEEEE",
+": 	c #F6F6F4",
+"< 	c #F6F7F3",
+"[ 	c #F3F4EE",
+"} 	c #E8E9E1",
+"| 	c #D6D7CF",
+"1 	c #C5C5BE",
+"2 	c #B3B2A9",
+"3 	c #9F9F94",
+"4 	c #868685",
+"5 	c #6E706A",
+"6 	c #949685",
+"7 	c #514E5A",
+"8 	c #1A1729",
+"9 	c #201A30",
+"0 	c #23203B",
+"a 	c #232039",
+"b 	c #211E37",
+"c 	c #616161",
+"d 	c #6E6E6E",
+"e 	c #001D20",
+"f 	c #001F23",
+"g 	c #173337",
+"h 	c #F0F2F3",
+"i 	c #001F26",
+"j 	c #002129",
+"k 	c #24434A",
+"l 	c #001F24",
+"m 	c #001F22",
+"n 	c #00181D",
+"o 	c #B4B3B6",
+"p 	c #898297",
+"q 	c #554A75",
+"r 	c #40365E",
+"s 	c #241A4B",
+"t 	c #170B46",
+"u 	c #12093E",
+"v 	c #0E0737",
+"w 	c #0A0530",
+"x 	c #060429",
+"y 	c #030325",
+"z 	c #00031F",
+"A 	c #A1A2A0",
+"B 	c #575747",
+"C 	c #5B566C",
+"D 	c #353056",
+"E 	c #423968",
+"F 	c #48416C",
+"G 	c #484066",
+"H 	c #413969",
+"I 	c #002128",
+"J 	c #00242B",
+"K 	c #00252C",
+"L 	c #1D4349",
+"M 	c #849A9F",
+"N 	c #002A32",
+"O 	c #002C34",
+"P 	c #002830",
+"Q 	c #385A61",
+"R 	c #00272E",
+"S 	c #00242A",
+"T 	c #001E25",
+"U 	c #B2B2B3",
+"V 	c #4D436A",
+"W 	c #160350",
+"X 	c #13034B",
+"Y 	c #110346",
+"Z 	c #0F0340",
+"` 	c #0C033A",
+" .	c #0A0335",
+"..	c #07032F",
+"+.	c #05032A",
+"@.	c #A3A4A3",
+"#.	c #5C5C4D",
+"$.	c #615C75",
+"%.	c #423A61",
+"&.	c #4F4D70",
+"*.	c #594E85",
+"=.	c #493F66",
+"-.	c #002B33",
+";.	c #002D35",
+">.	c #003038",
+",.	c #003139",
+"'.	c #678186",
+").	c #00343C",
+"!.	c #002F37",
+"~.	c #00272F",
+"{.	c #B1B0B1",
+"].	c #4E436A",
+"^.	c #070330",
+"/.	c #A4A5A3",
+"(.	c #61614F",
+"_.	c #3B3B2E",
+":.	c #635C75",
+"<.	c #3D3660",
+"[.	c #494169",
+"}.	c #4B4669",
+"|.	c #4F4A6A",
+"1.	c #8D8F8D",
+"2.	c #878787",
+"3.	c #00363E",
+"4.	c #00373F",
+"5.	c #003941",
+"6.	c #36666F",
+"7.	c #577D83",
+"8.	c #003C44",
+"9.	c #003841",
+"0.	c #AEAEAF",
+"a.	c #4D4269",
+"b.	c #261459",
+"c.	c #281C4E",
+"d.	c #2A1E4E",
+"e.	c #150945",
+"f.	c #0C033B",
+"g.	c #0A0336",
+"h.	c #A7A7A5",
+"i.	c #6A6B59",
+"j.	c #454632",
+"k.	c #5D5871",
+"l.	c #333158",
+"m.	c #3D3460",
+"n.	c #423E65",
+"o.	c #515171",
+"p.	c #9D9E9D",
+"q.	c #626262",
+"r.	c #8A8A8A",
+"s.	c #003E47",
+"t.	c #004049",
+"u.	c #00414C",
+"v.	c #00444D",
+"w.	c #4D7B83",
+"x.	c #4D7A82",
+"y.	c #00444F",
+"z.	c #00424B",
+"A.	c #00414B",
+"B.	c #003F49",
+"C.	c #003840",
+"D.	c #ADACAE",
+"E.	c #52476D",
+"F.	c #38314A",
+"G.	c #0A0809",
+"H.	c #181618",
+"I.	c #362F50",
+"J.	c #0F053D",
+"K.	c #000320",
+"L.	c #ABACAB",
+"M.	c #757764",
+"N.	c #565842",
+"O.	c #28233D",
+"P.	c #2E2749",
+"Q.	c #373051",
+"R.	c #393561",
+"S.	c #393259",
+"T.	c #352C52",
+"U.	c #004951",
+"V.	c #004A54",
+"W.	c #004C57",
+"X.	c #00505A",
+"Y.	c #00515C",
+"Z.	c #578C95",
+"`.	c #3E7982",
+" +	c #004E57",
+".+	c #004C56",
+"++	c #004953",
+"@+	c #004851",
+"#+	c #00414E",
+"$+	c #5A5072",
+"%+	c #5F5A67",
+"&+	c #676149",
+"*+	c #777570",
+"=+	c #25232F",
+"-+	c #170E43",
+";+	c #05032B",
+">+	c #030326",
+",+	c #B0B0AF",
+"'+	c #7E826D",
+")+	c #666751",
+"!+	c #959497",
+"~+	c #ACABAE",
+"{+	c #737473",
+"]+	c #302A4F",
+"^+	c #3F3C64",
+"/+	c #4B4274",
+"(+	c #4F4876",
+"_+	c #3F3C69",
+":+	c #00505B",
+"<+	c #005360",
+"[+	c #005563",
+"}+	c #005964",
+"|+	c #005A69",
+"1+	c #005C69",
+"2+	c #72A5AF",
+"3+	c #2B7480",
+"4+	c #005864",
+"5+	c #005462",
+"6+	c #00525F",
+"7+	c #004F59",
+"8+	c #AAABAB",
+"9+	c #645C7A",
+"0+	c #776349",
+"a+	c #E5C319",
+"b+	c #A78F32",
+"c+	c #27232C",
+"d+	c #1E1448",
+"e+	c #080330",
+"f+	c #010320",
+"g+	c #B2B3B2",
+"h+	c #888A75",
+"i+	c #6D6F59",
+"j+	c #393052",
+"k+	c #494261",
+"l+	c #52497A",
+"m+	c #4F487A",
+"n+	c #4D4669",
+"o+	c #463E69",
+"p+	c #005C6A",
+"q+	c #025D6A",
+"r+	c #025F6F",
+"s+	c #066676",
+"t+	c #1F6875",
+"u+	c #09515B",
+"v+	c #034C56",
+"w+	c #054F59",
+"x+	c #90A4A7",
+"y+	c #026372",
+"z+	c #006170",
+"A+	c #025C6A",
+"B+	c #005967",
+"C+	c #A7A7AA",
+"D+	c #6D677D",
+"E+	c #9A9798",
+"F+	c #DBD0B1",
+"G+	c #ECE9E0",
+"H+	c #353334",
+"I+	c #362F4E",
+"J+	c #0F073A",
+"K+	c #080331",
+"L+	c #BBBCBB",
+"M+	c #8B8E79",
+"N+	c #72735E",
+"O+	c #14D121",
+"P+	c #332C54",
+"Q+	c #3D3A69",
+"R+	c #494266",
+"S+	c #494666",
+"T+	c #494363",
+"U+	c #3F3B66",
+"V+	c #979897",
+"W+	c #0E535E",
+"X+	c #0F4048",
+"Y+	c #182E33",
+"Z+	c #0E1315",
+"`+	c #0F1112",
+" @	c #1A1D1D",
+".@	c #152C30",
+"+@	c #16454B",
+"@@	c #185C68",
+"#@	c #A8A7A8",
+"$@	c #636264",
+"%@	c #D9D8D7",
+"&@	c #FAFAF8",
+"*@	c #8D8D8D",
+"=@	c #18171B",
+"-@	c #514D66",
+";@	c #434058",
+">@	c #403E53",
+",@	c #3D3C4F",
+"'@	c #3A3B4A",
+")@	c #CACBC8",
+"!@	c #8A8D78",
+"~@	c #64665B",
+"{@	c #58576C",
+"]@	c #5C5874",
+"^@	c #5E5576",
+"/@	c #5C597A",
+"(@	c #5E5778",
+"_@	c #5C5570",
+":@	c #646464",
+"<@	c #0F1315",
+"[@	c #9F9EA1",
+"}@	c #7F7E7E",
+"|@	c #F9FAF8",
+"1@	c #FBFBF9",
+"2@	c #DEDFDD",
+"3@	c #131313",
+"4@	c #959695",
+"5@	c #F0EFEA",
+"6@	c #ECECE7",
+"7@	c #E9E9E4",
+"8@	c #E7E7DE",
+"9@	c #DEDED3",
+"0@	c #858773",
+"a@	c #555551",
+"b@	c #6B6C6D",
+"c@	c #A7A293",
+"d@	c #F9F9F8",
+"e@	c #F8F8F6",
+"f@	c #F0EEDF",
+"g@	c #1D1D19",
+"h@	c #5D5C58",
+"i@	c #C9C9BE",
+"j@	c #C7C7BD",
+"k@	c #939388",
+"l@	c #929484",
+"m@	c #9A9A8B",
+"n@	c #595953",
+"o@	c #515161",
+"p@	c #B1B0B4",
+"q@	c #B1AFB4",
+"r@	c #858587",
+"s@	c #6B6A6B",
+"t@	c #757475",
+"u@	c #787678",
+"v@	c #7C7A7C",
+"w@	c #C7C1B4",
+"x@	c #ECC635",
+"y@	c #C4A420",
+"z@	c #AFADA8",
+"A@	c #F9F9F6",
+"B@	c #F9F9F7",
+"C@	c #E6CD79",
+"D@	c #7C5B09",
+"E@	c #AB922F",
+"F@	c #343326",
+"G@	c #1E1E14",
+"H@	c #313125",
+"I@	c #504F4F",
+"J@	c #CDBC6E",
+"K@	c #AE6E22",
+"L@	c #6B6A6C",
+"M@	c #595959",
+"N@	c #DBC475",
+"O@	c #F5CC10",
+"P@	c #F4CA10",
+"Q@	c #C1AC62",
+"R@	c #EEEEEC",
+"S@	c #C2C2C0",
+"T@	c #A07F2F",
+"U@	c #F5C80E",
+"V@	c #F3CB17",
+"W@	c #B0A263",
+"X@	c #626254",
+"Y@	c #595949",
+"Z@	c #9B9B9D",
+"`@	c #6E6C6F",
+" #	c #9A9693",
+".#	c #B9A478",
+"+#	c #CBA133",
+"@#	c #967432",
+"##	c #6F6D6D",
+"$#	c #6F6B6D",
+"%#	c #957642",
+"&#	c #C59D35",
+"*#	c #8D8D86",
+"=#	c #696869",
+"-#	c #090909",
+";#	c #DD0D8A",
+">#	c #0909EF",
+",#	c #A56721",
+"'#	c #AFB505",
+")#	c #F79B31",
+"!#	c #EFF707",
+"~#	c #0D8214",
+"{#	c #050591",
+"]#	c #F4C844",
+"^#	c #E0D6C4",
+"/#	c #E7E1C0",
+"(#	c #D9D499",
+"_#	c #E4D08D",
+":#	c #EABE8D",
+"<#	c #E3B26B",
+"[#	c #E3B982",
+"}#	c #BDA385",
+"|#	c #EDE1C3",
+"1#	c #ECC48A",
+"2#	c #F69854",
+"3#	c #F78E42",
+"4#	c #EB9D54",
+"5#	c #FFC280",
+"6#	c #DA776F",
+"7#	c #EA3166",
+"8#	c #DE2F66",
+"9#	c #D57F6A",
+"0#	c #BBA97D",
+"a#	c #95939B",
+"b#	c #E609EA",
+"c#	c #850589",
+"d#	c #EED392",
+"e#	c #FFCF86",
+"f#	c #FBBB57",
+"g#	c #E92F00",
+"h#	c #EB2F00",
+"i#	c #D85025",
+"j#	c #F3B366",
+"k#	c #E6466F",
+"l#	c #FF0061",
+"m#	c #DD7075",
+"n#	c #D6B275",
+"o#	c #B89A77",
+"p#	c #88888E",
+"q#	c #ECECEC",
+"r#	c #FEFEFE",
+"s#	c #F8F8F8",
+"t#	c #D1D1D1",
+"u#	c #F1DCB7",
+"v#	c #FDCF86",
+"w#	c #FFCF72",
+"x#	c #F8BB57",
+"y#	c #D02F00",
+"z#	c #DF2F00",
+"A#	c #EF4310",
+"B#	c #F6B661",
+"C#	c #E44D6C",
+"D#	c #F00877",
+"E#	c #F80677",
+"F#	c #DD7179",
+"G#	c #CEA764",
+"H#	c #CE9B60",
+"I#	c #FDFDFD",
+"J#	c #9B9B9B",
+"K#	c #F3D269",
+"L#	c #F8D334",
+"M#	c #FFDC45",
+"N#	c #FAC75D",
+"O#	c #DF7D3B",
+"P#	c #E97A2A",
+"Q#	c #E7843C",
+"R#	c #EDBD61",
+"S#	c #E3947A",
+"T#	c #DE6C79",
+"U#	c #DB3686",
+"V#	c #CE7E9D",
+"W#	c #CE8BA6",
+"X#	c #CE8188",
+"Y#	c #996D74",
+"Z#	c #7F7D85",
+"`#	c #D7D7D7",
+" $	c #4F4F4F",
+".$	c #C4C4C4",
+"+$	c #EFEFEF",
+"@$	c #727272",
+"#$	c #898989",
+"$$	c #F6F6F6",
+"%$	c #FFEB19",
+"&$	c #FFFF00",
+"*$	c #FFF709",
+"=$	c #F2D135",
+"-$	c #E5C26F",
+";$	c #D3CE77",
+">$	c #D1B165",
+",$	c #CFB875",
+"'$	c #AF7C77",
+")$	c #B1306F",
+"!$	c #961766",
+"~$	c #9D36B5",
+"{$	c #9F09D6",
+"]$	c #A406CC",
+"^$	c #A55DB4",
+"/$	c #898A8F",
+"($	c #ACACAC",
+"_$	c #B0B0B1",
+":$	c #959595",
+"<$	c #DFDFDF",
+"[$	c #434343",
+"}$	c #2F2F2F",
+"|$	c #BDBEBD",
+"1$	c #FBEF0C",
+"2$	c #FFF70C",
+"3$	c #DFD148",
+"4$	c #DDC063",
+"5$	c #D0C261",
+"6$	c #D5B46A",
+"7$	c #907059",
+"8$	c #421B10",
+"9$	c #7B0947",
+"0$	c #7C0642",
+"a$	c #B43ED9",
+"b$	c #A90BFD",
+"c$	c #B853C8",
+"d$	c #9F7258",
+"e$	c #F4F4F4",
+"f$	c #999999",
+"g$	c #F0F0F0",
+"h$	c #6C6C6D",
+"i$	c #8E8E8E",
+"j$	c #FAD739",
+"k$	c #F3ED24",
+"l$	c #F8E533",
+"m$	c #D8C763",
+"n$	c #EBA76F",
+"o$	c #D1C260",
+"p$	c #C7A65C",
+"q$	c #311F0F",
+"r$	c #0C0000",
+"s$	c #390012",
+"t$	c #5F1B24",
+"u$	c #AA36BA",
+"v$	c #9B0BD5",
+"w$	c #9D0BD9",
+"x$	c #A4569D",
+"y$	c #7E7E7E",
+"z$	c #F3F3F3",
+"A$	c #FCFCFC",
+"B$	c #D9D9D9",
+"C$	c #8C8C8C",
+"D$	c #EAC46F",
+"E$	c #F0CB6C",
+"F$	c #D8B36A",
+"G$	c #D1BD6E",
+"H$	c #D3B375",
+"I$	c #CBB260",
+"J$	c #B28866",
+"K$	c #0C0706",
+"L$	c #020206",
+"M$	c #2B1010",
+"N$	c #5E3D1F",
+"O$	c #CB8B8D",
+"P$	c #B78394",
+"Q$	c #C27794",
+"R$	c #B0747D",
+"S$	c #A8A9AF",
+"T$	c #BCBCBC",
+"U$	c #A6A7A6",
+"V$	c #E5C895",
+"W$	c #DCAF6C",
+"X$	c #D8C065",
+"Y$	c #CEBF61",
+"Z$	c #C5B677",
+"`$	c #ACA385",
+" %	c #9E9899",
+".%	c #434340",
+"+%	c #3F3D1C",
+"@%	c #744232",
+"#%	c #BA7D50",
+"$%	c #9B7687",
+"%%	c #313FDB",
+"&%	c #1E3DF1",
+"*%	c #494FBA",
+"=%	c #9E9BA5",
+"-%	c #D4D4D4",
+";%	c #D3BB6C",
+">%	c #CFB869",
+",%	c #D0BB6C",
+"'%	c #B1A5A1",
+")%	c #8A94A5",
+"!%	c #2D3945",
+"~%	c #444823",
+"{%	c #A17741",
+"]%	c #CF9A61",
+"^%	c #887F9F",
+"/%	c #0B2FFD",
+"(%	c #002FFD",
+"_%	c #324AD8",
+":%	c #9C725C",
+"<%	c #3F4046",
+"[%	c #C6A47F",
+"}%	c #A69F87",
+"|%	c #3A364D",
+"1%	c #525141",
+"2%	c #A67E41",
+"3%	c #C88B53",
+"4%	c #CF9061",
+"5%	c #C88761",
+"6%	c #897F90",
+"7%	c #0F2FF3",
+"8%	c #082FF7",
+"9%	c #4047D8",
+"0%	c #81645A",
+"a%	c #CECECE",
+"b%	c #B27F5B",
+"c%	c #D4A77A",
+"d%	c #8C6636",
+"e%	c #72491F",
+"f%	c #9D7A45",
+"g%	c #CC9A61",
+"h%	c #CF9361",
+"i%	c #C99061",
+"j%	c #A97E5C",
+"k%	c #906D5F",
+"l%	c #808185",
+"m%	c #8F7885",
+"n%	c #A16773",
+"o%	c #6D4C42",
+"p%	c #DDDDDD",
+"q%	c #F2F2F2",
+"r%	c #EDEDED",
+"s%	c #CACACA",
+"t%	c #99714C",
+"u%	c #DBA97B",
+"v%	c #7B5029",
+"w%	c #767361",
+"x%	c #BBA07C",
+"y%	c #CA9E68",
+"z%	c #CA9561",
+"A%	c #CF8761",
+"B%	c #B3805C",
+"C%	c #322841",
+"D%	c #413759",
+"E%	c #8D7963",
+"F%	c #A7735A",
+"G%	c #A26453",
+"H%	c #919191",
+"I%	c #B7B7B7",
+"J%	c #E0E0E0",
+"K%	c #D2D2D2",
+"L%	c #937257",
+"M%	c #DBAA7B",
+"N%	c #714D25",
+"O%	c #C69D70",
+"P%	c #BE8D61",
+"Q%	c #A77F54",
+"R%	c #443251",
+"S%	c #606492",
+"T%	c #A39EA3",
+"U%	c #A46959",
+"V%	c #96734D",
+"W%	c #636364",
+"X%	c #DADADA",
+"Y%	c #737373",
+"Z%	c #BEBEBE",
+"`%	c #C1C1C1",
+" &	c #979797",
+".&	c #AFAFAF",
+"+&	c #D5A96D",
+"@&	c #775529",
+"#&	c #A17E63",
+"$&	c #AC825F",
+"%&	c #936958",
+"&&	c #AC97A9",
+"*&	c #C9B4B3",
+"=&	c #737375",
+"-&	c #B5B5B7",
+";&	c #B7B7B9",
+">&	c #616163",
+",&	c #0B0B0B",
+". . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . @ . . . . . . . . . . . . . . . . . + ",
+". # $ $ % % & * * * * = % % $ - ; + . > > > > > > > > > > > > > > > > + . , , , , , , , , ' > > > > > > > + ",
+". ) ! ~ { ] ] ^ ^ ^ / ] ] { ( ! & + . > > _ : < [ } | 1 2 3 4 5 6 > > + . , 7 8 9 0 a b , c d > > > > > > + ",
+". e f g h h i j j j k h h h l m n + . > o p q r s t u v w x y z A B > + . , C D E F G H , c d > > > > > > + ",
+". I J K L h M N O O P Q h R K S T + . > U V W X Y Z `  ...+.y z @.#.> + . , $.%.&.*.&.=., c d > > > > > > + ",
+". -.;.>.,.h h '.).).).,.h ,.!.O ~.+ . > {.].W X Y Z `  .^.+.y z /.(._.+ . , :.<.[.}.|.*., 1.2.> > > > > > + ",
+". ).3.4.5.h 6.h 7.8.8.9.h 5.4.4.>.+ . > 0.a.b.c.d.e.f.g.^.+.y z h.i.j.+ . , k.l.m.n.o.p.p.p.p.p.p.p.p.q.r.+ ",
+". 8.s.t.u.h v.w.h x.y.z.h A.B.s.C.+ . > D.E.F.G.H.I.J.g.^.+.y K.L.M.N.+ . , , , , , , p.O.P.Q.R.S.T.p.c d + ",
+". y.U.V.W.h X.Y.Z.h `. +h .+++ at +#++ . > D.$+%+&+*+=+-+g.^.;+>+K.,+'+)++ . > > !+~+, {+p.]+^+/+(+[._+p.c d + ",
+". :+<+[+}+h |+1+1+2+h 3+h 4+5+6+7++ . > 8+9+0+a+b+c+d+g.e+;+>+f+g+h+i++ . p.p.p.p.p.p.p.j+k+l+m+n+o+p.c d + ",
+". p+q+r+s+h t+u+v+w+x+h h y+z+A+B++ . > C+D+E+F+G+H+I+J+K+;+>+f+L+M+N++ . p.O+p.p.p.p.p.P+Q+R+S+T+U+p.c V++ ",
+". W+X+Y+Z+h `++ + + + + +  @. at +@@@+ . > #@$@%@&@: *@=@-@;@>@,@'@)@!@~@+ . p.p.p.p.p.p.p.{@]@^@/@(@_ at p.:@> + ",
+". + + + h h h <@+ + + + + + + + + + . > [@}@|@1 at 1@2 at 3@4 at 5@6 at 7@8 at 9@0 at a@+ . > > > b@> > p.p.p.p.p.p.p.p.p.> + ",
+". + + + + + + + + + + + + + + + + + . > > c at d@e@&@f at g@h at i@j at k@l at m@n at o@+ . > > > b@> > > > p at q@r at s@t at u@v@' + ",
+". + + + + + + + + + + + + + + + + + . w at x@y at z@A at B@C at D@E at F@G at H@I at o@o at o@+ . > > J at K@J@> p.p.p.p.p.p.p.p.L at M@+ ",
+". + + + + + + + + + + + + + + + + + . N at O@P at Q@R at S@T at U@V at W@X at Y@o at o@o@> + . b at b@K at K@K at b@p.O+p.p.p.p.p.Z@`@M at + ",
+". + + + + + + + + + + + + + + + + + .  #.#+#@###$#%#&#*#> > > > > > > + . > > J at K@J@> p.p.p.p.p.p.p.p.=#> + ",
+"+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
+". . . . . . . . . . . . . . . . . @ . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . + ",
+". > > > > > > > > > > > > > > > > + . > > > > > -#> > > -#> > > > > > + . > > > > > > > > > > > > > ;#;#> + ",
+". >#>#>#> >#>#>#>#> >#>#>#> > > > + . > > > > > -#-#-#-#-#-#> > > > > + . > > > > > > > > > > > > ;#;#;#;#+ ",
+". > >#>#> > >#>#> > >#>#> > > > > + . > -#> > > > > > > > > > > > > > + . > > > > > > > > > > > + + ;#;#;#+ ",
+". > >#>#> > >#>#> > >#> > > > > > + . > -#> > > > > > > > > > ,#,#> > + . > > > > > > > > > > + + '#+ ;#> + ",
+". > >#>#> >#>#>#> >#>#> > > > > > + . > -#> > > > > > > > > )#)#,#> > + . > > > > > > > > > '#!#+ + + > > + ",
+". > >#>#> >#> >#> >#> > > > > > > + . -#-#> > ~#~#> > > > > )#)#,#> > + . > > > > > > > > '#!#!#!#+ > > > + ",
+". > > >#>#>#> >#> >#>#>#>#>#>#> > + . -#-#> O+O+~#> > > > > )#)#,#> > + . > > > > > > > '#!#!#!#'#> > > > + ",
+". > > >#>#> > >#>#> > >#>#> >#>#> + . -#-#> O+O+~#> > > > > )#)#,#> > + . > > > > > > '#!#!#!#'#> > > > > + ",
+". > > >#>#> > >#>#> > >#>#> >#>#> + . -#-#> O+O+~#> > {#{#> )#)#,#> > + . > > > > > '#!#!#!#'#> > > > > > + ",
+". > > >#> > > >#> > >#>#> > >#>#> + . -#-#> O+O+~#> >#>#{#> )#)#,#> > + . > > > > '#!#!#!#'#> > > > > > > + ",
+". > > > > > > > > > >#>#> >#>#> > + . > -#> O+O+~#> >#>#{#> )#)#,#> > + . > > > '#!#!#!#'#> > > > > > > > + ",
+". > > > > > > > > > >#>#>#>#> > > + . > -#> O+O+~#> >#>#{#> )#)#,#> > + . > > '#!#!#!#'#> > > > > > > > > + ",
+". > > > > > > > > >#>#> > > > > > + . > -#> O+O+~#> >#>#{#> )#)#,#> > + . > > ]#!#!#'#> > > > > > > > > > + ",
+". > > > > > > > > >#>#> > > > > > + . > -#-#-#-#-#-#-#-#-#-#-#-#-#-#> + . > ]#]#]#'#> > > > > > > > > > > + ",
+". > > > > > > > >#>#>#>#> > > > > + . > > > > > -#-#-#-#-#> > > > > > + . > ]#]#> > > > > > > > > > > > > + ",
+". > > > > > > > > > > > > > > > > + . > > > > > > > > > > > > > > > > + . + > > > > > > > > > > > > > > > + ",
+"+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
+". . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . @ . . . . . . . . . . . . . . . . . + ",
+". > > > > ^#/#(#_#:#<#[#}#> > > > + . > > > > > > > > > > > > > > > > + . > > > > > > > > -#> > > > > > > + ",
+". > > |#1#2#3#4#5#6#7#8#9#0#> > > + . > > > > > a#-#-#-#-#-#> > > > > + . b#b#b#b#b#b#b#-#c#-#b#b#b#b#b#b#+ ",
+". > d#e#f#g#h#i#j#k#l#l#m#n#o#> > + . > > > > p#-#q#r#. s#t#-#> > > > + . > > > > > > > -#> -#> > > > > > + ",
+". u#v#w#x#y#z#A#B#C#D#E#F#G#H#o#> + . > > > > -#s#I#. . . . J#-#> > > + . > > > > > > > -#> -#> > > > > > + ",
+". K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#> + . > > > Z#-#`# $.$+$@$#$$$-#> > > + . b#b#b#b#b#b#b#-#c#-#b#b#b#b#b#b#+ ",
+". %$&$*$=$-$;$>$,$'$)$!$~${$]$^$o#+ . > /$-#-#($_$-#:$<$-#[$. -#-#-#> + . > > > > > > > -#}$|$> > > > > > + ",
+". 1$&$2$3$4$5$6$7$8$9$0$a$b$b$c$d$+ . > -#+$$$e$I#I#. . . . . f$g$h$-#+ . > > > > > > i$-#|$> > > > > > > + ",
+". j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$d$+ . > -#y$z$. I#I#. . . . . A$B$C$-#+ . b#b#b#b#b#c#-#-#c#b#b#b#b#b#b#b#+ ",
+". D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$d$+ . > S$-##$z$I#I#. . . . . T$-#-#> + . > > > > > -#U$-#-#-#i$> > > > > + ",
+". V$W$X$Y$Z$`$ %.%+%@%#%$%%%&%*%d$+ . > > =%-#-%I#I#. . . . . -#> > > + . > > > > > -#> -#> > -#> > > > > + ",
+". > ;%>%,%'%)%!%~%{%]%]%^%/%(%_%:%+ . > > > -#-%I#I#. . . . . -#<%> > + . b#b#b#b#b#-#c#-#c#b#-#b#b#b#b#b#+ ",
+". > > > [%}%|%1%2%3%4%5%6%7%8%9%0%+ . > > > -#-%I#I#. . . . . a%-#> > + . > > > > > -#i$-#i$i$-#> > > > > + ",
+". > > b%c%d%e%f%g%h%i%j%k%l%m%n%o%+ . > > > -#p%I#q%r%. . . s%s#t#-#> + . > > > > > > -#-#-#-#> > > > > > + ",
+". > t%u%v%w%x%y%z%A%B%C%D%E%F%G%o#+ . > > -#H%A$I#I%f$q%. J%-#K%I#.$-#+ . b#b#b#b#b#b#b#c#-#c#b#b#b#b#b#b#+ ",
+". L%M%N%> > > > O%P%Q%R%S%T%U%V%> + . > -#W%X%I#g$-#Y%Z%`% &-#.&`%.&-#+ . > > > > > > -#-#-#> > > > > > > + ",
+". +&@&> > > > > > #&$&%&&&*&o#> > + . > -#=&-&;&-#-#-#-#-#-#> -#-#>&> + . > > > > > > -#-#i$> > > > > > > + ",
+"+ + + + + + + + + + + + + + + + + + + + + ,&-#-#+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "};
diff --git a/icons/audio.xpm b/icons/audio.xpm
new file mode 100644
index 0000000..638b921
--- /dev/null
+++ b/icons/audio.xpm
@@ -0,0 +1,32 @@
+/* XPM */
+static char * audio_xpm[] = {
+"18 18 11 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #000000",
+"@	c #D5D6D5",
+"#	c #090909",
+"$	c #E609EA",
+"%	c #850589",
+"&	c #2F2F2F",
+"*	c #BDBEBD",
+"=	c #8E8E8E",
+"-	c #A6A7A6",
+".................+",
+".@@@@@@@@#@@@@@@@+",
+".$$$$$$$#%#$$$$$$+",
+".@@@@@@@#@#@@@@@@+",
+".@@@@@@@#@#@@@@@@+",
+".$$$$$$$#%#$$$$$$+",
+".@@@@@@@#&*@@@@@@+",
+".@@@@@@=#*@@@@@@@+",
+".$$$$$%##%$$$$$$$+",
+".@@@@@#-###=@@@@@+",
+".@@@@@#@#@@#@@@@@+",
+".$$$$$#%#%$#$$$$$+",
+".@@@@@#=#==#@@@@@+",
+".@@@@@@####@@@@@@+",
+".$$$$$$$%#%$$$$$$+",
+".@@@@@@###@@@@@@@+",
+".@@@@@@##=@@@@@@@+",
+"++++++++++++++++++"};
diff --git a/icons/blankbutton.xpm b/icons/blankbutton.xpm
new file mode 100644
index 0000000..cac8490
--- /dev/null
+++ b/icons/blankbutton.xpm
@@ -0,0 +1,25 @@
+/* XPM */
+static char * blankbutton_xpm[] = {
+"18 18 4 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #000000",
+"@	c #D5D6D5",
+".................+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+"++++++++++++++++++"};
diff --git a/icons/edit.xpm b/icons/edit.xpm
new file mode 100644
index 0000000..55a0905
--- /dev/null
+++ b/icons/edit.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * edit_xpm[] = {
+"18 18 8 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #000000",
+"@	c #D5D6D5",
+"#	c #DD0D8A",
+"$	c #AFB505",
+"%	c #EFF707",
+"&	c #F4C844",
+".................+",
+".@@@@@@@@@@@@@##@+",
+".@@@@@@@@@@@@####+",
+".@@@@@@@@@@@++###+",
+".@@@@@@@@@@++$+#@+",
+".@@@@@@@@@$%+++@@+",
+".@@@@@@@@$%%%+@@@+",
+".@@@@@@@$%%%$@@@@+",
+".@@@@@@$%%%$@@@@@+",
+".@@@@@$%%%$@@@@@@+",
+".@@@@$%%%$@@@@@@@+",
+".@@@$%%%$@@@@@@@@+",
+".@@$%%%$@@@@@@@@@+",
+".@@&%%$@@@@@@@@@@+",
+".@&&&$@@@@@@@@@@@+",
+".@&&@@@@@@@@@@@@@+",
+".+@@@@@@@@@@@@@@@+",
+"++++++++++++++++++"};
diff --git a/icons/ftp.xpm b/icons/ftp.xpm
new file mode 100644
index 0000000..68aad12
--- /dev/null
+++ b/icons/ftp.xpm
@@ -0,0 +1,111 @@
+/* XPM */
+static char * ftp_xpm[] = {
+"18 18 90 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #000000",
+"@	c #6F706F",
+"#	c #686868",
+"$	c #D5D6D5",
+"%	c #514E5A",
+"&	c #1A1729",
+"*	c #201A30",
+"=	c #23203B",
+"-	c #232039",
+";	c #211E37",
+">	c #616161",
+",	c #6E6E6E",
+"'	c #5B566C",
+")	c #353056",
+"!	c #423968",
+"~	c #48416C",
+"{	c #484066",
+"]	c #413969",
+"^	c #615C75",
+"/	c #423A61",
+"(	c #4F4D70",
+"_	c #594E85",
+":	c #493F66",
+"<	c #635C75",
+"[	c #3D3660",
+"}	c #494169",
+"|	c #4B4669",
+"1	c #4F4A6A",
+"2	c #8D8F8D",
+"3	c #878787",
+"4	c #5D5871",
+"5	c #333158",
+"6	c #3D3460",
+"7	c #423E65",
+"8	c #515171",
+"9	c #9D9E9D",
+"0	c #626262",
+"a	c #8A8A8A",
+"b	c #28233D",
+"c	c #2E2749",
+"d	c #373051",
+"e	c #393561",
+"f	c #393259",
+"g	c #352C52",
+"h	c #959497",
+"i	c #ACABAE",
+"j	c #737473",
+"k	c #302A4F",
+"l	c #3F3C64",
+"m	c #4B4274",
+"n	c #4F4876",
+"o	c #3F3C69",
+"p	c #393052",
+"q	c #494261",
+"r	c #52497A",
+"s	c #4F487A",
+"t	c #4D4669",
+"u	c #463E69",
+"v	c #14D121",
+"w	c #332C54",
+"x	c #3D3A69",
+"y	c #494266",
+"z	c #494666",
+"A	c #494363",
+"B	c #3F3B66",
+"C	c #979897",
+"D	c #58576C",
+"E	c #5C5874",
+"F	c #5E5576",
+"G	c #5C597A",
+"H	c #5E5778",
+"I	c #5C5570",
+"J	c #646464",
+"K	c #6B6C6D",
+"L	c #B1B0B4",
+"M	c #B1AFB4",
+"N	c #858587",
+"O	c #6B6A6B",
+"P	c #757475",
+"Q	c #787678",
+"R	c #7C7A7C",
+"S	c #CDBC6E",
+"T	c #AE6E22",
+"U	c #6B6A6C",
+"V	c #595959",
+"W	c #9B9B9D",
+"X	c #6E6C6F",
+"Y	c #696869",
+".................+",
+".@@@@@@@@#$$$$$$$+",
+".@%&*=-;@>,$$$$$$+",
+".@')!~{]@>,$$$$$$+",
+".@^/(_(:@>,$$$$$$+",
+".@<[}|1_ at 23$$$$$$+",
+". at 45678999999990a+",
+".@@@@@@9bcdefg9>,+",
+".$$hi at j9klmn}o9>,+",
+".9999999pqrstu9>,+",
+".9v99999wxyzAB9>C+",
+".9999999DEFGHI9J$+",
+".$$$K$$999999999$+",
+".$$$K$$$$LMNOPQR#+",
+".$$STS$99999999UV+",
+".KKTTTK9v99999WXV+",
+".$$STS$99999999Y$+",
+"++++++++++++++++++"};
diff --git a/icons/graph.xpm b/icons/graph.xpm
new file mode 100644
index 0000000..a72ed0a
--- /dev/null
+++ b/icons/graph.xpm
@@ -0,0 +1,32 @@
+/* XPM */
+static char * graph_xpm[] = {
+"18 18 11 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #000000",
+"@	c #D5D6D5",
+"#	c #090909",
+"$	c #A56721",
+"%	c #F79B31",
+"&	c #0D8214",
+"*	c #14D121",
+"=	c #050591",
+"-	c #0909EF",
+".................+",
+".@@@@@#@@@#@@@@@@+",
+".@@@@@######@@@@@+",
+".@#@@@@@@@@@@@@@@+",
+".@#@@@@@@@@@@$$@@+",
+".@#@@@@@@@@@%%$@@+",
+".##@@&&@@@@@%%$@@+",
+".##@**&@@@@@%%$@@+",
+".##@**&@@@@@%%$@@+",
+".##@**&@@==@%%$@@+",
+".##@**&@--=@%%$@@+",
+".@#@**&@--=@%%$@@+",
+".@#@**&@--=@%%$@@+",
+".@#@**&@--=@%%$@@+",
+".@##############@+",
+".@@@@@#####@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+"++++++++++++++++++"};
diff --git a/icons/gv.xpm b/icons/gv.xpm
new file mode 100644
index 0000000..1240fdd
--- /dev/null
+++ b/icons/gv.xpm
@@ -0,0 +1,84 @@
+/* XPM */
+static char * gv_xpm[] = {
+"18 18 63 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #AEAAAE",
+"@	c #D5D6D5",
+"#	c #000000",
+"$	c #95939B",
+"%	c #090909",
+"&	c #88888E",
+"*	c #ECECEC",
+"=	c #FEFEFE",
+"-	c #F8F8F8",
+";	c #D1D1D1",
+">	c #FDFDFD",
+",	c #9B9B9B",
+"'	c #7F7D85",
+")	c #D7D7D7",
+"!	c #4F4F4F",
+"~	c #C4C4C4",
+"{	c #EFEFEF",
+"]	c #727272",
+"^	c #898989",
+"/	c #F6F6F6",
+"(	c #898A8F",
+"_	c #ACACAC",
+":	c #B0B0B1",
+"<	c #959595",
+"[	c #DFDFDF",
+"}	c #434343",
+"|	c #F4F4F4",
+"1	c #999999",
+"2	c #F0F0F0",
+"3	c #6C6C6D",
+"4	c #7E7E7E",
+"5	c #F3F3F3",
+"6	c #FCFCFC",
+"7	c #D9D9D9",
+"8	c #8C8C8C",
+"9	c #A8A9AF",
+"0	c #BCBCBC",
+"a	c #9E9BA5",
+"b	c #D4D4D4",
+"c	c #3F4046",
+"d	c #CECECE",
+"e	c #DDDDDD",
+"f	c #F2F2F2",
+"g	c #EDEDED",
+"h	c #CACACA",
+"i	c #919191",
+"j	c #B7B7B7",
+"k	c #E0E0E0",
+"l	c #D2D2D2",
+"m	c #636364",
+"n	c #DADADA",
+"o	c #737373",
+"p	c #BEBEBE",
+"q	c #C1C1C1",
+"r	c #979797",
+"s	c #AFAFAF",
+"t	c #737375",
+"u	c #B5B5B7",
+"v	c #B7B7B9",
+"w	c #616163",
+"x	c #0B0B0B",
+".................+",
+".@@@@@@@@@@@@@@@@#",
+".@@@@@$%%%%%@@@@@#",
+".@@@@&%*=.-;%@@@@#",
+".@@@@%->....,%@@@#",
+".@@@'%)!~{]^/%@@@#",
+".@(%%_:%<[%}.%%%@#",
+".@%{/|>>.....123%#",
+".@%45.>>.....678%#",
+". at 9%^5>>.....0%%@#",
+".@@a%b>>.....%@@@#",
+".@@@%b>>.....%c@@#",
+".@@@%b>>.....d%@@#",
+".@@@%e>fg...h-;%@#",
+".@@%i6>j1f.k%l>~%#",
+".@%mn>2%opqr%sqs%#",
+".@%tuv%%%%%%@%%w@#",
+"###x%%############"};
diff --git a/icons/netscape.xpm b/icons/netscape.xpm
new file mode 100644
index 0000000..17d339d
--- /dev/null
+++ b/icons/netscape.xpm
@@ -0,0 +1,135 @@
+/* XPM */
+static char * netscape_xpm[] = {
+"18 18 114 2",
+"  	c None",
+". 	c #FFFFFF",
+"+ 	c #000000",
+"@ 	c #000A0D",
+"# 	c #000F11",
+"$ 	c #001111",
+"% 	c #001113",
+"& 	c #001114",
+"* 	c #001112",
+"= 	c #000E10",
+"- 	c #00080A",
+"; 	c #001718",
+"> 	c #00171B",
+", 	c #00191D",
+"' 	c #001A1F",
+") 	c #001C1F",
+"! 	c #001C21",
+"~ 	c #001C20",
+"{ 	c #00191C",
+"] 	c #001D20",
+"^ 	c #001F23",
+"/ 	c #173337",
+"( 	c #F0F2F3",
+"_ 	c #001F26",
+": 	c #002129",
+"< 	c #24434A",
+"[ 	c #001F24",
+"} 	c #001F22",
+"| 	c #00181D",
+"1 	c #002128",
+"2 	c #00242B",
+"3 	c #00252C",
+"4 	c #1D4349",
+"5 	c #849A9F",
+"6 	c #002A32",
+"7 	c #002C34",
+"8 	c #002830",
+"9 	c #385A61",
+"0 	c #00272E",
+"a 	c #00242A",
+"b 	c #001E25",
+"c 	c #002B33",
+"d 	c #002D35",
+"e 	c #003038",
+"f 	c #003139",
+"g 	c #678186",
+"h 	c #00343C",
+"i 	c #002F37",
+"j 	c #00272F",
+"k 	c #00363E",
+"l 	c #00373F",
+"m 	c #003941",
+"n 	c #36666F",
+"o 	c #577D83",
+"p 	c #003C44",
+"q 	c #003841",
+"r 	c #003E47",
+"s 	c #004049",
+"t 	c #00414C",
+"u 	c #00444D",
+"v 	c #4D7B83",
+"w 	c #4D7A82",
+"x 	c #00444F",
+"y 	c #00424B",
+"z 	c #00414B",
+"A 	c #003F49",
+"B 	c #003840",
+"C 	c #004951",
+"D 	c #004A54",
+"E 	c #004C57",
+"F 	c #00505A",
+"G 	c #00515C",
+"H 	c #578C95",
+"I 	c #3E7982",
+"J 	c #004E57",
+"K 	c #004C56",
+"L 	c #004953",
+"M 	c #004851",
+"N 	c #00414E",
+"O 	c #00505B",
+"P 	c #005360",
+"Q 	c #005563",
+"R 	c #005964",
+"S 	c #005A69",
+"T 	c #005C69",
+"U 	c #72A5AF",
+"V 	c #2B7480",
+"W 	c #005864",
+"X 	c #005462",
+"Y 	c #00525F",
+"Z 	c #004F59",
+"` 	c #005C6A",
+" .	c #025D6A",
+"..	c #025F6F",
+"+.	c #066676",
+"@.	c #1F6875",
+"#.	c #09515B",
+"$.	c #034C56",
+"%.	c #054F59",
+"&.	c #90A4A7",
+"*.	c #026372",
+"=.	c #006170",
+"-.	c #025C6A",
+";.	c #005967",
+">.	c #0E535E",
+",.	c #0F4048",
+"'.	c #182E33",
+").	c #0E1315",
+"!.	c #0F1112",
+"~.	c #1A1D1D",
+"{.	c #152C30",
+"].	c #16454B",
+"^.	c #185C68",
+"/.	c #0F1315",
+". . . . . . . . . . . . . . . . . + ",
+". @ # # $ $ % & & & & * $ $ # = - + ",
+". ; > , ' ) ) ! ! ! ~ ) ) ' { > % + ",
+". ] ^ / ( ( _ : : : < ( ( ( [ } | + ",
+". 1 2 3 4 ( 5 6 7 7 8 9 ( 0 3 a b + ",
+". c d e f ( ( g h h h f ( f i 7 j + ",
+". h k l m ( n ( o p p q ( m l l e + ",
+". p r s t ( u v ( w x y ( z A r B + ",
+". x C D E ( F G H ( I J ( K L M N + ",
+". O P Q R ( S T T U ( V ( W X Y Z + ",
+". `  ...+.( @.#.$.%.&.( ( *.=.-.;.+ ",
+". >.,.'.).( !.+ + + + + + ~.{.].^.+ ",
+". + + + ( ( ( /.+ + + + + + + + + + ",
+". + + + + + + + + + + + + + + + + + ",
+". + + + + + + + + + + + + + + + + + ",
+". + + + + + + + + + + + + + + + + + ",
+". + + + + + + + + + + + + + + + + + ",
+"+ + + + + + + + + + + + + + + + + + "};
diff --git a/icons/paint.xpm b/icons/paint.xpm
new file mode 100644
index 0000000..265c6a3
--- /dev/null
+++ b/icons/paint.xpm
@@ -0,0 +1,232 @@
+/* XPM */
+static char * paint_xpm[] = {
+"18 18 211 2",
+"  	c None",
+". 	c #FFFFFF",
+"+ 	c #000000",
+"@ 	c #D5D6D5",
+"# 	c #E2D7C3",
+"$ 	c #E8E2C0",
+"% 	c #DAD499",
+"& 	c #E4D08D",
+"* 	c #EABE8D",
+"= 	c #E3B26B",
+"- 	c #E3B982",
+"; 	c #BDA385",
+"> 	c #EDE1C3",
+", 	c #EDC48A",
+"' 	c #F79854",
+") 	c #F88E42",
+"! 	c #EC9D54",
+"~ 	c #FFC280",
+"{ 	c #DA776F",
+"] 	c #EA3166",
+"^ 	c #DE2F66",
+"/ 	c #D67F6A",
+"( 	c #BBA97D",
+"_ 	c #EED392",
+": 	c #FFCF86",
+"< 	c #FCBB57",
+"[ 	c #EA2F00",
+"} 	c #EC2F00",
+"| 	c #D95025",
+"1 	c #F3B366",
+"2 	c #E6466F",
+"3 	c #FF0061",
+"4 	c #DE7075",
+"5 	c #D7B275",
+"6 	c #B89A77",
+"7 	c #F2DDB7",
+"8 	c #FDCF86",
+"9 	c #FFCF72",
+"0 	c #F9BB57",
+"a 	c #D02F00",
+"b 	c #E02F00",
+"c 	c #F04310",
+"d 	c #F6B661",
+"e 	c #E44D6C",
+"f 	c #F00877",
+"g 	c #F80677",
+"h 	c #DE7179",
+"i 	c #CEA764",
+"j 	c #CE9B60",
+"k 	c #F3D269",
+"l 	c #F8D334",
+"m 	c #FFDC45",
+"n 	c #FBC75D",
+"o 	c #E07D3B",
+"p 	c #EA7A2A",
+"q 	c #E8843C",
+"r 	c #EDBD61",
+"s 	c #E3947A",
+"t 	c #DE6C79",
+"u 	c #DB3686",
+"v 	c #CE7E9D",
+"w 	c #CE8BA6",
+"x 	c #CE8188",
+"y 	c #996D74",
+"z 	c #FFEB19",
+"A 	c #FFFF00",
+"B 	c #FFF709",
+"C 	c #F3D135",
+"D 	c #E6C26F",
+"E 	c #D3CE77",
+"F 	c #D1B165",
+"G 	c #CFB875",
+"H 	c #AF7C77",
+"I 	c #B1306F",
+"J 	c #961766",
+"K 	c #9D36B5",
+"L 	c #9F09D7",
+"M 	c #A406CC",
+"N 	c #A55DB4",
+"O 	c #FCF00C",
+"P 	c #FFF70C",
+"Q 	c #E0D148",
+"R 	c #DEC063",
+"S 	c #D0C261",
+"T 	c #D5B46A",
+"U 	c #907059",
+"V 	c #421B10",
+"W 	c #7B0947",
+"X 	c #7C0642",
+"Y 	c #B43EDA",
+"Z 	c #A90BFE",
+"` 	c #B853C8",
+" .	c #9F7258",
+"..	c #FAD739",
+"+.	c #F3ED24",
+"@.	c #F8E533",
+"#.	c #D9C763",
+"$.	c #ECA76F",
+"%.	c #D1C260",
+"&.	c #C7A65C",
+"*.	c #311F0F",
+"=.	c #0C0000",
+"-.	c #390012",
+";.	c #5F1B24",
+">.	c #AA36BA",
+",.	c #9B0BD6",
+"'.	c #9D0BDA",
+").	c #A4569D",
+"!.	c #EAC46F",
+"~.	c #F0CB6C",
+"{.	c #D8B36A",
+"].	c #D1BD6E",
+"^.	c #D3B375",
+"/.	c #CBB260",
+"(.	c #B28866",
+"_.	c #0C0706",
+":.	c #020206",
+"<.	c #2B1010",
+"[.	c #5E3D1F",
+"}.	c #CB8B8D",
+"|.	c #B78394",
+"1.	c #C27794",
+"2.	c #B0747D",
+"3.	c #E6C895",
+"4.	c #DCAF6C",
+"5.	c #D8C065",
+"6.	c #CEBF61",
+"7.	c #C5B677",
+"8.	c #ACA385",
+"9.	c #9E9899",
+"0.	c #434340",
+"a.	c #3F3D1C",
+"b.	c #744232",
+"c.	c #BA7D50",
+"d.	c #9B7687",
+"e.	c #313FDC",
+"f.	c #1E3DF2",
+"g.	c #494FBA",
+"h.	c #D3BB6C",
+"i.	c #CFB869",
+"j.	c #D0BB6C",
+"k.	c #B1A5A1",
+"l.	c #8A94A5",
+"m.	c #2D3945",
+"n.	c #444823",
+"o.	c #A17741",
+"p.	c #CF9A61",
+"q.	c #887F9F",
+"r.	c #0B2FFE",
+"s.	c #002FFE",
+"t.	c #324AD9",
+"u.	c #9C725C",
+"v.	c #C6A47F",
+"w.	c #A69F87",
+"x.	c #3A364D",
+"y.	c #525141",
+"z.	c #A67E41",
+"A.	c #C88B53",
+"B.	c #CF9061",
+"C.	c #C88761",
+"D.	c #897F90",
+"E.	c #0F2FF4",
+"F.	c #082FF8",
+"G.	c #4047D9",
+"H.	c #81645A",
+"I.	c #B27F5B",
+"J.	c #D4A77A",
+"K.	c #8C6636",
+"L.	c #72491F",
+"M.	c #9D7A45",
+"N.	c #CC9A61",
+"O.	c #CF9361",
+"P.	c #C99061",
+"Q.	c #A97E5C",
+"R.	c #906D5F",
+"S.	c #808185",
+"T.	c #8F7885",
+"U.	c #A16773",
+"V.	c #6D4C42",
+"W.	c #966B43",
+"X.	c #DBA97B",
+"Y.	c #7B5029",
+"Z.	c #767361",
+"`.	c #BBA07C",
+" +	c #CA9E68",
+".+	c #CA9561",
+"++	c #CF8761",
+"@+	c #B3805C",
+"#+	c #322841",
+"$+	c #413759",
+"%+	c #8D7963",
+"&+	c #A7735A",
+"*+	c #A26453",
+"=+	c #845B3A",
+"-+	c #DBAA7B",
+";+	c #714D25",
+">+	c #C69D70",
+",+	c #BE8D61",
+"'+	c #A77F54",
+")+	c #443251",
+"!+	c #606492",
+"~+	c #A39EA3",
+"{+	c #A46959",
+"]+	c #96734D",
+"^+	c #D6A96D",
+"/+	c #775529",
+"(+	c #A17E63",
+"_+	c #AC825F",
+":+	c #936958",
+"<+	c #AC97A9",
+"[+	c #C9B4B3",
+". . . . . . . . . . . . . . . . . + ",
+". @ @ @ @ # $ % & * = - ; @ @ @ @ + ",
+". @ @ > , ' ) ! ~ { ] ^ / ( @ @ @ + ",
+". @ _ : < [ } | 1 2 3 3 4 5 6 @ @ + ",
+". 7 8 9 0 a b c d e f g h i j 6 @ + ",
+". k l m n o p q r s t u v w x y @ + ",
+". z A B C D E F G H I J K L M N 6 + ",
+". O A P Q R S T U V W X Y Z Z `  .+ ",
+". ..+. at .#.$.%.&.*.=.-.;.>.,.'.). .+ ",
+". !.~.{.].^./.(._.:.<.[.}.|.1.2. .+ ",
+". 3.4.5.6.7.8.9.0.a.b.c.d.e.f.g. .+ ",
+". @ h.i.j.k.l.m.n.o.p.p.q.r.s.t.u.+ ",
+". @ @ @ v.w.x.y.z.A.B.C.D.E.F.G.H.+ ",
+". @ @ I.J.K.L.M.N.O.P.Q.R.S.T.U.V.+ ",
+". @ W.X.Y.Z.`. +.+++ at +#+$+%+&+*+6 + ",
+". =+-+;+@ @ @ @ >+,+'+)+!+~+{+]+@ + ",
+". ^+/+@ @ @ @ @ @ (+_+:+<+[+6 @ @ + ",
+"+ + + + + + + + + + + + + + + + + + "};
diff --git a/icons/wp.xpm b/icons/wp.xpm
new file mode 100644
index 0000000..08d9558
--- /dev/null
+++ b/icons/wp.xpm
@@ -0,0 +1,27 @@
+/* XPM */
+static char * wp_xpm[] = {
+"18 18 6 1",
+" 	c None",
+".	c #FFFFFF",
+"+	c #AEAAAE",
+"@	c #D5D6D5",
+"#	c #000000",
+"$	c #0909EF",
+".................+",
+".@@@@@@@@@@@@@@@@#",
+".$$$@$$$$@$$$@@@@#",
+".@$$@@$$@@$$@@@@@#",
+".@$$@@$$@@$@@@@@@#",
+".@$$@$$$@$$@@@@@@#",
+".@$$@$@$@$@@@@@@@#",
+".@@$$$@$@$$$$$$@@#",
+".@@$$@@$$@@$$@$$@#",
+".@@$$@@$$@@$$@$$@#",
+".@@$@@@$@@$$@@$$@#",
+".@@@@@@@@@$$@$$@@#",
+".@@@@@@@@@$$$$@@@#",
+".@@@@@@@@$$@@@@@@#",
+".@@@@@@@@$$@@@@@@#",
+".@@@@@@@$$$$@@@@@#",
+".@@@@@@@@@@@@@@@@#",
+"##################"};
diff --git a/icons/xterm.xpm b/icons/xterm.xpm
new file mode 100644
index 0000000..60e0b13
--- /dev/null
+++ b/icons/xterm.xpm
@@ -0,0 +1,202 @@
+/* XPM */
+static char * xterm_xpm[] = {
+"18 18 181 2",
+"  	c None",
+". 	c #FFFFFF",
+"+ 	c #AEAAAE",
+"@ 	c #D5D6D5",
+"# 	c #000000",
+"$ 	c #EFEEEE",
+"% 	c #F6F6F4",
+"& 	c #F6F7F3",
+"* 	c #F3F4EE",
+"= 	c #E8E9E1",
+"- 	c #D6D7CF",
+"; 	c #C5C5BE",
+"> 	c #B3B2A9",
+", 	c #9F9F94",
+"' 	c #868685",
+") 	c #6E706A",
+"! 	c #949685",
+"~ 	c #B4B3B6",
+"{ 	c #898297",
+"] 	c #554A75",
+"^ 	c #40365E",
+"/ 	c #241A4B",
+"( 	c #170B46",
+"_ 	c #12093E",
+": 	c #0E0737",
+"< 	c #0A0530",
+"[ 	c #060429",
+"} 	c #030325",
+"| 	c #00031F",
+"1 	c #A1A2A0",
+"2 	c #575747",
+"3 	c #B2B2B3",
+"4 	c #4D436A",
+"5 	c #160350",
+"6 	c #13034B",
+"7 	c #110346",
+"8 	c #0F0340",
+"9 	c #0C033A",
+"0 	c #0A0335",
+"a 	c #07032F",
+"b 	c #05032A",
+"c 	c #A3A4A3",
+"d 	c #5C5C4D",
+"e 	c #B1B0B1",
+"f 	c #4E436A",
+"g 	c #070330",
+"h 	c #A4A5A3",
+"i 	c #61614F",
+"j 	c #3B3B2E",
+"k 	c #AEAEAF",
+"l 	c #4D4269",
+"m 	c #261459",
+"n 	c #281C4E",
+"o 	c #2A1E4E",
+"p 	c #150945",
+"q 	c #0C033B",
+"r 	c #0A0336",
+"s 	c #A7A7A5",
+"t 	c #6A6B59",
+"u 	c #454632",
+"v 	c #ADACAE",
+"w 	c #52476D",
+"x 	c #38314A",
+"y 	c #0A0809",
+"z 	c #181618",
+"A 	c #362F50",
+"B 	c #0F053D",
+"C 	c #000320",
+"D 	c #ABACAB",
+"E 	c #757764",
+"F 	c #565842",
+"G 	c #5A5072",
+"H 	c #5F5A67",
+"I 	c #676149",
+"J 	c #777570",
+"K 	c #25232F",
+"L 	c #170E43",
+"M 	c #05032B",
+"N 	c #030326",
+"O 	c #B0B0AF",
+"P 	c #7E826D",
+"Q 	c #666751",
+"R 	c #AAABAB",
+"S 	c #645C7A",
+"T 	c #776349",
+"U 	c #E5C319",
+"V 	c #A78F32",
+"W 	c #27232C",
+"X 	c #1E1448",
+"Y 	c #080330",
+"Z 	c #010320",
+"` 	c #B2B3B2",
+" .	c #888A75",
+"..	c #6D6F59",
+"+.	c #A7A7AA",
+"@.	c #6D677D",
+"#.	c #9A9798",
+"$.	c #DBD0B1",
+"%.	c #ECE9E0",
+"&.	c #353334",
+"*.	c #362F4E",
+"=.	c #0F073A",
+"-.	c #080331",
+";.	c #BBBCBB",
+">.	c #8B8E79",
+",.	c #72735E",
+"'.	c #A8A7A8",
+").	c #636264",
+"!.	c #D9D8D7",
+"~.	c #FAFAF8",
+"{.	c #8D8D8D",
+"].	c #18171B",
+"^.	c #514D66",
+"/.	c #434058",
+"(.	c #403E53",
+"_.	c #3D3C4F",
+":.	c #3A3B4A",
+"<.	c #CACBC8",
+"[.	c #8A8D78",
+"}.	c #64665B",
+"|.	c #9F9EA1",
+"1.	c #7F7E7E",
+"2.	c #F9FAF8",
+"3.	c #FBFBF9",
+"4.	c #DEDFDD",
+"5.	c #131313",
+"6.	c #959695",
+"7.	c #F0EFEA",
+"8.	c #ECECE7",
+"9.	c #E9E9E4",
+"0.	c #E7E7DE",
+"a.	c #DEDED3",
+"b.	c #858773",
+"c.	c #555551",
+"d.	c #A7A293",
+"e.	c #F9F9F8",
+"f.	c #F8F8F6",
+"g.	c #F0EEDF",
+"h.	c #1D1D19",
+"i.	c #5D5C58",
+"j.	c #C9C9BE",
+"k.	c #C7C7BD",
+"l.	c #939388",
+"m.	c #929484",
+"n.	c #9A9A8B",
+"o.	c #595953",
+"p.	c #515161",
+"q.	c #C7C1B4",
+"r.	c #ECC635",
+"s.	c #C4A420",
+"t.	c #AFADA8",
+"u.	c #F9F9F6",
+"v.	c #F9F9F7",
+"w.	c #E6CD79",
+"x.	c #7C5B09",
+"y.	c #AB922F",
+"z.	c #343326",
+"A.	c #1E1E14",
+"B.	c #313125",
+"C.	c #504F4F",
+"D.	c #DBC475",
+"E.	c #F5CC10",
+"F.	c #F4CA10",
+"G.	c #C1AC62",
+"H.	c #EEEEEC",
+"I.	c #C2C2C0",
+"J.	c #A07F2F",
+"K.	c #F5C80E",
+"L.	c #F3CB17",
+"M.	c #B0A263",
+"N.	c #626254",
+"O.	c #595949",
+"P.	c #9A9693",
+"Q.	c #B9A478",
+"R.	c #CBA133",
+"S.	c #967432",
+"T.	c #6F6D6D",
+"U.	c #6F6B6D",
+"V.	c #957642",
+"W.	c #C59D35",
+"X.	c #8D8D86",
+". . . . . . . . . . . . . . . . . + ",
+". @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # ",
+". @ @ $ % & * = - ; > , ' ) ! @ @ # ",
+". @ ~ { ] ^ / ( _ : < [ } | 1 2 @ # ",
+". @ 3 4 5 6 7 8 9 0 a b } | c d @ # ",
+". @ e f 5 6 7 8 9 0 g b } | h i j # ",
+". @ k l m n o p q r g b } | s t u # ",
+". @ v w x y z A B r g b } C D E F # ",
+". @ v G H I J K L r g M N C O P Q # ",
+". @ R S T U V W X r Y M N Z `  ...# ",
+". @ +. at .#.$.%.&.*.=.-.M N Z ;.>.,.# ",
+". @ '.).!.~.% {.].^./.(._.:.<.[.}.# ",
+". @ |.1.2.3.3.4.5.6.7.8.9.0.a.b.c.# ",
+". @ @ d.e.f.~.g.h.i.j.k.l.m.n.o.p.# ",
+". q.r.s.t.u.v.w.x.y.z.A.B.C.p.p.p.# ",
+". D.E.F.G.H.I.J.K.L.M.N.O.p.p.p.@ # ",
+". P.Q.R.S.T.U.V.W.X.@ @ @ @ @ @ @ # ",
+"# # # # # # # # # # # # # # # # # # "};
diff --git a/mask.xbm b/mask.xbm
new file mode 100644
index 0000000..0efa91f
--- /dev/null
+++ b/mask.xbm
@@ -0,0 +1,68 @@
+#define mask_width 64
+#define mask_height 64
+
+static char mask_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,	
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,	
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,	
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,	
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/readln.c b/readln.c
new file mode 100644
index 0000000..2ae4577
--- /dev/null
+++ b/readln.c
@@ -0,0 +1,59 @@
+/* readln.c - Edward H. Flora - ehflora at ksu.edu */
+/* Last Modified: 2/24/98 */
+/* 
+ *	This function reads a string from a file pointed to by fp until a
+ *   new line (EOLN) or an end of file is encountered.  It returns a pointer
+ *   to the string.  The new line character is included in the string returned
+ *   by the function.
+ */
+
+/* EXTERNALS:
+ ****************** 
+ * Functions Called:
+ *      Standard Libraries.
+ * 
+ * Header Files Included:
+ *      Standard Includes only.
+ */
+
+/* PORTABILITY:
+ ******************
+ * Coded in ANSI C, using ANSI prototypes.
+ */
+
+/******  Include Files  *************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define EOLN '\n'		/* Defines the new line character */
+#define SIZE1 10		/* Defines the increment to increase the */
+				/*  string by until a newline of EOF is found */
+
+/******  Function to Read a Line from fp  *******************************/
+char *readln(FILE *fp){
+  char *tmp, *t1, *t2;
+  int count = 0, s1 = SIZE1;
+  
+  if((tmp = malloc(SIZE1*sizeof(char))) == NULL)return NULL;
+  				/* If cannot allocate memory */
+  if((t1 = fgets(tmp, SIZE1, fp)) == NULL){
+    free(tmp);
+    return NULL;
+  }				/* If there is no string to be read */
+  while(strchr(t1,EOLN) == NULL){ /* Loop while EOLN is not in the string */
+    count += strlen(t1);
+    if((s1 - count) > 1)break;
+    s1 +=SIZE1;
+    if((t2 = realloc(tmp, s1*sizeof(char))) == NULL){
+      free(tmp);
+      return NULL;
+    }				/* If cannot allocate more memory */
+    else tmp = t2;
+    if((t1 = fgets((tmp+count),((s1 - count)),fp)) == NULL)break;
+  }				/* End of While Loop */
+  if((t2 = realloc(tmp,strlen(tmp)+1)) == NULL)free(tmp);
+  return (t2);
+}
+/******  End of Function readln  ****************************************/
+
diff --git a/wmbutton.c b/wmbutton.c
new file mode 100644
index 0000000..f3ee59c
--- /dev/null
+++ b/wmbutton.c
@@ -0,0 +1,593 @@
+/***********************************************************************
+ *   Code is based on wmppp, wmload, wmtime, wmcp, and asbutton
+ *   Author: Edward H. Flora <ehflora at ksu.edu>
+ *   Ver 0 Rel 3    March 6, 1999
+ *
+ *   Contributors:
+ *              Ben Cohen <buddog at aztec.asu.edu>
+ *                  original author of wmcp (et al.)
+ *              Thomas Nemeth <tnemeth at multimania.com>
+ *                  contributor to wmcp
+ *              Casey Harkins <charkins at cs.wisc.edu> 
+ *                  Bug fix reading config file path - 3/6/99
+ *                  Added button-presses, and other - denoted by *charkins*
+ *              Michael Henderson <mghenderson at lanl.gov>
+ *                  Application ideas, suggestions
+ *              Ryan ?? <pancake at mindspring.com> 
+ *                  Modified wmbutton to asbutton.
+ *                  Note: asbutton is a seperate program, not associated 
+ *                        with wmbutton (just as wmbutton is not associated
+ *                        with wmcp)
+ *              Jon Bruno
+ *                  Web Page Development
+ *    The contributors listed above are not necessarily involved with the 
+ *    development of wmbutton.  I'm listing them here partially as thanks for 
+ *    helping out, catching bugs in the code, etc.
+ ***********************************************************************/
+#include <Xlib.h>
+#include <Xutil.h>
+#include <xpm.h>
+#include <extensions/shape.h>
+#include <keysym.h>
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "backdrop.xpm"           // background graphic
+#include "buttons.xpm"            // graphic of 9 buttons
+#include "mask.xbm"
+
+#define CONFIGFILEMAX 128
+#define CONFFILENAME  "/.wmbutton"
+#define VER           0
+#define REL           4
+
+// #define MIDMOUSE
+#define LMASK         0
+#define MMASK         10
+#define RMASK         20
+
+/***********************************************************************
+ * 		Globals..    OK.. there's too many globals.
+ *                           Feel free and fix it, if you'd like.
+ ***********************************************************************/
+Display *display;
+int screen;
+Window rootwin, win, iconwin;
+GC gc;
+int depth;
+Pixel bg_pixel, fg_pixel;
+
+XSizeHints xsizehints;
+XWMHints * xwmhints;
+XClassHint xclasshint;
+char configfile[CONFIGFILEMAX]; 
+
+typedef struct _XpmIcon {
+  Pixmap pixmap;
+  Pixmap mask;
+  XpmAttributes attributes;
+} XpmIcon;
+
+
+Pixmap pixmask;
+
+typedef struct _button_region {
+  int x,y;
+  int i,j;
+} ButtonArea;
+
+ButtonArea button_region[9];
+
+XpmIcon template, visible, buttons;
+
+int numb_of_apps = 9;
+int N = 1;		/* Button number pressed to goto app #     */
+int border  = 0;
+int Verbose = 0;
+int mmouse  = 0;
+int button_pressed = -1;	/* button to be drawn pressed *charkins*/
+
+char *app_name = "wmbutton";
+
+/*************** Function Prototypes ***********************************/
+void RunAppN(int app);             // function to run app N as found in conf file
+char *Parse(int app);              // parse data in config file
+void redraw(void);                 
+void getPixmaps(void);
+int  whichButton(int x, int y);    // determine which button has been pressed
+int  flush_expose(Window w);
+void show_usage(void);             // show usage message to stderr
+char *readln(FILE *fp);            // read line from file, return pointer to it
+
+/***********************************************************************
+ * 		Main
+ ***********************************************************************/
+int main( int argc, char ** argv ) {
+  XEvent report;
+  XGCValues xgcValues;	
+  XTextProperty app_name_atom;
+
+  int dummy = 0;
+  int i;
+  char Geometry_str[64] = "64x64+0+0";
+  char Display_str[64] = "";
+  
+  strcpy(configfile, getenv("HOME"));  // Added by Casey Harkin, 3/6/99
+  strcat(configfile, CONFFILENAME);    // Fixed Bug - didn't look in home directory
+                                       // but startup directory
+
+  /* Parse Command Line Arguments */  
+  for ( i=1; i<argc; i++ ) {
+    if ( *argv[i] == '-' ) {
+      switch ( *(argv[i]+1) ) {
+      case 'v':                        // Turn on Verbose (debugging) Mode
+	Verbose = 1;
+	break;
+      case 'g':                        // Set Geometry Options
+	if ( ++i >= argc ) show_usage();
+	sscanf(argv[i], "%s", Geometry_str);
+	if ( Verbose ) printf("Geometry is: %s\n", Geometry_str);
+	break;
+      case 'd':                        // Set display 
+	if ( ++i >= argc ) show_usage();
+	sscanf(argv[i], "%s", Display_str);
+	if ( Verbose ) printf("Display is: %s\n", Display_str);
+	break;
+      case 'h':                        // Show Help Message
+	show_usage();
+	break;
+      case 'f':                        // use config file <filename>
+	if ( ++i >= argc ) show_usage();
+	sscanf(argv[i], "%s", configfile);
+	if ( Verbose ) printf("Using Config File: %s\n", configfile);
+	break;
+      case 'm':                        // Enable Middle Mouse
+	mmouse = 1;
+	break;
+      default:                         // other, unknown, parameters
+	show_usage();
+	break;
+      }
+    }
+  }
+    
+  if ( (display = XOpenDisplay(Display_str)) == NULL ) {
+    fprintf(stderr,"Fail: XOpenDisplay for %s\n", Display_str);	
+    exit(-1);
+  }
+  
+  screen  = DefaultScreen(display);
+  rootwin = RootWindow(display,screen);
+  depth   = DefaultDepth(display, screen);
+  
+  bg_pixel = WhitePixel(display, screen ); 
+  fg_pixel = BlackPixel(display, screen ); 
+  
+  xsizehints.flags  = USSize | USPosition;
+  xsizehints.width  = 64;
+  xsizehints.height = 64;
+  
+  /* Parse Geometry string and fill in sizehints fields */
+  XWMGeometry(display, screen, 
+	      Geometry_str, 
+	      NULL, 	
+	      border, 
+	      &xsizehints,
+	      &xsizehints.x, 
+	      &xsizehints.y,
+	      &xsizehints.width,
+	      &xsizehints.height, 
+	      &dummy);
+  
+  if ( (win = XCreateSimpleWindow(display,
+				  rootwin,
+				  xsizehints.x,
+				  xsizehints.y,
+				  xsizehints.width,
+				  xsizehints.height,
+				  border,
+				  fg_pixel, bg_pixel) ) == 0 ) {
+    fprintf(stderr,"Fail: XCreateSimpleWindow\n");	
+    exit(-1);
+  }
+  
+  if ( (iconwin = XCreateSimpleWindow(display,
+				      win,
+				      xsizehints.x,
+				      xsizehints.y,
+				      xsizehints.width,
+				      xsizehints.height,
+				      border,
+				      fg_pixel, bg_pixel) ) == 0 ) {
+    fprintf(stderr,"Fail: XCreateSimpleWindow\n");	
+    exit(-1);
+  }
+
+  /* Set up shaped windows */
+  /*Gives the appicon a border so you can grab and move it. */
+
+  if ( ( pixmask = XCreateBitmapFromData(display, 
+					 win,
+					 mask_bits,
+					 mask_width,
+					 mask_height) )  == 0 ) {
+    fprintf(stderr,"Fail: XCreateBitmapFromData\n");
+  }
+  
+  XShapeCombineMask(display, win, ShapeBounding, 0, 0, pixmask, ShapeSet );
+  XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0, pixmask, ShapeSet);
+
+  /* Convert in pixmaps from .xpm includes. */
+  getPixmaps();
+
+  /* Interclient Communication stuff */
+  /* Appicons don't work with out this stuff */
+  xwmhints = XAllocWMHints();
+  xwmhints->flags = WindowGroupHint | IconWindowHint | StateHint;	
+  xwmhints->icon_window = iconwin;
+  xwmhints->window_group = win;
+  xwmhints->initial_state = WithdrawnState;  
+  XSetWMHints( display, win, xwmhints );
+
+  xclasshint.res_name = "wmbutton";
+  xclasshint.res_class = "Wmbutton";
+  XSetClassHint( display, win, &xclasshint );
+
+  XSetWMNormalHints( display, win, &xsizehints );
+  
+  /* Tell window manager what the title bar name is. We never see */
+  /* this anyways in the WithdrawnState      */
+  if ( XStringListToTextProperty(&app_name, 1, &app_name_atom) == 0 ) {
+    fprintf(stderr,"%s: Can't set up window name\n", app_name);
+    exit(-1);
+  }
+  XSetWMName( display, win, &app_name_atom );
+  
+  /* Create Graphic Context */	
+  if (( gc = XCreateGC(display, win,(GCForeground | GCBackground), &xgcValues))
+       == NULL ) {
+    fprintf(stderr,"Fail: XCreateGC\n");	
+    exit(-1);
+  }
+
+  /* XEvent Masks. We want both window to process X events */
+  XSelectInput(display, win,
+	       ExposureMask | 
+	       ButtonPressMask | 
+		   ButtonReleaseMask |		/* added ButtonReleaseMask *charkins*/
+	       PointerMotionMask |
+	       StructureNotifyMask );  
+  XSelectInput(display, iconwin,
+	       ExposureMask | 
+	       ButtonPressMask | 
+		   ButtonReleaseMask |		/* added ButtonReleaseMask *charkins*/
+	       PointerMotionMask |
+	       StructureNotifyMask );
+  
+  /* Store the 'state' of the application for restarting */
+  XSetCommand( display, win, argv, argc );	
+
+  /* Window won't ever show up until it is mapped.. then drawn after a 	*/
+  /* ConfigureNotify */
+  XMapWindow( display, win );
+
+  /* X Event Loop */
+  while (1) {
+    XNextEvent(display, &report );
+    switch (report.type) {
+    case Expose:
+      if (report.xexpose.count != 0) {	
+	break;
+      }
+      if ( Verbose ) fprintf(stdout,"Event: Expose\n");	
+      redraw();
+      break;      
+    case ConfigureNotify:
+      if ( Verbose ) fprintf(stdout,"Event: ConfigureNotify\n");	
+      redraw();
+      break;
+    case ButtonPress:	/* draw button pressed, don't launch *charkins*/
+      switch (report.xbutton.button) {
+      case Button1:
+	N = whichButton(report.xbutton.x, report.xbutton.y );
+	if ( (N >= 0) && (N <= numb_of_apps) ) {
+	  button_pressed = N + LMASK;
+	  redraw();
+	}
+	if ( Verbose ) 
+	  fprintf(stdout,"Button 1:x=%d y=%d N=%d\n", 
+		  report.xbutton.x, report.xbutton.y, N+LMASK);	
+	break;
+      case Button2:
+	if (mmouse) {
+	  N = whichButton(report.xbutton.x, report.xbutton.y );
+	  if ( (N >= 0) && (N <= numb_of_apps) ) {
+	    button_pressed = N + MMASK;
+	    redraw();
+	  }
+	  if ( Verbose ) 
+	    fprintf(stdout,"Button 1:x=%d y=%d N=%d\n", 
+		    report.xbutton.x, report.xbutton.y, N+MMASK);
+	}
+	break;
+      case Button3:
+	N = whichButton(report.xbutton.x, report.xbutton.y );
+	if ( (N >= 0) && (N <= numb_of_apps) ) {
+	  button_pressed = N + RMASK;
+	  redraw();
+	}
+	if ( Verbose ) 
+	  fprintf(stdout,"Button 3:x=%d y=%d N=%d\n", 
+		  report.xbutton.x, report.xbutton.y, N+RMASK);
+	break;
+      }
+      break;
+    case ButtonRelease:	/* launch app here if still over button *charkins*/
+      switch (report.xbutton.button) {
+      case Button1:
+	N = whichButton(report.xbutton.x, report.xbutton.y );
+	if ( (N >= 0) && (N <= numb_of_apps) && (N == button_pressed))
+	  RunAppN( N + LMASK);
+	button_pressed=-1;
+	redraw();
+	if ( Verbose ) 
+	  fprintf(stdout,"Button 1:x=%d y=%d N=%d\n", 
+		  report.xbutton.x, report.xbutton.y, N+LMASK);	
+	break;
+      case Button2:
+	if (mmouse) {
+	  N = whichButton(report.xbutton.x, report.xbutton.y );
+	  if ( (N >= 0) && (N <= numb_of_apps) && (N == button_pressed))
+	    RunAppN( N + MMASK);
+	  button_pressed=-1;
+	  redraw();
+	  if ( Verbose ) 
+	    fprintf(stdout,"Button 1:x=%d y=%d N=%d\n", 
+		    report.xbutton.x, report.xbutton.y, N+MMASK);
+	}
+	break;
+      case Button3:
+	N = whichButton(report.xbutton.x, report.xbutton.y );
+	if ( (N >= 0) && (N <= numb_of_apps) && (N == button_pressed))
+	  RunAppN( N + RMASK);
+	button_pressed=-1;
+	redraw();
+	if ( Verbose ) 
+	  fprintf(stdout,"Button 3:x=%d y=%d N=%d\n", 
+		  report.xbutton.x, report.xbutton.y, N+RMASK);
+	break;
+      }
+      break;
+    case DestroyNotify:
+      if ( Verbose ) fprintf(stdout, "Bye\n");
+      XFreeGC(display, gc);
+      XDestroyWindow(display,win);
+      XDestroyWindow(display,iconwin);
+      XCloseDisplay(display);
+      if ( Verbose ) fprintf(stdout, "Bye\n");
+      exit(0);
+      break;
+    }
+  }
+  return (0);
+}
+
+/***********************************************************************
+ *   redraw
+ *
+ *	 Map the button region coordinates.
+ *
+ *   Draw the appropriate number of buttons on the 'visible' Pixmap 
+ *   using data from the 'buttons' pixmap.
+ *
+ *   Then, copy the 'visible' pixmap to the two windows ( the withdrawn
+ *   main window and the icon window which is the main window's icon image.)
+ ***********************************************************************/
+void redraw() {
+  int n;
+  int i,j;
+  int dest_x, dest_y;
+  int space;
+  int offset;
+  int bsize = 18;
+
+  space = 0;
+  offset = 5;
+  XCopyArea(display, template.pixmap, visible.pixmap, gc, 0, 0,
+	    template.attributes.width, template.attributes.height, 0, 0 ); 
+ 
+  for ( j=0; j < 3; j++ ) {
+    for ( i=0; i < 3; i++ ) {
+      n = i + j * 3;
+      dest_x = i*(bsize + space) + offset + space;
+      dest_y = j*(bsize + space) + offset + space;
+      
+      /* Define button mouse coords */
+      button_region[n].x = dest_x;
+      button_region[n].y = dest_y;
+      button_region[n].i = dest_x + bsize - 1;
+      button_region[n].j = dest_y + bsize - 1; 
+      
+      /* Copy button images for valid apps */
+      if (  (n + 1) <= numb_of_apps ) {
+        XCopyArea(display, buttons.pixmap, visible.pixmap, gc, 
+	          i * bsize, j * bsize, bsize, bsize, dest_x, dest_y);
+      } 
+    }
+  }
+
+  if ( button_pressed>0 ) {	/* draw pressed button *charkins*/
+    if(button_pressed>RMASK) button_pressed-=RMASK;
+    else if(button_pressed>MMASK) button_pressed-=MMASK;
+    else if(button_pressed>LMASK) button_pressed-=LMASK;
+    i = (button_pressed-1) % 3;	/* get col of button */
+    j = (button_pressed-1) / 3;	/* get row of button */
+    dest_x = i * (bsize + space) + offset + space;
+    dest_y = j * (bsize + space) + offset + space;
+    XSetForeground(display, gc, bg_pixel);
+    XDrawLine(display, visible.pixmap, gc,
+	      dest_x+1, dest_y+bsize-1, dest_x+bsize-1, dest_y+bsize-1);
+    XDrawLine(display, visible.pixmap, gc,
+	      dest_x+bsize-1, dest_y+bsize-1, dest_x+bsize-1, dest_y+1);
+    XSetForeground(display, gc, fg_pixel);
+    XDrawLine(display, visible.pixmap, gc,
+	      dest_x, dest_y, dest_x+bsize-2, dest_y);
+    XDrawLine(display, visible.pixmap, gc,
+	      dest_x, dest_y, dest_x, dest_y+bsize-2);
+  } /*charkins*/
+  
+  flush_expose( win ); 
+  XCopyArea(display, visible.pixmap, win, gc, 0, 0,
+	    visible.attributes.width, visible.attributes.height, 0, 0 ); 
+  flush_expose( iconwin ); 
+  XCopyArea(display, visible.pixmap, iconwin, gc, 0, 0,
+	    visible.attributes.width, visible.attributes.height, 0, 0 );
+  if ( Verbose ) fprintf(stdout,"In Redraw()\n");	
+}
+
+/***********************************************************************
+ *  whichButton
+ *
+ *  Return the button that at the x,y coordinates. The button need not
+ *  be visible ( drawn ). Return -1 if no button match.
+ ***********************************************************************/
+int whichButton( int x, int y ) {
+  int index;
+
+  for ( index=0; index < numb_of_apps; index++ ) {
+    if ( x >= button_region[index].x &&
+	 x <= button_region[index].i &&
+	 y >= button_region[index].y &&
+	 y <= button_region[index].j  ) {
+      return( index + 1);
+    }
+  }
+  return(-1);
+}
+
+/***********************************************************************
+ * RunAppN(int app)
+ *
+ * Run the command given in the configuration file 'configfile'
+ ***********************************************************************/
+void RunAppN( int app ) {
+  char *cmndstr;
+
+  cmndstr = Parse(app);                  // Get command to pass to system
+  if (Verbose) fprintf(stderr, "Command String: %s", cmndstr);
+  if (cmndstr != NULL) system(cmndstr);  // if there's a command, run it
+}
+
+/***********************************************************************
+ * Parse(int app)
+ *
+ * Parses the file 'configfile' for command to execute.
+ ***********************************************************************/
+
+char *Parse(int app) {
+  FILE *fp;
+  char *ptr  = NULL;
+  char *cmnd = NULL;
+  char *line = NULL;
+
+  if ((fp = fopen(configfile, "r")) == NULL) {  // Can't find config file
+    fprintf(stderr, "%s: Configuration File not found\n", configfile);
+    exit(-1);
+  }
+
+  do {                               // Read Lines in config file
+    line = readln(fp);
+    if (line == NULL) break;         // if end of file, quit
+    if ( (line[0] != '#') && (line[0] != '\n'))  // Ignore comments and blanks 
+      if ( atoi(line) == app) break; // if we've found our app, quit looking
+  } while (1);
+
+  if (line == NULL) return(NULL);    // if we didn't find in, that just ignore
+
+  ptr = strchr(line,'\t');                      // find first tab
+  if (ptr == NULL)   ptr = strchr(line,' ');    // or space charater
+  if (ptr == NULL)   return(NULL);              // if neither are there, its a badly
+                                                // formatted line.  Ignore
+  ptr++;
+  cmnd = malloc((strlen(ptr)+1)*sizeof(char));  
+
+  strcpy(cmnd, ptr);                 // Everything after number is passed to system
+
+  free(line);
+  fclose(fp);
+  return(cmnd);
+}
+
+/***********************************************************************
+ *   getPixmaps
+ *    
+ *   Load XPM data into X Pixmaps.
+ *  
+ *   Pixmap template contains the untouched window backdrop image.
+ *   Pixmap visible is the template pixmap with buttons drawn on it.
+ *          -- what is seen by the user.
+ *   Pixmap buttons holds the images for individual buttons that are
+ *          later copied onto Pixmap visible.
+ ***********************************************************************/
+void getPixmaps() {
+  template.attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions);
+  visible.attributes.valuemask  |= (XpmReturnPixels | XpmReturnExtensions);
+  buttons.attributes.valuemask  |= (XpmReturnPixels | XpmReturnExtensions);
+  
+  /* Template Pixmap. Never Drawn To. */
+  if ( XpmCreatePixmapFromData(	display, rootwin, backdrop_xpm,
+				&template.pixmap, &template.mask, 
+				&template.attributes) != XpmSuccess ) {
+    fprintf(stderr, "Can't Create 'template' Pixmap\n");
+    exit(1);
+  }
+  /* Visible Pixmap. Copied from template Pixmap and then drawn to. */
+  if ( XpmCreatePixmapFromData(	display, rootwin, backdrop_xpm,
+				&visible.pixmap, &visible.mask, 
+				&visible.attributes) != XpmSuccess ) {
+    fprintf(stderr, "Can't Create 'visible' Pixmap");
+    exit(1);
+  }
+  
+  /* Button Pixmap.  */
+  if ( XpmCreatePixmapFromData(	display, rootwin, buttons_xpm,
+				&buttons.pixmap, &buttons.mask, 
+				&buttons.attributes) != XpmSuccess ) {
+    fprintf(stderr, "Can't Create 'buttons' Pixmap");
+    exit(1);
+  }
+}
+
+/***********************************************************************
+ *   flush_expose
+ *
+ *   Everyone else has one of these... Can't hurt to throw it in.
+ ***********************************************************************/
+int flush_expose(Window w) {
+  XEvent      dummy;
+  int         i=0;
+  
+  while (XCheckTypedWindowEvent(display, w, Expose, &dummy)) i++;
+  return(i);
+}
+
+/***********************************************************************
+ * 		show_usage
+ ***********************************************************************/
+void show_usage() {
+  fprintf(stderr,"\n");
+  fprintf(stderr,"usage: %s [-g geometry] [-d dpy] [-v] [-f <configfile>]\n",app_name);
+  fprintf(stderr,"\n");
+  fprintf(stderr," wmbutton Ver %d Rel %d\n",VER,REL);
+  fprintf(stderr,"\n");
+  fprintf(stderr,"-g  <geometry>   Window Geometry - ie: 64x64+10+10\n");
+  fprintf(stderr,"-d  <display>    Display -  ie: 127.0.0.1:0.0\n"); 
+  fprintf(stderr,"-f  <filename>   Full path to configuration file.\n");
+  fprintf(stderr,"-v               Verbose Mode. \n");
+  fprintf(stderr,"-h               Help. This message.\n");
+  fprintf(stderr,"-m               Enable Middle Mouse functionality.\n\n");
+  exit(-1);
+}

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



More information about the Pkg-wmaker-commits mailing list