[Pkg-wmaker-commits] [wmbutton] 01/09: Import Upstream version 0.4
Doug Torrance
dtorrance-guest at moszumanska.debian.org
Sun Jul 16 03:13:30 UTC 2017
This is an automated email from the git hooks/post-receive script.
dtorrance-guest pushed a commit to branch master
in repository wmbutton.
commit 17a22a00a2d5e80dacc6fc5c686e349a659df547
Author: Doug Torrance <dtorrance at piedmont.edu>
Date: Sat Jul 15 23:11:56 2017 -0400
Import Upstream version 0.4
---
.wmbutton | 47 ++++
COPYING | 339 ++++++++++++++++++++++++
Makefile | 16 ++
README | 170 ++++++++++++
backdrop.xpm | 126 +++++++++
buttons.xpm | 715 ++++++++++++++++++++++++++++++++++++++++++++++++++
icons/audio.xpm | 32 +++
icons/blankbutton.xpm | 25 ++
icons/edit.xpm | 29 ++
icons/ftp.xpm | 111 ++++++++
icons/graph.xpm | 32 +++
icons/gv.xpm | 84 ++++++
icons/netscape.xpm | 135 ++++++++++
icons/paint.xpm | 232 ++++++++++++++++
icons/wp.xpm | 27 ++
icons/xterm.xpm | 202 ++++++++++++++
mask.xbm | 68 +++++
readln.c | 59 +++++
wmbutton.c | 593 +++++++++++++++++++++++++++++++++++++++++
19 files changed, 3042 insertions(+)
diff --git a/.wmbutton b/.wmbutton
new file mode 100644
index 0000000..6da6a5e
--- /dev/null
+++ b/.wmbutton
@@ -0,0 +1,47 @@
+# .wmbutton - Configuration file for wmbutton
+# Last Modified 3/7/99
+
+# Buttons are numbered as follows
+# Left 1 2 3 Middle 11 12 13 Right 21 22 23
+# button 4 5 6 button 14 15 16 button 24 25 26
+# 7 8 9 17 18 19 27 28 29
+#
+
+1 netscape &
+11 netscape &
+21 netscape &
+
+2 nxterm -geometry 80x35 -sb -T 'nxterm' -fg white -bg grey30 &
+12 aterm -tr -geometry 80x35 -sb -T 'Aterm' -fg white -bg black &
+22 rxvt -geometry 80x35 -T 'Rxvt' &
+
+3 wxftp &
+13 nxterm -fg black -bg grey70 -T 'FTP' -e ftp &
+23
+
+4 xwp &
+14 nxterm -fg black -bg grey80 -T 'Pine' -e pine &
+24 nxterm -fg black -bg grey80 -T 'Pine' -e pine &
+
+5 nxterm -geometry 120x20 -fg white -bg grey20 -T 'Gnuplot' -e gnuplot &
+15 nxterm -geometry 120x20 -fg white -bg grey20 -T 'Gnuplot' -e gnuplot &
+25 xspread -fg white -bg midnightblue &
+
+6 xemacs &
+16 nxterm -fg black -bg grey50 -T 'Pico Editor' -e pico -w &
+26 nxterm -geometry 120x35 -fg black -bg grey70 -T 'WMButton Config Editor' -e pico -w ~/.wmbutton &
+
+7 gimp &
+17 xpaint &
+27 xv &
+
+8 gv &
+18 xdvi &
+28 xpdf &
+
+9 x11amp -b 128 &
+19 xmixer &
+29 xplaycd &
+
+# The above don't need to be in any particular order.
+# Repeated entries should be ignored
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..a43ea21
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..288c412
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,16 @@
+INCLUDES =-I/usr/X11R6/include/X11 -I/usr/local/include -I/usr/include/X11R6/X11
+LIBINC =-L/usr/X11R6/lib -L/usr/include/lib
+LIBS = -lX11 -lXpm -lXext
+
+TARGET = wmbutton
+OBJECTS = wmbutton.o readln.o
+
+.c.o:
+ gcc -O2 -c -Wall ${INCLUDES} ${FLAGS} $< -o $*.o
+
+${TARGET}: ${OBJECTS}
+ gcc -O2 -o ${TARGET} ${OBJECTS} ${LIBINC} ${LIBS}
+
+clean::
+ for i in ${OBJECTS}; do if [ -e $$i ] ; then rm $$i; fi; done
+ if [ -e ${TARGET} ] ; then rm ${TARGET}; fi
diff --git a/README b/README
new file mode 100644
index 0000000..2d94aee
--- /dev/null
+++ b/README
@@ -0,0 +1,170 @@
+wmbutton Ver. 0 Rel 4
+-------------------------------------------------------------
+ Code is based on wmppp, wmload, wmtime, wmcp, and asbutton
+ Author: Edward H. Flora <ehflora at ksu.edu>
+ Ver 0 Rel 4 March 8, 1999
+
+DESCRIPTION:
+------------
+wmbutton is a simple application launching program that sits in the
+dock in WindowMaker, can be swallowed by Wharf in Afterstep, and
+should be fairly configurable.
+
+LICENSING:
+----------
+This program is released under the GPL license. A copy (in case you
+don't already have hundreds of then floating around) can be found in
+this distribution in the file COPYING
+
+CONTRIBUTORS:
+-------------
+ Ben Cohen <buddog at aztec.asu.edu>
+ original author of wmcp (et al.)
+ Thomas Nemeth <tnemeth at multimania.com>
+ contributor to wmcp
+ Casey Harkins <charkins at cs.wisc.edu>
+ Bug fix reading config file path - 3/6/99
+ Added button-presses, and other - denoted by *charkins*
+ Michael Henderson <mghenderson at lanl.gov>
+ Application ideas, suggestions
+ Ryan ?? <pancake at mindspring.com>
+ Modified wmbutton to asbutton.
+ Note: asbutton is a seperate program, not associated
+ with wmbutton (just as wmbutton is not associated
+ with wmcp)
+ Jon Bruno
+ Web Page Development
+ The contributors listed above are not necessarily involved with the
+development of wmbutton. I'm listing them here partially as thanks for
+helping out, catching bugs in the code, etc.
+
+INSTALLATION:
+-------------
+ Untar the file:
+ tar xvzf wmbutton-0.4.tar.gz
+
+ CD to source directory:
+ cd wmbutton-0.4
+
+ Edit background xpm, and buttons.xpm to your preferences
+ There are icon files in ./icons to work from
+
+ Compile it:
+ make clean; make
+
+ Copy the config file:
+ cp .wmbutton ~
+
+ Put the executable somewhere in your path:
+ mv wmbutton /usr/local/bin (or anyhere in your path)
+
+ Run it:
+ wmbutton &
+
+ Grab the appicon and move it to the dock.
+ Change the settings to start with Windowmaker
+
+ Afterstep Wharf 1.6.??:
+ *Wharf wmbutton -Swallow "wmbutton" wmbutton &
+
+ ***Note***:
+ The appicon has only a two pixel border where you can grab
+ and move it.
+
+ If make doesn't work, you may need to fiddle with the settings in
+ the Makefile.
+
+ Tested on: (Well, it runs, I don't know if 'Tested' is quite right...)
+ WindowMaker-0.50.2, 0.51
+ Afterstep 1.6.?
+ X Clients: Red Hat 5.1, Kernel 2.0.36, 2.0.35
+ X Servers: XFree86 S3V 3.3.3.1
+
+USAGE:
+------
+usage: wmbutton [-g geometry] [-d dpy] [-v] [-f config file] [-h]
+
+-g <geometry> Window Geometry - ie: 64x64+10+10
+-d <display> Display - ie: 127.0.0.1:0.0
+-f <filename> Full path to configuration file.
+-v Verbose Mode.
+-h Help. This message.
+-m Enable Middle Mouse functionality.
+
+Left mouse button:
+ Selects the application to launch, numbered 1 through 9
+
+Middle mouse button: (If enabled (-m))
+ Selects the application to launch, numbered 11 through 19
+
+Right mouse button:
+ Selects the application to launch, numbered 21 through 29
+
+NOTES:
+------
+This is a simple application launching tool for use in WindowMaker, and
+possibly Afterstep. (Who knows, it should run for other window managers too,
+by why bother?? It is taken from wmcp, by Ben Cohen, and modified just
+enough to run applications rather than send ALT-[1..9] key sequences to
+WindowMaker. It has also taken some ideas from asbuttons, and
+included them back into the original. There may still be some code
+left over from wmcp that is no longer needed, but... This was written
+in a couple of hours, as my first Dock App.
+
+The mini-icons must be combined into a single graphic, buttons.xpm. The
+background border is defined in backdrop.xpm. Both must be edited in your
+favorite graphics editor (GIMP??), and then recompiled. wmbuttons uses a
+configuration file (usually ~/.wmbutton) for which applications to launch.
+There is no need to restart wmbuttons when simply changing the configuration,
+as wmbutton searches the file whenever a button is pressed.
+
+An example file is included, related to the the buttons.xpm graphic file.
+
+"C code. C code run. Run, code, run.
+ PLEASE!?!?!?!?!?!?"
+
+CHANGE LOG:
+-----------
+0.4 Added Modifications submitted by Casey Harkins.
+ Start application on mouse button release,
+ Only start app if cursor is still on application button
+ Added 3-D button press look
+ Added new .wmbutton configuration file
+
+0.3 Graphics changed to incorporate most changes made by asbutton
+ Removed Middle/Right mouse click on button to turn off buttons
+ after it.
+ Added Middle and Right mouse buttons to run more Applications
+ (Yes, you can now really run 27 different Apps from a single
+ instance of wmbuttons, if you would want too...)
+ Fixed bug for finding config file .wmbutton.
+ It used to not look in the home directory, but in the
+ startup directory. Thanks to Casey harkins for the fix.
+ Included the icons directory from the asbutton distribution,
+ plus a few more.
+
+0.2 Added single configuration file, user selectable.
+
+0.1 Origional version.
+ Shamelessly taken from wmcp 1.2.5,
+ by Ben Cohen <buddog at aztec.asu.edu>
+
+TODO:
+-----
+Make changing icons and/or background graphics easier.
+Allow for less than 9 icons, 4 would be nicer on the mini-icon size.
+
+BUGS:
+-----
+Remember, they're just undocumented FEATURES!!!
+
+Probably Lots. Send comments (preferably with fixes) to
+<ehflora at ksu.edu>
+
+Note: I am a graduate student trying to finish a thesis this spring,
+ so I am not likely to do a lot of work on this for a while.
+
+Good Luck.
+
+
+
diff --git a/backdrop.xpm b/backdrop.xpm
new file mode 100644
index 0000000..9d1a3de
--- /dev/null
+++ b/backdrop.xpm
@@ -0,0 +1,126 @@
+/* XPM */
+static char * backdrop_xpm[] = {
+"64 64 59 1",
+" c None",
+". c #F3F3F3",
+"+ c #000000",
+"@ c #E0E0E0",
+"# c #516161",
+"$ c #A2A2B2",
+"% c #A2A2A2",
+"& c #A292B2",
+"* c #92A2A2",
+"= c #A292A2",
+"- c #9292A2",
+"; c #929292",
+"> c #9282A2",
+", c #829292",
+"' c #928292",
+") c #828292",
+"! c #828282",
+"~ c #827192",
+"{ c #615161",
+"] c #92A2B2",
+"^ c #9292B2",
+"/ c #8292A2",
+"( c #8282A2",
+"_ c #718292",
+": c #718282",
+"< c #282828",
+"[ c #515161",
+"} c #858595",
+"| c #C7C3C7",
+"1 c #515151",
+"2 c #827182",
+"3 c #415151",
+"4 c #514151",
+"5 c #717192",
+"6 c #717182",
+"7 c #717171",
+"8 c #414151",
+"9 c #617182",
+"0 c #415141",
+"a c #716182",
+"b c #414141",
+"c c #617171",
+"d c #413041",
+"e c #304141",
+"f c #716171",
+"g c #616171",
+"h c #616182",
+"i c #303030",
+"j c #616161",
+"k c #303041",
+"l c #516171",
+"m c #304130",
+"n c #615171",
+"o c #203030",
+"p c #302030",
+"q c #515171",
+"r c #202030",
+"s c #202020",
+"t c #413051",
+"...............................................................+",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+",
+".@$%$%&%&%&%&*=-&*=-=-=---=--;>;>;>;>,>,>,')',')')'))!)))!~!~!{+",
+".@$$*$]$*$*$*&*&*^*-*-*-*-*-/---,-,-,>,>,(,>,(,),),)))))_)_):)#+",
+".@$%<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~![+",
+".@]$<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|:~1+",
+".@&%<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|~:[+",
+".@*$<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|:~1+",
+".@&%<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|2:[+",
+".@*&<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|:~3+",
+".@=%<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|~:4+",
+".@*$<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|:53+",
+".@&*<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|264+",
+".@*&<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|:63+",
+".@=-<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|264+",
+".@*=<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|:63+",
+".@=*<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|264+",
+".@*^<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|:63+",
+".@=-<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|664+",
+".@*-<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|663+",
+".@=-<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|674+",
+". at --<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|668+",
+".@=-<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|674+",
+".@*-<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|960+",
+". at -;<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|a78+",
+". at --<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|96b+",
+".@>;<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|acd+",
+". at --<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|cab+",
+". at -;<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|a7b+",
+".@,-<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|cae+",
+".@>;<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|acd+",
+".@,-<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|cae+",
+".@>,<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|fcd+",
+".@,><}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|cae+",
+".@',<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|agd+",
+".@,><}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|che+",
+".@>,<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|fgd+",
+".@,><}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|cge+",
+".@')<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|ggd+",
+".@,'<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|cge+",
+".@',<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|fgd+",
+".@,(<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|ggi+",
+".@')<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|gjk+",
+".@,)<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|lgm+",
+".@'!<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|njk+",
+".@))<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|ggo+",
+".@))<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|njp+",
+".@))<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|#go+",
+".@)!<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|nji+",
+".@))<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|lgo+",
+".@~!<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|n#p+",
+". at _)<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|#no+",
+".@)!<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|njp+",
+".@:~<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|#no+",
+".@~!<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|n#p+",
+".@:)<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|#qo+",
+".@~:<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|{[p+",
+".@:~<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|#no+",
+".@~:<}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|{[p+",
+".@:~||||||||||||||||||||||||||||||||||||||||||||||||||||||||#qo+",
+".@~:262626262667a767a7aca7acfcfcfgfgfggjgggjnjnjnjn#n#n#{[{[{[r+",
+".@:5:~:5:666666666c696cacacacachcgggcggggglglg#nln#n#n#q#q[q#[s+",
+".@{1[1[1[141434340484b4b8btb8bdbdededmdikikikipipipipoprpspsrsr+",
+".+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"};
diff --git a/buttons.xpm b/buttons.xpm
new file mode 100644
index 0000000..8992ecd
--- /dev/null
+++ b/buttons.xpm
@@ -0,0 +1,715 @@
+/* XPM */
+static char * buttons_xpm[] = {
+"54 54 658 2",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+"@ c #AEAAAE",
+"# c #000A0D",
+"$ c #000F11",
+"% c #001111",
+"& c #001113",
+"* c #001114",
+"= c #001112",
+"- c #000E10",
+"; c #00080A",
+"> c #D5D6D5",
+", c #6F706F",
+"' c #686868",
+") c #001718",
+"! c #00171B",
+"~ c #00191D",
+"{ c #001A1F",
+"] c #001C1F",
+"^ c #001C21",
+"/ c #001C20",
+"( c #00191C",
+"_ c #EFEEEE",
+": c #F6F6F4",
+"< c #F6F7F3",
+"[ c #F3F4EE",
+"} c #E8E9E1",
+"| c #D6D7CF",
+"1 c #C5C5BE",
+"2 c #B3B2A9",
+"3 c #9F9F94",
+"4 c #868685",
+"5 c #6E706A",
+"6 c #949685",
+"7 c #514E5A",
+"8 c #1A1729",
+"9 c #201A30",
+"0 c #23203B",
+"a c #232039",
+"b c #211E37",
+"c c #616161",
+"d c #6E6E6E",
+"e c #001D20",
+"f c #001F23",
+"g c #173337",
+"h c #F0F2F3",
+"i c #001F26",
+"j c #002129",
+"k c #24434A",
+"l c #001F24",
+"m c #001F22",
+"n c #00181D",
+"o c #B4B3B6",
+"p c #898297",
+"q c #554A75",
+"r c #40365E",
+"s c #241A4B",
+"t c #170B46",
+"u c #12093E",
+"v c #0E0737",
+"w c #0A0530",
+"x c #060429",
+"y c #030325",
+"z c #00031F",
+"A c #A1A2A0",
+"B c #575747",
+"C c #5B566C",
+"D c #353056",
+"E c #423968",
+"F c #48416C",
+"G c #484066",
+"H c #413969",
+"I c #002128",
+"J c #00242B",
+"K c #00252C",
+"L c #1D4349",
+"M c #849A9F",
+"N c #002A32",
+"O c #002C34",
+"P c #002830",
+"Q c #385A61",
+"R c #00272E",
+"S c #00242A",
+"T c #001E25",
+"U c #B2B2B3",
+"V c #4D436A",
+"W c #160350",
+"X c #13034B",
+"Y c #110346",
+"Z c #0F0340",
+"` c #0C033A",
+" . c #0A0335",
+".. c #07032F",
+"+. c #05032A",
+"@. c #A3A4A3",
+"#. c #5C5C4D",
+"$. c #615C75",
+"%. c #423A61",
+"&. c #4F4D70",
+"*. c #594E85",
+"=. c #493F66",
+"-. c #002B33",
+";. c #002D35",
+">. c #003038",
+",. c #003139",
+"'. c #678186",
+"). c #00343C",
+"!. c #002F37",
+"~. c #00272F",
+"{. c #B1B0B1",
+"]. c #4E436A",
+"^. c #070330",
+"/. c #A4A5A3",
+"(. c #61614F",
+"_. c #3B3B2E",
+":. c #635C75",
+"<. c #3D3660",
+"[. c #494169",
+"}. c #4B4669",
+"|. c #4F4A6A",
+"1. c #8D8F8D",
+"2. c #878787",
+"3. c #00363E",
+"4. c #00373F",
+"5. c #003941",
+"6. c #36666F",
+"7. c #577D83",
+"8. c #003C44",
+"9. c #003841",
+"0. c #AEAEAF",
+"a. c #4D4269",
+"b. c #261459",
+"c. c #281C4E",
+"d. c #2A1E4E",
+"e. c #150945",
+"f. c #0C033B",
+"g. c #0A0336",
+"h. c #A7A7A5",
+"i. c #6A6B59",
+"j. c #454632",
+"k. c #5D5871",
+"l. c #333158",
+"m. c #3D3460",
+"n. c #423E65",
+"o. c #515171",
+"p. c #9D9E9D",
+"q. c #626262",
+"r. c #8A8A8A",
+"s. c #003E47",
+"t. c #004049",
+"u. c #00414C",
+"v. c #00444D",
+"w. c #4D7B83",
+"x. c #4D7A82",
+"y. c #00444F",
+"z. c #00424B",
+"A. c #00414B",
+"B. c #003F49",
+"C. c #003840",
+"D. c #ADACAE",
+"E. c #52476D",
+"F. c #38314A",
+"G. c #0A0809",
+"H. c #181618",
+"I. c #362F50",
+"J. c #0F053D",
+"K. c #000320",
+"L. c #ABACAB",
+"M. c #757764",
+"N. c #565842",
+"O. c #28233D",
+"P. c #2E2749",
+"Q. c #373051",
+"R. c #393561",
+"S. c #393259",
+"T. c #352C52",
+"U. c #004951",
+"V. c #004A54",
+"W. c #004C57",
+"X. c #00505A",
+"Y. c #00515C",
+"Z. c #578C95",
+"`. c #3E7982",
+" + c #004E57",
+".+ c #004C56",
+"++ c #004953",
+"@+ c #004851",
+"#+ c #00414E",
+"$+ c #5A5072",
+"%+ c #5F5A67",
+"&+ c #676149",
+"*+ c #777570",
+"=+ c #25232F",
+"-+ c #170E43",
+";+ c #05032B",
+">+ c #030326",
+",+ c #B0B0AF",
+"'+ c #7E826D",
+")+ c #666751",
+"!+ c #959497",
+"~+ c #ACABAE",
+"{+ c #737473",
+"]+ c #302A4F",
+"^+ c #3F3C64",
+"/+ c #4B4274",
+"(+ c #4F4876",
+"_+ c #3F3C69",
+":+ c #00505B",
+"<+ c #005360",
+"[+ c #005563",
+"}+ c #005964",
+"|+ c #005A69",
+"1+ c #005C69",
+"2+ c #72A5AF",
+"3+ c #2B7480",
+"4+ c #005864",
+"5+ c #005462",
+"6+ c #00525F",
+"7+ c #004F59",
+"8+ c #AAABAB",
+"9+ c #645C7A",
+"0+ c #776349",
+"a+ c #E5C319",
+"b+ c #A78F32",
+"c+ c #27232C",
+"d+ c #1E1448",
+"e+ c #080330",
+"f+ c #010320",
+"g+ c #B2B3B2",
+"h+ c #888A75",
+"i+ c #6D6F59",
+"j+ c #393052",
+"k+ c #494261",
+"l+ c #52497A",
+"m+ c #4F487A",
+"n+ c #4D4669",
+"o+ c #463E69",
+"p+ c #005C6A",
+"q+ c #025D6A",
+"r+ c #025F6F",
+"s+ c #066676",
+"t+ c #1F6875",
+"u+ c #09515B",
+"v+ c #034C56",
+"w+ c #054F59",
+"x+ c #90A4A7",
+"y+ c #026372",
+"z+ c #006170",
+"A+ c #025C6A",
+"B+ c #005967",
+"C+ c #A7A7AA",
+"D+ c #6D677D",
+"E+ c #9A9798",
+"F+ c #DBD0B1",
+"G+ c #ECE9E0",
+"H+ c #353334",
+"I+ c #362F4E",
+"J+ c #0F073A",
+"K+ c #080331",
+"L+ c #BBBCBB",
+"M+ c #8B8E79",
+"N+ c #72735E",
+"O+ c #14D121",
+"P+ c #332C54",
+"Q+ c #3D3A69",
+"R+ c #494266",
+"S+ c #494666",
+"T+ c #494363",
+"U+ c #3F3B66",
+"V+ c #979897",
+"W+ c #0E535E",
+"X+ c #0F4048",
+"Y+ c #182E33",
+"Z+ c #0E1315",
+"`+ c #0F1112",
+" @ c #1A1D1D",
+".@ c #152C30",
+"+@ c #16454B",
+"@@ c #185C68",
+"#@ c #A8A7A8",
+"$@ c #636264",
+"%@ c #D9D8D7",
+"&@ c #FAFAF8",
+"*@ c #8D8D8D",
+"=@ c #18171B",
+"-@ c #514D66",
+";@ c #434058",
+">@ c #403E53",
+",@ c #3D3C4F",
+"'@ c #3A3B4A",
+")@ c #CACBC8",
+"!@ c #8A8D78",
+"~@ c #64665B",
+"{@ c #58576C",
+"]@ c #5C5874",
+"^@ c #5E5576",
+"/@ c #5C597A",
+"(@ c #5E5778",
+"_@ c #5C5570",
+":@ c #646464",
+"<@ c #0F1315",
+"[@ c #9F9EA1",
+"}@ c #7F7E7E",
+"|@ c #F9FAF8",
+"1@ c #FBFBF9",
+"2@ c #DEDFDD",
+"3@ c #131313",
+"4@ c #959695",
+"5@ c #F0EFEA",
+"6@ c #ECECE7",
+"7@ c #E9E9E4",
+"8@ c #E7E7DE",
+"9@ c #DEDED3",
+"0@ c #858773",
+"a@ c #555551",
+"b@ c #6B6C6D",
+"c@ c #A7A293",
+"d@ c #F9F9F8",
+"e@ c #F8F8F6",
+"f@ c #F0EEDF",
+"g@ c #1D1D19",
+"h@ c #5D5C58",
+"i@ c #C9C9BE",
+"j@ c #C7C7BD",
+"k@ c #939388",
+"l@ c #929484",
+"m@ c #9A9A8B",
+"n@ c #595953",
+"o@ c #515161",
+"p@ c #B1B0B4",
+"q@ c #B1AFB4",
+"r@ c #858587",
+"s@ c #6B6A6B",
+"t@ c #757475",
+"u@ c #787678",
+"v@ c #7C7A7C",
+"w@ c #C7C1B4",
+"x@ c #ECC635",
+"y@ c #C4A420",
+"z@ c #AFADA8",
+"A@ c #F9F9F6",
+"B@ c #F9F9F7",
+"C@ c #E6CD79",
+"D@ c #7C5B09",
+"E@ c #AB922F",
+"F@ c #343326",
+"G@ c #1E1E14",
+"H@ c #313125",
+"I@ c #504F4F",
+"J@ c #CDBC6E",
+"K@ c #AE6E22",
+"L@ c #6B6A6C",
+"M@ c #595959",
+"N@ c #DBC475",
+"O@ c #F5CC10",
+"P@ c #F4CA10",
+"Q@ c #C1AC62",
+"R@ c #EEEEEC",
+"S@ c #C2C2C0",
+"T@ c #A07F2F",
+"U@ c #F5C80E",
+"V@ c #F3CB17",
+"W@ c #B0A263",
+"X@ c #626254",
+"Y@ c #595949",
+"Z@ c #9B9B9D",
+"`@ c #6E6C6F",
+" # c #9A9693",
+".# c #B9A478",
+"+# c #CBA133",
+"@# c #967432",
+"## c #6F6D6D",
+"$# c #6F6B6D",
+"%# c #957642",
+"&# c #C59D35",
+"*# c #8D8D86",
+"=# c #696869",
+"-# c #090909",
+";# c #DD0D8A",
+"># c #0909EF",
+",# c #A56721",
+"'# c #AFB505",
+")# c #F79B31",
+"!# c #EFF707",
+"~# c #0D8214",
+"{# c #050591",
+"]# c #F4C844",
+"^# c #E0D6C4",
+"/# c #E7E1C0",
+"(# c #D9D499",
+"_# c #E4D08D",
+":# c #EABE8D",
+"<# c #E3B26B",
+"[# c #E3B982",
+"}# c #BDA385",
+"|# c #EDE1C3",
+"1# c #ECC48A",
+"2# c #F69854",
+"3# c #F78E42",
+"4# c #EB9D54",
+"5# c #FFC280",
+"6# c #DA776F",
+"7# c #EA3166",
+"8# c #DE2F66",
+"9# c #D57F6A",
+"0# c #BBA97D",
+"a# c #95939B",
+"b# c #E609EA",
+"c# c #850589",
+"d# c #EED392",
+"e# c #FFCF86",
+"f# c #FBBB57",
+"g# c #E92F00",
+"h# c #EB2F00",
+"i# c #D85025",
+"j# c #F3B366",
+"k# c #E6466F",
+"l# c #FF0061",
+"m# c #DD7075",
+"n# c #D6B275",
+"o# c #B89A77",
+"p# c #88888E",
+"q# c #ECECEC",
+"r# c #FEFEFE",
+"s# c #F8F8F8",
+"t# c #D1D1D1",
+"u# c #F1DCB7",
+"v# c #FDCF86",
+"w# c #FFCF72",
+"x# c #F8BB57",
+"y# c #D02F00",
+"z# c #DF2F00",
+"A# c #EF4310",
+"B# c #F6B661",
+"C# c #E44D6C",
+"D# c #F00877",
+"E# c #F80677",
+"F# c #DD7179",
+"G# c #CEA764",
+"H# c #CE9B60",
+"I# c #FDFDFD",
+"J# c #9B9B9B",
+"K# c #F3D269",
+"L# c #F8D334",
+"M# c #FFDC45",
+"N# c #FAC75D",
+"O# c #DF7D3B",
+"P# c #E97A2A",
+"Q# c #E7843C",
+"R# c #EDBD61",
+"S# c #E3947A",
+"T# c #DE6C79",
+"U# c #DB3686",
+"V# c #CE7E9D",
+"W# c #CE8BA6",
+"X# c #CE8188",
+"Y# c #996D74",
+"Z# c #7F7D85",
+"`# c #D7D7D7",
+" $ c #4F4F4F",
+".$ c #C4C4C4",
+"+$ c #EFEFEF",
+"@$ c #727272",
+"#$ c #898989",
+"$$ c #F6F6F6",
+"%$ c #FFEB19",
+"&$ c #FFFF00",
+"*$ c #FFF709",
+"=$ c #F2D135",
+"-$ c #E5C26F",
+";$ c #D3CE77",
+">$ c #D1B165",
+",$ c #CFB875",
+"'$ c #AF7C77",
+")$ c #B1306F",
+"!$ c #961766",
+"~$ c #9D36B5",
+"{$ c #9F09D6",
+"]$ c #A406CC",
+"^$ c #A55DB4",
+"/$ c #898A8F",
+"($ c #ACACAC",
+"_$ c #B0B0B1",
+":$ c #959595",
+"<$ c #DFDFDF",
+"[$ c #434343",
+"}$ c #2F2F2F",
+"|$ c #BDBEBD",
+"1$ c #FBEF0C",
+"2$ c #FFF70C",
+"3$ c #DFD148",
+"4$ c #DDC063",
+"5$ c #D0C261",
+"6$ c #D5B46A",
+"7$ c #907059",
+"8$ c #421B10",
+"9$ c #7B0947",
+"0$ c #7C0642",
+"a$ c #B43ED9",
+"b$ c #A90BFD",
+"c$ c #B853C8",
+"d$ c #9F7258",
+"e$ c #F4F4F4",
+"f$ c #999999",
+"g$ c #F0F0F0",
+"h$ c #6C6C6D",
+"i$ c #8E8E8E",
+"j$ c #FAD739",
+"k$ c #F3ED24",
+"l$ c #F8E533",
+"m$ c #D8C763",
+"n$ c #EBA76F",
+"o$ c #D1C260",
+"p$ c #C7A65C",
+"q$ c #311F0F",
+"r$ c #0C0000",
+"s$ c #390012",
+"t$ c #5F1B24",
+"u$ c #AA36BA",
+"v$ c #9B0BD5",
+"w$ c #9D0BD9",
+"x$ c #A4569D",
+"y$ c #7E7E7E",
+"z$ c #F3F3F3",
+"A$ c #FCFCFC",
+"B$ c #D9D9D9",
+"C$ c #8C8C8C",
+"D$ c #EAC46F",
+"E$ c #F0CB6C",
+"F$ c #D8B36A",
+"G$ c #D1BD6E",
+"H$ c #D3B375",
+"I$ c #CBB260",
+"J$ c #B28866",
+"K$ c #0C0706",
+"L$ c #020206",
+"M$ c #2B1010",
+"N$ c #5E3D1F",
+"O$ c #CB8B8D",
+"P$ c #B78394",
+"Q$ c #C27794",
+"R$ c #B0747D",
+"S$ c #A8A9AF",
+"T$ c #BCBCBC",
+"U$ c #A6A7A6",
+"V$ c #E5C895",
+"W$ c #DCAF6C",
+"X$ c #D8C065",
+"Y$ c #CEBF61",
+"Z$ c #C5B677",
+"`$ c #ACA385",
+" % c #9E9899",
+".% c #434340",
+"+% c #3F3D1C",
+"@% c #744232",
+"#% c #BA7D50",
+"$% c #9B7687",
+"%% c #313FDB",
+"&% c #1E3DF1",
+"*% c #494FBA",
+"=% c #9E9BA5",
+"-% c #D4D4D4",
+";% c #D3BB6C",
+">% c #CFB869",
+",% c #D0BB6C",
+"'% c #B1A5A1",
+")% c #8A94A5",
+"!% c #2D3945",
+"~% c #444823",
+"{% c #A17741",
+"]% c #CF9A61",
+"^% c #887F9F",
+"/% c #0B2FFD",
+"(% c #002FFD",
+"_% c #324AD8",
+":% c #9C725C",
+"<% c #3F4046",
+"[% c #C6A47F",
+"}% c #A69F87",
+"|% c #3A364D",
+"1% c #525141",
+"2% c #A67E41",
+"3% c #C88B53",
+"4% c #CF9061",
+"5% c #C88761",
+"6% c #897F90",
+"7% c #0F2FF3",
+"8% c #082FF7",
+"9% c #4047D8",
+"0% c #81645A",
+"a% c #CECECE",
+"b% c #B27F5B",
+"c% c #D4A77A",
+"d% c #8C6636",
+"e% c #72491F",
+"f% c #9D7A45",
+"g% c #CC9A61",
+"h% c #CF9361",
+"i% c #C99061",
+"j% c #A97E5C",
+"k% c #906D5F",
+"l% c #808185",
+"m% c #8F7885",
+"n% c #A16773",
+"o% c #6D4C42",
+"p% c #DDDDDD",
+"q% c #F2F2F2",
+"r% c #EDEDED",
+"s% c #CACACA",
+"t% c #99714C",
+"u% c #DBA97B",
+"v% c #7B5029",
+"w% c #767361",
+"x% c #BBA07C",
+"y% c #CA9E68",
+"z% c #CA9561",
+"A% c #CF8761",
+"B% c #B3805C",
+"C% c #322841",
+"D% c #413759",
+"E% c #8D7963",
+"F% c #A7735A",
+"G% c #A26453",
+"H% c #919191",
+"I% c #B7B7B7",
+"J% c #E0E0E0",
+"K% c #D2D2D2",
+"L% c #937257",
+"M% c #DBAA7B",
+"N% c #714D25",
+"O% c #C69D70",
+"P% c #BE8D61",
+"Q% c #A77F54",
+"R% c #443251",
+"S% c #606492",
+"T% c #A39EA3",
+"U% c #A46959",
+"V% c #96734D",
+"W% c #636364",
+"X% c #DADADA",
+"Y% c #737373",
+"Z% c #BEBEBE",
+"`% c #C1C1C1",
+" & c #979797",
+".& c #AFAFAF",
+"+& c #D5A96D",
+"@& c #775529",
+"#& c #A17E63",
+"$& c #AC825F",
+"%& c #936958",
+"&& c #AC97A9",
+"*& c #C9B4B3",
+"=& c #737375",
+"-& c #B5B5B7",
+";& c #B7B7B9",
+">& c #616163",
+",& c #0B0B0B",
+". . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . @ . . . . . . . . . . . . . . . . . + ",
+". # $ $ % % & * * * * = % % $ - ; + . > > > > > > > > > > > > > > > > + . , , , , , , , , ' > > > > > > > + ",
+". ) ! ~ { ] ] ^ ^ ^ / ] ] { ( ! & + . > > _ : < [ } | 1 2 3 4 5 6 > > + . , 7 8 9 0 a b , c d > > > > > > + ",
+". e f g h h i j j j k h h h l m n + . > o p q r s t u v w x y z A B > + . , C D E F G H , c d > > > > > > + ",
+". I J K L h M N O O P Q h R K S T + . > U V W X Y Z ` ...+.y z @.#.> + . , $.%.&.*.&.=., c d > > > > > > + ",
+". -.;.>.,.h h '.).).).,.h ,.!.O ~.+ . > {.].W X Y Z ` .^.+.y z /.(._.+ . , :.<.[.}.|.*., 1.2.> > > > > > + ",
+". ).3.4.5.h 6.h 7.8.8.9.h 5.4.4.>.+ . > 0.a.b.c.d.e.f.g.^.+.y z h.i.j.+ . , k.l.m.n.o.p.p.p.p.p.p.p.p.q.r.+ ",
+". 8.s.t.u.h v.w.h x.y.z.h A.B.s.C.+ . > D.E.F.G.H.I.J.g.^.+.y K.L.M.N.+ . , , , , , , p.O.P.Q.R.S.T.p.c d + ",
+". y.U.V.W.h X.Y.Z.h `. +h .+++ at +#++ . > D.$+%+&+*+=+-+g.^.;+>+K.,+'+)++ . > > !+~+, {+p.]+^+/+(+[._+p.c d + ",
+". :+<+[+}+h |+1+1+2+h 3+h 4+5+6+7++ . > 8+9+0+a+b+c+d+g.e+;+>+f+g+h+i++ . p.p.p.p.p.p.p.j+k+l+m+n+o+p.c d + ",
+". p+q+r+s+h t+u+v+w+x+h h y+z+A+B++ . > C+D+E+F+G+H+I+J+K+;+>+f+L+M+N++ . p.O+p.p.p.p.p.P+Q+R+S+T+U+p.c V++ ",
+". W+X+Y+Z+h `++ + + + + + @. at +@@@+ . > #@$@%@&@: *@=@-@;@>@,@'@)@!@~@+ . p.p.p.p.p.p.p.{@]@^@/@(@_ at p.:@> + ",
+". + + + h h h <@+ + + + + + + + + + . > [@}@|@1 at 1@2 at 3@4 at 5@6 at 7@8 at 9@0 at a@+ . > > > b@> > p.p.p.p.p.p.p.p.p.> + ",
+". + + + + + + + + + + + + + + + + + . > > c at d@e@&@f at g@h at i@j at k@l at m@n at o@+ . > > > b@> > > > p at q@r at s@t at u@v@' + ",
+". + + + + + + + + + + + + + + + + + . w at x@y at z@A at B@C at D@E at F@G at H@I at o@o at o@+ . > > J at K@J@> p.p.p.p.p.p.p.p.L at M@+ ",
+". + + + + + + + + + + + + + + + + + . N at O@P at Q@R at S@T at U@V at W@X at Y@o at o@o@> + . b at b@K at K@K at b@p.O+p.p.p.p.p.Z@`@M at + ",
+". + + + + + + + + + + + + + + + + + . #.#+#@###$#%#&#*#> > > > > > > + . > > J at K@J@> p.p.p.p.p.p.p.p.=#> + ",
+"+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
+". . . . . . . . . . . . . . . . . @ . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . + ",
+". > > > > > > > > > > > > > > > > + . > > > > > -#> > > -#> > > > > > + . > > > > > > > > > > > > > ;#;#> + ",
+". >#>#>#> >#>#>#>#> >#>#>#> > > > + . > > > > > -#-#-#-#-#-#> > > > > + . > > > > > > > > > > > > ;#;#;#;#+ ",
+". > >#>#> > >#>#> > >#>#> > > > > + . > -#> > > > > > > > > > > > > > + . > > > > > > > > > > > + + ;#;#;#+ ",
+". > >#>#> > >#>#> > >#> > > > > > + . > -#> > > > > > > > > > ,#,#> > + . > > > > > > > > > > + + '#+ ;#> + ",
+". > >#>#> >#>#>#> >#>#> > > > > > + . > -#> > > > > > > > > )#)#,#> > + . > > > > > > > > > '#!#+ + + > > + ",
+". > >#>#> >#> >#> >#> > > > > > > + . -#-#> > ~#~#> > > > > )#)#,#> > + . > > > > > > > > '#!#!#!#+ > > > + ",
+". > > >#>#>#> >#> >#>#>#>#>#>#> > + . -#-#> O+O+~#> > > > > )#)#,#> > + . > > > > > > > '#!#!#!#'#> > > > + ",
+". > > >#>#> > >#>#> > >#>#> >#>#> + . -#-#> O+O+~#> > > > > )#)#,#> > + . > > > > > > '#!#!#!#'#> > > > > + ",
+". > > >#>#> > >#>#> > >#>#> >#>#> + . -#-#> O+O+~#> > {#{#> )#)#,#> > + . > > > > > '#!#!#!#'#> > > > > > + ",
+". > > >#> > > >#> > >#>#> > >#>#> + . -#-#> O+O+~#> >#>#{#> )#)#,#> > + . > > > > '#!#!#!#'#> > > > > > > + ",
+". > > > > > > > > > >#>#> >#>#> > + . > -#> O+O+~#> >#>#{#> )#)#,#> > + . > > > '#!#!#!#'#> > > > > > > > + ",
+". > > > > > > > > > >#>#>#>#> > > + . > -#> O+O+~#> >#>#{#> )#)#,#> > + . > > '#!#!#!#'#> > > > > > > > > + ",
+". > > > > > > > > >#>#> > > > > > + . > -#> O+O+~#> >#>#{#> )#)#,#> > + . > > ]#!#!#'#> > > > > > > > > > + ",
+". > > > > > > > > >#>#> > > > > > + . > -#-#-#-#-#-#-#-#-#-#-#-#-#-#> + . > ]#]#]#'#> > > > > > > > > > > + ",
+". > > > > > > > >#>#>#>#> > > > > + . > > > > > -#-#-#-#-#> > > > > > + . > ]#]#> > > > > > > > > > > > > + ",
+". > > > > > > > > > > > > > > > > + . > > > > > > > > > > > > > > > > + . + > > > > > > > > > > > > > > > + ",
+"+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
+". . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . @ . . . . . . . . . . . . . . . . . + ",
+". > > > > ^#/#(#_#:#<#[#}#> > > > + . > > > > > > > > > > > > > > > > + . > > > > > > > > -#> > > > > > > + ",
+". > > |#1#2#3#4#5#6#7#8#9#0#> > > + . > > > > > a#-#-#-#-#-#> > > > > + . b#b#b#b#b#b#b#-#c#-#b#b#b#b#b#b#+ ",
+". > d#e#f#g#h#i#j#k#l#l#m#n#o#> > + . > > > > p#-#q#r#. s#t#-#> > > > + . > > > > > > > -#> -#> > > > > > + ",
+". u#v#w#x#y#z#A#B#C#D#E#F#G#H#o#> + . > > > > -#s#I#. . . . J#-#> > > + . > > > > > > > -#> -#> > > > > > + ",
+". K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#> + . > > > Z#-#`# $.$+$@$#$$$-#> > > + . b#b#b#b#b#b#b#-#c#-#b#b#b#b#b#b#+ ",
+". %$&$*$=$-$;$>$,$'$)$!$~${$]$^$o#+ . > /$-#-#($_$-#:$<$-#[$. -#-#-#> + . > > > > > > > -#}$|$> > > > > > + ",
+". 1$&$2$3$4$5$6$7$8$9$0$a$b$b$c$d$+ . > -#+$$$e$I#I#. . . . . f$g$h$-#+ . > > > > > > i$-#|$> > > > > > > + ",
+". j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$d$+ . > -#y$z$. I#I#. . . . . A$B$C$-#+ . b#b#b#b#b#c#-#-#c#b#b#b#b#b#b#b#+ ",
+". D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$d$+ . > S$-##$z$I#I#. . . . . T$-#-#> + . > > > > > -#U$-#-#-#i$> > > > > + ",
+". V$W$X$Y$Z$`$ %.%+%@%#%$%%%&%*%d$+ . > > =%-#-%I#I#. . . . . -#> > > + . > > > > > -#> -#> > -#> > > > > + ",
+". > ;%>%,%'%)%!%~%{%]%]%^%/%(%_%:%+ . > > > -#-%I#I#. . . . . -#<%> > + . b#b#b#b#b#-#c#-#c#b#-#b#b#b#b#b#+ ",
+". > > > [%}%|%1%2%3%4%5%6%7%8%9%0%+ . > > > -#-%I#I#. . . . . a%-#> > + . > > > > > -#i$-#i$i$-#> > > > > + ",
+". > > b%c%d%e%f%g%h%i%j%k%l%m%n%o%+ . > > > -#p%I#q%r%. . . s%s#t#-#> + . > > > > > > -#-#-#-#> > > > > > + ",
+". > t%u%v%w%x%y%z%A%B%C%D%E%F%G%o#+ . > > -#H%A$I#I%f$q%. J%-#K%I#.$-#+ . b#b#b#b#b#b#b#c#-#c#b#b#b#b#b#b#+ ",
+". L%M%N%> > > > O%P%Q%R%S%T%U%V%> + . > -#W%X%I#g$-#Y%Z%`% &-#.&`%.&-#+ . > > > > > > -#-#-#> > > > > > > + ",
+". +&@&> > > > > > #&$&%&&&*&o#> > + . > -#=&-&;&-#-#-#-#-#-#> -#-#>&> + . > > > > > > -#-#i$> > > > > > > + ",
+"+ + + + + + + + + + + + + + + + + + + + + ,&-#-#+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "};
diff --git a/icons/audio.xpm b/icons/audio.xpm
new file mode 100644
index 0000000..638b921
--- /dev/null
+++ b/icons/audio.xpm
@@ -0,0 +1,32 @@
+/* XPM */
+static char * audio_xpm[] = {
+"18 18 11 1",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+"@ c #D5D6D5",
+"# c #090909",
+"$ c #E609EA",
+"% c #850589",
+"& c #2F2F2F",
+"* c #BDBEBD",
+"= c #8E8E8E",
+"- c #A6A7A6",
+".................+",
+".@@@@@@@@#@@@@@@@+",
+".$$$$$$$#%#$$$$$$+",
+".@@@@@@@#@#@@@@@@+",
+".@@@@@@@#@#@@@@@@+",
+".$$$$$$$#%#$$$$$$+",
+".@@@@@@@#&*@@@@@@+",
+".@@@@@@=#*@@@@@@@+",
+".$$$$$%##%$$$$$$$+",
+".@@@@@#-###=@@@@@+",
+".@@@@@#@#@@#@@@@@+",
+".$$$$$#%#%$#$$$$$+",
+".@@@@@#=#==#@@@@@+",
+".@@@@@@####@@@@@@+",
+".$$$$$$$%#%$$$$$$+",
+".@@@@@@###@@@@@@@+",
+".@@@@@@##=@@@@@@@+",
+"++++++++++++++++++"};
diff --git a/icons/blankbutton.xpm b/icons/blankbutton.xpm
new file mode 100644
index 0000000..cac8490
--- /dev/null
+++ b/icons/blankbutton.xpm
@@ -0,0 +1,25 @@
+/* XPM */
+static char * blankbutton_xpm[] = {
+"18 18 4 1",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+"@ c #D5D6D5",
+".................+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+"++++++++++++++++++"};
diff --git a/icons/edit.xpm b/icons/edit.xpm
new file mode 100644
index 0000000..55a0905
--- /dev/null
+++ b/icons/edit.xpm
@@ -0,0 +1,29 @@
+/* XPM */
+static char * edit_xpm[] = {
+"18 18 8 1",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+"@ c #D5D6D5",
+"# c #DD0D8A",
+"$ c #AFB505",
+"% c #EFF707",
+"& c #F4C844",
+".................+",
+".@@@@@@@@@@@@@##@+",
+".@@@@@@@@@@@@####+",
+".@@@@@@@@@@@++###+",
+".@@@@@@@@@@++$+#@+",
+".@@@@@@@@@$%+++@@+",
+".@@@@@@@@$%%%+@@@+",
+".@@@@@@@$%%%$@@@@+",
+".@@@@@@$%%%$@@@@@+",
+".@@@@@$%%%$@@@@@@+",
+".@@@@$%%%$@@@@@@@+",
+".@@@$%%%$@@@@@@@@+",
+".@@$%%%$@@@@@@@@@+",
+".@@&%%$@@@@@@@@@@+",
+".@&&&$@@@@@@@@@@@+",
+".@&&@@@@@@@@@@@@@+",
+".+@@@@@@@@@@@@@@@+",
+"++++++++++++++++++"};
diff --git a/icons/ftp.xpm b/icons/ftp.xpm
new file mode 100644
index 0000000..68aad12
--- /dev/null
+++ b/icons/ftp.xpm
@@ -0,0 +1,111 @@
+/* XPM */
+static char * ftp_xpm[] = {
+"18 18 90 1",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+"@ c #6F706F",
+"# c #686868",
+"$ c #D5D6D5",
+"% c #514E5A",
+"& c #1A1729",
+"* c #201A30",
+"= c #23203B",
+"- c #232039",
+"; c #211E37",
+"> c #616161",
+", c #6E6E6E",
+"' c #5B566C",
+") c #353056",
+"! c #423968",
+"~ c #48416C",
+"{ c #484066",
+"] c #413969",
+"^ c #615C75",
+"/ c #423A61",
+"( c #4F4D70",
+"_ c #594E85",
+": c #493F66",
+"< c #635C75",
+"[ c #3D3660",
+"} c #494169",
+"| c #4B4669",
+"1 c #4F4A6A",
+"2 c #8D8F8D",
+"3 c #878787",
+"4 c #5D5871",
+"5 c #333158",
+"6 c #3D3460",
+"7 c #423E65",
+"8 c #515171",
+"9 c #9D9E9D",
+"0 c #626262",
+"a c #8A8A8A",
+"b c #28233D",
+"c c #2E2749",
+"d c #373051",
+"e c #393561",
+"f c #393259",
+"g c #352C52",
+"h c #959497",
+"i c #ACABAE",
+"j c #737473",
+"k c #302A4F",
+"l c #3F3C64",
+"m c #4B4274",
+"n c #4F4876",
+"o c #3F3C69",
+"p c #393052",
+"q c #494261",
+"r c #52497A",
+"s c #4F487A",
+"t c #4D4669",
+"u c #463E69",
+"v c #14D121",
+"w c #332C54",
+"x c #3D3A69",
+"y c #494266",
+"z c #494666",
+"A c #494363",
+"B c #3F3B66",
+"C c #979897",
+"D c #58576C",
+"E c #5C5874",
+"F c #5E5576",
+"G c #5C597A",
+"H c #5E5778",
+"I c #5C5570",
+"J c #646464",
+"K c #6B6C6D",
+"L c #B1B0B4",
+"M c #B1AFB4",
+"N c #858587",
+"O c #6B6A6B",
+"P c #757475",
+"Q c #787678",
+"R c #7C7A7C",
+"S c #CDBC6E",
+"T c #AE6E22",
+"U c #6B6A6C",
+"V c #595959",
+"W c #9B9B9D",
+"X c #6E6C6F",
+"Y c #696869",
+".................+",
+".@@@@@@@@#$$$$$$$+",
+".@%&*=-;@>,$$$$$$+",
+".@')!~{]@>,$$$$$$+",
+".@^/(_(:@>,$$$$$$+",
+".@<[}|1_ at 23$$$$$$+",
+". at 45678999999990a+",
+".@@@@@@9bcdefg9>,+",
+".$$hi at j9klmn}o9>,+",
+".9999999pqrstu9>,+",
+".9v99999wxyzAB9>C+",
+".9999999DEFGHI9J$+",
+".$$$K$$999999999$+",
+".$$$K$$$$LMNOPQR#+",
+".$$STS$99999999UV+",
+".KKTTTK9v99999WXV+",
+".$$STS$99999999Y$+",
+"++++++++++++++++++"};
diff --git a/icons/graph.xpm b/icons/graph.xpm
new file mode 100644
index 0000000..a72ed0a
--- /dev/null
+++ b/icons/graph.xpm
@@ -0,0 +1,32 @@
+/* XPM */
+static char * graph_xpm[] = {
+"18 18 11 1",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+"@ c #D5D6D5",
+"# c #090909",
+"$ c #A56721",
+"% c #F79B31",
+"& c #0D8214",
+"* c #14D121",
+"= c #050591",
+"- c #0909EF",
+".................+",
+".@@@@@#@@@#@@@@@@+",
+".@@@@@######@@@@@+",
+".@#@@@@@@@@@@@@@@+",
+".@#@@@@@@@@@@$$@@+",
+".@#@@@@@@@@@%%$@@+",
+".##@@&&@@@@@%%$@@+",
+".##@**&@@@@@%%$@@+",
+".##@**&@@@@@%%$@@+",
+".##@**&@@==@%%$@@+",
+".##@**&@--=@%%$@@+",
+".@#@**&@--=@%%$@@+",
+".@#@**&@--=@%%$@@+",
+".@#@**&@--=@%%$@@+",
+".@##############@+",
+".@@@@@#####@@@@@@+",
+".@@@@@@@@@@@@@@@@+",
+"++++++++++++++++++"};
diff --git a/icons/gv.xpm b/icons/gv.xpm
new file mode 100644
index 0000000..1240fdd
--- /dev/null
+++ b/icons/gv.xpm
@@ -0,0 +1,84 @@
+/* XPM */
+static char * gv_xpm[] = {
+"18 18 63 1",
+" c None",
+". c #FFFFFF",
+"+ c #AEAAAE",
+"@ c #D5D6D5",
+"# c #000000",
+"$ c #95939B",
+"% c #090909",
+"& c #88888E",
+"* c #ECECEC",
+"= c #FEFEFE",
+"- c #F8F8F8",
+"; c #D1D1D1",
+"> c #FDFDFD",
+", c #9B9B9B",
+"' c #7F7D85",
+") c #D7D7D7",
+"! c #4F4F4F",
+"~ c #C4C4C4",
+"{ c #EFEFEF",
+"] c #727272",
+"^ c #898989",
+"/ c #F6F6F6",
+"( c #898A8F",
+"_ c #ACACAC",
+": c #B0B0B1",
+"< c #959595",
+"[ c #DFDFDF",
+"} c #434343",
+"| c #F4F4F4",
+"1 c #999999",
+"2 c #F0F0F0",
+"3 c #6C6C6D",
+"4 c #7E7E7E",
+"5 c #F3F3F3",
+"6 c #FCFCFC",
+"7 c #D9D9D9",
+"8 c #8C8C8C",
+"9 c #A8A9AF",
+"0 c #BCBCBC",
+"a c #9E9BA5",
+"b c #D4D4D4",
+"c c #3F4046",
+"d c #CECECE",
+"e c #DDDDDD",
+"f c #F2F2F2",
+"g c #EDEDED",
+"h c #CACACA",
+"i c #919191",
+"j c #B7B7B7",
+"k c #E0E0E0",
+"l c #D2D2D2",
+"m c #636364",
+"n c #DADADA",
+"o c #737373",
+"p c #BEBEBE",
+"q c #C1C1C1",
+"r c #979797",
+"s c #AFAFAF",
+"t c #737375",
+"u c #B5B5B7",
+"v c #B7B7B9",
+"w c #616163",
+"x c #0B0B0B",
+".................+",
+".@@@@@@@@@@@@@@@@#",
+".@@@@@$%%%%%@@@@@#",
+".@@@@&%*=.-;%@@@@#",
+".@@@@%->....,%@@@#",
+".@@@'%)!~{]^/%@@@#",
+".@(%%_:%<[%}.%%%@#",
+".@%{/|>>.....123%#",
+".@%45.>>.....678%#",
+". at 9%^5>>.....0%%@#",
+".@@a%b>>.....%@@@#",
+".@@@%b>>.....%c@@#",
+".@@@%b>>.....d%@@#",
+".@@@%e>fg...h-;%@#",
+".@@%i6>j1f.k%l>~%#",
+".@%mn>2%opqr%sqs%#",
+".@%tuv%%%%%%@%%w@#",
+"###x%%############"};
diff --git a/icons/netscape.xpm b/icons/netscape.xpm
new file mode 100644
index 0000000..17d339d
--- /dev/null
+++ b/icons/netscape.xpm
@@ -0,0 +1,135 @@
+/* XPM */
+static char * netscape_xpm[] = {
+"18 18 114 2",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+"@ c #000A0D",
+"# c #000F11",
+"$ c #001111",
+"% c #001113",
+"& c #001114",
+"* c #001112",
+"= c #000E10",
+"- c #00080A",
+"; c #001718",
+"> c #00171B",
+", c #00191D",
+"' c #001A1F",
+") c #001C1F",
+"! c #001C21",
+"~ c #001C20",
+"{ c #00191C",
+"] c #001D20",
+"^ c #001F23",
+"/ c #173337",
+"( c #F0F2F3",
+"_ c #001F26",
+": c #002129",
+"< c #24434A",
+"[ c #001F24",
+"} c #001F22",
+"| c #00181D",
+"1 c #002128",
+"2 c #00242B",
+"3 c #00252C",
+"4 c #1D4349",
+"5 c #849A9F",
+"6 c #002A32",
+"7 c #002C34",
+"8 c #002830",
+"9 c #385A61",
+"0 c #00272E",
+"a c #00242A",
+"b c #001E25",
+"c c #002B33",
+"d c #002D35",
+"e c #003038",
+"f c #003139",
+"g c #678186",
+"h c #00343C",
+"i c #002F37",
+"j c #00272F",
+"k c #00363E",
+"l c #00373F",
+"m c #003941",
+"n c #36666F",
+"o c #577D83",
+"p c #003C44",
+"q c #003841",
+"r c #003E47",
+"s c #004049",
+"t c #00414C",
+"u c #00444D",
+"v c #4D7B83",
+"w c #4D7A82",
+"x c #00444F",
+"y c #00424B",
+"z c #00414B",
+"A c #003F49",
+"B c #003840",
+"C c #004951",
+"D c #004A54",
+"E c #004C57",
+"F c #00505A",
+"G c #00515C",
+"H c #578C95",
+"I c #3E7982",
+"J c #004E57",
+"K c #004C56",
+"L c #004953",
+"M c #004851",
+"N c #00414E",
+"O c #00505B",
+"P c #005360",
+"Q c #005563",
+"R c #005964",
+"S c #005A69",
+"T c #005C69",
+"U c #72A5AF",
+"V c #2B7480",
+"W c #005864",
+"X c #005462",
+"Y c #00525F",
+"Z c #004F59",
+"` c #005C6A",
+" . c #025D6A",
+".. c #025F6F",
+"+. c #066676",
+"@. c #1F6875",
+"#. c #09515B",
+"$. c #034C56",
+"%. c #054F59",
+"&. c #90A4A7",
+"*. c #026372",
+"=. c #006170",
+"-. c #025C6A",
+";. c #005967",
+">. c #0E535E",
+",. c #0F4048",
+"'. c #182E33",
+"). c #0E1315",
+"!. c #0F1112",
+"~. c #1A1D1D",
+"{. c #152C30",
+"]. c #16454B",
+"^. c #185C68",
+"/. c #0F1315",
+". . . . . . . . . . . . . . . . . + ",
+". @ # # $ $ % & & & & * $ $ # = - + ",
+". ; > , ' ) ) ! ! ! ~ ) ) ' { > % + ",
+". ] ^ / ( ( _ : : : < ( ( ( [ } | + ",
+". 1 2 3 4 ( 5 6 7 7 8 9 ( 0 3 a b + ",
+". c d e f ( ( g h h h f ( f i 7 j + ",
+". h k l m ( n ( o p p q ( m l l e + ",
+". p r s t ( u v ( w x y ( z A r B + ",
+". x C D E ( F G H ( I J ( K L M N + ",
+". O P Q R ( S T T U ( V ( W X Y Z + ",
+". ` ...+.( @.#.$.%.&.( ( *.=.-.;.+ ",
+". >.,.'.).( !.+ + + + + + ~.{.].^.+ ",
+". + + + ( ( ( /.+ + + + + + + + + + ",
+". + + + + + + + + + + + + + + + + + ",
+". + + + + + + + + + + + + + + + + + ",
+". + + + + + + + + + + + + + + + + + ",
+". + + + + + + + + + + + + + + + + + ",
+"+ + + + + + + + + + + + + + + + + + "};
diff --git a/icons/paint.xpm b/icons/paint.xpm
new file mode 100644
index 0000000..265c6a3
--- /dev/null
+++ b/icons/paint.xpm
@@ -0,0 +1,232 @@
+/* XPM */
+static char * paint_xpm[] = {
+"18 18 211 2",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+"@ c #D5D6D5",
+"# c #E2D7C3",
+"$ c #E8E2C0",
+"% c #DAD499",
+"& c #E4D08D",
+"* c #EABE8D",
+"= c #E3B26B",
+"- c #E3B982",
+"; c #BDA385",
+"> c #EDE1C3",
+", c #EDC48A",
+"' c #F79854",
+") c #F88E42",
+"! c #EC9D54",
+"~ c #FFC280",
+"{ c #DA776F",
+"] c #EA3166",
+"^ c #DE2F66",
+"/ c #D67F6A",
+"( c #BBA97D",
+"_ c #EED392",
+": c #FFCF86",
+"< c #FCBB57",
+"[ c #EA2F00",
+"} c #EC2F00",
+"| c #D95025",
+"1 c #F3B366",
+"2 c #E6466F",
+"3 c #FF0061",
+"4 c #DE7075",
+"5 c #D7B275",
+"6 c #B89A77",
+"7 c #F2DDB7",
+"8 c #FDCF86",
+"9 c #FFCF72",
+"0 c #F9BB57",
+"a c #D02F00",
+"b c #E02F00",
+"c c #F04310",
+"d c #F6B661",
+"e c #E44D6C",
+"f c #F00877",
+"g c #F80677",
+"h c #DE7179",
+"i c #CEA764",
+"j c #CE9B60",
+"k c #F3D269",
+"l c #F8D334",
+"m c #FFDC45",
+"n c #FBC75D",
+"o c #E07D3B",
+"p c #EA7A2A",
+"q c #E8843C",
+"r c #EDBD61",
+"s c #E3947A",
+"t c #DE6C79",
+"u c #DB3686",
+"v c #CE7E9D",
+"w c #CE8BA6",
+"x c #CE8188",
+"y c #996D74",
+"z c #FFEB19",
+"A c #FFFF00",
+"B c #FFF709",
+"C c #F3D135",
+"D c #E6C26F",
+"E c #D3CE77",
+"F c #D1B165",
+"G c #CFB875",
+"H c #AF7C77",
+"I c #B1306F",
+"J c #961766",
+"K c #9D36B5",
+"L c #9F09D7",
+"M c #A406CC",
+"N c #A55DB4",
+"O c #FCF00C",
+"P c #FFF70C",
+"Q c #E0D148",
+"R c #DEC063",
+"S c #D0C261",
+"T c #D5B46A",
+"U c #907059",
+"V c #421B10",
+"W c #7B0947",
+"X c #7C0642",
+"Y c #B43EDA",
+"Z c #A90BFE",
+"` c #B853C8",
+" . c #9F7258",
+".. c #FAD739",
+"+. c #F3ED24",
+"@. c #F8E533",
+"#. c #D9C763",
+"$. c #ECA76F",
+"%. c #D1C260",
+"&. c #C7A65C",
+"*. c #311F0F",
+"=. c #0C0000",
+"-. c #390012",
+";. c #5F1B24",
+">. c #AA36BA",
+",. c #9B0BD6",
+"'. c #9D0BDA",
+"). c #A4569D",
+"!. c #EAC46F",
+"~. c #F0CB6C",
+"{. c #D8B36A",
+"]. c #D1BD6E",
+"^. c #D3B375",
+"/. c #CBB260",
+"(. c #B28866",
+"_. c #0C0706",
+":. c #020206",
+"<. c #2B1010",
+"[. c #5E3D1F",
+"}. c #CB8B8D",
+"|. c #B78394",
+"1. c #C27794",
+"2. c #B0747D",
+"3. c #E6C895",
+"4. c #DCAF6C",
+"5. c #D8C065",
+"6. c #CEBF61",
+"7. c #C5B677",
+"8. c #ACA385",
+"9. c #9E9899",
+"0. c #434340",
+"a. c #3F3D1C",
+"b. c #744232",
+"c. c #BA7D50",
+"d. c #9B7687",
+"e. c #313FDC",
+"f. c #1E3DF2",
+"g. c #494FBA",
+"h. c #D3BB6C",
+"i. c #CFB869",
+"j. c #D0BB6C",
+"k. c #B1A5A1",
+"l. c #8A94A5",
+"m. c #2D3945",
+"n. c #444823",
+"o. c #A17741",
+"p. c #CF9A61",
+"q. c #887F9F",
+"r. c #0B2FFE",
+"s. c #002FFE",
+"t. c #324AD9",
+"u. c #9C725C",
+"v. c #C6A47F",
+"w. c #A69F87",
+"x. c #3A364D",
+"y. c #525141",
+"z. c #A67E41",
+"A. c #C88B53",
+"B. c #CF9061",
+"C. c #C88761",
+"D. c #897F90",
+"E. c #0F2FF4",
+"F. c #082FF8",
+"G. c #4047D9",
+"H. c #81645A",
+"I. c #B27F5B",
+"J. c #D4A77A",
+"K. c #8C6636",
+"L. c #72491F",
+"M. c #9D7A45",
+"N. c #CC9A61",
+"O. c #CF9361",
+"P. c #C99061",
+"Q. c #A97E5C",
+"R. c #906D5F",
+"S. c #808185",
+"T. c #8F7885",
+"U. c #A16773",
+"V. c #6D4C42",
+"W. c #966B43",
+"X. c #DBA97B",
+"Y. c #7B5029",
+"Z. c #767361",
+"`. c #BBA07C",
+" + c #CA9E68",
+".+ c #CA9561",
+"++ c #CF8761",
+"@+ c #B3805C",
+"#+ c #322841",
+"$+ c #413759",
+"%+ c #8D7963",
+"&+ c #A7735A",
+"*+ c #A26453",
+"=+ c #845B3A",
+"-+ c #DBAA7B",
+";+ c #714D25",
+">+ c #C69D70",
+",+ c #BE8D61",
+"'+ c #A77F54",
+")+ c #443251",
+"!+ c #606492",
+"~+ c #A39EA3",
+"{+ c #A46959",
+"]+ c #96734D",
+"^+ c #D6A96D",
+"/+ c #775529",
+"(+ c #A17E63",
+"_+ c #AC825F",
+":+ c #936958",
+"<+ c #AC97A9",
+"[+ c #C9B4B3",
+". . . . . . . . . . . . . . . . . + ",
+". @ @ @ @ # $ % & * = - ; @ @ @ @ + ",
+". @ @ > , ' ) ! ~ { ] ^ / ( @ @ @ + ",
+". @ _ : < [ } | 1 2 3 3 4 5 6 @ @ + ",
+". 7 8 9 0 a b c d e f g h i j 6 @ + ",
+". k l m n o p q r s t u v w x y @ + ",
+". z A B C D E F G H I J K L M N 6 + ",
+". O A P Q R S T U V W X Y Z Z ` .+ ",
+". ..+. at .#.$.%.&.*.=.-.;.>.,.'.). .+ ",
+". !.~.{.].^./.(._.:.<.[.}.|.1.2. .+ ",
+". 3.4.5.6.7.8.9.0.a.b.c.d.e.f.g. .+ ",
+". @ h.i.j.k.l.m.n.o.p.p.q.r.s.t.u.+ ",
+". @ @ @ v.w.x.y.z.A.B.C.D.E.F.G.H.+ ",
+". @ @ I.J.K.L.M.N.O.P.Q.R.S.T.U.V.+ ",
+". @ W.X.Y.Z.`. +.+++ at +#+$+%+&+*+6 + ",
+". =+-+;+@ @ @ @ >+,+'+)+!+~+{+]+@ + ",
+". ^+/+@ @ @ @ @ @ (+_+:+<+[+6 @ @ + ",
+"+ + + + + + + + + + + + + + + + + + "};
diff --git a/icons/wp.xpm b/icons/wp.xpm
new file mode 100644
index 0000000..08d9558
--- /dev/null
+++ b/icons/wp.xpm
@@ -0,0 +1,27 @@
+/* XPM */
+static char * wp_xpm[] = {
+"18 18 6 1",
+" c None",
+". c #FFFFFF",
+"+ c #AEAAAE",
+"@ c #D5D6D5",
+"# c #000000",
+"$ c #0909EF",
+".................+",
+".@@@@@@@@@@@@@@@@#",
+".$$$@$$$$@$$$@@@@#",
+".@$$@@$$@@$$@@@@@#",
+".@$$@@$$@@$@@@@@@#",
+".@$$@$$$@$$@@@@@@#",
+".@$$@$@$@$@@@@@@@#",
+".@@$$$@$@$$$$$$@@#",
+".@@$$@@$$@@$$@$$@#",
+".@@$$@@$$@@$$@$$@#",
+".@@$@@@$@@$$@@$$@#",
+".@@@@@@@@@$$@$$@@#",
+".@@@@@@@@@$$$$@@@#",
+".@@@@@@@@$$@@@@@@#",
+".@@@@@@@@$$@@@@@@#",
+".@@@@@@@$$$$@@@@@#",
+".@@@@@@@@@@@@@@@@#",
+"##################"};
diff --git a/icons/xterm.xpm b/icons/xterm.xpm
new file mode 100644
index 0000000..60e0b13
--- /dev/null
+++ b/icons/xterm.xpm
@@ -0,0 +1,202 @@
+/* XPM */
+static char * xterm_xpm[] = {
+"18 18 181 2",
+" c None",
+". c #FFFFFF",
+"+ c #AEAAAE",
+"@ c #D5D6D5",
+"# c #000000",
+"$ c #EFEEEE",
+"% c #F6F6F4",
+"& c #F6F7F3",
+"* c #F3F4EE",
+"= c #E8E9E1",
+"- c #D6D7CF",
+"; c #C5C5BE",
+"> c #B3B2A9",
+", c #9F9F94",
+"' c #868685",
+") c #6E706A",
+"! c #949685",
+"~ c #B4B3B6",
+"{ c #898297",
+"] c #554A75",
+"^ c #40365E",
+"/ c #241A4B",
+"( c #170B46",
+"_ c #12093E",
+": c #0E0737",
+"< c #0A0530",
+"[ c #060429",
+"} c #030325",
+"| c #00031F",
+"1 c #A1A2A0",
+"2 c #575747",
+"3 c #B2B2B3",
+"4 c #4D436A",
+"5 c #160350",
+"6 c #13034B",
+"7 c #110346",
+"8 c #0F0340",
+"9 c #0C033A",
+"0 c #0A0335",
+"a c #07032F",
+"b c #05032A",
+"c c #A3A4A3",
+"d c #5C5C4D",
+"e c #B1B0B1",
+"f c #4E436A",
+"g c #070330",
+"h c #A4A5A3",
+"i c #61614F",
+"j c #3B3B2E",
+"k c #AEAEAF",
+"l c #4D4269",
+"m c #261459",
+"n c #281C4E",
+"o c #2A1E4E",
+"p c #150945",
+"q c #0C033B",
+"r c #0A0336",
+"s c #A7A7A5",
+"t c #6A6B59",
+"u c #454632",
+"v c #ADACAE",
+"w c #52476D",
+"x c #38314A",
+"y c #0A0809",
+"z c #181618",
+"A c #362F50",
+"B c #0F053D",
+"C c #000320",
+"D c #ABACAB",
+"E c #757764",
+"F c #565842",
+"G c #5A5072",
+"H c #5F5A67",
+"I c #676149",
+"J c #777570",
+"K c #25232F",
+"L c #170E43",
+"M c #05032B",
+"N c #030326",
+"O c #B0B0AF",
+"P c #7E826D",
+"Q c #666751",
+"R c #AAABAB",
+"S c #645C7A",
+"T c #776349",
+"U c #E5C319",
+"V c #A78F32",
+"W c #27232C",
+"X c #1E1448",
+"Y c #080330",
+"Z c #010320",
+"` c #B2B3B2",
+" . c #888A75",
+".. c #6D6F59",
+"+. c #A7A7AA",
+"@. c #6D677D",
+"#. c #9A9798",
+"$. c #DBD0B1",
+"%. c #ECE9E0",
+"&. c #353334",
+"*. c #362F4E",
+"=. c #0F073A",
+"-. c #080331",
+";. c #BBBCBB",
+">. c #8B8E79",
+",. c #72735E",
+"'. c #A8A7A8",
+"). c #636264",
+"!. c #D9D8D7",
+"~. c #FAFAF8",
+"{. c #8D8D8D",
+"]. c #18171B",
+"^. c #514D66",
+"/. c #434058",
+"(. c #403E53",
+"_. c #3D3C4F",
+":. c #3A3B4A",
+"<. c #CACBC8",
+"[. c #8A8D78",
+"}. c #64665B",
+"|. c #9F9EA1",
+"1. c #7F7E7E",
+"2. c #F9FAF8",
+"3. c #FBFBF9",
+"4. c #DEDFDD",
+"5. c #131313",
+"6. c #959695",
+"7. c #F0EFEA",
+"8. c #ECECE7",
+"9. c #E9E9E4",
+"0. c #E7E7DE",
+"a. c #DEDED3",
+"b. c #858773",
+"c. c #555551",
+"d. c #A7A293",
+"e. c #F9F9F8",
+"f. c #F8F8F6",
+"g. c #F0EEDF",
+"h. c #1D1D19",
+"i. c #5D5C58",
+"j. c #C9C9BE",
+"k. c #C7C7BD",
+"l. c #939388",
+"m. c #929484",
+"n. c #9A9A8B",
+"o. c #595953",
+"p. c #515161",
+"q. c #C7C1B4",
+"r. c #ECC635",
+"s. c #C4A420",
+"t. c #AFADA8",
+"u. c #F9F9F6",
+"v. c #F9F9F7",
+"w. c #E6CD79",
+"x. c #7C5B09",
+"y. c #AB922F",
+"z. c #343326",
+"A. c #1E1E14",
+"B. c #313125",
+"C. c #504F4F",
+"D. c #DBC475",
+"E. c #F5CC10",
+"F. c #F4CA10",
+"G. c #C1AC62",
+"H. c #EEEEEC",
+"I. c #C2C2C0",
+"J. c #A07F2F",
+"K. c #F5C80E",
+"L. c #F3CB17",
+"M. c #B0A263",
+"N. c #626254",
+"O. c #595949",
+"P. c #9A9693",
+"Q. c #B9A478",
+"R. c #CBA133",
+"S. c #967432",
+"T. c #6F6D6D",
+"U. c #6F6B6D",
+"V. c #957642",
+"W. c #C59D35",
+"X. c #8D8D86",
+". . . . . . . . . . . . . . . . . + ",
+". @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # ",
+". @ @ $ % & * = - ; > , ' ) ! @ @ # ",
+". @ ~ { ] ^ / ( _ : < [ } | 1 2 @ # ",
+". @ 3 4 5 6 7 8 9 0 a b } | c d @ # ",
+". @ e f 5 6 7 8 9 0 g b } | h i j # ",
+". @ k l m n o p q r g b } | s t u # ",
+". @ v w x y z A B r g b } C D E F # ",
+". @ v G H I J K L r g M N C O P Q # ",
+". @ R S T U V W X r Y M N Z ` ...# ",
+". @ +. at .#.$.%.&.*.=.-.M N Z ;.>.,.# ",
+". @ '.).!.~.% {.].^./.(._.:.<.[.}.# ",
+". @ |.1.2.3.3.4.5.6.7.8.9.0.a.b.c.# ",
+". @ @ d.e.f.~.g.h.i.j.k.l.m.n.o.p.# ",
+". q.r.s.t.u.v.w.x.y.z.A.B.C.p.p.p.# ",
+". D.E.F.G.H.I.J.K.L.M.N.O.p.p.p.@ # ",
+". P.Q.R.S.T.U.V.W.X.@ @ @ @ @ @ @ # ",
+"# # # # # # # # # # # # # # # # # # "};
diff --git a/mask.xbm b/mask.xbm
new file mode 100644
index 0000000..0efa91f
--- /dev/null
+++ b/mask.xbm
@@ -0,0 +1,68 @@
+#define mask_width 64
+#define mask_height 64
+
+static char mask_bits[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
diff --git a/readln.c b/readln.c
new file mode 100644
index 0000000..2ae4577
--- /dev/null
+++ b/readln.c
@@ -0,0 +1,59 @@
+/* readln.c - Edward H. Flora - ehflora at ksu.edu */
+/* Last Modified: 2/24/98 */
+/*
+ * This function reads a string from a file pointed to by fp until a
+ * new line (EOLN) or an end of file is encountered. It returns a pointer
+ * to the string. The new line character is included in the string returned
+ * by the function.
+ */
+
+/* EXTERNALS:
+ ******************
+ * Functions Called:
+ * Standard Libraries.
+ *
+ * Header Files Included:
+ * Standard Includes only.
+ */
+
+/* PORTABILITY:
+ ******************
+ * Coded in ANSI C, using ANSI prototypes.
+ */
+
+/****** Include Files *************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define EOLN '\n' /* Defines the new line character */
+#define SIZE1 10 /* Defines the increment to increase the */
+ /* string by until a newline of EOF is found */
+
+/****** Function to Read a Line from fp *******************************/
+char *readln(FILE *fp){
+ char *tmp, *t1, *t2;
+ int count = 0, s1 = SIZE1;
+
+ if((tmp = malloc(SIZE1*sizeof(char))) == NULL)return NULL;
+ /* If cannot allocate memory */
+ if((t1 = fgets(tmp, SIZE1, fp)) == NULL){
+ free(tmp);
+ return NULL;
+ } /* If there is no string to be read */
+ while(strchr(t1,EOLN) == NULL){ /* Loop while EOLN is not in the string */
+ count += strlen(t1);
+ if((s1 - count) > 1)break;
+ s1 +=SIZE1;
+ if((t2 = realloc(tmp, s1*sizeof(char))) == NULL){
+ free(tmp);
+ return NULL;
+ } /* If cannot allocate more memory */
+ else tmp = t2;
+ if((t1 = fgets((tmp+count),((s1 - count)),fp)) == NULL)break;
+ } /* End of While Loop */
+ if((t2 = realloc(tmp,strlen(tmp)+1)) == NULL)free(tmp);
+ return (t2);
+}
+/****** End of Function readln ****************************************/
+
diff --git a/wmbutton.c b/wmbutton.c
new file mode 100644
index 0000000..f3ee59c
--- /dev/null
+++ b/wmbutton.c
@@ -0,0 +1,593 @@
+/***********************************************************************
+ * Code is based on wmppp, wmload, wmtime, wmcp, and asbutton
+ * Author: Edward H. Flora <ehflora at ksu.edu>
+ * Ver 0 Rel 3 March 6, 1999
+ *
+ * Contributors:
+ * Ben Cohen <buddog at aztec.asu.edu>
+ * original author of wmcp (et al.)
+ * Thomas Nemeth <tnemeth at multimania.com>
+ * contributor to wmcp
+ * Casey Harkins <charkins at cs.wisc.edu>
+ * Bug fix reading config file path - 3/6/99
+ * Added button-presses, and other - denoted by *charkins*
+ * Michael Henderson <mghenderson at lanl.gov>
+ * Application ideas, suggestions
+ * Ryan ?? <pancake at mindspring.com>
+ * Modified wmbutton to asbutton.
+ * Note: asbutton is a seperate program, not associated
+ * with wmbutton (just as wmbutton is not associated
+ * with wmcp)
+ * Jon Bruno
+ * Web Page Development
+ * The contributors listed above are not necessarily involved with the
+ * development of wmbutton. I'm listing them here partially as thanks for
+ * helping out, catching bugs in the code, etc.
+ ***********************************************************************/
+#include <Xlib.h>
+#include <Xutil.h>
+#include <xpm.h>
+#include <extensions/shape.h>
+#include <keysym.h>
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "backdrop.xpm" // background graphic
+#include "buttons.xpm" // graphic of 9 buttons
+#include "mask.xbm"
+
+#define CONFIGFILEMAX 128
+#define CONFFILENAME "/.wmbutton"
+#define VER 0
+#define REL 4
+
+// #define MIDMOUSE
+#define LMASK 0
+#define MMASK 10
+#define RMASK 20
+
+/***********************************************************************
+ * Globals.. OK.. there's too many globals.
+ * Feel free and fix it, if you'd like.
+ ***********************************************************************/
+Display *display;
+int screen;
+Window rootwin, win, iconwin;
+GC gc;
+int depth;
+Pixel bg_pixel, fg_pixel;
+
+XSizeHints xsizehints;
+XWMHints * xwmhints;
+XClassHint xclasshint;
+char configfile[CONFIGFILEMAX];
+
+typedef struct _XpmIcon {
+ Pixmap pixmap;
+ Pixmap mask;
+ XpmAttributes attributes;
+} XpmIcon;
+
+
+Pixmap pixmask;
+
+typedef struct _button_region {
+ int x,y;
+ int i,j;
+} ButtonArea;
+
+ButtonArea button_region[9];
+
+XpmIcon template, visible, buttons;
+
+int numb_of_apps = 9;
+int N = 1; /* Button number pressed to goto app # */
+int border = 0;
+int Verbose = 0;
+int mmouse = 0;
+int button_pressed = -1; /* button to be drawn pressed *charkins*/
+
+char *app_name = "wmbutton";
+
+/*************** Function Prototypes ***********************************/
+void RunAppN(int app); // function to run app N as found in conf file
+char *Parse(int app); // parse data in config file
+void redraw(void);
+void getPixmaps(void);
+int whichButton(int x, int y); // determine which button has been pressed
+int flush_expose(Window w);
+void show_usage(void); // show usage message to stderr
+char *readln(FILE *fp); // read line from file, return pointer to it
+
+/***********************************************************************
+ * Main
+ ***********************************************************************/
+int main( int argc, char ** argv ) {
+ XEvent report;
+ XGCValues xgcValues;
+ XTextProperty app_name_atom;
+
+ int dummy = 0;
+ int i;
+ char Geometry_str[64] = "64x64+0+0";
+ char Display_str[64] = "";
+
+ strcpy(configfile, getenv("HOME")); // Added by Casey Harkin, 3/6/99
+ strcat(configfile, CONFFILENAME); // Fixed Bug - didn't look in home directory
+ // but startup directory
+
+ /* Parse Command Line Arguments */
+ for ( i=1; i<argc; i++ ) {
+ if ( *argv[i] == '-' ) {
+ switch ( *(argv[i]+1) ) {
+ case 'v': // Turn on Verbose (debugging) Mode
+ Verbose = 1;
+ break;
+ case 'g': // Set Geometry Options
+ if ( ++i >= argc ) show_usage();
+ sscanf(argv[i], "%s", Geometry_str);
+ if ( Verbose ) printf("Geometry is: %s\n", Geometry_str);
+ break;
+ case 'd': // Set display
+ if ( ++i >= argc ) show_usage();
+ sscanf(argv[i], "%s", Display_str);
+ if ( Verbose ) printf("Display is: %s\n", Display_str);
+ break;
+ case 'h': // Show Help Message
+ show_usage();
+ break;
+ case 'f': // use config file <filename>
+ if ( ++i >= argc ) show_usage();
+ sscanf(argv[i], "%s", configfile);
+ if ( Verbose ) printf("Using Config File: %s\n", configfile);
+ break;
+ case 'm': // Enable Middle Mouse
+ mmouse = 1;
+ break;
+ default: // other, unknown, parameters
+ show_usage();
+ break;
+ }
+ }
+ }
+
+ if ( (display = XOpenDisplay(Display_str)) == NULL ) {
+ fprintf(stderr,"Fail: XOpenDisplay for %s\n", Display_str);
+ exit(-1);
+ }
+
+ screen = DefaultScreen(display);
+ rootwin = RootWindow(display,screen);
+ depth = DefaultDepth(display, screen);
+
+ bg_pixel = WhitePixel(display, screen );
+ fg_pixel = BlackPixel(display, screen );
+
+ xsizehints.flags = USSize | USPosition;
+ xsizehints.width = 64;
+ xsizehints.height = 64;
+
+ /* Parse Geometry string and fill in sizehints fields */
+ XWMGeometry(display, screen,
+ Geometry_str,
+ NULL,
+ border,
+ &xsizehints,
+ &xsizehints.x,
+ &xsizehints.y,
+ &xsizehints.width,
+ &xsizehints.height,
+ &dummy);
+
+ if ( (win = XCreateSimpleWindow(display,
+ rootwin,
+ xsizehints.x,
+ xsizehints.y,
+ xsizehints.width,
+ xsizehints.height,
+ border,
+ fg_pixel, bg_pixel) ) == 0 ) {
+ fprintf(stderr,"Fail: XCreateSimpleWindow\n");
+ exit(-1);
+ }
+
+ if ( (iconwin = XCreateSimpleWindow(display,
+ win,
+ xsizehints.x,
+ xsizehints.y,
+ xsizehints.width,
+ xsizehints.height,
+ border,
+ fg_pixel, bg_pixel) ) == 0 ) {
+ fprintf(stderr,"Fail: XCreateSimpleWindow\n");
+ exit(-1);
+ }
+
+ /* Set up shaped windows */
+ /*Gives the appicon a border so you can grab and move it. */
+
+ if ( ( pixmask = XCreateBitmapFromData(display,
+ win,
+ mask_bits,
+ mask_width,
+ mask_height) ) == 0 ) {
+ fprintf(stderr,"Fail: XCreateBitmapFromData\n");
+ }
+
+ XShapeCombineMask(display, win, ShapeBounding, 0, 0, pixmask, ShapeSet );
+ XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0, pixmask, ShapeSet);
+
+ /* Convert in pixmaps from .xpm includes. */
+ getPixmaps();
+
+ /* Interclient Communication stuff */
+ /* Appicons don't work with out this stuff */
+ xwmhints = XAllocWMHints();
+ xwmhints->flags = WindowGroupHint | IconWindowHint | StateHint;
+ xwmhints->icon_window = iconwin;
+ xwmhints->window_group = win;
+ xwmhints->initial_state = WithdrawnState;
+ XSetWMHints( display, win, xwmhints );
+
+ xclasshint.res_name = "wmbutton";
+ xclasshint.res_class = "Wmbutton";
+ XSetClassHint( display, win, &xclasshint );
+
+ XSetWMNormalHints( display, win, &xsizehints );
+
+ /* Tell window manager what the title bar name is. We never see */
+ /* this anyways in the WithdrawnState */
+ if ( XStringListToTextProperty(&app_name, 1, &app_name_atom) == 0 ) {
+ fprintf(stderr,"%s: Can't set up window name\n", app_name);
+ exit(-1);
+ }
+ XSetWMName( display, win, &app_name_atom );
+
+ /* Create Graphic Context */
+ if (( gc = XCreateGC(display, win,(GCForeground | GCBackground), &xgcValues))
+ == NULL ) {
+ fprintf(stderr,"Fail: XCreateGC\n");
+ exit(-1);
+ }
+
+ /* XEvent Masks. We want both window to process X events */
+ XSelectInput(display, win,
+ ExposureMask |
+ ButtonPressMask |
+ ButtonReleaseMask | /* added ButtonReleaseMask *charkins*/
+ PointerMotionMask |
+ StructureNotifyMask );
+ XSelectInput(display, iconwin,
+ ExposureMask |
+ ButtonPressMask |
+ ButtonReleaseMask | /* added ButtonReleaseMask *charkins*/
+ PointerMotionMask |
+ StructureNotifyMask );
+
+ /* Store the 'state' of the application for restarting */
+ XSetCommand( display, win, argv, argc );
+
+ /* Window won't ever show up until it is mapped.. then drawn after a */
+ /* ConfigureNotify */
+ XMapWindow( display, win );
+
+ /* X Event Loop */
+ while (1) {
+ XNextEvent(display, &report );
+ switch (report.type) {
+ case Expose:
+ if (report.xexpose.count != 0) {
+ break;
+ }
+ if ( Verbose ) fprintf(stdout,"Event: Expose\n");
+ redraw();
+ break;
+ case ConfigureNotify:
+ if ( Verbose ) fprintf(stdout,"Event: ConfigureNotify\n");
+ redraw();
+ break;
+ case ButtonPress: /* draw button pressed, don't launch *charkins*/
+ switch (report.xbutton.button) {
+ case Button1:
+ N = whichButton(report.xbutton.x, report.xbutton.y );
+ if ( (N >= 0) && (N <= numb_of_apps) ) {
+ button_pressed = N + LMASK;
+ redraw();
+ }
+ if ( Verbose )
+ fprintf(stdout,"Button 1:x=%d y=%d N=%d\n",
+ report.xbutton.x, report.xbutton.y, N+LMASK);
+ break;
+ case Button2:
+ if (mmouse) {
+ N = whichButton(report.xbutton.x, report.xbutton.y );
+ if ( (N >= 0) && (N <= numb_of_apps) ) {
+ button_pressed = N + MMASK;
+ redraw();
+ }
+ if ( Verbose )
+ fprintf(stdout,"Button 1:x=%d y=%d N=%d\n",
+ report.xbutton.x, report.xbutton.y, N+MMASK);
+ }
+ break;
+ case Button3:
+ N = whichButton(report.xbutton.x, report.xbutton.y );
+ if ( (N >= 0) && (N <= numb_of_apps) ) {
+ button_pressed = N + RMASK;
+ redraw();
+ }
+ if ( Verbose )
+ fprintf(stdout,"Button 3:x=%d y=%d N=%d\n",
+ report.xbutton.x, report.xbutton.y, N+RMASK);
+ break;
+ }
+ break;
+ case ButtonRelease: /* launch app here if still over button *charkins*/
+ switch (report.xbutton.button) {
+ case Button1:
+ N = whichButton(report.xbutton.x, report.xbutton.y );
+ if ( (N >= 0) && (N <= numb_of_apps) && (N == button_pressed))
+ RunAppN( N + LMASK);
+ button_pressed=-1;
+ redraw();
+ if ( Verbose )
+ fprintf(stdout,"Button 1:x=%d y=%d N=%d\n",
+ report.xbutton.x, report.xbutton.y, N+LMASK);
+ break;
+ case Button2:
+ if (mmouse) {
+ N = whichButton(report.xbutton.x, report.xbutton.y );
+ if ( (N >= 0) && (N <= numb_of_apps) && (N == button_pressed))
+ RunAppN( N + MMASK);
+ button_pressed=-1;
+ redraw();
+ if ( Verbose )
+ fprintf(stdout,"Button 1:x=%d y=%d N=%d\n",
+ report.xbutton.x, report.xbutton.y, N+MMASK);
+ }
+ break;
+ case Button3:
+ N = whichButton(report.xbutton.x, report.xbutton.y );
+ if ( (N >= 0) && (N <= numb_of_apps) && (N == button_pressed))
+ RunAppN( N + RMASK);
+ button_pressed=-1;
+ redraw();
+ if ( Verbose )
+ fprintf(stdout,"Button 3:x=%d y=%d N=%d\n",
+ report.xbutton.x, report.xbutton.y, N+RMASK);
+ break;
+ }
+ break;
+ case DestroyNotify:
+ if ( Verbose ) fprintf(stdout, "Bye\n");
+ XFreeGC(display, gc);
+ XDestroyWindow(display,win);
+ XDestroyWindow(display,iconwin);
+ XCloseDisplay(display);
+ if ( Verbose ) fprintf(stdout, "Bye\n");
+ exit(0);
+ break;
+ }
+ }
+ return (0);
+}
+
+/***********************************************************************
+ * redraw
+ *
+ * Map the button region coordinates.
+ *
+ * Draw the appropriate number of buttons on the 'visible' Pixmap
+ * using data from the 'buttons' pixmap.
+ *
+ * Then, copy the 'visible' pixmap to the two windows ( the withdrawn
+ * main window and the icon window which is the main window's icon image.)
+ ***********************************************************************/
+void redraw() {
+ int n;
+ int i,j;
+ int dest_x, dest_y;
+ int space;
+ int offset;
+ int bsize = 18;
+
+ space = 0;
+ offset = 5;
+ XCopyArea(display, template.pixmap, visible.pixmap, gc, 0, 0,
+ template.attributes.width, template.attributes.height, 0, 0 );
+
+ for ( j=0; j < 3; j++ ) {
+ for ( i=0; i < 3; i++ ) {
+ n = i + j * 3;
+ dest_x = i*(bsize + space) + offset + space;
+ dest_y = j*(bsize + space) + offset + space;
+
+ /* Define button mouse coords */
+ button_region[n].x = dest_x;
+ button_region[n].y = dest_y;
+ button_region[n].i = dest_x + bsize - 1;
+ button_region[n].j = dest_y + bsize - 1;
+
+ /* Copy button images for valid apps */
+ if ( (n + 1) <= numb_of_apps ) {
+ XCopyArea(display, buttons.pixmap, visible.pixmap, gc,
+ i * bsize, j * bsize, bsize, bsize, dest_x, dest_y);
+ }
+ }
+ }
+
+ if ( button_pressed>0 ) { /* draw pressed button *charkins*/
+ if(button_pressed>RMASK) button_pressed-=RMASK;
+ else if(button_pressed>MMASK) button_pressed-=MMASK;
+ else if(button_pressed>LMASK) button_pressed-=LMASK;
+ i = (button_pressed-1) % 3; /* get col of button */
+ j = (button_pressed-1) / 3; /* get row of button */
+ dest_x = i * (bsize + space) + offset + space;
+ dest_y = j * (bsize + space) + offset + space;
+ XSetForeground(display, gc, bg_pixel);
+ XDrawLine(display, visible.pixmap, gc,
+ dest_x+1, dest_y+bsize-1, dest_x+bsize-1, dest_y+bsize-1);
+ XDrawLine(display, visible.pixmap, gc,
+ dest_x+bsize-1, dest_y+bsize-1, dest_x+bsize-1, dest_y+1);
+ XSetForeground(display, gc, fg_pixel);
+ XDrawLine(display, visible.pixmap, gc,
+ dest_x, dest_y, dest_x+bsize-2, dest_y);
+ XDrawLine(display, visible.pixmap, gc,
+ dest_x, dest_y, dest_x, dest_y+bsize-2);
+ } /*charkins*/
+
+ flush_expose( win );
+ XCopyArea(display, visible.pixmap, win, gc, 0, 0,
+ visible.attributes.width, visible.attributes.height, 0, 0 );
+ flush_expose( iconwin );
+ XCopyArea(display, visible.pixmap, iconwin, gc, 0, 0,
+ visible.attributes.width, visible.attributes.height, 0, 0 );
+ if ( Verbose ) fprintf(stdout,"In Redraw()\n");
+}
+
+/***********************************************************************
+ * whichButton
+ *
+ * Return the button that at the x,y coordinates. The button need not
+ * be visible ( drawn ). Return -1 if no button match.
+ ***********************************************************************/
+int whichButton( int x, int y ) {
+ int index;
+
+ for ( index=0; index < numb_of_apps; index++ ) {
+ if ( x >= button_region[index].x &&
+ x <= button_region[index].i &&
+ y >= button_region[index].y &&
+ y <= button_region[index].j ) {
+ return( index + 1);
+ }
+ }
+ return(-1);
+}
+
+/***********************************************************************
+ * RunAppN(int app)
+ *
+ * Run the command given in the configuration file 'configfile'
+ ***********************************************************************/
+void RunAppN( int app ) {
+ char *cmndstr;
+
+ cmndstr = Parse(app); // Get command to pass to system
+ if (Verbose) fprintf(stderr, "Command String: %s", cmndstr);
+ if (cmndstr != NULL) system(cmndstr); // if there's a command, run it
+}
+
+/***********************************************************************
+ * Parse(int app)
+ *
+ * Parses the file 'configfile' for command to execute.
+ ***********************************************************************/
+
+char *Parse(int app) {
+ FILE *fp;
+ char *ptr = NULL;
+ char *cmnd = NULL;
+ char *line = NULL;
+
+ if ((fp = fopen(configfile, "r")) == NULL) { // Can't find config file
+ fprintf(stderr, "%s: Configuration File not found\n", configfile);
+ exit(-1);
+ }
+
+ do { // Read Lines in config file
+ line = readln(fp);
+ if (line == NULL) break; // if end of file, quit
+ if ( (line[0] != '#') && (line[0] != '\n')) // Ignore comments and blanks
+ if ( atoi(line) == app) break; // if we've found our app, quit looking
+ } while (1);
+
+ if (line == NULL) return(NULL); // if we didn't find in, that just ignore
+
+ ptr = strchr(line,'\t'); // find first tab
+ if (ptr == NULL) ptr = strchr(line,' '); // or space charater
+ if (ptr == NULL) return(NULL); // if neither are there, its a badly
+ // formatted line. Ignore
+ ptr++;
+ cmnd = malloc((strlen(ptr)+1)*sizeof(char));
+
+ strcpy(cmnd, ptr); // Everything after number is passed to system
+
+ free(line);
+ fclose(fp);
+ return(cmnd);
+}
+
+/***********************************************************************
+ * getPixmaps
+ *
+ * Load XPM data into X Pixmaps.
+ *
+ * Pixmap template contains the untouched window backdrop image.
+ * Pixmap visible is the template pixmap with buttons drawn on it.
+ * -- what is seen by the user.
+ * Pixmap buttons holds the images for individual buttons that are
+ * later copied onto Pixmap visible.
+ ***********************************************************************/
+void getPixmaps() {
+ template.attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions);
+ visible.attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions);
+ buttons.attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions);
+
+ /* Template Pixmap. Never Drawn To. */
+ if ( XpmCreatePixmapFromData( display, rootwin, backdrop_xpm,
+ &template.pixmap, &template.mask,
+ &template.attributes) != XpmSuccess ) {
+ fprintf(stderr, "Can't Create 'template' Pixmap\n");
+ exit(1);
+ }
+ /* Visible Pixmap. Copied from template Pixmap and then drawn to. */
+ if ( XpmCreatePixmapFromData( display, rootwin, backdrop_xpm,
+ &visible.pixmap, &visible.mask,
+ &visible.attributes) != XpmSuccess ) {
+ fprintf(stderr, "Can't Create 'visible' Pixmap");
+ exit(1);
+ }
+
+ /* Button Pixmap. */
+ if ( XpmCreatePixmapFromData( display, rootwin, buttons_xpm,
+ &buttons.pixmap, &buttons.mask,
+ &buttons.attributes) != XpmSuccess ) {
+ fprintf(stderr, "Can't Create 'buttons' Pixmap");
+ exit(1);
+ }
+}
+
+/***********************************************************************
+ * flush_expose
+ *
+ * Everyone else has one of these... Can't hurt to throw it in.
+ ***********************************************************************/
+int flush_expose(Window w) {
+ XEvent dummy;
+ int i=0;
+
+ while (XCheckTypedWindowEvent(display, w, Expose, &dummy)) i++;
+ return(i);
+}
+
+/***********************************************************************
+ * show_usage
+ ***********************************************************************/
+void show_usage() {
+ fprintf(stderr,"\n");
+ fprintf(stderr,"usage: %s [-g geometry] [-d dpy] [-v] [-f <configfile>]\n",app_name);
+ fprintf(stderr,"\n");
+ fprintf(stderr," wmbutton Ver %d Rel %d\n",VER,REL);
+ fprintf(stderr,"\n");
+ fprintf(stderr,"-g <geometry> Window Geometry - ie: 64x64+10+10\n");
+ fprintf(stderr,"-d <display> Display - ie: 127.0.0.1:0.0\n");
+ fprintf(stderr,"-f <filename> Full path to configuration file.\n");
+ fprintf(stderr,"-v Verbose Mode. \n");
+ fprintf(stderr,"-h Help. This message.\n");
+ fprintf(stderr,"-m Enable Middle Mouse functionality.\n\n");
+ exit(-1);
+}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-wmaker/wmbutton.git
More information about the Pkg-wmaker-commits
mailing list