[Pkg-wmaker-commits] [wmbutton] 03/09: Import Upstream version 0.6.1
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 a6ddb27b659843443b763004e217fa2cf78eca1a
Author: Doug Torrance <dtorrance at piedmont.edu>
Date: Sat Jul 15 23:11:58 2017 -0400
Import Upstream version 0.6.1
---
.wmbutton | 50 +-
Makefile | 19 +-
README | 90 ++-
buttons.xpm | 2099 ++++++++++++++++++++++++++++++++++------------------
icons/buttons2.xpm | 854 +++++++++++++++++++++
readln.c | 59 --
wmb_libs.c | 692 +++++++++++++++++
wmbutton.c | 552 +++++++-------
wmbutton.h | 107 +++
9 files changed, 3408 insertions(+), 1114 deletions(-)
diff --git a/.wmbutton b/.wmbutton
index 6da6a5e..35e0fc8 100644
--- a/.wmbutton
+++ b/.wmbutton
@@ -1,5 +1,5 @@
# .wmbutton - Configuration file for wmbutton
-# Last Modified 3/7/99
+# Last Modified 03/21/04
# Buttons are numbered as follows
# Left 1 2 3 Middle 11 12 13 Right 21 22 23
@@ -7,41 +7,41 @@
# 7 8 9 17 18 19 27 28 29
#
-1 netscape &
-11 netscape &
-21 netscape &
+1 mozilla &
+11 mozilla -mail &
+21 firefox &
-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' &
+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 wxftp &
+3 gftp &
13 nxterm -fg black -bg grey70 -T 'FTP' -e ftp &
-23
+23 jpilot &
-4 xwp &
-14 nxterm -fg black -bg grey80 -T 'Pine' -e pine &
-24 nxterm -fg black -bg grey80 -T 'Pine' -e pine &
+4 ooffice &
+14 wordperfect &
+24 presentations &
-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 &
+5 gnucash &
+15 xterm -geometry 120x20 -fg white -bg grey20 -T 'Gnuplot' -e gnuplot &
+25 quattropro &
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 &
+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 xpaint &
-27 xv &
+17 xfig &
+27 kpaint &
-8 gv &
-18 xdvi &
+8 kghostview &
+18 ggv &
28 xpdf &
-9 x11amp -b 128 &
-19 xmixer &
-29 xplaycd &
+9 xmms &
+19 xanim &
+29 gnome-sound-recorder &
# The above don't need to be in any particular order.
-# Repeated entries should be ignored
+# Repeated entries will be ignored
diff --git a/Makefile b/Makefile
index 288c412..b4b744d 100644
--- a/Makefile
+++ b/Makefile
@@ -3,14 +3,27 @@ LIBINC =-L/usr/X11R6/lib -L/usr/include/lib
LIBS = -lX11 -lXpm -lXext
TARGET = wmbutton
-OBJECTS = wmbutton.o readln.o
+OBJECTS = wmbutton.o wmb_libs.o
+
+CFLAGS += -c -Wall -O2
+
+all: ${TARGET} tags
.c.o:
- gcc -O2 -c -Wall ${INCLUDES} ${FLAGS} $< -o $*.o
+ gcc ${CFLAGS} ${INCLUDES} $< -o $*.o
${TARGET}: ${OBJECTS}
- gcc -O2 -o ${TARGET} ${OBJECTS} ${LIBINC} ${LIBS}
+ 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
index 2d94aee..5da98ae 100644
--- a/README
+++ b/README
@@ -1,8 +1,10 @@
-wmbutton Ver. 0 Rel 4
+wmbutton Ver. 0 Rel 6.1
-------------------------------------------------------------
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
+ 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:
------------
@@ -13,11 +15,20 @@ 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
+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>
@@ -34,17 +45,17 @@ CONTRIBUTORS:
with wmcp)
Jon Bruno
Web Page Development
- The contributors listed above are not necessarily involved with the
+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
+ tar xvzf wmbutton-0.5.tar.gz
CD to source directory:
- cd wmbutton-0.4
+ cd wmbutton-0.5
Edit background xpm, and buttons.xpm to your preferences
There are icon files in ./icons to work from
@@ -75,26 +86,34 @@ INSTALLATION:
the Makefile.
Tested on: (Well, it runs, I don't know if 'Tested' is quite right...)
- WindowMaker-0.50.2, 0.51
+ WindowMaker-0.80.1
Afterstep 1.6.?
- X Clients: Red Hat 5.1, Kernel 2.0.36, 2.0.35
- X Servers: XFree86 S3V 3.3.3.1
+ Fluxbox 0.9.9
+ Clients: Red Hat 8.x, Kernel 2.4.18
+
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.
+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: (If enabled (-m))
+Middle mouse button: (unless disabled (-m))
Selects the application to launch, numbered 11 through 19
Right mouse button:
@@ -108,8 +127,7 @@ 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.
+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
@@ -118,13 +136,30 @@ 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.
-"C code. C code run. Run, code, run.
- PLEASE!?!?!?!?!?!?"
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
@@ -151,6 +186,8 @@ CHANGE LOG:
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.
@@ -159,12 +196,13 @@ BUGS:
Remember, they're just undocumented FEATURES!!!
Probably Lots. Send comments (preferably with fixes) to
-<ehflora at ksu.edu>
+<ehf_dockapps at cox.net>
-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.
+"C code. C code run. Run, code, run.
+ PLEASE!?!?!?!?!?!?"
+
diff --git a/buttons.xpm b/buttons.xpm
index 8992ecd..f026b2e 100644
--- a/buttons.xpm
+++ b/buttons.xpm
@@ -1,715 +1,1400 @@
/* XPM */
static char * buttons_xpm[] = {
-"54 54 658 2",
+"54 54 1343 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",
+"# 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 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.=#> + ",
+". # $ % & * = - ; > , ' ) ! ~ { ] + . ^ / ( _ : < [ } | 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$^ + ",
"+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
-". . . . . . . . . . . . . . . . . @ . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . + ",
-". > > > > > > > > > > > > > > > > + . > > > > > -#> > > -#> > > > > > + . > > > > > > > > > > > > > ;#;#> + ",
-". >#>#>#> >#>#>#>#> >#>#>#> > > > + . > > > > > -#-#-#-#-#-#> > > > > + . > > > > > > > > > > > > ;#;#;#;#+ ",
-". > >#>#> > >#>#> > >#>#> > > > > + . > -#> > > > > > > > > > > > > > + . > > > > > > > > > > > + + ;#;#;#+ ",
-". > >#>#> > >#>#> > >#> > > > > > + . > -#> > > > > > > > > > ,#,#> > + . > > > > > > > > > > + + '#+ ;#> + ",
-". > >#>#> >#>#>#> >#>#> > > > > > + . > -#> > > > > > > > > )#)#,#> > + . > > > > > > > > > '#!#+ + + > > + ",
-". > >#>#> >#> >#> >#> > > > > > > + . -#-#> > ~#~#> > > > > )#)#,#> > + . > > > > > > > > '#!#!#!#+ > > > + ",
-". > > >#>#>#> >#> >#>#>#>#>#>#> > + . -#-#> 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$> > > > > > > + ",
-"+ + + + + + + + + + + + + + + + + + + + + ,&-#-#+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "};
+". . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . + . . . . . . . . . . . . . . . . . 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/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/readln.c b/readln.c
deleted file mode 100644
index 2ae4577..0000000
--- a/readln.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* 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/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
index f3ee59c..a2e46ac 100644
--- a/wmbutton.c
+++ b/wmbutton.c
@@ -1,16 +1,25 @@
/***********************************************************************
* 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
+ * 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
- * 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>
@@ -24,30 +33,25 @@
* 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 <unistd.h>
-#include "backdrop.xpm" // background graphic
-#include "buttons.xpm" // graphic of 9 buttons
-#include "mask.xbm"
+#include "wmbutton.h"
-#define CONFIGFILEMAX 128
-#define CONFFILENAME "/.wmbutton"
-#define VER 0
-#define REL 4
+#include "backdrop.xpm" /* background graphic */
+#include "buttons.xpm" /* graphic of 9 buttons */
+#include "mask.xbm" /* Border Graphic */
-// #define MIDMOUSE
-#define LMASK 0
-#define MMASK 10
-#define RMASK 20
+/*************** 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.
@@ -60,10 +64,7 @@ GC gc;
int depth;
Pixel bg_pixel, fg_pixel;
-XSizeHints xsizehints;
-XWMHints * xwmhints;
-XClassHint xclasshint;
-char configfile[CONFIGFILEMAX];
+struct Config_t Config;
typedef struct _XpmIcon {
Pixmap pixmap;
@@ -71,9 +72,6 @@ typedef struct _XpmIcon {
XpmAttributes attributes;
} XpmIcon;
-
-Pixmap pixmask;
-
typedef struct _button_region {
int x,y;
int i,j;
@@ -83,81 +81,40 @@ 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;
+ XSizeHints xsizehints;
+
+ Pixmap pixmask;
int dummy = 0;
- int i;
- char Geometry_str[64] = "64x64+0+0";
- char Display_str[64] = "";
+ int N = 1; /* Button number pressed to goto app # */
- 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
+ /* 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 */
- 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);
- }
+ 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);
@@ -172,7 +129,7 @@ int main( int argc, char ** argv ) {
/* Parse Geometry string and fill in sizehints fields */
XWMGeometry(display, screen,
- Geometry_str,
+ Config.Geometry_str,
NULL,
border,
&xsizehints,
@@ -189,10 +146,9 @@ int main( int argc, char ** argv ) {
xsizehints.width,
xsizehints.height,
border,
- fg_pixel, bg_pixel) ) == 0 ) {
- fprintf(stderr,"Fail: XCreateSimpleWindow\n");
- exit(-1);
- }
+ fg_pixel, bg_pixel) ) == 0 )
+ err_mess(FAILSWIN, NULL);
+
if ( (iconwin = XCreateSimpleWindow(display,
win,
@@ -201,10 +157,8 @@ int main( int argc, char ** argv ) {
xsizehints.width,
xsizehints.height,
border,
- fg_pixel, bg_pixel) ) == 0 ) {
- fprintf(stderr,"Fail: XCreateSimpleWindow\n");
- exit(-1);
- }
+ 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. */
@@ -213,9 +167,9 @@ int main( int argc, char ** argv ) {
win,
mask_bits,
mask_width,
- mask_height) ) == 0 ) {
- fprintf(stderr,"Fail: XCreateBitmapFromData\n");
- }
+ mask_height) ) == 0 )
+ err_mess(FAILXPM,NULL);
+
XShapeCombineMask(display, win, ShapeBounding, 0, 0, pixmask, ShapeSet );
XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0, pixmask, ShapeSet);
@@ -225,47 +179,38 @@ int main( int argc, char ** argv ) {
/* 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 );
+ SetWmHints();
+ SetClassHints();
- 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);
- }
+ 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 ) {
- fprintf(stderr,"Fail: XCreateGC\n");
- exit(-1);
- }
+ == NULL )
+ err_mess(FAILGC,NULL);
/* XEvent Masks. We want both window to process X events */
XSelectInput(display, win,
ExposureMask |
ButtonPressMask |
- ButtonReleaseMask | /* added ButtonReleaseMask *charkins*/
+ ButtonReleaseMask | /* added ButtonReleaseMask *charkins*/
PointerMotionMask |
- StructureNotifyMask );
+ StructureNotifyMask |
+ LeaveWindowMask );
XSelectInput(display, iconwin,
ExposureMask |
ButtonPressMask |
- ButtonReleaseMask | /* added ButtonReleaseMask *charkins*/
+ ButtonReleaseMask | /* added ButtonReleaseMask *charkins*/
PointerMotionMask |
- StructureNotifyMask );
+ StructureNotifyMask |
+ LeaveWindowMask );
/* Store the 'state' of the application for restarting */
XSetCommand( display, win, argv, argc );
@@ -274,106 +219,171 @@ int main( int argc, char ** argv ) {
/* ConfigureNotify */
XMapWindow( display, win );
+ /* Initialize Tooltip Support */
+ initTime();
+ initTooltip(!Config.bTooltipDisable, Config.szTooltipFont, Config.bTooltipSwapColors);
+
/* X Event Loop */
while (1) {
- XNextEvent(display, &report );
- switch (report.type) {
- case Expose:
- if (report.xexpose.count != 0) {
+ 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;
- }
- 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();
+
+ 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();
}
- if ( Verbose )
- fprintf(stdout,"Button 1:x=%d y=%d N=%d\n",
- report.xbutton.x, report.xbutton.y, N+LMASK);
+ nTooltipTimer= -1;
break;
- case Button2:
- if (mmouse) {
+
+ 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 + MMASK;
+ if ( (N >= 0) && (N <= NUMB_OF_APPS) ) {
+ button_pressed = N + LMASK;
redraw();
}
- if ( Verbose )
+
+ if ( Config.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();
+ 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;
}
- 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) {
+ 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 + MMASK);
+ if ( (N >= 0) && (N <= NUMB_OF_APPS) && (N == button_pressed))
+ RunAppN( N + LMASK);
button_pressed=-1;
redraw();
- if ( Verbose )
+
+ if ( Config.Verbose )
fprintf(stdout,"Button 1:x=%d y=%d N=%d\n",
- report.xbutton.x, report.xbutton.y, N+MMASK);
+ 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 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);
+ case DestroyNotify:
+
+ if ( Config.Verbose ) fprintf(stdout, "Bye\n");
+
+ destroyTooltip();
+ XFreeGC(display, gc);
+ XDestroyWindow(display,win);
+ XDestroyWindow(display,iconwin);
+ XCloseDisplay(display);
+ exit(0);
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;
}
+
+ usleep(50000);
+ nNow = currentTimeMillis();
+ if ( nTooltipTimer != -1 &&
+ ( (nNow > nTooltipTimer + nTooltipShowDelay) || (nNow < nTooltipHideTimer + nTooltipReshowDelay) ) ) {
+ showTooltip(nTooltipButton, nTooltipX, nTooltipY);
+ nTooltipTimer = -1;
+ }
+
}
+
return (0);
-}
+}/***********************************************************************/
/***********************************************************************
* redraw
@@ -394,6 +404,7 @@ void redraw() {
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,
@@ -412,7 +423,7 @@ void redraw() {
button_region[n].j = dest_y + bsize - 1;
/* Copy button images for valid apps */
- if ( (n + 1) <= numb_of_apps ) {
+ if ( (n + 1) <= NUMB_OF_APPS ) {
XCopyArea(display, buttons.pixmap, visible.pixmap, gc,
i * bsize, j * bsize, bsize, bsize, dest_x, dest_y);
}
@@ -445,8 +456,8 @@ void redraw() {
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
@@ -457,7 +468,7 @@ void redraw() {
int whichButton( int x, int y ) {
int index;
- for ( index=0; index < numb_of_apps; 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 &&
@@ -466,60 +477,8 @@ int whichButton( int x, int y ) {
}
}
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
@@ -533,61 +492,66 @@ char *Parse(int app) {
* 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 ) {
- fprintf(stderr, "Can't Create 'template' Pixmap\n");
- exit(1);
- }
+ &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 ) {
- fprintf(stderr, "Can't Create 'visible' Pixmap");
- exit(1);
- }
+ &visible.attributes) != XpmSuccess )
+ err_mess(FAILVIS, NULL);
/* Button Pixmap. */
- if ( XpmCreatePixmapFromData( display, rootwin, buttons_xpm,
- &buttons.pixmap, &buttons.mask,
- &buttons.attributes) != XpmSuccess ) {
- fprintf(stderr, "Can't Create 'buttons' Pixmap");
- exit(1);
+ 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");
-/***********************************************************************
- * 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);
+}/*********************************************************************/
+
+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;
}
-/***********************************************************************
- * 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);
+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