[Pkg-wmaker-commits] [wmbutton] 01/25: wmbutton dockapp added
Doug Torrance
dtorrance-guest at moszumanska.debian.org
Sun Jul 16 23:38:08 UTC 2017
This is an automated email from the git hooks/post-receive script.
dtorrance-guest pushed a commit to branch upstream
in repository wmbutton.
commit 6ca7764f4eafea95268dc0bc82fecb43d189c7ac
Author: Rodolfo García Peñas (kix) <kix at kix.es>
Date: Mon Aug 20 10:02:36 2012 +0200
wmbutton dockapp added
The original wmbutton 0.6.1 is added to the repository.
wmbutton is a dockapp with nine buttons (3x3), capable of launch 27
different applications using the left, middle and right buttons.
---
.wmbutton | 47 ++
COPYING | 339 ++++++++++++
Makefile | 29 +
README | 208 ++++++++
backdrop.xpm | 126 +++++
buttons.xpm | 1400 +++++++++++++++++++++++++++++++++++++++++++++++++
icons/audio.xpm | 32 ++
icons/blankbutton.xpm | 25 +
icons/buttons2.xpm | 854 ++++++++++++++++++++++++++++++
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 +++
wmb_libs.c | 692 ++++++++++++++++++++++++
wmbutton.c | 557 ++++++++++++++++++++
wmbutton.h | 107 ++++
21 files changed, 5336 insertions(+)
diff --git a/.wmbutton b/.wmbutton
new file mode 100644
index 0000000..35e0fc8
--- /dev/null
+++ b/.wmbutton
@@ -0,0 +1,47 @@
+# .wmbutton - Configuration file for wmbutton
+# Last Modified 03/21/04
+
+# 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 mozilla &
+11 mozilla -mail &
+21 firefox &
+
+2 xterm -geometry 80x35 -sb -fg white -bg grey20 -T 'Xterm: User' &
+12 xterm -geometry 80x35 -sb -fg snow -bg midnightblue -T 'Xterm: Root' &
+22 gnome-terminal &
+
+3 gftp &
+13 nxterm -fg black -bg grey70 -T 'FTP' -e ftp &
+23 jpilot &
+
+4 ooffice &
+14 wordperfect &
+24 presentations &
+
+5 gnucash &
+15 xterm -geometry 120x20 -fg white -bg grey20 -T 'Gnuplot' -e gnuplot &
+25 quattropro &
+
+6 xemacs &
+16 xterm -geometry 80x35 -fg black -bg grey50 -T 'Pico Editor' -e pico -w &
+26 xterm -geometry 120x35 -fg black -bg grey70 -T 'WMButton Config Editor' -e pico -w ~/.wmbutton &
+
+7 gimp &
+17 xfig &
+27 kpaint &
+
+8 kghostview &
+18 ggv &
+28 xpdf &
+
+9 xmms &
+19 xanim &
+29 gnome-sound-recorder &
+
+# The above don't need to be in any particular order.
+# Repeated entries will 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..b4b744d
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,29 @@
+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 wmb_libs.o
+
+CFLAGS += -c -Wall -O2
+
+all: ${TARGET} tags
+
+.c.o:
+ gcc ${CFLAGS} ${INCLUDES} $< -o $*.o
+
+${TARGET}: ${OBJECTS}
+ gcc -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
+ if [ -e tags ]; then rm tags; fi
+ if [ -e core ]; then rm core; fi
+
+wmbutton.o: wmbutton.c wmbutton.h Makefile
+
+wmb_libs.o: wmb_libs.c wmbutton.h Makefile
+
+tags:
+ ctags *.[ch]
diff --git a/README b/README
new file mode 100644
index 0000000..5da98ae
--- /dev/null
+++ b/README
@@ -0,0 +1,208 @@
+wmbutton Ver. 0 Rel 6.1
+-------------------------------------------------------------
+ Code is based on wmppp, wmload, wmtime, wmcp, and asbutton
+ Author: Edward H. Flora <ehf_dockapps at cox.net>
+ This version is released by:
+ Christian 'Greek0' Aichinger <Greek0 at gmx.net>
+ Ver 0 Rel 6.1 Jan 23, 2005
+
+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 them floating around) can be found in
+this distribution in the file COPYING
+
+CONTRIBUTORS:
+-------------
+ Christian 'Greek0' Aichinger <Greek0 at gmx.net>
+ Did some code cleanup and fixed several memory leaks.
+ Ralf Horstmann <ralf.horstmann at gmx.de>
+ Added ability to load pixmaps at startup,
+ without having to re-compile
+ Michael Cohrs <camico at users.sourceforge.net>
+ Added Tool Tips, and updated graphics
+ Bruno Essmann <essmann at users.sourceforge.net>)
+ Creator of wmpager
+ 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.5.tar.gz
+
+ CD to source directory:
+ cd wmbutton-0.5
+
+ 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.80.1
+ Afterstep 1.6.?
+ Fluxbox 0.9.9
+ Clients: Red Hat 8.x, Kernel 2.4.18
+
+
+USAGE:
+------
+wmbutton [-g geom] [-d dpy] [-f cfgfile] [-b btnfile] [-F <font>]
+ [-v] [-s] [-n]
+
+ wmbutton Ver 0 Rel 6.1
+
+-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.
+-b <filename> Full path to button xpm.
+-F <font> Custom tooltip font (e.g. -b\&h-lucidatypewriter-medium-*-*-*-12-*)
+-v Verbose Mode.
+-h Help. This message.
+-m Disable Middle Mouse functionality.
+-s Swap tooltip colors.
+-n Turn off tooltips.
+
+Left mouse button:
+ Selects the application to launch, numbered 1 through 9
+
+Middle mouse button: (unless disabled (-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...
+
+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.
+
+As of release 0.5, you can also pass in your own pixmap file for the
+buttons, to override the buttons that are compiled it. This file should
+still have the same height and width so that it will make sense,
+though really you give it any XPM you want, but it will only display
+the upper left 54x54 pixel corner.
+
+
+An example file is included, related to the the buttons.xpm graphic file.
+
+
+CHANGE LOG:
+-----------
+0.6.1 Minor changes to the Makefile.
+0.6 Code cleanup and fixes for memory leaks by Christian 'Greek0' Aichinger.
+0.5 Added Modifications submitted by Ralf Horstmann.
+ Load different pixmaps at start-up time, rather than having
+ to compile them in. This also makes it much easier to run
+ multiple copies.
+ Added Modifications submitted by Michael Cohrs.
+ Added Tool-Tips
+ Updated default buttons.xpm graphics
+ General Code clean-up, including export must functions to
+ seperate C file, to reduce clutter.
+
+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:
+-----
+Add ability (via config file) to use discrete 16x16 pixel icons for
+ the buttons, rather than having to paste them all into the existing file.
+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
+<ehf_dockapps at cox.net>
+
+
+Good Luck.
+
+
+"C code. C code run. Run, code, run.
+ PLEASE!?!?!?!?!?!?"
+
+
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..f026b2e
--- /dev/null
+++ b/buttons.xpm
@@ -0,0 +1,1400 @@
+/* XPM */
+static char * buttons_xpm[] = {
+"54 54 1343 2",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+"@ c #AEAAAE",
+"# c #727272",
+"$ c #A86666",
+"% c #AE7575",
+"& c #B17878",
+"* c #B37979",
+"= c #B57979",
+"- c #B87979",
+"; c #BA7979",
+"> c #BC7A7A",
+", c #BF7A7A",
+"' c #C27C7C",
+") c #C37C7C",
+"! c #C57A7A",
+"~ c #BB8585",
+"{ c #ABABAB",
+"] c #B4B4B4",
+"^ c #6F6F6F",
+"/ c #737373",
+"( c #5D5D5D",
+"_ c #595959",
+": c #717170",
+"< c #91908F",
+"[ c #8D8C8B",
+"} c #858683",
+"| c #92928E",
+"1 c #9B9D98",
+"2 c #B0AEA8",
+"3 c #9B9C96",
+"4 c #71736A",
+"5 c #59594B",
+"6 c #474743",
+"7 c #B5B5B5",
+"8 c #6F706F",
+"9 c #686868",
+"0 c #969696",
+"a c #9B9B9B",
+"b c #9F9F9F",
+"c c #A3A3A3",
+"d c #A8A8A8",
+"e c #ACACAC",
+"f c #B1B1B1",
+"g c #FF7474",
+"h c #FFB9B9",
+"i c #FFB1B1",
+"j c #FFAAAA",
+"k c #FF9C9C",
+"l c #FF8D8D",
+"m c #FF7F7F",
+"n c #FF6565",
+"o c #FF5A5A",
+"p c #FF5757",
+"q c #FF0404",
+"r c #D90000",
+"s c #8E8E8E",
+"t c #EEEDEA",
+"u c #FFFBF7",
+"v c #FCFBF7",
+"w c #F5F7F2",
+"x c #E7E8E2",
+"y c #D5D4CB",
+"z c #BEBFB8",
+"A c #AAA99F",
+"B c #91928D",
+"C c #767879",
+"D c #6E7265",
+"E c #90917F",
+"F c #1A1D12",
+"G c #BABABA",
+"H c #514E5A",
+"I c #1A1729",
+"J c #201A30",
+"K c #23203B",
+"L c #232039",
+"M c #211E37",
+"N c #616161",
+"O c #AE7676",
+"P c #FFC4C4",
+"Q c #FFFCFC",
+"R c #FFD9D9",
+"S c #FFA6A6",
+"T c #FF9595",
+"U c #FF8686",
+"V c #FF6F6F",
+"W c #FFC0C0",
+"X c #FFABAB",
+"Y c #FF3333",
+"Z c #B60000",
+"` c #797979",
+" . c #A9A9A9",
+".. c #787878",
+"+. c #878585",
+"@. c #9F99A7",
+"#. c #4E4271",
+"$. c #342C55",
+"%. c #1A1141",
+"&. c #10043F",
+"*. c #0C0438",
+"=. c #080435",
+"-. c #080430",
+";. c #060428",
+">. c #000424",
+",. c #353647",
+"'. c #A8A99C",
+"). c #212516",
+"!. c #BEBEBE",
+"~. c #5B566C",
+"{. c #353056",
+"]. c #423968",
+"^. c #48416C",
+"/. c #484066",
+"(. c #413969",
+"_. c #B9B9B9",
+":. c #B17979",
+"<. c #FFB3B3",
+"[. c #FFF3F3",
+"}. c #FFE3E3",
+"|. c #FF8484",
+"1. c #FF7777",
+"2. c #FF6464",
+"3. c #FF8888",
+"4. c #FFD7D7",
+"5. c #FF0000",
+"6. c #C40000",
+"7. c #7A7A7A",
+"8. c #7D7D7D",
+"9. c #888785",
+"0. c #787186",
+"a. c #170450",
+"b. c #100448",
+"c. c #100444",
+"d. c #10043E",
+"e. c #0B0438",
+"f. c #353749",
+"g. c #ADAC9E",
+"h. c #2B2E1D",
+"i. c #ADADAD",
+"j. c #615C75",
+"k. c #423A61",
+"l. c #4F4D70",
+"m. c #594E85",
+"n. c #493F66",
+"o. c #B37A7A",
+"p. c #FFADAD",
+"q. c #FFE1E1",
+"r. c #FFF1F1",
+"s. c #FF7676",
+"t. c #FF6868",
+"u. c #FF6060",
+"v. c #FF4949",
+"w. c #FFCFCF",
+"x. c #FFBCBC",
+"y. c #FFC5C5",
+"z. c #CB0000",
+"A. c #7E7E7E",
+"B. c #818181",
+"C. c #888887",
+"D. c #787187",
+"E. c #110448",
+"F. c #080436",
+"G. c #070428",
+"H. c #35374A",
+"I. c #ADAEA0",
+"J. c #3B3E2B",
+"K. c #61625F",
+"L. c #635C75",
+"M. c #3D3660",
+"N. c #494169",
+"O. c #4B4669",
+"P. c #4F4A6A",
+"Q. c #8D8F8D",
+"R. c #C2C2C2",
+"S. c #B67B7B",
+"T. c #FF9F9F",
+"U. c #FFCECE",
+"V. c #FFBABA",
+"W. c #FF4C4C",
+"X. c #FF4848",
+"Y. c #FF6262",
+"Z. c #FFB4B4",
+"`. c #FFCBCB",
+" + c #C70000",
+".+ c #808080",
+"++ c #AFAFAF",
+"@+ c #868686",
+"#+ c #898A89",
+"$+ c #757084",
+"%+ c #2A185A",
+"&+ c #291D44",
+"*+ c #2E2648",
+"=+ c #170A45",
+"-+ c #B1B3A6",
+";+ c #51533D",
+">+ c #4F514D",
+",+ c #5D5871",
+"'+ c #333158",
+")+ c #3D3460",
+"!+ c #423E65",
+"~+ c #515171",
+"{+ c #9D9E9D",
+"]+ c #626262",
+"^+ c #8A8A8A",
+"/+ c #B87C7C",
+"(+ c #FF8E8E",
+"_+ c #FFC1C1",
+":+ c #FFA7A7",
+"<+ c #FF3535",
+"[+ c #FF2929",
+"}+ c #FFD3D3",
+"|+ c #FFCCCC",
+"1+ c #838383",
+"2+ c #B2B2B2",
+"3+ c #8B8B8B",
+"4+ c #8A8B8A",
+"5+ c #777085",
+"6+ c #3A334E",
+"7+ c #0C0A0C",
+"8+ c #141414",
+"9+ c #373151",
+"0+ c #0C0439",
+"a+ c #080437",
+"b+ c #393C4C",
+"c+ c #B8B9AC",
+"d+ c #64664F",
+"e+ c #565751",
+"f+ c #28233D",
+"g+ c #2E2749",
+"h+ c #373051",
+"i+ c #393561",
+"j+ c #393259",
+"k+ c #352C52",
+"l+ c #6E6E6E",
+"m+ c #BA7B7B",
+"n+ c #FF8989",
+"o+ c #FF2121",
+"p+ c #FFD1D1",
+"q+ c #CA0000",
+"r+ c #878787",
+"s+ c #B8B8B8",
+"t+ c #8F8F8F",
+"u+ c #8C8C8A",
+"v+ c #797487",
+"w+ c #5F5A6C",
+"x+ c #847A4D",
+"y+ c #817D76",
+"z+ c #282634",
+"A+ c #0E083E",
+"B+ c #060429",
+"C+ c #000425",
+"D+ c #3C3E50",
+"E+ c #BDBFB1",
+"F+ c #767860",
+"G+ c #595A54",
+"H+ c #8D8D8D",
+"I+ c #929292",
+"J+ c #959497",
+"K+ c #ACABAE",
+"L+ c #737473",
+"M+ c #302A4F",
+"N+ c #3F3C64",
+"O+ c #4B4274",
+"P+ c #4F4876",
+"Q+ c #3F3C69",
+"R+ c #BD7C7C",
+"S+ c #FAA8A8",
+"T+ c #E93B3B",
+"U+ c #F2C6C6",
+"V+ c #EB9191",
+"W+ c #D12E2E",
+"X+ c #D50000",
+"Y+ c #E88E8E",
+"Z+ c #FFD0D0",
+"`+ c #CE0000",
+" @ c #898989",
+".@ c #BCBCBC",
+"+@ c #949494",
+"@@ c #8D8D8C",
+"#@ c #7C788C",
+"$@ c #776960",
+"%@ c #E6C019",
+"&@ c #B1993D",
+"*@ c #26242E",
+"=@ c #171045",
+"-@ c #07042B",
+";@ c #3D3F52",
+">@ c #C6C5B7",
+",@ c #818368",
+"'@ c #595A53",
+")@ c #393052",
+"!@ c #494261",
+"~@ c #52497A",
+"{@ c #4F487A",
+"]@ c #4D4669",
+"^@ c #463E69",
+"/@ c #BC7B7B",
+"(@ c #E86C6C",
+"_@ c #E1A2A2",
+":@ c #DFA2A2",
+"<@ c #C34141",
+"[@ c #C54343",
+"}@ c #F0D8D8",
+"|@ c #A80000",
+"1@ c #AD0000",
+"2@ c #AB0000",
+"3@ c #AA0000",
+"4@ c #BB0000",
+"5@ c #999999",
+"6@ c #8F8E8C",
+"7@ c #8F8C9A",
+"8@ c #959398",
+"9@ c #E5E4DF",
+"0@ c #FBF8F4",
+"a@ c #383437",
+"b@ c #38334F",
+"c@ c #0B0639",
+"d@ c #06042B",
+"e@ c #47495A",
+"f@ c #C7C8BB",
+"g@ c #858770",
+"h@ c #5C5D57",
+"i@ c #14D121",
+"j@ c #332C54",
+"k@ c #3D3A69",
+"l@ c #494266",
+"m@ c #494666",
+"n@ c #494363",
+"o@ c #3F3B66",
+"p@ c #979897",
+"q@ c #AE7D7D",
+"r@ c #CD6262",
+"s@ c #EABFBF",
+"t@ c #EFCBCB",
+"u@ c #C94646",
+"v@ c #C02929",
+"w@ c #FCF5F5",
+"x@ c #C63A3A",
+"y@ c #B10000",
+"z@ c #B50000",
+"A@ c #B70000",
+"B@ c #A10000",
+"C@ c #BDBDBD",
+"D@ c #9E9E9E",
+"E@ c #90908E",
+"F@ c #707170",
+"G@ c #DEDDDA",
+"H@ c #FEFBF8",
+"I@ c #FAF7F4",
+"J@ c #969592",
+"K@ c #1B1A1C",
+"L@ c #807D8A",
+"M@ c #767580",
+"N@ c #75737C",
+"O@ c #707279",
+"P@ c #939496",
+"Q@ c #C7C5B7",
+"R@ c #797E67",
+"S@ c #999A99",
+"T@ c #58576C",
+"U@ c #5C5874",
+"V@ c #5E5576",
+"W@ c #5C597A",
+"X@ c #5E5778",
+"Y@ c #5C5570",
+"Z@ c #646464",
+"`@ c #B07C7C",
+" # c #DB8282",
+".# c #ECBABA",
+"+# c #E7AFAF",
+"@# c #DA7F7F",
+"## c #BA0D0D",
+"$# c #BD1616",
+"%# c #B00000",
+"&# c #B40000",
+"*# c #BA0000",
+"=# c #A20000",
+"-# c #C1C1C1",
+";# c #A2A2A2",
+"># c #626362",
+",# c #737270",
+"'# c #FFFBF8",
+")# c #FDFBF8",
+"!# c #FFFCFA",
+"~# c #E4E1DE",
+"{# c #060406",
+"]# c #ACAEAC",
+"^# c #EFEEEC",
+"/# c #EEEDE8",
+"(# c #E7EAE5",
+"_# c #E4E2DD",
+":# c #B9BAAC",
+"<# c #676C55",
+"[# c #E9E9E9",
+"}# c #6B6C6D",
+"|# c #828282",
+"1# c #B07B7B",
+"2# c #D36060",
+"3# c #CD4D4D",
+"4# c #C63434",
+"5# c #B80000",
+"6# c #B90000",
+"7# c #9E0000",
+"8# c #C8C8C8",
+"9# c #5B543A",
+"0# c #A19054",
+"a# c #FDFBF7",
+"b# c #FCFAF6",
+"c# c #F2E6B8",
+"d# c #090608",
+"e# c #807E6E",
+"f# c #9A9A8E",
+"g# c #95958B",
+"h# c #565947",
+"i# c #70715E",
+"j# c #78786D",
+"k# c #91928E",
+"l# c #EDEDED",
+"m# c #A4A4A4",
+"n# c #B1B0B4",
+"o# c #B1AFB4",
+"p# c #858587",
+"q# c #6B6A6B",
+"r# c #757475",
+"s# c #787678",
+"t# c #7C7A7C",
+"u# c #AC7171",
+"v# c #8B0000",
+"w# c #920000",
+"x# c #980000",
+"y# c #970000",
+"z# c #9A0000",
+"A# c #990000",
+"B# c #8F0000",
+"C# c #880000",
+"D# c #979797",
+"E# c #D5D5D5",
+"F# c #534820",
+"G# c #EFC522",
+"H# c #EFC610",
+"I# c #7D755E",
+"J# c #FEFBF7",
+"K# c #E4C261",
+"L# c #B78C0D",
+"M# c #C2A92E",
+"N# c #2C2D1E",
+"O# c #26281A",
+"P# c #515341",
+"Q# c #727370",
+"R# c #A4A5A3",
+"S# c #F2F2F2",
+"T# c #CDBC6E",
+"U# c #AE6E22",
+"V# c #6B6A6C",
+"W# c #A7A6A6",
+"X# c #8A5858",
+"Y# c #745050",
+"Z# c #755050",
+"`# c #785353",
+" $ c #795454",
+".$ c #7B5656",
+"+$ c #7E5959",
+"@$ c #805B5B",
+"#$ c #815C5C",
+"$$ c #845F5F",
+"%$ c #876363",
+"&$ c #8F6868",
+"*$ c #A58181",
+"=$ c #E7E7E7",
+"-$ c #63511C",
+";$ c #F3C410",
+">$ c #F7CF10",
+",$ c #D7B540",
+"'$ c #A6A3A3",
+")$ c #787773",
+"!$ c #956E0F",
+"~$ c #F6CA10",
+"{$ c #D4B328",
+"]$ c #7F7A62",
+"^$ c #4E4E46",
+"/$ c #2D2E24",
+"($ c #4C4C40",
+"_$ c #90918A",
+":$ c #F7F7F7",
+"<$ c #9B9B9D",
+"[$ c #6E6C6F",
+"}$ c #A7A7A7",
+"|$ c #AAAAAA",
+"1$ c #B3B3B3",
+"2$ c #B6B6B6",
+"3$ c #CBCBCB",
+"4$ c #D4D4D4",
+"5$ c #DFDFDF",
+"6$ c #FAFAFA",
+"7$ c #494847",
+"8$ c #373022",
+"9$ c #755E2F",
+"0$ c #695024",
+"a$ c #2D2B23",
+"b$ c #292921",
+"c$ c #664D24",
+"d$ c #6F5624",
+"e$ c #40403D",
+"f$ c #C6C6C6",
+"g$ c #E4E4E4",
+"h$ c #FCFCFC",
+"i$ c #C7C7C7",
+"j$ c #696869",
+"k$ c #000001",
+"l$ c #FEFEFE",
+"m$ c #020202",
+"n$ c #5C5C5C",
+"o$ c #7F7F7F",
+"p$ c #858585",
+"q$ c #888888",
+"r$ c #707070",
+"s$ c #919397",
+"t$ c #9B9EA4",
+"u$ c #9DA0A7",
+"v$ c #9FA2A9",
+"w$ c #A0A4AB",
+"x$ c #A1A5AD",
+"y$ c #A3A6AB",
+"z$ c #A6A6A6",
+"A$ c #B0B0B0",
+"B$ c #2C2C2C",
+"C$ c #F1F1F1",
+"D$ c #878D94",
+"E$ c #868D94",
+"F$ c #888E94",
+"G$ c #858C93",
+"H$ c #858B92",
+"I$ c #848A91",
+"J$ c #959595",
+"K$ c #82827A",
+"L$ c #A48E74",
+"M$ c #817A73",
+"N$ c #C3C6CC",
+"O$ c #FEFFFF",
+"P$ c #F8FAFF",
+"Q$ c #EEF1FA",
+"R$ c #E0E5F2",
+"S$ c #B3BDD1",
+"T$ c #AFB2B9",
+"U$ c #E5E5E5",
+"V$ c #939393",
+"W$ c #A1805D",
+"X$ c #FFCD81",
+"Y$ c #DD9B55",
+"Z$ c #89827B",
+"`$ c #C4C7CD",
+" % c #FAFCFF",
+".% c #F1F4FC",
+"+% c #E5EAF4",
+"@% c #DAE0ED",
+"#% c #B4B7BE",
+"$% c #202020",
+"%% c #829BB6",
+"&% c #F0F0F0",
+"*% c #EFEFEF",
+"=% c #ECECEC",
+"-% c #EBEBEB",
+";% c #A87E53",
+">% c #F5800D",
+",% c #FFCF81",
+"'% c #DE9E58",
+")% c #C9C4C3",
+"!% c #FBFDFF",
+"~% c #F5F7FD",
+"{% c #E9EDF7",
+"]% c #F5F8FD",
+"^% c #D9DFED",
+"/% c #BABDC4",
+"(% c #92D0F5",
+"_% c #10161B",
+":% c #1D2931",
+"<% c #3B5462",
+"[% c #75A6C4",
+"}% c #98D3F5",
+"|% c #7590AE",
+"1% c #EEEEEE",
+"2% c #EAEAEA",
+"3% c #919191",
+"4% c #9D9D9D",
+"5% c #A88665",
+"6% c #FF931E",
+"7% c #F57F0D",
+"8% c #FFC87E",
+"9% c #EBA863",
+"0% c #F5EEE7",
+"a% c #FDFFFF",
+"b% c #F7F9FE",
+"c% c #EDF0F9",
+"d% c #A3AFC7",
+"e% c #41ACFD",
+"f% c #256391",
+"g% c #3286C5",
+"h% c #348ACB",
+"i% c #163B57",
+"j% c #3081BE",
+"k% c #A1A1A1",
+"l% c #926F59",
+"m% c #E16E0D",
+"n% c #FF8F16",
+"o% c #FFBF64",
+"p% c #E89F5B",
+"q% c #F8F0EA",
+"r% c #EFF3FA",
+"s% c #E6EAF5",
+"t% c #DADDE4",
+"u% c #ABB5CC",
+"v% c #61BAFA",
+"w% c #172B3A",
+"x% c #040608",
+"y% c #091016",
+"z% c #5CB1EE",
+"A% c #D9D9D9",
+"B% c #B8B5B5",
+"C% c #7E7775",
+"D% c #B3AEAD",
+"E% c #CACACA",
+"F% c #E8E8E8",
+"G% c #909090",
+"H% c #82726B",
+"I% c #903400",
+"J% c #E26C0A",
+"K% c #FC890D",
+"L% c #FF8808",
+"M% c #FDB683",
+"N% c #EEC297",
+"O% c #FFF6F4",
+"P% c #F8FBFF",
+"Q% c #B4BDD1",
+"R% c #0E2537",
+"S% c #0A1A26",
+"T% c #B07B6F",
+"U% c #C46755",
+"V% c #E1705A",
+"W% c #DA6A53",
+"X% c #D16650",
+"Y% c #B35846",
+"Z% c #975C50",
+"`% c #544441",
+" & c #7F6A62",
+".& c #8F3200",
+"+& c #E26600",
+"@& c #FF7902",
+"#& c #FD9D66",
+"$& c #FFF0D8",
+"%& c #FEDBCA",
+"&& c #F9FBFF",
+"*& c #ECF0F9",
+"=& c #E1E6F2",
+"-& c #BBC3D6",
+";& c #08131D",
+">& c #716E7A",
+",& c #D3705C",
+"'& c #E06C56",
+")& c #DD6B55",
+"!& c #D76851",
+"~& c #CF644F",
+"{& c #C7614D",
+"]& c #C05D4A",
+"^& c #B85A47",
+"/& c #AE5745",
+"(& c #66443E",
+"_& c #7E6861",
+":& c #8C3301",
+"<& c #C05410",
+"[& c #D86E3A",
+"}& c #FABE97",
+"|& c #FFE1C6",
+"1& c #F0E5E7",
+"2& c #E8ECF6",
+"3& c #E5E9F4",
+"4& c #C0C8DA",
+"5& c #C0C0C0",
+"6& c #225B85",
+"7& c #3FA6F5",
+"8& c #CB7462",
+"9& c #DF6C55",
+"0& c #DB6A53",
+"a& c #D36750",
+"b& c #CB634E",
+"c& c #C45F4B",
+"d& c #BC5B48",
+"e& c #B55946",
+"f& c #AD5544",
+"g& c #A65241",
+"h& c #A15443",
+"i& c #948886",
+"j& c #6A6A6A",
+"k& c #757575",
+"l& c #6E5A53",
+"m& c #4D301B",
+"n& c #75451E",
+"o& c #C97750",
+"p& c #FBCAA9",
+"q& c #F8D4C8",
+"r& c #EBEFF8",
+"s& c #C3CBDC",
+"t& c #C4C4C4",
+"u& c #E9F6FD",
+"v& c #333334",
+"w& c #4C4C4C",
+"x& c #606E80",
+"y& c #E27E67",
+"z& c #D76852",
+"A& c #CF654F",
+"B& c #C8614D",
+"C& c #B37357",
+"D& c #6C777D",
+"E& c #647276",
+"F& c #5D6B6F",
+"G& c #566668",
+"H& c #4F6062",
+"I& c #7F817F",
+"J& c #6D6D6D",
+"K& c #777777",
+"L& c #7E7F84",
+"M& c #5F5B57",
+"N& c #5C3219",
+"O& c #BD7552",
+"P& c #EEAE8B",
+"Q& c #E1E0E2",
+"R& c #EAEEF7",
+"S& c #C5CCDD",
+"T& c #D2ECFB",
+"U& c #3B4246",
+"V& c #E5937F",
+"W& c #CC634E",
+"X& c #C45F4C",
+"Y& c #BD5C49",
+"Z& c #CEB660",
+"`& c #5B9F93",
+" * c #26849B",
+".* c #1F7B90",
+"+* c #197386",
+"@* c #297988",
+"#* c #505F61",
+"$* c #747474",
+"%* c #919398",
+"&* c #9A9B9E",
+"** c #665D5A",
+"=* c #4A3423",
+"-* c #86847E",
+";* c #EBEFF7",
+">* c #E7EBF5",
+",* c #C6CDDE",
+"'* c #CCCCCC",
+")* c #597F96",
+"!* c #989898",
+"~* c #B48A80",
+"{* c #D47B68",
+"]* c #B95A47",
+"^* c #B25845",
+"/* c #AE5E46",
+"(* c #D2D468",
+"_* c #AEC16D",
+":* c #237D90",
+"<* c #197487",
+"[* c #2C7A89",
+"}* c #2F5A62",
+"|* c #6F7272",
+"1* c #8C8C8C",
+"2* c #999CA0",
+"3* c #B2B4B9",
+"4* c #B0B3B7",
+"5* c #9D9FA4",
+"6* c #565759",
+"7* c #CDD1D8",
+"8* c #D0D0D0",
+"9* c #5E879F",
+"0* c #555352",
+"a* c #916B62",
+"b* c #C37968",
+"c* c #AD5D4D",
+"d* c #B48451",
+"e* c #CCCF68",
+"f* c #C5C769",
+"g* c #6B957C",
+"h* c #39727D",
+"i* c #274B53",
+"j* c #2D3739",
+"k* c #CACDD2",
+"l* c #F0F0F2",
+"m* c #E8EBF1",
+"n* c #E5E8EF",
+"o* c #E3E6EE",
+"p* c #E2E6EE",
+"q* c #E4E8F1",
+"r* c #E6EBF5",
+"s* c #C6CEDE",
+"t* c #AEAEAE",
+"u* c #796D6A",
+"v* c #765149",
+"w* c #8C764A",
+"x* c #97974E",
+"y* c #838447",
+"z* c #586347",
+"A* c #293B3F",
+"B* c #565858",
+"C* c #BBBBBB",
+"D* c #CFD3DA",
+"E* c #D7DCE7",
+"F* c #D3DAE6",
+"G* c #D2D8E5",
+"H* c #D1D7E5",
+"I* c #CFD6E3",
+"J* c #CDD4E3",
+"K* c #CBD2E1",
+"L* c #C9D0E0",
+"M* c #C7CFDF",
+"N* c #B6BFD2",
+"O* c #D8D8D8",
+"P* c #C3C3C3",
+"Q* c #B7B7B7",
+"R* c #A0A0A0",
+"S* c #A5A5A5",
+"T* c #BFBFBF",
+"U* c #0B0B0B",
+"V* c #090909",
+"W* c #D9D499",
+"X* c #E4D08D",
+"Y* c #EABE8D",
+"Z* c #E3B26B",
+"`* c #E3B982",
+" = c #BDA385",
+".= c #C6C6D5",
+"+= c #9494AD",
+"@= c #787879",
+"#= c #78787D",
+"$= c #838386",
+"%= c #80807B",
+"&= c #79786A",
+"*= c #868568",
+"== c #8C8C6B",
+"-= c #888874",
+";= c #EDE1C3",
+">= c #ECC48A",
+",= c #F69854",
+"'= c #F78E42",
+")= c #EB9D54",
+"!= c #FFC280",
+"~= c #DA776F",
+"{= c #EA3166",
+"]= c #DE2F66",
+"^= c #D57F6A",
+"/= c #BBA97D",
+"(= c #F3C3BC",
+"_= c #ED6B56",
+":= c #E8E1E3",
+"<= c #EEEEF2",
+"[= c #EAEAF0",
+"}= c #DEDEE7",
+"|= c #E0E0E9",
+"1= c #7F7F83",
+"2= c #A7A7AE",
+"3= c #D2D2CB",
+"4= c #EDEDC5",
+"5= c #FDF9AE",
+"6= c #EDE98B",
+"7= c #D2CF66",
+"8= c #ADA84D",
+"9= c #8E8B4B",
+"0= c #9D9986",
+"a= c #EED392",
+"b= c #FFCF86",
+"c= c #FBBB57",
+"d= c #E92F00",
+"e= c #EB2F00",
+"f= c #D85025",
+"g= c #F3B366",
+"h= c #E6466F",
+"i= c #FF0061",
+"j= c #DD7075",
+"k= c #D6B275",
+"l= c #B89A77",
+"m= c #C6BFCC",
+"n= c #F36C55",
+"o= c #EB3517",
+"p= c #DCBAB7",
+"q= c #EDEFF4",
+"r= c #EDEDF2",
+"s= c #E1E1E9",
+"t= c #C9C9D7",
+"u= c #767675",
+"v= c #8C8B7D",
+"w= c #D7D7B9",
+"x= c #FFFFF0",
+"y= c #FFFFFA",
+"z= c #FFFDD8",
+"A= c #FFFAB0",
+"B= c #FFF88D",
+"C= c #FFF566",
+"D= c #FFF746",
+"E= c #D1C336",
+"F= c #82723E",
+"G= c #9A8F7E",
+"H= c #F1DCB7",
+"I= c #FDCF86",
+"J= c #FFCF72",
+"K= c #F8BB57",
+"L= c #D02F00",
+"M= c #DF2F00",
+"N= c #EF4310",
+"O= c #F6B661",
+"P= c #E44D6C",
+"Q= c #F00877",
+"R= c #F80677",
+"S= c #DD7179",
+"T= c #CEA764",
+"U= c #CE9B60",
+"V= c #C6C3D1",
+"W= c #F3806D",
+"X= c #ED2F11",
+"Y= c #D9BCB9",
+"Z= c #EDEFF3",
+"`= c #E4E4EB",
+" - c #7D7D6B",
+".- c #D7D79A",
+"+- c #FFFBBF",
+"@- c #FFFEDB",
+"#- c #FFFEE4",
+"$- c #FFFBB2",
+"%- c #FFF986",
+"&- c #FFF658",
+"*- c #FDEF36",
+"=- c #D6B832",
+"-- c #926E35",
+";- c #6F5642",
+">- c #B5B1AC",
+",- c #F3D269",
+"'- c #F8D334",
+")- c #FFDC45",
+"!- c #FAC75D",
+"~- c #DF7D3B",
+"{- c #E97A2A",
+"]- c #E7843C",
+"^- c #EDBD61",
+"/- c #E3947A",
+"(- c #DE6C79",
+"_- c #DB3686",
+":- c #CE7E9D",
+"<- c #CE8BA6",
+"[- c #CE8188",
+"}- c #996D74",
+"|- c #D1D1D1",
+"1- c #F3CDC6",
+"2- c #E93E23",
+"3- c #DED3D3",
+"4- c #F1F1F5",
+"5- c #E6E6ED",
+"6- c #DBDBE5",
+"7- c #CDCDDA",
+"8- c #BFBFD0",
+"9- c #76756C",
+"0- c #A9A669",
+"a- c #FFF992",
+"b- c #FFF9A4",
+"c- c #FFFEE3",
+"d- c #FDFDED",
+"e- c #F5F2B4",
+"f- c #F9F477",
+"g- c #FFF23D",
+"h- c #D6BA31",
+"i- c #A97B33",
+"j- c #A67133",
+"k- c #826137",
+"l- c #A08C69",
+"m- c #FFEB19",
+"n- c #FFFF00",
+"o- c #FFF709",
+"p- c #F2D135",
+"q- c #E5C26F",
+"r- c #D3CE77",
+"s- c #D1B165",
+"t- c #CFB875",
+"u- c #AF7C77",
+"v- c #B1306F",
+"w- c #961766",
+"x- c #9D36B5",
+"y- c #9F09D6",
+"z- c #A406CC",
+"A- c #A55DB4",
+"B- c #F5EAE9",
+"C- c #EE391C",
+"D- c #DCB3AE",
+"E- c #F0F1F6",
+"F- c #F0F0F4",
+"G- c #E7E7EE",
+"H- c #E3E3EA",
+"I- c #D0D0DC",
+"J- c #C4C4D3",
+"K- c #C2C2D1",
+"L- c #89865A",
+"M- c #D2CC62",
+"N- c #FFF676",
+"O- c #FFF785",
+"P- c #FFFA9D",
+"Q- c #FCFABC",
+"R- c #E2E3DA",
+"S- c #C9C9C7",
+"T- c #BFC0A2",
+"U- c #CEB94A",
+"V- c #A5732D",
+"W- c #AD7933",
+"X- c #C79333",
+"Y- c #AD8735",
+"Z- c #907A4A",
+"`- c #CDCDCD",
+" ; c #FBEF0C",
+".; c #FFF70C",
+"+; c #DFD148",
+"@; c #DDC063",
+"#; c #D0C261",
+"$; c #D5B46A",
+"%; c #907059",
+"&; c #421B10",
+"*; c #7B0947",
+"=; c #7C0642",
+"-; c #B43ED9",
+";; c #A90BFD",
+">; c #B853C8",
+",; c #9F7258",
+"'; c #F0D5D0",
+"); c #EA3A1C",
+"!; c #E05A44",
+"~; c #E5E5E8",
+"{; c #E8E8EE",
+"]; c #CBCBD9",
+"^; c #C8C8D6",
+"/; c #868247",
+"(; c #EDE54C",
+"_; c #FFF753",
+":; c #FFF85C",
+"<; c #FDF76B",
+"[; c #EBEAC1",
+"}; c #BCBCC5",
+"|; c #686875",
+"1; c #878895",
+"2; c #BFB9B6",
+"3; c #BE903A",
+"4; c #D5A730",
+"5; c #DCB433",
+"6; c #D1AF34",
+"7; c #7F713F",
+"8; c #FAD739",
+"9; c #F3ED24",
+"0; c #F8E533",
+"a; c #D8C763",
+"b; c #EBA76F",
+"c; c #D1C260",
+"d; c #C7A65C",
+"e; c #311F0F",
+"f; c #0C0000",
+"g; c #390012",
+"h; c #5F1B24",
+"i; c #AA36BA",
+"j; c #9B0BD5",
+"k; c #9D0BD9",
+"l; c #A4569D",
+"m; c #EDA093",
+"n; c #D68678",
+"o; c #E36B58",
+"p; c #D78F85",
+"q; c #E4E7EE",
+"r; c #DCDCE5",
+"s; c #D6D6E1",
+"t; c #D2D2DE",
+"u; c #D1D1DD",
+"v; c #CECEDB",
+"w; c #78703B",
+"x; c #F0DF34",
+"y; c #F2E135",
+"z; c #F2E034",
+"A; c #E5D645",
+"B; c #D9D9D3",
+"C; c #6E6F7D",
+"D; c #A4A5A6",
+"E; c #696976",
+"F; c #DDDFE8",
+"G; c #DFCE66",
+"H; c #F4D925",
+"I; c #F3DC31",
+"J; c #F2DC32",
+"K; c #79703C",
+"L; c #D6D6D6",
+"M; c #EAC46F",
+"N; c #F0CB6C",
+"O; c #D8B36A",
+"P; c #D1BD6E",
+"Q; c #D3B375",
+"R; c #CBB260",
+"S; c #B28866",
+"T; c #0C0706",
+"U; c #020206",
+"V; c #2B1010",
+"W; c #5E3D1F",
+"X; c #CB8B8D",
+"Y; c #B78394",
+"Z; c #C27794",
+"`; c #B0747D",
+" > c #C3BECB",
+".> c #E56E5B",
+"+> c #D6C5C5",
+"@> c #EAD4D4",
+"#> c #DE4C37",
+"$> c #CFAEAF",
+"%> c #D9D0D8",
+"&> c #D5D4DF",
+"*> c #D4D4E0",
+"=> c #72643C",
+"-> c #B59434",
+";> c #BA9332",
+">> c #B48A30",
+",> c #AD8336",
+"'> c #B7B1AD",
+")> c #888A97",
+"!> c #6A6B78",
+"~> c #A3A4AB",
+"{> c #EDE871",
+"]> c #FFF53F",
+"^> c #FFF23F",
+"/> c #EDE03B",
+"(> c #8D863F",
+"_> c #DBDBDB",
+":> c #E5C895",
+"<> c #DCAF6C",
+"[> c #D8C065",
+"}> c #CEBF61",
+"|> c #C5B677",
+"1> c #ACA385",
+"2> c #9E9899",
+"3> c #434340",
+"4> c #3F3D1C",
+"5> c #744232",
+"6> c #BA7D50",
+"7> c #9B7687",
+"8> c #313FDB",
+"9> c #1E3DF1",
+"0> c #494FBA",
+"a> c #C0ABB4",
+"b> c #DA7767",
+"c> c #E3CBC9",
+"d> c #E9C7C4",
+"e> c #D76A5D",
+"f> c #D7341C",
+"g> c #D35847",
+"h> c #D36858",
+"i> c #CABCC2",
+"j> c #D7D7E2",
+"k> c #705B4A",
+"l> c #886035",
+"m> c #A77333",
+"n> c #B37E33",
+"o> c #C8952D",
+"p> c #CAAE4C",
+"q> c #C1C0AE",
+"r> c #D0D0D7",
+"s> c #E7E7EC",
+"t> c #F3F1DA",
+"u> c #FDF792",
+"v> c #FFF67B",
+"w> c #FFF468",
+"x> c #D2C957",
+"y> c #A6A058",
+"z> c #D3BB6C",
+"A> c #CFB869",
+"B> c #D0BB6C",
+"C> c #B1A5A1",
+"D> c #8A94A5",
+"E> c #2D3945",
+"F> c #444823",
+"G> c #A17741",
+"H> c #CF9A61",
+"I> c #887F9F",
+"J> c #0B2FFD",
+"K> c #002FFD",
+"L> c #324AD8",
+"M> c #9C725C",
+"N> c #B0ACAB",
+"O> c #BE7570",
+"P> c #DF5F48",
+"Q> c #D98075",
+"R> c #D2837B",
+"S> c #CCB3B2",
+"T> c #D6A19E",
+"U> c #D45341",
+"V> c #C75E4F",
+"W> c #BFB9C0",
+"X> c #D9D9E3",
+"Y> c #857A70",
+"Z> c #846337",
+"`> c #CA9633",
+" , c #D4A533",
+"., c #E2BE33",
+"+, c #F6DD2B",
+"@, c #F3EA4E",
+"#, c #E1DF9A",
+"$, c #EBEAD0",
+"%, c #FDFCE5",
+"&, c #FFFBBE",
+"*, c #FFF8A1",
+"=, c #FFF68A",
+"-, c #AFA965",
+";, c #C3BF82",
+">, c #C6A47F",
+",, c #A69F87",
+"', c #3A364D",
+"), c #525141",
+"!, c #A67E41",
+"~, c #C88B53",
+"{, c #CF9061",
+"], c #C88761",
+"^, c #897F90",
+"/, c #0F2FF3",
+"(, c #082FF7",
+"_, c #4047D8",
+":, c #81645A",
+"<, c #CA9C95",
+"[, c #E25240",
+"}, c #B74331",
+"|, c #D9A49B",
+"1, c #D8CED0",
+"2, c #DDDCE2",
+"3, c #E4E6ED",
+"4, c #DCC8CD",
+"5, c #BDB4BA",
+"6, c #C5C9D2",
+"7, c #DADAE4",
+"8, c #9C9B9A",
+"9, c #826D48",
+"0, c #B89535",
+"a, c #F0D632",
+"b, c #FEEF37",
+"c, c #FFF75B",
+"d, c #FFFB91",
+"e, c #FFFDC8",
+"f, c #FFFFF1",
+"g, c #FFFDDB",
+"h, c #FFFABD",
+"i, c #D7D292",
+"j, c #A39F72",
+"k, c #DFDEC6",
+"l, c #B27F5B",
+"m, c #D4A77A",
+"n, c #8C6636",
+"o, c #72491F",
+"p, c #9D7A45",
+"q, c #CC9A61",
+"r, c #CF9361",
+"s, c #C99061",
+"t, c #A97E5C",
+"u, c #906D5F",
+"v, c #808185",
+"w, c #8F7885",
+"x, c #A16773",
+"y, c #6D4C42",
+"z, c #B0ABAA",
+"A, c #D77B6D",
+"B, c #CB4F40",
+"C, c #D51E0F",
+"D, c #AC8183",
+"E, c #E9EFF2",
+"F, c #E5E5EC",
+"G, c #D7D8E1",
+"H, c #9E9787",
+"I, c #8D7C3D",
+"J, c #C9B434",
+"K, c #FBEA34",
+"L, c #FFF349",
+"M, c #FFF56D",
+"N, c #FFF798",
+"O, c #FFFDE8",
+"P, c #FFFEF3",
+"Q, c #D7D5B9",
+"R, c #9F9C85",
+"S, c #D0CFB3",
+"T, c #99714C",
+"U, c #DBA97B",
+"V, c #7B5029",
+"W, c #767361",
+"X, c #BBA07C",
+"Y, c #CA9E68",
+"Z, c #CA9561",
+"`, c #CF8761",
+" ' c #B3805C",
+".' c #322841",
+"+' c #413759",
+"@' c #8D7963",
+"#' c #A7735A",
+"$' c #A26453",
+"%' c #DE6253",
+"&' c #CE2B1C",
+"*' c #C84030",
+"=' c #BE5245",
+"-' c #B8BBC9",
+";' c #F3F3F6",
+">' c #DFDFE8",
+",' c #AFA77E",
+"'' c #9A9144",
+")' c #AFA73D",
+"!' c #D2C851",
+"~' c #EDE470",
+"{' c #FDF598",
+"]' c #EDE8AF",
+"^' c #D2D0BC",
+"/' c #AFAFB3",
+"(' c #A3A3A1",
+"_' c #D0CFC1",
+":' c #937257",
+"<' c #DBAA7B",
+"[' c #714D25",
+"}' c #C69D70",
+"|' c #BE8D61",
+"1' c #A77F54",
+"2' c #443251",
+"3' c #606492",
+"4' c #A39EA3",
+"5' c #A46959",
+"6' c #96734D",
+"7' c #DD6557",
+"8' c #DC3121",
+"9' c #C16F64",
+"0' c #C1C8C8",
+"a' c #BAB9AC",
+"b' c #B3B072",
+"c' c #A29E61",
+"d' c #8C885F",
+"e' c #7D7B64",
+"f' c #8C8A78",
+"g' c #A6A499",
+"h' c #C3C3C2",
+"i' c #DFDFDE",
+"j' c #D5A96D",
+"k' c #775529",
+"l' c #A17E63",
+"m' c #AC825F",
+"n' c #936958",
+"o' c #AC97A9",
+"p' c #C9B4B3",
+". . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . @ . . . . . . . . . . . . . . . . . + ",
+". # $ % & * = - ; > , ' ) ! ~ { ] + . ^ / ( _ : < [ } | 1 2 3 4 5 6 7 + . 8 8 8 8 8 8 8 8 9 0 a b c d e f + ",
+". $ g h i j k l m g n o p q r s f + . / : t u v w x y z A B C D E F G + . 8 H I J K L M 8 N a b c d e f 7 + ",
+". O P . Q R h S T U V W X Y Z ` .+ . ..+. at .#.$.%.&.*.=.-.;.>.,.'.).!.+ . 8 ~.{.].^./.(.8 N b c d e f 7 _.+ ",
+". :.<.[.. }.l |.1.2.3.. 4.5.6.7. .+ . 8.9.0.a.b.c.d.e.=.-.;.>.f.g.h.i.+ . 8 j.k.l.m.l.n.8 N c d e f 7 _.!.+ ",
+". o.p.q.r.. s.t.u.v.w.x.y.5.z.A.e + . B.C.D.a.E.c.d.e.F.-.G.>.H.I.J.K.+ . 8 L.M.N.O.P.m.8 Q.d e f 7 _.!.R.+ ",
+". S.T.U.i . V.W.X.Y.|.Z.`.5. +.++++ . @+#+$+%+&+*+=+e.F.-.;.>.H.-+;+>++ . 8 ,+'+)+!+~+{+{+{+{+{+{+{+{+]+^++ ",
+". /+(+_+:+V.. <+[+}+5._+|+5. +1+2++ . 3+4+5+6+7+8+9+0+a+-.G.>.b+c+d+e++ . 8 8 8 8 8 8 {+f+g+h+i+j+k+{+N l++ ",
+". m+m Z.:+W.. n+o+p+5.w.p+5.q+r+s++ . t+u+v+w+x+y+z+A+F.-.B+C+D+E+F+G++ . H+I+J+K+8 L+{+M+N+O+P+N.Q+{+N l++ ",
+". R+g p.S+T+U+. V+W+X+Y+Z+5.`+ @. at + . +@@@#@$@%@&@*@=@a+-.- at C+;@>@,@'@+ . {+{+{+{+{+{+{+)@!@~@{@]@^@{+N l++ ",
+". /@(@_@:@<@[@. }@|@1 at 2@3 at 4@Z ^+G + . 5 at 6@7 at 8@9 at 0@a at b@c at -.d@C+e at f@g at h@+ . {+i@{+{+{+{+{+j at k@l at m@n at o@{+N p at + ",
+". q at r@s at t@u at v@w at x@y at z@z at z@A at B@H+C at + . D at E@F at G@H at I@J at K@L at M@N at O@P at Q@R at S@+ . {+{+{+{+{+{+{+T at U@V at W@X at Y@{+Z at r++ ",
+". `@ #.#+#@###$#%#&#Z Z A@*#=#t+-#+ . ;#>#,#'#)#!#~#{#]#^#/#(#_#:#<#[#+ . b c d }#f 7 {+{+{+{+{+{+{+{+{+|#+ ",
+". 1#2#3#4#5#z at A@5#5#6#5#Z 5#7#t+8#+ . / 9#0#a#b#u c#d#e#f#g#h#i#j#k#l#+ . c d e }#7 _.d m#n#o#p#q#r#s#t#9 + ",
+". u#=#v#w#x#y#y#z#A#x#B#C#B#A#D#E#+ . F#G#H#I#J#u K#L#M#N#O#P#Q#R#l#S#+ . d e T#U#T#!.{+{+{+{+{+{+{+{+V#_ + ",
+". W#X#Y#Z#`# $.$+$@$#$$$%$&$*$i.=$+ . -$;$>$,$'$)$!$~${$]$^$/$($_$S#:$+ . }#}#U#U#U#}#{+i@{+{+{+{+{+<$[$_ + ",
+". 2+ .;#c }$|$i.1$2$_.R.3$4$5$=$6$+ . 7$8$9$0$a$b$c$d$e$f$g$[#l#S#:$h$+ . f 7 T#U#T#i${+{+{+{+{+{+{+{+j$^ + ",
+"+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
+". . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . k$",
+". l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$l$m$. ^ n$8.o$.+|#1+p$@+q$^+3+H+s r$d + . ^ / ..8.s$t$u$v$w$x$x$y$z$e A$7 + ",
+". l$l$l$l$l$l$l$l$l$l$l$l$+ B$C$C$+ . / 8.+ D$E$+ F$G$H$+ H$I$I$+ + at J$+ . K$L$M$B.N$. . O$P$Q$R$S$T$++7 G + ",
+". l$l$l$l$l$l$l$l$l$l$U$+ 9 l$l$l$+ . ..o$+ + + + + + + + + + + + V$J$+ . W$X$Y$Z$`$. . . %.%+%S$@%#%_.!.+ ",
+". l$l$l$l$l$l$l$+ + $%+ o$l$l$l$l$+ . 8..++ %%%%+ C$&%*%+ l#=%-%+ I+5 at + . ;%>%,%'%)%. . . !%~%{%S$]%^%/%R.+ ",
+". (%(%(%(%(%(%_%:%<%[%+ (%(%(%}%}%+ . B.|#+ |%|%+ &%*%1%+ =%-%2%+ 3%4%+ . 5%6%7%8%9%0%. . a%b%c%S$S$S$d%. at + ",
+". e%e%e%e%e%f%g%e%e%h%i%j%e%e%e%e%+ . @+1++ + + + + + + + + + + + 3%k%+ . l%m%n%>%o%p%q%. O$P$r%s%t%t%u%7 + ",
+". v%v%v%v%v%v%v%w%x%y%z%v%v%v%v%v%+ . 3+p$+ |%|%+ 1%A%B%C%D%E%F%+ G%m#+ . H%I%J%K%L%M%N%O%O$P%c%s%t%t%Q%s++ ",
+". e%e%e%e%e%e%R%+ S%e%e%e%e%e%e%e%+ . t+ at ++ + + + T%U%V%W%X%Y%Z%`%H+d + . H+ &.&+&@&#&$&%&&&*&=&s%t%t%-&. at + ",
+". e%e%e%e%e%e%+ ;&h%e%e%e%e%e%e%e%+ . + at q$+ |%>&,&'&)&!&~&{&]&^&/&(&|$+ . ` r+_&:&<&[&}&|&1&2&3&s%t%t%4&5&+ ",
+". e%e%e%6&;&+ + 7&e%e%e%e%e%e%e%e%+ . 5@^++ + 8&9&0&a&b&c&d&e&f&g&h&i&+ . j&^ k&l&m&n&o&p&q&r&2&s%t%t%s&t&+ ",
+". u&u&x%+ v&w&B$u&u&u&u&u&u&u&u&u&+ . D at 3++ x&y&z&A&B&]&C&D&E&F&G&H&I&+ . J&r$/ K&L&M&N&O&P&Q&R&s%t%t%S&8#+ ",
+". T&x%U&T&T&T&T&T&T&T&T&T&T&T&T&T&+ . ;#H++ + V&W&X&Y&e&Z&`& *.*+*@*#*+ . $*k&K&7.%*f &***=*-*;*>*t%t%,*'*+ ",
+". )*<%(%(%(%(%(%(%(%(%(%(%(%(%}%}%+ . }$s + !*~*{*]*^*/*(*_*:*<*[*}*|*+ . a J$1*@+2*_.3*4*5*6*7*>*t%t%,*8*+ ",
+". 9*(%(%(%(%(%(%(%(%(%(%(%(%(%}%}%+ . e k&+ + 0*a*b*c*d*e*f*g*h*i*j*. at + . e A$1$] k*l*m*n*o*p*q*r*t%t%s*4$+ ",
+". (%(%(%(%(%(%(%(%(%(%(%(%(%(%}%}%+ . A$t*d |$t*k%u*v*w*x*y*z*A*B*C*-%+ . A$7 G !.D*E*F*G*H*I*J*K*L*M*N*O*+ ",
+". (%(%(%(%(%(%(%(%(%(%(%(%(%(%}%}%+ . 7 G !.P*8#3$i$G D#A.A.J$C*A%C$h$+ . 7 G !.P*Q*R*;#S* .e ++1$2$_.T*F%+ ",
+"+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + U*V*V*+ + + + + + + + + + + + ",
+". . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . k$. . . . . . . . . . . . . . . . . + ",
+". ^ / ..8.B. at +W*X*Y*Z*`* =e e A$7 + . ^ / ..8..=.=.=.=.=.=.=.=+=e A$7 + . ^ / ..@=#=$=%=&=*===-=a }$e A$7 + ",
+". / ..;=>=,='=)=!=~={=]=^=/=. at 7 G + . / ..8.B..=(=_=:=<=[=}=|=+=+=7 G + . / ..K&1=2=3=4=5=6=7=8=9=0=A$7 G + ",
+". / a=b=c=d=e=f=g=h=i=i=j=k=l=G !.+ . ..8.B. at +m=n=o=p=q=r=s=|=+=t=+=!.+ . ..u=v=w=x=y=z=A=B=C=D=E=F=G=G !.+ ",
+". H=I=J=K=L=M=N=O=P=Q=R=S=T=U=l=P*+ . 8.B. at +3+V=W=X=Y=Z=<=`=|=+=+=+=+=+ . @= -.-+- at -y=#-$-%-&-*-=---;->-P*+ ",
+". ,-'-)-!-~-{-]-^-/-(-_-:-<-[-}-|-+ . B. at +3+t+.=1-2-3-4-<=5-|=6-7-8-+=+ . 9-0-a-b-+-c-d-e-f-g-h-i-j-k-l-8#+ ",
+". m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-l=+ . @+3+t++ at .=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-`-+ ",
+". ;n-.;+;@;#;$;%;&;*;=;-;;;;;>;,;+ . 3+t++ at 5@.=';);!;~;F-{;|=];^;.=+=+ . /;(;_;:;<;[;};|;1;2;3;4;5;6;7;|-+ ",
+". 8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;,;+ . t++ at 5@D at .=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;O;P;Q;R;S;T;U;V;W;X;Y;Z;`;,;+ . + at 5@D@;# >.>+>@>#>$>%>%>&>*>t;+=+ . =>->;>>>,>'>)>!>~>4-{>]>^>/>(>_>+ ",
+". :><>[>}>|>1>2>3>4>5>6>7>8>9>0>,;+ . 5 at D@;#}$a>b>c>d>e>f>g>h>i>j>s;+=+ . k>l>m>n>o>p>q>r>s>t>u>v>w>x>y>5$+ ",
+". ;#z>A>B>C>D>E>F>G>H>H>I>J>K>L>M>+ . D@;#}$N>O>P>Q>R>S>T>U>V>W>X>s;+=+ . Y>Z>`> ,.,+,@,#,$,%,&,*,=,-,;,g$+ ",
+". ;#}$;#>,,,',),!,~,{,],^,/,(,_,:,+ . ;#}$<,[,},|,1,2,3,`=4,5,6,7,j>+=+ . 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,D,E,[={;5-F,H-}=G,7,j>+=+ . }$H,I,J,K,L,M,N,h,O,P,Q,R,S,[#l#+ ",
+". ;#T,U,V,W,X,Y,Z,`, '.'+'@'#'$'l=+ . %'&'*'='-';'{;G-F,`=s=>'6-7,j>+=+ . e A$,''')'!'~'{']'^'/'('_'[#l#S#+ ",
+". :'<'['!.P*8#|-}'|'1'2'3'4'5'6':$+ . 7'8'9'0'.=F-{;{;5-`=|=>'r;7,j>+=+ . A$7 G a'b'c'd'e'f'g'h'i'[#l#S#:$+ ",
+". j'k'!.P*8#`-|-|-l'm'n'o'p'l=:$h$+ . 7 G !.P*+=+=+=+=+=+=+=+=+=+=+=+=+ . 7 G !.P*8#`-|-L;_>5$g$[#l#S#:$h$+ ",
+"+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "};
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/buttons2.xpm b/icons/buttons2.xpm
new file mode 100644
index 0000000..ddb5f12
--- /dev/null
+++ b/icons/buttons2.xpm
@@ -0,0 +1,854 @@
+/* XPM */
+static char * buttons_xpm[] = {
+"54 54 797 2",
+" c None",
+". c #FFFFFF",
+"+ c #AEAAAE",
+"@ c #000000",
+"# c #EDEDED",
+"$ c #E7E7E8",
+"% c #DCDCDE",
+"& c #D0D1D5",
+"* c #878D9B",
+"= c #858E9F",
+"- c #808793",
+"; c #7A869E",
+"> c #8C94A1",
+", c #A2A5AD",
+"' c #C6C6C9",
+") c #C2C2C5",
+"! c #FCFCFC",
+"~ c #F9F9F9",
+"{ c #F4F4F4",
+"] c #EFEFEF",
+"^ c #EAEAEA",
+"/ c #E6E6E6",
+"( c #E1E1E1",
+"_ c #DCDCDC",
+": c #D7D7D7",
+"< c #D3D3D3",
+"[ c #CFCFCF",
+"} c #CACACA",
+"| c #C5C5C5",
+"1 c #C0C0C0",
+"2 c #BCBCBC",
+"3 c #B7B7B7",
+"4 c #6F706F",
+"5 c #686868",
+"6 c #C5C7CF",
+"7 c #717E92",
+"8 c #889CA3",
+"9 c #CFE3D8",
+"0 c #D1E6D5",
+"a c #D1E7D4",
+"b c #D6EFD3",
+"c c #D8F0D3",
+"d c #B6C9C3",
+"e c #B8C1BE",
+"f c #ABAEB8",
+"g c #BCBCC0",
+"h c #EFEEEE",
+"i c #F6F6F4",
+"j c #F6F7F3",
+"k c #F3F4EE",
+"l c #E2E3DF",
+"m c #C5C5BE",
+"n c #B3B2A9",
+"o c #9F9F94",
+"p c #868685",
+"q c #6E706A",
+"r c #949685",
+"s c #B2B2B2",
+"t c #514E5A",
+"u c #1A1729",
+"v c #201A30",
+"w c #23203B",
+"x c #232039",
+"y c #211E37",
+"z c #616161",
+"A c #6E6E6E",
+"B c #C4C7D0",
+"C c #76899C",
+"D c #ADD1B9",
+"E c #CCFBB9",
+"F c #C5F1B5",
+"G c #B3D5AF",
+"H c #BAE1AB",
+"I c #C5F6A7",
+"J c #C3F4A2",
+"K c #BFF09E",
+"L c #AAD39E",
+"M c #86A197",
+"N c #B6B6BA",
+"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",
+"` c #A1A2A0",
+" . c #575747",
+".. c #ADADAD",
+"+. c #5B566C",
+"@. c #353056",
+"#. c #423968",
+"$. c #48416C",
+"%. c #484066",
+"&. c #413969",
+"*. c #546586",
+"=. c #90C39C",
+"-. c #E2FF9C",
+";. c #93B38F",
+">. c #79899E",
+",. c #7585AA",
+"'. c #96BA9B",
+"). c #B2EC86",
+"!. c #B0EB7F",
+"~. c #ACE777",
+"{. c #A9E571",
+"]. c #A5DF6F",
+"^. c #1C3078",
+"/. c #B2B2B6",
+"(. c #ACACB1",
+"_. c #B2B2B3",
+":. c #4D436A",
+"<. c #160350",
+"[. c #13034B",
+"}. c #110346",
+"|. c #0F0340",
+"1. c #0C033A",
+"2. c #0A0335",
+"3. c #07032F",
+"4. c #05032A",
+"5. c #A3A4A3",
+"6. c #5C5C4D",
+"7. c #A8A8A8",
+"8. c #615C75",
+"9. c #423A61",
+"0. c #4F4D70",
+"a. c #594E85",
+"b. c #493F66",
+"c. c #BEC3CF",
+"d. c #3E6C75",
+"e. c #98D080",
+"f. c #5D6C8D",
+"g. c #6174A4",
+"h. c #5F73AC",
+"i. c #6985A2",
+"j. c #9ADA69",
+"k. c #9CE05B",
+"l. c #9ADC58",
+"m. c #98DA58",
+"n. c #96D758",
+"o. c #95D358",
+"p. c #296B42",
+"q. c #6E7A9B",
+"r. c #B1B0B1",
+"s. c #4E436A",
+"t. c #070330",
+"u. c #A4A5A3",
+"v. c #61614F",
+"w. c #3B3B2E",
+"x. c #635C75",
+"y. c #3D3660",
+"z. c #494169",
+"A. c #4B4669",
+"B. c #4F4A6A",
+"C. c #8D8F8D",
+"D. c #878787",
+"E. c #A4A4A4",
+"F. c #63778E",
+"G. c #5EA750",
+"H. c #638F72",
+"I. c #4D659F",
+"J. c #4B61A2",
+"K. c #5B7E8A",
+"L. c #87CD4C",
+"M. c #8BD442",
+"N. c #89D142",
+"O. c #88CD42",
+"P. c #87CA42",
+"Q. c #84C742",
+"R. c #83C342",
+"S. c #74DD00",
+"T. c #0B2668",
+"U. c #A6A6AC",
+"V. c #AEAEAF",
+"W. c #4D4269",
+"X. c #261459",
+"Y. c #281C4E",
+"Z. c #2A1E4E",
+"`. c #150945",
+" + c #0C033B",
+".+ c #0A0336",
+"++ c #A7A7A5",
+"@+ c #6A6B59",
+"#+ c #454632",
+"$+ c #5D5871",
+"%+ c #333158",
+"&+ c #3D3460",
+"*+ c #423E65",
+"=+ c #515171",
+"-+ c #9D9E9D",
+";+ c #626262",
+">+ c #8A8A8A",
+",+ c #2B4B70",
+"'+ c #56A62B",
+")+ c #396362",
+"!+ c #3C598C",
+"~+ c #354C99",
+"{+ c #507D6E",
+"]+ c #76BF33",
+"^+ c #78C32D",
+"/+ c #77C02D",
+"(+ c #74BC2D",
+"_+ c #73B82D",
+":+ c #71B42D",
+"<+ c #6BAE28",
+"[+ c #5EB800",
+"}+ c #002F32",
+"|+ c #ACADB5",
+"1+ c #ADACAE",
+"2+ c #52476D",
+"3+ c #38314A",
+"4+ c #0A0809",
+"5+ c #181618",
+"6+ c #362F50",
+"7+ c #0F053D",
+"8+ c #000320",
+"9+ c #ABACAB",
+"0+ c #757764",
+"a+ c #565842",
+"b+ c #28233D",
+"c+ c #2E2749",
+"d+ c #373051",
+"e+ c #393561",
+"f+ c #393259",
+"g+ c #352C52",
+"h+ c #1F4B59",
+"i+ c #60C004",
+"j+ c #5EB70D",
+"k+ c #4C8A39",
+"l+ c #2A4C7E",
+"m+ c #264386",
+"n+ c #417257",
+"o+ c #4F8A3D",
+"p+ c #62AC17",
+"q+ c #5FA717",
+"r+ c #5DA317",
+"s+ c #599C18",
+"t+ c #4A881A",
+"u+ c #488C00",
+"v+ c #0F4D20",
+"w+ c #848FAC",
+"x+ c #5A5072",
+"y+ c #5F5A67",
+"z+ c #676149",
+"A+ c #777570",
+"B+ c #25232F",
+"C+ c #170E43",
+"D+ c #05032B",
+"E+ c #030326",
+"F+ c #B0B0AF",
+"G+ c #7E826D",
+"H+ c #666751",
+"I+ c #959497",
+"J+ c #ACABAE",
+"K+ c #737473",
+"L+ c #302A4F",
+"M+ c #3F3C64",
+"N+ c #4B4274",
+"O+ c #4F4876",
+"P+ c #3F3C69",
+"Q+ c #0A3455",
+"R+ c #5CB800",
+"S+ c #58B100",
+"T+ c #6BD600",
+"U+ c #2D5E1B",
+"V+ c #1A3884",
+"W+ c #1D3A85",
+"X+ c #234573",
+"Y+ c #4D9502",
+"Z+ c #4B9203",
+"`+ c #478D01",
+" @ c #38770F",
+".@ c #1D454C",
+"+@ c #1F4B5B",
+"@@ c #000E78",
+"#@ c #8692B2",
+"$@ c #AAABAB",
+"%@ c #645C7A",
+"&@ c #776349",
+"*@ c #E5C319",
+"=@ c #A78F32",
+"-@ c #27232C",
+";@ c #1E1448",
+">@ c #080330",
+",@ c #010320",
+"'@ c #B2B3B2",
+")@ c #888A75",
+"!@ c #6D6F59",
+"~@ c #393052",
+"{@ c #494261",
+"]@ c #52497A",
+"^@ c #4F487A",
+"/@ c #4D4669",
+"(@ c #463E69",
+"_@ c #30517B",
+":@ c #54A800",
+"<@ c #52A700",
+"[@ c #1F3A7F",
+"}@ c #25408A",
+"|@ c #27428B",
+"1@ c #294782",
+"2@ c #468E00",
+"3@ c #428203",
+"4@ c #428600",
+"5@ c #23466B",
+"6@ c #224542",
+"7@ c #437E00",
+"8@ c #08083D",
+"9@ c #84848C",
+"0@ c #A7A7AA",
+"a@ c #6D677D",
+"b@ c #9A9798",
+"c@ c #DBD0B1",
+"d@ c #ECE9E0",
+"e@ c #353334",
+"f@ c #362F4E",
+"g@ c #0F073A",
+"h@ c #080331",
+"i@ c #BBBCBB",
+"j@ c #8B8E79",
+"k@ c #72735E",
+"l@ c #14D121",
+"m@ c #332C54",
+"n@ c #3D3A69",
+"o@ c #494266",
+"p@ c #494666",
+"q@ c #494363",
+"r@ c #3F3B66",
+"s@ c #979897",
+"t@ c #7185A6",
+"u@ c #3D7E21",
+"v@ c #3E7B1A",
+"w@ c #253E82",
+"x@ c #2C478F",
+"y@ c #304B90",
+"z@ c #334D92",
+"A@ c #344D92",
+"B@ c #335C3A",
+"C@ c #3B7800",
+"D@ c #315660",
+"E@ c #233D6F",
+"F@ c #264A37",
+"G@ c #316902",
+"H@ c #294489",
+"I@ c #A8A7A8",
+"J@ c #636264",
+"K@ c #D9D8D7",
+"L@ c #FAFAF8",
+"M@ c #8D8D8D",
+"N@ c #18171B",
+"O@ c #514D66",
+"P@ c #434058",
+"Q@ c #403E53",
+"R@ c #3D3C4F",
+"S@ c #3A3B4A",
+"T@ c #CACBC8",
+"U@ c #8A8D78",
+"V@ c #64665B",
+"W@ c #58576C",
+"X@ c #5C5874",
+"Y@ c #5E5576",
+"Z@ c #5C597A",
+"`@ c #5E5778",
+" # c #5C5570",
+".# c #646464",
+"+# c #B7BAC1",
+"@# c #325B60",
+"## c #34623B",
+"$# c #324B91",
+"%# c #385194",
+"&# c #3C5497",
+"*# c #3F5698",
+"=# c #405799",
+"-# c #3F5699",
+";# c #3B5496",
+"># c #375095",
+",# c #2D486C",
+"'# c #2A4877",
+")# c #224372",
+"!# c #9F9EA1",
+"~# c #7F7E7E",
+"{# c #F9FAF8",
+"]# c #FBFBF9",
+"^# c #DEDFDD",
+"/# c #131313",
+"(# c #959695",
+"_# c #F0EFEA",
+":# c #ECECE7",
+"<# c #E9E9E4",
+"[# c #E7E7DE",
+"}# c #DEDED3",
+"|# c #858773",
+"1# c #555551",
+"2# c #6B6C6D",
+"3# c #828282",
+"4# c #C1C2C7",
+"5# c #7789A4",
+"6# c #375966",
+"7# c #435A9A",
+"8# c #485E9D",
+"9# c #4B609F",
+"0# c #4B619F",
+"a# c #475E9C",
+"b# c #42599A",
+"c# c #3B5396",
+"d# c #354E90",
+"e# c #364F91",
+"f# c #7A7A82",
+"g# c #A7A293",
+"h# c #F9F9F8",
+"i# c #F8F8F6",
+"j# c #F0EEDF",
+"k# c #1D1D19",
+"l# c #5D5C58",
+"m# c #C9C9BE",
+"n# c #C7C7BD",
+"o# c #939388",
+"p# c #929484",
+"q# c #9A9A8B",
+"r# c #595953",
+"s# c #515161",
+"t# c #B1B0B4",
+"u# c #B1AFB4",
+"v# c #858587",
+"w# c #6B6A6B",
+"x# c #757475",
+"y# c #787678",
+"z# c #7C7A7C",
+"A# c #C0C0C4",
+"B# c #8694BA",
+"C# c #0D2A87",
+"D# c #4F6795",
+"E# c #456952",
+"F# c #586BA6",
+"G# c #5E6DBC",
+"H# c #5F6DC0",
+"I# c #5966CC",
+"J# c #5B6EA8",
+"K# c #3A5195",
+"L# c #3A5293",
+"M# c #C7C1B4",
+"N# c #ECC635",
+"O# c #C4A420",
+"P# c #AFADA8",
+"Q# c #F9F9F6",
+"R# c #F9F9F7",
+"S# c #E6CD79",
+"T# c #7C5B09",
+"U# c #AB922F",
+"V# c #343326",
+"W# c #1E1E14",
+"X# c #313125",
+"Y# c #504F4F",
+"Z# c #CDBC6E",
+"`# c #AE6E22",
+" $ c #6B6A6C",
+".$ c #595959",
+"+$ c #BFC7E0",
+"@$ c #5369A2",
+"#$ c #234C37",
+"$$ c #30600E",
+"%$ c #336407",
+"&$ c #235A00",
+"*$ c #406736",
+"=$ c #1F397E",
+"-$ c #6C7EAF",
+";$ c #6D6D76",
+">$ c #DBC475",
+",$ c #F5CC10",
+"'$ c #F4CA10",
+")$ c #C1AC62",
+"!$ c #EEEEEC",
+"~$ c #C2C2C0",
+"{$ c #A07F2F",
+"]$ c #F5C80E",
+"^$ c #F3CB17",
+"/$ c #B0A263",
+"($ c #626254",
+"_$ c #595949",
+":$ c #747474",
+"<$ c #9B9B9D",
+"[$ c #6E6C6F",
+"}$ c #B7BFD7",
+"|$ c #8695BE",
+"1$ c #7484B4",
+"2$ c #929EC4",
+"3$ c #8997BF",
+"4$ c #A4A5AF",
+"5$ c #9A9693",
+"6$ c #B9A478",
+"7$ c #CBA133",
+"8$ c #967432",
+"9$ c #6F6D6D",
+"0$ c #6F6B6D",
+"a$ c #957642",
+"b$ c #C59D35",
+"c$ c #8D8D86",
+"d$ c #8C8C8C",
+"e$ c #7D7D7D",
+"f$ c #797979",
+"g$ c #6F6F6F",
+"h$ c #9F9F9F",
+"i$ c #696869",
+"j$ c #F8F8F8",
+"k$ c #F3F3F3",
+"l$ c #EEEEEE",
+"m$ c #E9E9E9",
+"n$ c #090909",
+"o$ c #D5D6D5",
+"p$ c #CCCCCC",
+"q$ c #C6C6C6",
+"r$ c #C1C1C1",
+"s$ c #DD0D8A",
+"t$ c #0909EF",
+"u$ c #E4E4E4",
+"v$ c #DFDFDF",
+"w$ c #DADADA",
+"x$ c #D1D1D1",
+"y$ c #A56721",
+"z$ c #A3A3A3",
+"A$ c #AFB505",
+"B$ c #F79B31",
+"C$ c #9E9E9E",
+"D$ c #EFF707",
+"E$ c #0D8214",
+"F$ c #989898",
+"G$ c #9A9A9A",
+"H$ c #939393",
+"I$ c #959595",
+"J$ c #8E8E8E",
+"K$ c #919191",
+"L$ c #050591",
+"M$ c #898989",
+"N$ c #848484",
+"O$ c #7F7F7F",
+"P$ c #7A7A7A",
+"Q$ c #757575",
+"R$ c #F4C844",
+"S$ c #707070",
+"T$ c #6B6B6B",
+"U$ c #676767",
+"V$ c #E8E5E0",
+"W$ c #E7E2C7",
+"X$ c #D9D499",
+"Y$ c #E4D08D",
+"Z$ c #EABE8D",
+"`$ c #E3B26B",
+" % c #E3B982",
+".% c #BDA385",
+"+% c #EDE1C3",
+"@% c #ECC48A",
+"#% c #F69854",
+"$% c #F78E42",
+"%% c #EB9D54",
+"&% c #FFC280",
+"*% c #DA776F",
+"=% c #EA3166",
+"-% c #DE2F66",
+";% c #D57F6A",
+">% c #BBA97D",
+",% c #95939B",
+"'% c #E609EA",
+")% c #850589",
+"!% c #EED392",
+"~% c #FFCF86",
+"{% c #FBBB57",
+"]% c #E92F00",
+"^% c #EB2F00",
+"/% c #D85025",
+"(% c #F3B366",
+"_% c #E6466F",
+":% c #FF0061",
+"<% c #DD7075",
+"[% c #D6B275",
+"}% c #B89A77",
+"|% c #88888E",
+"1% c #ECECEC",
+"2% c #FEFEFE",
+"3% c #F1DCB7",
+"4% c #FDCF86",
+"5% c #FFCF72",
+"6% c #F8BB57",
+"7% c #D02F00",
+"8% c #DF2F00",
+"9% c #EF4310",
+"0% c #F6B661",
+"a% c #E44D6C",
+"b% c #F00877",
+"c% c #F80677",
+"d% c #DD7179",
+"e% c #CEA764",
+"f% c #CE9B60",
+"g% c #FDFDFD",
+"h% c #9B9B9B",
+"i% c #F3D269",
+"j% c #F8D334",
+"k% c #FFDC45",
+"l% c #FAC75D",
+"m% c #DF7D3B",
+"n% c #E97A2A",
+"o% c #E7843C",
+"p% c #EDBD61",
+"q% c #E3947A",
+"r% c #DE6C79",
+"s% c #DB3686",
+"t% c #CE7E9D",
+"u% c #CE8BA6",
+"v% c #CE8188",
+"w% c #996D74",
+"x% c #7F7D85",
+"y% c #4F4F4F",
+"z% c #C4C4C4",
+"A% c #727272",
+"B% c #F6F6F6",
+"C% c #FFEB19",
+"D% c #FFFF00",
+"E% c #FFF709",
+"F% c #F2D135",
+"G% c #E5C26F",
+"H% c #D3CE77",
+"I% c #D1B165",
+"J% c #CFB875",
+"K% c #AF7C77",
+"L% c #B1306F",
+"M% c #961766",
+"N% c #9D36B5",
+"O% c #9F09D6",
+"P% c #A406CC",
+"Q% c #A55DB4",
+"R% c #898A8F",
+"S% c #ACACAC",
+"T% c #B0B0B1",
+"U% c #434343",
+"V% c #2F2F2F",
+"W% c #BDBEBD",
+"X% c #FBEF0C",
+"Y% c #FFF70C",
+"Z% c #DFD148",
+"`% c #DDC063",
+" & c #D0C261",
+".& c #D5B46A",
+"+& c #907059",
+"@& c #421B10",
+"#& c #7B0947",
+"$& c #7C0642",
+"%& c #B43ED9",
+"&& c #A90BFD",
+"*& c #B853C8",
+"=& c #9F7258",
+"-& c #999999",
+";& c #F0F0F0",
+">& c #6C6C6D",
+",& c #FAD739",
+"'& c #F3ED24",
+")& c #F8E533",
+"!& c #D8C763",
+"~& c #EBA76F",
+"{& c #D1C260",
+"]& c #C7A65C",
+"^& c #311F0F",
+"/& c #0C0000",
+"(& c #390012",
+"_& c #5F1B24",
+":& c #AA36BA",
+"<& c #9B0BD5",
+"[& c #9D0BD9",
+"}& c #A4569D",
+"|& c #7E7E7E",
+"1& c #D9D9D9",
+"2& c #EAC46F",
+"3& c #F0CB6C",
+"4& c #D8B36A",
+"5& c #D1BD6E",
+"6& c #D3B375",
+"7& c #CBB260",
+"8& c #B28866",
+"9& c #0C0706",
+"0& c #020206",
+"a& c #2B1010",
+"b& c #5E3D1F",
+"c& c #CB8B8D",
+"d& c #B78394",
+"e& c #C27794",
+"f& c #B0747D",
+"g& c #A8A9AF",
+"h& c #A6A7A6",
+"i& c #E5C895",
+"j& c #DCAF6C",
+"k& c #D8C065",
+"l& c #CEBF61",
+"m& c #C5B677",
+"n& c #ACA385",
+"o& c #9E9899",
+"p& c #434340",
+"q& c #3F3D1C",
+"r& c #744232",
+"s& c #BA7D50",
+"t& c #9B7687",
+"u& c #313FDB",
+"v& c #1E3DF1",
+"w& c #494FBA",
+"x& c #9E9BA5",
+"y& c #D4D4D4",
+"z& c #D3BB6C",
+"A& c #CFB869",
+"B& c #D0BB6C",
+"C& c #B1A5A1",
+"D& c #8A94A5",
+"E& c #2D3945",
+"F& c #444823",
+"G& c #A17741",
+"H& c #CF9A61",
+"I& c #887F9F",
+"J& c #0B2FFD",
+"K& c #002FFD",
+"L& c #324AD8",
+"M& c #9C725C",
+"N& c #3F4046",
+"O& c #C6A47F",
+"P& c #A69F87",
+"Q& c #3A364D",
+"R& c #525141",
+"S& c #A67E41",
+"T& c #C88B53",
+"U& c #CF9061",
+"V& c #C88761",
+"W& c #897F90",
+"X& c #0F2FF3",
+"Y& c #082FF7",
+"Z& c #4047D8",
+"`& c #81645A",
+" * c #CECECE",
+".* c #B27F5B",
+"+* c #D4A77A",
+"@* c #8C6636",
+"#* c #72491F",
+"$* c #9D7A45",
+"%* c #CC9A61",
+"&* c #CF9361",
+"** c #C99061",
+"=* c #A97E5C",
+"-* c #906D5F",
+";* c #808185",
+">* c #8F7885",
+",* c #A16773",
+"'* c #6D4C42",
+")* c #DDDDDD",
+"!* c #F2F2F2",
+"~* c #99714C",
+"{* c #DBA97B",
+"]* c #7B5029",
+"^* c #767361",
+"/* c #BBA07C",
+"(* c #CA9E68",
+"_* c #CA9561",
+":* c #CF8761",
+"<* c #B3805C",
+"[* c #322841",
+"}* c #413759",
+"|* c #8D7963",
+"1* c #A7735A",
+"2* c #A26453",
+"3* c #E0E0E0",
+"4* c #D2D2D2",
+"5* c #937257",
+"6* c #DBAA7B",
+"7* c #714D25",
+"8* c #C69D70",
+"9* c #BE8D61",
+"0* c #A77F54",
+"a* c #443251",
+"b* c #606492",
+"c* c #A39EA3",
+"d* c #A46959",
+"e* c #96734D",
+"f* c #636364",
+"g* c #737373",
+"h* c #BEBEBE",
+"i* c #979797",
+"j* c #AFAFAF",
+"k* c #D5A96D",
+"l* c #775529",
+"m* c #A17E63",
+"n* c #AC825F",
+"o* c #936958",
+"p* c #AC97A9",
+"q* c #C9B4B3",
+"r* c #737375",
+"s* c #B5B5B7",
+"t* c #B7B7B9",
+"u* c #616163",
+"v* c #0B0B0B",
+". . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . @ ",
+"# $ $ % & % * = - ; > , ' ' ) ) ) @ . ! ~ { ] ^ / ( _ : < [ } | 1 2 3 @ . 4 4 4 4 4 4 4 4 5 < [ } | 1 2 3 @ ",
+"# $ % 6 7 8 9 0 a b c d e f g g g @ . ~ { h i j k l : m n o p q r 3 s @ . 4 t u v w x y 4 z A } | 1 2 3 s @ ",
+"# % B C D E F G H I J K L M N N N @ . { O P Q R S T U V W X Y Z ` ...@ . 4 +. at .#.$.%.&.4 z A | 1 2 3 s ..@ ",
+"# % *.=.-.;.>.,.'.).!.~.{.].^./.(.@ . ] _.:.<.[.}.|.1.2.3.4.Y Z 5.6.7.@ . 4 8.9.0.a.0.b.4 z A 1 2 3 s ..7.@ ",
+"# c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.(.@ . ^ r.s.<.[.}.|.1.2.t.4.Y Z u.v.w.@ . 4 x.y.z.A.B.a.4 C.D.2 3 s ..7.E.@ ",
+"# F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.@ . / V.W.X.Y.Z.`. +.+t.4.Y Z ++ at +#+@ . 4 $+%+&+*+=+-+-+-+-+-+-+-+-+;+>+@ ",
+"# ,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+@ . ( 1+2+3+4+5+6+7+.+t.4.Y 8+9+0+a+@ . 4 4 4 4 4 4 -+b+c+d+e+f+g+-+z A @ ",
+"# h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+@ . _ 1+x+y+z+A+B+C+.+t.D+E+8+F+G+H+@ . _ : I+J+4 K+-+L+M+N+O+z.P+-+z A @ ",
+"# Q+R+S+T+U+V+W+X+Y+Z+`+ @. at +@@@#@@ . : $@%@&@*@=@-@;@.+>@D+E+,@'@)@!@@ . -+-+-+-+-+-+-+~@{@]@^@/@(@-+z A @ ",
+"# _@:@:@<@[@}@|@1 at 2@3 at 4@5 at 6@7 at 8@9@@ . < 0 at a@b at c@d at e@f at g@h at D+E+, at i@j at k@@ . -+l at -+-+-+-+-+m@n at o@p at q@r at -+z s@@ ",
+"# t at u@v at w@x at y@z at A@B at C@D at E@F at G@H at 9@@ . [ I at J@K at L@i M at N@O at P@Q at R@S at T@U at V@@ . -+-+-+-+-+-+-+W at X@Y at Z@`@ #-+.#D.@ ",
+"# +#@###$#%#&#*#=#-#;#>#,#'#)#9 at 9@@ . } !#~#{#]#]#^#/#(#_#:#<#[#}#|#1#@ . } | 1 2#3 s -+-+-+-+-+-+-+-+-+3#@ ",
+"# 4#5#6##8#9#0#9#a#b#c#d#e#f#f#@ . | 1 g#h#i#L at j#k#l#m#n#o#p#q#r#s#@ . | 1 2 2#s ..7.E.t#u#v#w#x#y#z#5 @ ",
+"# ) A#B#C#D#E#F#G#H#I#J#K#L#f#f#f#@ . M#N#O#P#Q#R#S#T#U#V#W#X#Y#s#s#s#@ . 1 2 Z#`#Z#7.-+-+-+-+-+-+-+-+ $.$@ ",
+"# ) g N +$@$#$$$%$&$*$=$-$f#f#f#;$@ . >$,$'$)$!$~${$]$^$/$($_$s#s#s#:$@ . 2#2#`#`#`#2#-+l at -+-+-+-+-+<$[$.$@ ",
+"# ) g N (.(.}$|$1$2$3$4$9 at f#f#;$;$@ . 5$6$7$8$9$0$a$b$c$d$D.3#e$f$:$g$@ . 3 s Z#`#Z#h$-+-+-+-+-+-+-+-+i$g$@ ",
+"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+". . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . @ . . . . . . . . . . . . . . . . . @ ",
+". ! ~ { ] ^ / ( _ : < [ } | 1 2 3 @ . ! j$k$l$m$n$o$o$o$n$p$q$r$2 3 s @ . ! ~ { ] ^ / ( _ : < [ } | s$s$3 @ ",
+". t$t$t$^ t$t$t$t$< t$t$t$1 2 3 s @ . j$k$l$m$u$n$n$n$n$n$n$r$2 3 s ..@ . ~ { ] ^ / ( _ : < [ } | s$s$s$s$@ ",
+". { t$t$/ ( t$t$< [ t$t$1 2 3 s ..@ . k$n$m$u$v$w$o$x$p$q$r$2 3 s ..7.@ . { ] ^ / ( _ : < [ } | @ @ s$s$s$@ ",
+". ] t$t$( _ t$t$[ } t$1 2 3 s ..7.@ . l$n$u$v$w$o$x$p$q$r$2 3 y$y$7.z$@ . ] ^ / ( _ : < [ } | @ @ A$@ s$7.@ ",
+". ^ t$t$_ t$t$t$} t$t$2 3 s ..7.E.@ . m$n$v$w$o$x$p$q$r$2 3 B$B$y$z$C$@ . ^ / ( _ : < [ } | A$D$@ @ @ 7.E.@ ",
+". / t$t$: t$[ t$| t$2 3 s ..7.E.h$@ . n$n$w$o$E$E$q$r$2 3 s B$B$y$C$F$@ . / ( _ : < [ } | A$D$D$D$@ 7.E.h$@ ",
+". ( _ t$t$t$} t$1 t$t$t$t$t$t$h$G$@ . n$n$o$l at l@E$r$2 3 s ..B$B$y$F$H$@ . ( _ : < [ } | A$D$D$D$A$7.E.h$G$@ ",
+". _ : t$t$} | t$t$3 s t$t$E.t$t$I$@ . n$n$x$l at l@E$2 3 s ..7.B$B$y$H$J$@ . _ : < [ } | A$D$D$D$A$7.E.h$G$I$@ ",
+". : < t$t$| 1 t$t$s ..t$t$h$t$t$K$@ . n$n$p$l at l@E$3 s L$L$z$B$B$y$J$M$@ . : < [ } | A$D$D$D$A$7.E.h$G$I$K$@ ",
+". < [ t$| 1 2 t$s ..t$t$h$G$t$t$d$@ . n$n$q$l at l@E$s t$t$L$C$B$B$y$M$N$@ . < [ } | A$D$D$D$A$7.E.h$G$I$K$d$@ ",
+". [ } | 1 2 3 s ..7.t$t$G$t$t$d$D.@ . p$n$r$l at l@E$..t$t$L$F$B$B$y$N$O$@ . [ } | A$D$D$D$A$7.E.h$G$I$K$d$D.@ ",
+". } | 1 2 3 s ..7.E.t$t$t$t$d$D.3#@ . q$n$2 l at l@E$7.t$t$L$H$B$B$y$O$P$@ . } | A$D$D$D$A$7.E.h$G$I$K$d$D.3#@ ",
+". | 1 2 3 s ..7.E.t$t$I$K$d$D.3#e$@ . r$n$3 l at l@E$z$t$t$L$J$B$B$y$P$Q$@ . | 1 R$D$D$A$7.E.h$G$I$K$d$D.3#e$@ ",
+". 1 2 3 s ..7.E.h$t$t$K$d$D.3#e$f$@ . 2 n$n$n$n$n$n$n$n$n$n$n$n$n$n$S$@ . 1 R$R$R$A$7.E.h$G$I$K$d$D.3#e$f$@ ",
+". 2 3 s ..7.E.h$t$t$t$t$D.3#e$f$:$@ . 3 s ..7.z$n$n$n$n$n$N$O$P$Q$S$T$@ . 2 R$R$..7.E.h$G$I$K$d$D.3#e$f$:$@ ",
+". 3 s ..7.E.h$G$I$K$d$D.3#e$f$:$g$@ . s ..7.z$C$F$H$J$M$N$O$P$Q$S$T$U$@ . @ s ..7.E.h$G$I$K$d$D.3#e$f$:$g$@ ",
+"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ",
+". . . . . . . . . . . . . . . . . @ . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . @ ",
+". ! ~ { ] V$W$X$Y$Z$`$ %.%| 1 2 3 @ . ! ~ { ] ^ / ( _ : < [ } | 1 2 3 @ . ! ~ { ] ^ / ( _ n$< [ } | 1 2 3 @ ",
+". ~ { +%@%#%$%%%&%*%=%-%;%>%2 3 s @ . ~ { ] ^ / ,%n$n$n$n$n$| 1 2 3 s @ . '%'%'%'%'%'%'%n$)%n$'%'%'%'%'%'%@ ",
+". { !%~%{%]%^%/%(%_%:%:%<%[%}%s ..@ . { ] ^ / |%n$1%2%. j$x$n$2 3 s ..@ . { ] ^ / ( _ : n$[ n$| 1 2 3 s ..@ ",
+". 3%4%5%6%7%8%9%0%a%b%c%d%e%f%}%7.@ . ] ^ / ( n$j$g%. . . . h%n$s ..7.@ . ] ^ / ( _ : < n$} n$1 2 3 s ..7.@ ",
+". i%j%k%l%m%n%o%p%q%r%s%t%u%v%w%E.@ . ^ / ( x%n$: y%z%] A%M$B%n$..7.E.@ . '%'%'%'%'%'%'%n$)%n$'%'%'%'%'%'%@ ",
+". C%D%E%F%G%H%I%J%K%L%M%N%O%P%Q%}%@ . / R%n$n$S%T%n$I$v$n$U%. n$n$n$h$@ . / ( _ : < [ } n$V%W%3 s ..7.E.h$@ ",
+". X%D%Y%Z%`% &.&+&@&#&$&%&&&&&*&=&@ . ( n$] B%{ g%g%. . . . . -&;&>&n$@ . ( _ : < [ } J$n$W%3 s ..7.E.h$G$@ ",
+". ,&'&)&!&~&{&]&^&/&(&_&:&<&[&}&=&@ . _ n$|&k$. g%g%. . . . . ! 1&d$n$@ . '%'%'%'%'%)%n$n$)%'%'%'%'%'%'%'%@ ",
+". 2&3&4&5&6&7&8&9&0&a&b&c&d&e&f&=&@ . : g&n$M$k$g%g%. . . . . 2 n$n$K$@ . : < [ } | n$h&n$n$n$J$E.h$G$I$K$@ ",
+". i&j&k&l&m&n&o&p&q&r&s&t&u&v&w&=&@ . < [ x&n$y&g%g%. . . . . n$I$K$d$@ . < [ } | 1 n$3 n$..7.n$h$G$I$K$d$@ ",
+". [ z&A&B&C&D&E&F&G&H&H&I&J&K&L&M&@ . [ } | n$y&g%g%. . . . . n$N&d$D.@ . '%'%'%'%'%n$)%n$)%'%n$'%'%'%'%'%@ ",
+". } | 1 O&P&Q&R&S&T&U&V&W&X&Y&Z&`&@ . } | 1 n$y&g%g%. . . . . *n$D.3#@ . } | 1 2 3 n$J$n$J$J$n$I$K$d$D.3#@ ",
+". | 1 .*+*@*#*$*%*&***=*-*;*>*,*'*@ . | 1 2 n$)*g%!*# . . . } j$x$n$e$@ . | 1 2 3 s ..n$n$n$n$I$K$d$D.3#e$@ ",
+". 1 ~*{*]*^*/*(*_*:*<*[*}*|*1*2*}%@ . 1 2 n$K$! g%3 -&!*. 3*n$4*g%z%n$@ . '%'%'%'%'%'%'%)%n$)%'%'%'%'%'%'%@ ",
+". 5*6*7*..7.E.h$8*9*0*a*b*c*d*e*:$@ . 2 n$f*w$g%;&n$g*h*r$i*n$j*r$j*n$@ . 2 3 s ..7.E.n$n$n$K$d$D.3#e$f$:$@ ",
+". k*l*..7.E.h$G$I$m*n*o*p*q*}%:$g$@ . 3 n$r*s*t*n$n$n$n$n$n$3#n$n$u*g$@ . 3 s ..7.E.h$n$n$J$d$D.3#e$f$:$g$@ ",
+"@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ v*n$n$@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ "};
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/wmb_libs.c b/wmb_libs.c
new file mode 100644
index 0000000..c9ea4c8
--- /dev/null
+++ b/wmb_libs.c
@@ -0,0 +1,692 @@
+/* wmb_libs.c - Edward H. Flora - ehf_dockapps at cox.net */
+/* Last Modified: 4/3/04 */
+/*
+ * These functions are designed to work with wmbutton.
+ */
+
+/* PORTABILITY:
+******************
+* Coded in ANSI C, using ANSI prototypes.
+*/
+
+/****** Include Files *************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "wmbutton.h"
+
+
+/****** ToolTip Globals ***********************************************/
+
+static struct timeval _tStart;
+
+extern struct Config_t Config;
+int _bTooltip = 0;
+XFontStruct* _fTooltip;
+int _nFontHeight, _nFontY;
+int _nScreenWidth, _nScreenHeight;
+GC _gcMono= 0;
+Window _wTooltip;
+
+/****** Parse Command Line ********************************************/
+void parseargs(int argc, char **argv) {
+ int current;
+ char *Home = getenv("HOME");
+
+ while (-1 != (current = getopt(argc, argv, "vhnmsF:b:g:d:f:"))) {
+ switch (current) {
+ case 'v':
+ Config.Verbose = 1;
+ break;
+ case '?':
+ case 'h':
+ show_usage();
+ break;
+ case 'm':
+ Config.mmouse = 1;
+ break;
+ case 'n':
+ Config.bTooltipDisable = 1;
+ break;
+ case 's':
+ Config.bTooltipSwapColors = 1;
+ break;
+ case 'g':
+ Config.Geometry_str = strdup(optarg);
+ break;
+ case 'd':
+ Config.Display_str = strdup(optarg);
+ break;
+ case 'f':
+ Config.configfile = strdup(optarg);
+ break;
+ case 'F':
+ Config.szTooltipFont = strdup(optarg);
+ break;
+ case 'b':
+ Config.buttonfile = strdup(optarg);
+ break;
+ }
+ }
+
+ if (!Config.configfile) {
+ if (Home != NULL) {
+ Config.configfile = malloc(
+ strlen(Home) + strlen(CONFFILENAME) + 1);
+ sprintf(Config.configfile, "%s%s", Home, CONFFILENAME);
+ }
+ }
+
+ if (!Config.buttonfile) {
+ if (Home != NULL) {
+ Config.buttonfile = malloc(
+ strlen(Home) + strlen(BUTTONFILENAME) + 1);
+ sprintf(Config.buttonfile, "%s%s", Home, BUTTONFILENAME);
+ }
+ }
+
+ if (!Config.Geometry_str)
+ Config.Geometry_str = "64x64+0+0";
+
+ if (!Config.Display_str)
+ Config.Display_str = "";
+
+ if (!Config.szTooltipFont)
+ Config.szTooltipFont = TOOLTIP_FONT;
+
+ if (!Config.bTooltipDisable)
+ Config.bTooltipDisable = !TOOLTIP_SUPPORT;
+
+}
+
+/****** Show Usage Information ****************************************/
+void show_usage() {
+ extern char *app_name;
+
+ fprintf(stderr,"\n");
+ fprintf(stderr,"usage: %s [-g geom] [-d dpy] [-f cfgfile] [-b btnfile] "\
+ "[-F <font>] [-v] [-s] [-n]\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,"-b <filename> Full path to button xpm.\n");
+ fprintf(stderr,"-F <font> Custom tooltip font (e.g. -b\\&h-lucidatypewriter-medium-*-*-*-12-*)\n");
+ fprintf(stderr,"-v Verbose Mode.\n");
+ fprintf(stderr,"-h Help. This message.\n");
+#if MIDMOUSE
+ fprintf(stderr,"-m Disable Middle Mouse functionality.\n");
+#else
+ fprintf(stderr,"-m Enable Middle Mouse functionality.\n");
+#endif
+ fprintf(stderr,"-s Swap tooltip colors.\n");
+ fprintf(stderr,"-n Turn off tooltips.\n");
+ fprintf(stderr,"\n");
+ exit(0);
+}/***********************************************************************/
+
+
+/****** Error Handler Routine *****************************************/
+void err_mess(int err, char *str) {
+
+ switch (err) {
+ case FAILDISP:
+ fprintf(stderr,"Fail: XOpenDisplay for %s\n", str);
+ exit(err);
+ case FAILSWIN:
+ fprintf(stderr,"Fail: XCreateSimpleWindow\n");
+ exit(err);
+ case FAILICON:
+ fprintf(stderr,"Fail: XCreateSimpleWindow\n");
+ exit(err);
+ case FAILXPM:
+ fprintf(stderr,"Fail: XCreateBitmapFromData\n");
+ break;
+ case FAILWNAM:
+ fprintf(stderr,"%s: Can't set up window name\n", str);
+ exit(err);
+ case FAILGC:
+ fprintf(stderr,"Fail: XCreateGC\n");
+ exit(err);
+ case FAILCONF:
+ fprintf(stderr, "Fail: Can't Find configuration file %s\n",str);
+ exit(err);
+ case FAILTMPL:
+ fprintf(stderr, "Fail: Can't Create 'template' Pixmap\n");
+ exit(err);
+ case FAILVIS:
+ fprintf(stderr, "Fail: Can't Create 'visible' Pixmap\n");
+ exit(err);
+ case FAILBUT:
+ fprintf(stderr, "Fail: Can't Create 'buttons' Pixmap\n");
+ exit(err);
+ default:
+ fprintf(stderr, "Fail: UnSpecified Error: %d\n",err);
+ fprintf(stderr, "Fail: %s\n",str);
+ exit(err);
+ }
+
+}/***********************************************************************/
+
+/***********************************************************************
+ * RunAppN(int app)
+ *
+ * Run the command given in the configuration file 'configfile'
+ ***********************************************************************/
+void RunAppN( int app ) {
+ char *cmndstr;
+ extern struct Config_t Config;
+
+ cmndstr = Parse(app); // Get command to pass to system
+
+ if (Config.Verbose) fprintf(stderr, "Command String: %s", cmndstr);
+
+ if (cmndstr != NULL) {
+ system(cmndstr); // if there's a command, run it
+ free(cmndstr);
+ }
+}/***********************************************************************/
+
+/***********************************************************************
+ * Parse(int app)
+ *
+ * Parses the file 'configfile' for command to execute.
+ ***********************************************************************/
+char *Parse(int app) {
+ FILE *fp;
+ char Buf[BUFFER_SIZE];
+ char *Ptr;
+
+ if ((fp = fopen(Config.configfile, "r")) == NULL)
+ err_mess(FAILCONF,Config.configfile);
+
+ while ((Ptr = fgets(Buf, BUFFER_SIZE, fp))) {
+ if (atoi(Buf) == app)
+ break;
+ }
+
+ fclose(fp);
+
+ if (!Ptr)
+ return Ptr;
+
+ Ptr = strchr(Buf, '\t'); // find first tab
+ if (Ptr == NULL) Ptr = strchr(Buf, ' '); // or space charater
+ if (Ptr == NULL) return(NULL);
+ Ptr++;
+
+ Ptr = strdup(Ptr);
+
+ return(Ptr);
+}/**********************************************************************/
+
+/***********************************************************************
+ * initTime
+ *
+ * Copyright (c) 2001 Bruno Essmann <essmann at users.sourceforge.net>
+ ***********************************************************************/
+
+void initTime () {
+ extern struct Config_t Config;
+
+ if (Config.Verbose) {
+ fprintf(stdout, "[ ] initializing time\n");
+ }
+
+ gettimeofday(&_tStart, NULL);
+}/**********************************************************************/
+
+long currentTimeMillis () {
+ struct timeval tNow;
+ struct timeval tElapsed;
+
+ gettimeofday(&tNow, NULL);
+
+ if (_tStart.tv_usec > tNow.tv_usec) {
+ tNow.tv_usec+= 1000000;
+ tNow.tv_sec--;
+ }
+ tElapsed.tv_sec= tNow.tv_sec - _tStart.tv_sec;
+ tElapsed.tv_usec= tNow.tv_usec - _tStart.tv_usec;
+ return (tElapsed.tv_sec * 1000) + (tElapsed.tv_usec / 1000);
+}/**********************************************************************/
+
+
+void getWindowOrigin (Window w, int* nX, int* nY) {
+ extern Display *display;
+ Window wWindow, wParent, wRoot;
+ Window* wChildren;
+ unsigned int nChildren;
+ unsigned int ww, wh, wb, wd;
+ int wx, wy;
+
+ wParent= w;
+ do {
+ wWindow= wParent;
+ if (!XQueryTree(display, wParent, &wRoot, &wParent, &wChildren, &nChildren))
+ return;
+
+ if (wChildren)
+ XFree(wChildren);
+
+ } while (wParent != wRoot);
+
+ if (XGetGeometry(display, wWindow, &wRoot, &wx, &wy, &ww, &wh, &wb, &wd)) {
+ if (nX) {
+ *nX= wx;
+ }
+ if (nY) {
+ *nY= wy;
+ }
+ }
+}/**********************************************************************/
+
+/***********************************************************************
+ * getButtonLocation
+ *
+ * compute location for each button's tooltip (not perfect)
+ ***********************************************************************/
+void getButtonLocation (int nButton, int* nLocationX, int* nLocationY) {
+ *nLocationX = 0;
+ *nLocationY = 8;
+ while (nButton > BUTTON_COLS) {
+ *nLocationY += BUTTON_SIZE;
+ nButton -= BUTTON_COLS;
+ }
+ while (nButton > 0) {
+ *nLocationX += BUTTON_SIZE - 1;
+ nButton--;
+ }
+}/**********************************************************************/
+
+/* SkipWord & SkipSpaces: utility functions for getNicenedString */
+char *SkipWord(char *Text) {
+ char *Result = Text;
+
+ while ((*Result != ' ')&&(*Result != '\t')&&
+ (*Result != '\n')&&(*Result != 0x00))
+ Result++;
+ return Result;
+}
+
+char *SkipSpaces(char *Text) {
+ char *Result = Text;
+
+ while ((*Result == ' ')||(*Result == '\t')||(*Result == '\n'))
+ Result++;
+ return Result;
+}
+
+/***********************************************************************
+ * getNicenedString
+ *
+ * nicen the parsed command from the .wmbutton config file
+ * - cut if too long
+ * - remove parameters, whitespace and the '&'...
+ ***********************************************************************/
+char* getNicenedString (char *old, int andAddSeparator) {
+ char *WorkStr;
+ char *WorkStrEnd;
+ char *StartPtr;
+ char *EndPtr;
+
+ char *RetStr;
+
+ if (!old) {
+ if (andAddSeparator)
+ return strdup("-- | ");
+ else
+ return strdup("--");
+ }
+
+ RetStr = malloc(strlen(old) + 3 + 1); // 3 for Seperator
+ *RetStr = 0x00;
+
+ WorkStr = strdup(old);
+ WorkStrEnd = strchr(WorkStr, 0x00);
+ StartPtr = WorkStr;
+
+ while(StartPtr < WorkStrEnd) {
+ StartPtr = SkipSpaces(StartPtr);
+ EndPtr = SkipWord(StartPtr);
+ *EndPtr = 0x00;
+
+ if ((*StartPtr == '&')||(*StartPtr == '-'))
+ break;
+
+ strcat(RetStr, StartPtr);
+ strcat(RetStr, " ");
+ StartPtr = EndPtr+1;
+ }
+
+ free(WorkStr);
+
+ if (andAddSeparator) {
+ strcat(RetStr, "| ");
+ }
+
+ return RetStr;
+}
+
+/***********************************************************************
+ * getButtonAppNames
+ *
+ * returns the 1..3 application names / commands to be shown in tooltip
+ ***********************************************************************/
+char* getButtonAppNames (int nButton) {
+ char *str = NULL;
+ char *tmp1,*tmp2;
+
+ if (!( nButton < 0 || nButton > 9 )) {
+
+ // FIXME: _Might_ overflow, but it's unlikely.
+ // Perhaps one should fix this sometime ;)
+ str = (char*) calloc (sizeof(char), BUFFER_SIZE);
+
+ tmp1 = Parse(nButton + LMASK);
+ tmp2 = getNicenedString(tmp1, 1);
+ strcat(str, tmp2);
+ free(tmp1);
+ free(tmp2);
+
+ tmp1 = Parse(nButton + MMASK);
+ tmp2 = getNicenedString(tmp1, 1);
+ strcat(str, tmp2);
+ free(tmp1);
+ free(tmp2);
+
+ tmp1 = Parse(nButton + RMASK);
+ tmp2 = getNicenedString(tmp1, 0);
+ strcat(str, tmp2);
+ free(tmp1);
+ free(tmp2);
+ }
+
+ return(str);
+}/**********************************************************************/
+
+
+int hasTooltipSupport () {
+ return !Config.bTooltipDisable;
+}/**********************************************************************/
+
+void showTooltip (int nButton, int nMouseX, int nMouseY) {
+ Pixmap pixmap, mask;
+ int nMainWinX, nMainWinY;
+ int nButtonX = 0, nButtonY = 0, nButtonWidth = 0, nButtonHeight = 0;
+ int nTextY, nX, nY, nWidth, nHeight, nSide;
+ char* szText;
+ extern struct Config_t Config;
+ extern Window iconwin;
+ extern Pixel bg_pixel, fg_pixel;
+ extern Display *display;
+ extern GC gc;
+
+ if (Config.bTooltipDisable || nButton == -1) {
+ return;
+ }
+ if (_bTooltip) {
+ hideTooltip();
+ }
+
+
+ if (Config.Verbose) {
+ fprintf(stdout, "[%8ld] showing tooltip for button %d at %d, %d\n",
+ currentTimeMillis(),
+ nButton, nMouseX, nMouseY);
+ }
+
+ szText = getButtonAppNames(nButton);
+ if(!szText)
+ return;
+
+ _bTooltip= 1;
+
+ nWidth= XTextWidth(_fTooltip, szText, strlen(szText)) + 16;
+ nHeight= _nFontHeight + 4;
+ if (nHeight < 16) {
+ nHeight= 16;
+ }
+ if (nWidth < nHeight) {
+ nWidth= nHeight;
+ }
+ if (Config.Verbose) {
+ fprintf(stdout, "[%8ld] tooltip size: %d, %d\n",
+ currentTimeMillis(), nWidth, nHeight);
+ }
+
+ getWindowOrigin(iconwin, &nMainWinX, &nMainWinY);
+ getButtonLocation(nButton, &nButtonX, &nButtonY);
+ nButtonX+= nMainWinX;
+ nButtonY+= nMainWinY;
+ nButtonWidth = BUTTON_SIZE;
+ nButtonHeight = BUTTON_SIZE;
+
+ if (nButtonX + nWidth > _nScreenWidth) {
+ nSide= TOOLTIP_RIGHT;
+ nX= nButtonX - nWidth + nButtonWidth / 2;
+ if (nX < 0) {
+ nX= 0;
+ }
+ } else {
+ nSide= TOOLTIP_LEFT;
+ nX= nButtonX + nButtonWidth / 2;
+ }
+ if (nX + nWidth > _nScreenWidth) {
+ nX= _nScreenWidth - nWidth;
+ }
+
+ if (nButtonY - (nHeight + TOOLTIP_SPACE) < 0) {
+ nSide|= TOOLTIP_TOP;
+ nY= nButtonY + nButtonHeight - 1;
+ nTextY= TOOLTIP_SPACE;
+ } else {
+ nSide|= TOOLTIP_BOTTOM;
+ nY= nButtonY - (nHeight + TOOLTIP_SPACE);
+ nTextY= 0;
+ }
+
+ pixmap= createTooltipPixmap(nWidth, nHeight, nSide, &mask);
+
+ XSetForeground(display, gc, Config.bTooltipSwapColors ? fg_pixel : bg_pixel);
+ XSetFont(display, gc, _fTooltip->fid);
+ XDrawString(display, pixmap, gc,
+ 8, nTextY + (nHeight - _nFontHeight) / 2 + _nFontY,
+ szText, strlen(szText));
+
+ XSetWindowBackgroundPixmap(display, _wTooltip, pixmap);
+
+ XResizeWindow(display, _wTooltip, nWidth, nHeight + TOOLTIP_SPACE);
+ XShapeCombineMask(display, _wTooltip, ShapeBounding, 0, 0, mask, ShapeSet);
+ XFreePixmap(display, mask);
+ XMoveWindow(display, _wTooltip, nX, nY);
+ XMapRaised(display, _wTooltip);
+ XFreePixmap(display, pixmap);
+
+ free(szText);
+}/**********************************************************************/
+
+void hideTooltip () {
+ extern struct Config_t Config;
+ extern Display *display;
+
+ if (Config.bTooltipDisable) {
+ return;
+ }
+ if (_bTooltip) {
+ if (Config.Verbose) {
+ fprintf(stdout, "[%8ld] hiding tooltip\n", currentTimeMillis());
+ }
+ XUnmapWindow(display, _wTooltip);
+ _bTooltip= 0;
+ }
+}/**********************************************************************/
+
+int hasTooltip () {
+ if (Config.bTooltipDisable) {
+ return 0;
+ }
+ return _bTooltip;
+}/**********************************************************************/
+
+void initTooltip () {
+ XSetWindowAttributes attribs;
+ unsigned long vmask;
+ extern Display *display;
+ extern char *app_name;
+ extern int screen;
+ extern Window rootwin, win;
+
+ if (Config.bTooltipDisable) {
+ if (Config.Verbose) {
+ fprintf(stdout, "[%8ld] initializing tooltips (disabled)\n",
+ currentTimeMillis());
+ }
+
+ return;
+ }
+ if (Config.Verbose) {
+ fprintf(stdout, "[%8ld] initializing tooltips\n", currentTimeMillis());
+ }
+ _fTooltip= XLoadQueryFont(display, Config.szTooltipFont);
+ if (!_fTooltip) {
+ fprintf(stderr, "%s: couldn't allocate font '%s'.\n", app_name, Config.szTooltipFont);
+ if (!strcmp(Config.szTooltipFont, TOOLTIP_FONT))
+ fprintf(stderr, "%s: Use option -F <font>\n", app_name);
+ exit(-1);
+ }
+ _nFontHeight= _fTooltip->ascent + _fTooltip->descent;
+ _nFontY= _fTooltip->ascent;
+ _nScreenWidth= WidthOfScreen(ScreenOfDisplay(display, screen));
+ _nScreenHeight= HeightOfScreen(ScreenOfDisplay(display, screen));
+ if (Config.Verbose) {
+ fprintf(stdout, "[%8ld] configuring tooltip font:\n" \
+ "[%8ld] - '%s'\n" \
+ "[%8ld] - font-height= %d, font-ascent= %d\n" \
+ "[%8ld] configuring screen size: %dx%d\n",
+ currentTimeMillis(),
+ currentTimeMillis(), Config.szTooltipFont,
+ currentTimeMillis(), _nFontHeight, _nFontY,
+ currentTimeMillis(), _nScreenWidth, _nScreenHeight );
+ }
+
+ vmask= CWSaveUnder | CWOverrideRedirect | CWBorderPixel;
+ attribs.save_under= True;
+ attribs.override_redirect= True;
+ attribs.border_pixel= 0;
+ _wTooltip= XCreateWindow(display, rootwin, 1, 1, 10, 10, 1,
+ CopyFromParent, CopyFromParent,
+ CopyFromParent, vmask, &attribs);
+ if (win == 0) {
+ fprintf(stderr, "Cannot create tooltip window.\n");
+ exit(-1);
+ }
+}/**********************************************************************/
+
+void destroyTooltip () {
+ extern Display *display;
+
+ if (Config.bTooltipDisable) {
+ return;
+ }
+ if (_gcMono) {
+ XFreeGC(display, _gcMono);
+ _gcMono= 0;
+ }
+ XDestroyWindow(display, _wTooltip);
+}/**********************************************************************/
+
+void drawTooltipBalloon (Pixmap pix, GC gc, int x, int y, int w, int h, int side) {
+ extern Display *display;
+ int rad = h*3/10;
+ XPoint pt[3];
+
+ XFillArc(display, pix, gc, x, y, rad, rad, 90*64, 90*64);
+ XFillArc(display, pix, gc, x, y+h-1-rad, rad, rad, 180*64, 90*64);
+
+ XFillArc(display, pix, gc, x+w-1-rad, y, rad, rad, 0*64, 90*64);
+ XFillArc(display, pix, gc, x+w-1-rad, y+h-1-rad, rad, rad, 270*64, 90*64);
+
+ XFillRectangle(display, pix, gc, x, y+rad/2, w, h-rad);
+ XFillRectangle(display, pix, gc, x+rad/2, y, w-rad, h);
+
+ if (side & TOOLTIP_BOTTOM) {
+ pt[0].y = y+h-1;
+ pt[1].y = y+h-1+TOOLTIP_SPACE;
+ pt[2].y = y+h-1;
+ } else {
+ pt[0].y = y;
+ pt[1].y = y-TOOLTIP_SPACE;
+ pt[2].y = y;
+ }
+ if (side & TOOLTIP_RIGHT) {
+ pt[0].x = x+w-h+2*h/16;
+ pt[1].x = x+w-h+11*h/16;
+ pt[2].x = x+w-h+7*h/16;
+ } else {
+ pt[0].x = x+h-2*h/16;
+ pt[1].x = x+h-11*h/16;
+ pt[2].x = x+h-7*h/16;
+ }
+ XFillPolygon(display, pix, gc, pt, 3, Convex, CoordModeOrigin);
+}/**********************************************************************/
+
+Pixmap createTooltipPixmap (int width, int height, int side, Pixmap *mask) {
+ extern Display *display;
+ extern GC gc;
+ extern Pixel bg_pixel, fg_pixel;
+ extern int depth;
+ extern Window rootwin;
+ Pixmap bitmap;
+ Pixmap pixmap;
+ int x, y;
+
+ bitmap = XCreatePixmap(display, rootwin,
+ width+TOOLTIP_SPACE, height+TOOLTIP_SPACE, 1);
+
+ if (!_gcMono) {
+ _gcMono= XCreateGC(display, bitmap, 0, NULL);
+ }
+ XSetForeground(display, _gcMono, 0);
+ XFillRectangle(display, bitmap, _gcMono, 0, 0,
+ width+TOOLTIP_SPACE, height+TOOLTIP_SPACE);
+
+ pixmap = XCreatePixmap(display, rootwin,
+ width+TOOLTIP_SPACE, height+TOOLTIP_SPACE, depth);
+ XSetForeground(display, gc, Config.bTooltipSwapColors ? fg_pixel : bg_pixel);
+ XFillRectangle(display, pixmap, gc, 0, 0,
+ width+TOOLTIP_SPACE, height+TOOLTIP_SPACE);
+
+ if (side & TOOLTIP_BOTTOM) {
+ y = 0;
+ } else {
+ y = TOOLTIP_SPACE;
+ }
+ x = 0;
+
+ XSetForeground(display, _gcMono, 1);
+ drawTooltipBalloon(bitmap, _gcMono, x, y, width, height, side);
+ XSetForeground(display, gc, Config.bTooltipSwapColors ? bg_pixel : fg_pixel);
+ drawTooltipBalloon(pixmap, gc, x+1, y+1, width-2, height-2, side);
+
+ *mask = bitmap;
+
+ return pixmap;
+}/***********************************************************************/
+
+
+/***********************************************************************
+ * flush_expose
+ *
+ * Everyone else has one of these... Can't hurt to throw it in.
+ ***********************************************************************/
+int flush_expose(Window w) {
+ extern Display *display;
+ XEvent dummy;
+ int i=0;
+
+ while (XCheckTypedWindowEvent(display, w, Expose, &dummy)) i++;
+ return(i);
+}/***********************************************************************/
diff --git a/wmbutton.c b/wmbutton.c
new file mode 100644
index 0000000..a2e46ac
--- /dev/null
+++ b/wmbutton.c
@@ -0,0 +1,557 @@
+/***********************************************************************
+ * Code is based on wmppp, wmload, wmtime, wmcp, and asbutton
+ * Author: Edward H. Flora <ehflora at ksu.edu>
+ * Ver 0 Rel 6.1 Jan 23, 2005
+ *
+ * Contributors:
+ * Christian 'Greek0' Aichinger <Greek0 at gmx.net>
+ * Did some code cleanup and fixed several memory leaks.
+ * Ralf Horstmann <ralf.horstmann at gmx.de>
+ * Added ability to load pixmaps at startup,
+ * without having to re-compile
+ * Michael Cohrs <camico at users.sourceforge.net>
+ * Added Tool Tips, and updated graphics
+ * Bruno Essmann <essmann at users.sourceforge.net>)
+ * Creator of wmpager
+ * Casey Harkins <charkins at cs.wisc.edu>
+ * Bug fix reading config file path - 3/6/99
+ * Added button-presses, and other - denoted by *charkins*
+ * Ben Cohen <buddog at aztec.asu.edu>
+ * original author of wmcp (et al.)
+ * Thomas Nemeth <tnemeth at multimania.com>
+ * contributor to wmcp
+ * 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 <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+
+#include "wmbutton.h"
+
+#include "backdrop.xpm" /* background graphic */
+#include "buttons.xpm" /* graphic of 9 buttons */
+#include "mask.xbm" /* Border Graphic */
+
+/*************** Function Prototypes ***********************************/
+void redraw(void);
+void getPixmaps(void);
+int whichButton(int x, int y); // determine which button has been pressed
+void SetWmHints();
+void SetClassHints();
+
+/***********************************************************************
+ * 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;
+
+struct Config_t Config;
+
+typedef struct _XpmIcon {
+ Pixmap pixmap;
+ Pixmap mask;
+ XpmAttributes attributes;
+} XpmIcon;
+
+typedef struct _button_region {
+ int x,y;
+ int i,j;
+} ButtonArea;
+
+ButtonArea button_region[9];
+
+XpmIcon template, visible, buttons;
+
+int border = 0;
+int button_pressed = -1; /* button to be drawn pressed *charkins*/
+
+char *app_name = "wmbutton";
+
+/***********************************************************************
+ * Main
+ ***********************************************************************/
+int main( int argc, char ** argv ) {
+
+ XEvent report;
+ XGCValues xgcValues;
+ XTextProperty app_name_atom;
+ XSizeHints xsizehints;
+
+ Pixmap pixmask;
+
+ int dummy = 0;
+ int N = 1; /* Button number pressed to goto app # */
+
+ /* Added for Tool Tip Support */
+ long nTooltipShowDelay = TOOLTIP_SHOW_DELAY;
+ long nTooltipReshowDelay = TOOLTIP_RESHOW_DELAY;
+ long nTooltipTimer = -1;
+ long nTooltipHideTimer = -1;
+ long nNow;
+ int nTooltipButton = 0, nTooltipX = 0, nTooltipY = 0;
+
+ /* Parse Command Line Arguments */
+ parseargs(argc, argv);
+
+ /* Open Display */
+ if ( (display = XOpenDisplay(Config.Display_str)) == NULL )
+ err_mess(FAILDISP, Config.Display_str);
+
+ 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,
+ Config.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 )
+ err_mess(FAILSWIN, NULL);
+
+
+ if ( (iconwin = XCreateSimpleWindow(display,
+ win,
+ xsizehints.x,
+ xsizehints.y,
+ xsizehints.width,
+ xsizehints.height,
+ border,
+ fg_pixel, bg_pixel) ) == 0 )
+ err_mess(FAILICON, NULL);
+
+ /* 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 )
+ err_mess(FAILXPM,NULL);
+
+
+ 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 */
+ SetWmHints();
+ SetClassHints();
+
+
+ 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 )
+ err_mess(FAILWNAM,app_name);
+ XSetWMName( display, win, &app_name_atom );
+
+ /* Create Graphic Context */
+ if (( gc = XCreateGC(display, win,(GCForeground | GCBackground), &xgcValues))
+ == NULL )
+ err_mess(FAILGC,NULL);
+
+ /* XEvent Masks. We want both window to process X events */
+ XSelectInput(display, win,
+ ExposureMask |
+ ButtonPressMask |
+ ButtonReleaseMask | /* added ButtonReleaseMask *charkins*/
+ PointerMotionMask |
+ StructureNotifyMask |
+ LeaveWindowMask );
+ XSelectInput(display, iconwin,
+ ExposureMask |
+ ButtonPressMask |
+ ButtonReleaseMask | /* added ButtonReleaseMask *charkins*/
+ PointerMotionMask |
+ StructureNotifyMask |
+ LeaveWindowMask );
+
+ /* 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 );
+
+ /* Initialize Tooltip Support */
+ initTime();
+ initTooltip(!Config.bTooltipDisable, Config.szTooltipFont, Config.bTooltipSwapColors);
+
+ /* X Event Loop */
+ while (1) {
+ while (XPending(display) || nTooltipTimer == -1) {
+ XNextEvent(display, &report );
+ switch (report.type) {
+ case Expose:
+ if (report.xexpose.count != 0) {
+ break;
+ }
+ if ( Config.Verbose ) fprintf(stdout,"Event: Expose\n");
+ redraw();
+ break;
+
+ case ConfigureNotify:
+ if ( Config.Verbose ) fprintf(stdout,"Event: ConfigureNotify\n");
+ redraw();
+ break;
+
+ case MotionNotify:
+ if (hasTooltipSupport()) {
+ if (!hasTooltip()) {
+ nTooltipTimer= currentTimeMillis();
+ nTooltipX= report.xbutton.x;
+ nTooltipY= report.xbutton.y;
+ nTooltipButton= whichButton(report.xbutton.x, report.xbutton.y);
+ } else {
+ int nButton = whichButton(report.xbutton.x, report.xbutton.y);
+ if (nButton != nTooltipButton) {
+ hideTooltip();
+ nTooltipTimer= -1;
+ nTooltipX = report.xbutton.x;
+ nTooltipY = report.xbutton.y;
+ nTooltipButton = nButton;
+ showTooltip(nTooltipButton, nTooltipX, nTooltipY);
+ }
+ }
+ }
+ break;
+
+ case LeaveNotify:
+ if ( Config.Verbose ) fprintf(stdout,"Event: LeaveNotify\n");
+ if (hasTooltip()) {
+ hideTooltip();
+ nTooltipHideTimer= currentTimeMillis();
+ }
+ nTooltipTimer= -1;
+ break;
+
+ case ButtonPress: /* draw button pressed, don't launch *charkins*/
+ if (hasTooltip()) {
+ hideTooltip();
+ nTooltipHideTimer= currentTimeMillis();
+ } 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 ( Config.Verbose )
+ fprintf(stdout,"Button 1:x=%d y=%d N=%d\n",
+ report.xbutton.x, report.xbutton.y, N+LMASK);
+
+ break;
+ case Button2:
+ if (Config.mmouse) {
+ N = whichButton(report.xbutton.x, report.xbutton.y );
+ if ( (N >= 0) && (N <= NUMB_OF_APPS) ) {
+ button_pressed = N + MMASK;
+ redraw();
+ }
+
+ if ( Config.Verbose )
+ fprintf(stdout,"Button 2: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 ( Config.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 ( Config.Verbose )
+ fprintf(stdout,"Button 1:x=%d y=%d N=%d\n",
+ report.xbutton.x, report.xbutton.y, N+LMASK);
+
+ break;
+ case Button2:
+ if (Config.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 ( Config.Verbose )
+ fprintf(stdout,"Button 2: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 ( Config.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 ( Config.Verbose ) fprintf(stdout, "Bye\n");
+
+ destroyTooltip();
+ XFreeGC(display, gc);
+ XDestroyWindow(display,win);
+ XDestroyWindow(display,iconwin);
+ XCloseDisplay(display);
+ exit(0);
+ break;
+ }
+ }
+
+ usleep(50000);
+ nNow = currentTimeMillis();
+ if ( nTooltipTimer != -1 &&
+ ( (nNow > nTooltipTimer + nTooltipShowDelay) || (nNow < nTooltipHideTimer + nTooltipReshowDelay) ) ) {
+ showTooltip(nTooltipButton, nTooltipX, nTooltipY);
+ nTooltipTimer = -1;
+ }
+
+ }
+
+ 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;
+
+ if ( Config.Verbose ) fprintf(stdout,"In Redraw()\n");
+ 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 );
+
+}/***********************************************************************/
+
+/***********************************************************************
+ * 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);
+}/***********************************************************************/
+
+
+/***********************************************************************
+ * 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() {
+ int loaded = 0;
+ template.attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions);
+ visible.attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions);
+ buttons.attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions);
+
+
+ if (Config.Verbose) fprintf(stdout, "In getPixmaps\n");
+ /* Template Pixmap. Never Drawn To. */
+ if ( XpmCreatePixmapFromData( display, rootwin, backdrop_xpm,
+ &template.pixmap, &template.mask,
+ &template.attributes) != XpmSuccess )
+ err_mess(FAILTMPL, NULL);
+
+ /* Visible Pixmap. Copied from template Pixmap and then drawn to. */
+ if ( XpmCreatePixmapFromData( display, rootwin, backdrop_xpm,
+ &visible.pixmap, &visible.mask,
+ &visible.attributes) != XpmSuccess )
+ err_mess(FAILVIS, NULL);
+
+ /* Button Pixmap. */
+ if ( access( Config.buttonfile, R_OK ) == 0 ) {
+ /* load buttons from file */
+ if ( XpmReadFileToPixmap( display, rootwin, Config.buttonfile,
+ &buttons.pixmap, &buttons.mask,
+ &buttons.attributes) != XpmSuccess ) {
+ err_mess(FAILBUT, NULL);
+ } else {
+ loaded = 1;
+ }
+ }
+ if (! loaded) {
+ /* Use Builtin Button Pixmap. */
+ if (Config.Verbose) fprintf(stdout, "Using builtin buttons pixmap\n");
+ if ( XpmCreatePixmapFromData( display, rootwin, buttons_xpm,
+ &buttons.pixmap, &buttons.mask,
+ &buttons.attributes) != XpmSuccess )
+ err_mess(FAILBUT, NULL);
+ }
+ if (Config.Verbose) fprintf(stdout, "Leaving getPixmaps\n");
+
+}/*********************************************************************/
+
+void SetWmHints() {
+ XWMHints *xwmhints;
+
+ xwmhints = XAllocWMHints();
+ xwmhints->flags = WindowGroupHint | IconWindowHint | StateHint;
+ xwmhints->icon_window = iconwin;
+ xwmhints->window_group = win;
+ xwmhints->initial_state = WithdrawnState;
+ XSetWMHints( display, win, xwmhints );
+ XFree(xwmhints);
+ xwmhints = NULL;
+}
+
+void SetClassHints() {
+ XClassHint xclasshint;
+
+ xclasshint.res_name = "wmbutton";
+ xclasshint.res_class = "Wmbutton";
+ XSetClassHint( display, win, &xclasshint );
+}
+
diff --git a/wmbutton.h b/wmbutton.h
new file mode 100644
index 0000000..178f896
--- /dev/null
+++ b/wmbutton.h
@@ -0,0 +1,107 @@
+/* wmbutton.h - Edward H. Flora - ehf_dockapps at cox.net */
+/* Last Modified 3/27/04 */
+
+/****** Include Files ***************************************************/
+#include <Xlib.h>
+#include <Xutil.h>
+#include <xpm.h>
+#include <extensions/shape.h>
+#include <keysym.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/time.h>
+#include <unistd.h>
+
+/****** Define Config File Info ***************************************/
+#define CONFFILENAME "/.wmbutton" /* Default conf filename $HOME/.wmbutton */
+#define BUTTONFILENAME "/.wmbutton.xpm"
+
+/****** Version / Release Number ***************************************/
+#define VER 0 /* Version Number */
+#define REL 6 /* Release Number */
+
+/****** Define Error Codes *********************************************/
+#define FAILDISP 20
+#define FAILSWIN 21
+#define FAILICON 22
+#define FAILXPM 23
+#define FAILWNAM 24
+#define FAILGC 25
+#define FAILCONF 26
+#define FAILTMPL 27
+#define FAILVIS 28
+#define FAILBUT 29
+
+/****** Define Other Options ****************************************/
+#define VERB 0 /* Enable=1, Disable=0: Debugging (verbose) Mode*/
+#define MIDMOUSE 1 /* Define Middle Mouse functionality */
+#define LMASK 0 /* left button mask: run app # mask + button #*/
+#define MMASK 10 /* middle button mask: run app # mask + button #*/
+#define RMASK 20 /* right button mask: run app # mask + button #*/
+#define NUMB_OF_APPS 9 /* Define number of apps */
+
+#define EOLN '\n' /* Defines the new line character */
+#define SIZE1 20 /* Defines the increment to increase the */
+ /* string by until a newline of EOF is found */
+
+/****** Defines for Tool Tips ***************************************/
+#define TOOLTIP_SUPPORT 1
+#define TOOLTIP_FONT "-*-helvetica-medium-r-normal-*-10-*-*-*-*-*-*-*"
+#define TOOLTIP_FONT_LEN 128
+#define TOOLTIP_SHOW_DELAY 750
+#define TOOLTIP_RESHOW_DELAY 1500
+
+#define TOOLTIP_SPACE 12
+#define TOOLTIP_TOP 0
+#define TOOLTIP_BOTTOM 1
+#define TOOLTIP_LEFT 0
+#define TOOLTIP_RIGHT 2
+
+#define BUTTON_SIZE 18
+#define BUTTON_COLS 3
+
+#define BUFFER_SIZE 1024
+
+/****** Typedefs *******************************************/
+
+struct Config_t {
+ char *configfile;
+ char *buttonfile;
+ char *Geometry_str;
+ char *Display_str;
+ int mmouse;
+ int Verbose;
+ char* szTooltipFont;
+ int bTooltipSwapColors;
+ int bTooltipDisable;
+};
+
+/****** Function Prototyes *******************************************/
+void RunAppN(int app); // function to run app N as found in conf file
+char *Parse(int app); // parse data in config file
+void parseargs(int argc, char **argv);
+char *readln(FILE *fp); // read line from file, return pointer to it
+void err_mess(int err, char *str); // Error Handling Routine
+void show_usage(void); // show usage message to stderr
+int flush_expose(Window w);
+
+
+/****** Tooltip Function Prototypes **********************************/
+void initTooltip();
+void destroyTooltip ();
+int hasTooltipSupport ();
+void showTooltip (int nButton, int nMouseX, int nMouseY);
+void hideTooltip ();
+int hasTooltip ();
+void drawTooltipBalloon (Pixmap pix, GC gc, int x, int y, int w, int h, int side);
+Pixmap createTooltipPixmap (int width, int height, int side, Pixmap *mask);
+
+void initTime ();
+long currentTimeMillis ();
+void getWindowOrigin (Window w, int* nX, int* nY);
+void getButtonLocation (int nButton, int* nLocationX, int* nLocationY);
+char *getButtonAppNames (int nButton);
+
+/**********************************************************************/
--
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