[Pkg-wmaker-commits] [wmrack] 31/97: Imported Upstream version 0.9
Doug Torrance
dtorrance-guest at moszumanska.debian.org
Sat Aug 22 02:42:01 UTC 2015
This is an automated email from the git hooks/post-receive script.
dtorrance-guest pushed a commit to branch master
in repository wmrack.
commit 374cddf20f68db84e2c82fde6103b16c547e0b37
Author: Doug Torrance <dtorrance at monmouthcollege.edu>
Date: Tue Jan 6 18:32:57 2015 -0600
Imported Upstream version 0.9
---
.cvsignore | 3 +
Imakefile | 12 +
LICENSE | 339 ++++++++++++++
Makefile.cdctrl | 12 +
README | 61 +++
README.cdctrl | 8 +
TODO | 14 +
WARRANTY | 21 +
XPM/.cvsignore | 1 +
XPM/README | 22 +
XPM/big.style | 705 ++++++++++++++++++++++++++++
XPM/blue.style | 327 +++++++++++++
XPM/bluered.style | 1213 ++++++++++++++++++++++++++++++++++++++++++++++++
XPM/cd-mask.xpm | 57 +++
XPM/gold.style | 402 ++++++++++++++++
XPM/grey.style | 255 ++++++++++
XPM/grey/cdnodisc.xpm | 58 +++
XPM/grey/cdpaused.xpm | 58 +++
XPM/grey/cdplaying.xpm | 58 +++
XPM/grey/cdstopped.xpm | 58 +++
XPM/grey/led.xpm | 18 +
XPM/led.xpm | 18 +
XPM/orange.style | 327 +++++++++++++
XPM/smiley.style | 523 +++++++++++++++++++++
XPM/standart.style | 1 +
cdctrl.c | 121 +++++
cdrom.c | 902 +++++++++++++++++++++++++++++++++++
cdrom.h | 96 ++++
wmrack.c | 854 ++++++++++++++++++++++++++++++++++
wmrack.man | 126 +++++
xpmicon.c | 306 ++++++++++++
xpmicon.h | 42 ++
32 files changed, 7018 insertions(+)
diff --git a/.cvsignore b/.cvsignore
new file mode 100644
index 0000000..b8348e3
--- /dev/null
+++ b/.cvsignore
@@ -0,0 +1,3 @@
+wmrack
+cdctrl
+Makefile
diff --git a/Imakefile b/Imakefile
new file mode 100644
index 0000000..a30cd3c
--- /dev/null
+++ b/Imakefile
@@ -0,0 +1,12 @@
+
+XPMLIB = -L/usr/lib/X11 -lXpm
+DEPLIBS = $(DEPXLIB)
+
+LOCAL_LIBRARIES = $(XPMLIB) $(XLIB)
+
+LINTLIBS = $(LINTXLIB)
+
+SRCS = wmrack.c cdrom.c xpmicon.c
+OBJS = wmrack.o cdrom.o xpmicon.o
+
+ComplexProgramTarget(wmrack)
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..a43ea21
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Makefile.cdctrl b/Makefile.cdctrl
new file mode 100644
index 0000000..f2815ec
--- /dev/null
+++ b/Makefile.cdctrl
@@ -0,0 +1,12 @@
+CC=gcc
+RM=rm -f
+CFLAGS=-ggdb -Wall -DDEBUG
+OBJS=cdrom.o cdctrl.o
+
+all: clean cdctrl
+
+clean:
+ $(RM) *.o cdctrl
+
+cdctrl: $(OBJS)
+ gcc $(OBJS) -o cdctrl
diff --git a/README b/README
new file mode 100644
index 0000000..82ec1b9
--- /dev/null
+++ b/README
@@ -0,0 +1,61 @@
+ wmrack 1.0
+ ==========
+
+ The WindowMaker Sound Control Panel
+ by
+ Oliver Graf <ograf at fga.de> and Heiko Wagner <hwagner at fga.de>
+
+
+DESCRIPTION:
+------------
+WMRack is a Dock/Wharf applet which gives you complete control over
+your CDROM, the Mixer and hopfully in the future to other sound related
+stuff (fell free to send suggestions).
+
+It's main advantage is the high configurability, which will let you specify
+different looks for the window at startup.
+
+CD-Functions:
+ * Display Track and Time (remaining/to-go, track/total)
+ * Play, Pause, Stop, Eject, Load, Track +/-, Fast Fore-/Back-ward
+ * Display of total tracks and length when a new CD is loaded
+ * random play, skip data tracks, play lists
+
+Mixer Functions:
+ * startup options for initial volume
+ * four volume displays at one time
+ * switchable sources at run-time
+
+
+INSTALLATION:
+-------------
+xmkmf
+(make depend -- if you want to)
+make
+make install
+make install.man
+
+
+USAGE:
+------
+Look into the manpage for supported options.
+
+Putting wmrack into AfterStep Wharf:
+*Wharf WMRack nil Swallow "wmrack" wmrack &
+
+Easily swallowed by dock (use the --withdrawn option).
+
+
+BUGS & CONTACT:
+---------------
+ * send bug reports or suggestions to ograf at fga.de
+ * send new styles or style questions to hwagner at fga.de or ograf at fga.de
+
+HISTORY:
+--------
+Basically this thing borrows much from WorkBone, ascd and asmixer. But in
+the progress of work, almost any part that was stolen, has been rewritten,
+restructured, and overworked.
+
+-----
+$Id: README,v 1.4 1997/06/12 17:03:53 ograf Exp $
diff --git a/README.cdctrl b/README.cdctrl
new file mode 100644
index 0000000..caba465
--- /dev/null
+++ b/README.cdctrl
@@ -0,0 +1,8 @@
+cdctrl is a test program for the cdrom.* stuff.
+
+You may compile it (if you want) using the follwing command:
+
+make -f Makefile.cdctrl
+
+Without the DEBUG and gdb stuff it also gives a useful command-line
+interface to your cdrom.
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..401ba52
--- /dev/null
+++ b/TODO
@@ -0,0 +1,14 @@
+For V1.0:
+ * skip data tracks, random play (needed feature: playlists)
+ * mixer support (i.e. press volume button, and the think becomes a mixer -
+ press cd button, and it will be the cdrom player).
+
+And then:
+ * integration of X-Resources for configuration purposes (that will take some
+ time -- I will first need to buy some X-Programming-Manual ;-) )
+ * cddb lookups + scroll text display
+ * better configurability of the display (via XPM-extensions -- until now you
+ can only change the look of the thing, but the positions and sizes must
+ stay fixed).
+ * cd-changer (I can't test this because I don't have such a thing)
+ * sound-file-player
diff --git a/WARRANTY b/WARRANTY
new file mode 100644
index 0000000..741fbcb
--- /dev/null
+++ b/WARRANTY
@@ -0,0 +1,21 @@
+ NO WARRANTY
+
+ BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
diff --git a/XPM/.cvsignore b/XPM/.cvsignore
new file mode 100644
index 0000000..a9a5aec
--- /dev/null
+++ b/XPM/.cvsignore
@@ -0,0 +1 @@
+tmp
diff --git a/XPM/README b/XPM/README
new file mode 100644
index 0000000..6d4b714
--- /dev/null
+++ b/XPM/README
@@ -0,0 +1,22 @@
+*.style files can be loaded using the -style option of wmrack
+
+You can define your standart style by linking standart.style to
+the style of your choice before compilation using:
+ln -sf <yourchoice>.style standart.style
+
+cd_mask.xpm is the standart mask of on of the window faces.
+led.xpm are the digits and signs for the cdplayer.
+
+you need for pixmaps (the names must be the name of the XPM):
+cdnodisc (please to not any track +/- buttons)
+cdpaused
+cdplaying
+cdstopped
+plus the led.xpm (until now not really needed, the compiletime
+ default will do).
+
+cat all five into one file using for example:
+ 'cat no.xpm pl.xpm pau.xpm sto.xpm led.xpm >a.style'
+
+If you want to submit new styles to the WMRack distribution, send
+them to Heiko Wagner <hwagner at fga.de>.
diff --git a/XPM/big.style b/XPM/big.style
new file mode 100644
index 0000000..b479cb1
--- /dev/null
+++ b/XPM/big.style
@@ -0,0 +1,705 @@
+/*
+ * This is a WMRack style
+ *
+ * Copyright 1997 by Heiko Wagner <hwagner at fga.de>
+ */
+/* XPM */
+static char *cdnodisc[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 163 2",
+" c Black",
+". c #0018ff",
+"X c #001eff",
+"o c #0023ff",
+"O c #0025ff",
+"+ c #0027ff",
+"@ c #0029ff",
+"# c #002bff",
+"$ c #002dff",
+"% c #002fff",
+"& c #0031ff",
+"* c #0033ff",
+"= c #0035ff",
+"- c #0037ff",
+"; c #0039ff",
+": c #003bff",
+"> c #003dff",
+", c #003fff",
+"< c #0041fe",
+"1 c #0044ff",
+"2 c #0048ff",
+"3 c #004aff",
+"4 c #004cff",
+"5 c #004eff",
+"6 c #0050ff",
+"7 c #0052ff",
+"8 c #0054ff",
+"9 c #0056ff",
+"0 c #0058ff",
+"q c #005aff",
+"w c #005cff",
+"e c #005eff",
+"r c #0060ff",
+"t c #0062ff",
+"y c #0064ff",
+"u c #0067ff",
+"i c #0069ff",
+"p c #006bff",
+"a c #006dff",
+"s c #006fff",
+"d c #0071ff",
+"f c #0073ff",
+"g c #0075ff",
+"h c #0077ff",
+"j c #0079ff",
+"k c #007bff",
+"l c #007dff",
+"z c #007fff",
+"x c #0081fe",
+"c c #0083ff",
+"v c #0085ff",
+"b c #0088ff",
+"n c #008aff",
+"m c #008cff",
+"M c #008eff",
+"N c #0090ff",
+"B c #0092ff",
+"V c #0094ff",
+"C c #0098ff",
+"Z c #009aff",
+"A c #009cff",
+"S c #009eff",
+"D c #00a2ff",
+"F c #00a4ff",
+"G c #00a8ff",
+"H c #00adff",
+"J c Cyan",
+"K c #fb0f5f",
+"L c #fb125e",
+"P c #fa145d",
+"I c #fa175c",
+"U c #f9195b",
+"Y c #f91c5a",
+"T c #f81e59",
+"R c #fd0762",
+"E c #fc0a61",
+"W c #fc0c60",
+"Q c #f72457",
+"! c #f72656",
+"~ c #f62955",
+"^ c #f62b54",
+"/ c #f52e53",
+"( c #f82158",
+") c #f3384f",
+"_ c #f33b4e",
+"` c #f23d4d",
+"' c #f53052",
+"] c #f43351",
+"[ c #f43650",
+"{ c #eb5f3f",
+"} c #eb613e",
+"| c #ea643d",
+" . c #ea673c",
+".. c #e9693b",
+"X. c #e96c3a",
+"o. c #e86e39",
+"O. c #e77337",
+"+. c #e77636",
+"@. c #e67935",
+"#. c #e67b34",
+"$. c #e57e33",
+"%. c #e87138",
+"&. c #ef4d47",
+"*. c #ef4f46",
+"=. c #ee5245",
+"-. c #ed5742",
+";. c #ee5544",
+":. c #ec5a41",
+">. c #ec5c40",
+",. c #f1424b",
+"<. c #f2404c",
+"1. c #f1454a",
+"2. c #f04849",
+"3. c #f04a48",
+"4. c #df9d27",
+"5. c #df9f26",
+"6. c #dbaf1f",
+"7. c #dbb11e",
+"8. c #dab41d",
+"9. c #dab61c",
+"0. c #d9b91b",
+"q. c #d9bc1a",
+"w. c #d8be19",
+"e. c #dea225",
+"r. c #dda723",
+"t. c #dea424",
+"y. c #ddaa21",
+"u. c #dcac20",
+"i. c #e3882f",
+"p. c #e38b2e",
+"a. c #e28d2d",
+"s. c #e58032",
+"d. c #e48331",
+"f. c #e48530",
+"g. c #e1922b",
+"h. c #e2902c",
+"j. c #e1952a",
+"k. c #e09729",
+"l. c #e09a28",
+"z. c #d7c317",
+"x. c #d7c616",
+"c. c #d6c815",
+"v. c #d6cb14",
+"b. c #d5ce13",
+"n. c #d8c118",
+"m. c #d3d80f",
+"M. c #d3da0e",
+"N. c #d2dd0d",
+"B. c #d5d012",
+"V. c #d4d311",
+"C. c #d4d510",
+"Z. c #cfec07",
+"A. c #cfef06",
+"S. c #cef205",
+"D. c #cdf703",
+"F. c #cef404",
+"G. c #ccfc01",
+"H. c #d1e20b",
+"J. c #d2e00c",
+"K. c #d1e50a",
+"L. c #d0e709",
+"P. c #d0ea08",
+"I. c green",
+/* pixels */
+"G.D.F.S.Z.P.L.H.J.N.M.C.V.B.v.c.x.n.w.q.9.8.7.u.y.r.e.5.4.l.j.g.h.p.i.f.s.$.#.+.O.%.X... .} { >.",
+"F.S.A.P.L.K.H.N.M.m.V.B.b.c.x.z.w.q.0.8.7.6.y.r.t.e.4.l.k.g.h.a.i.f.d.$.#. at .O.%.o... .| } >.:.-.",
+"A.Z. ;.*.",
+"P.L. &.3.",
+"K.J. 2.1.",
+"N.M. ,.` ",
+"m.C. ` ) ",
+"V.b. [ ] ",
+"v.c. ' / ",
+"x.z. ^ ! ",
+"n.w. Q ( ",
+"q.9. T Y ",
+"8.7. U I ",
+"6.u.r.t.e.4.l.k.j.h.a.p.f.d.s.#. at .+.%.o.X. .| } >.:.-.;.*.&.3.1.,.<._ ) [ ' / ^ ! Q ( Y U I P K ",
+"y.t.e.5.4.k.j.g.a.p.i.d.s.$. at .+.O.o.X...| } { >.-.;.=.&.3.2.,.<.` ) [ ] / ^ ~ Q ( T Y I P L W E ",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"K.N.m.V.v.x.n.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.8.I.I.I.I.I.I.",
+"M.V.b.c.n.q.9.7.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.7.y.t.I.I.I.I.I.",
+"B.c.z.w.0.7.u.r.5.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.u.r.5.l.j.I.I.I.I.",
+"x.w.0.8.6.r.e.4.k.h.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.r.e.4.k.h.p.f.I.I.I.",
+"q.9.6.y.t.4.k.g.a.f.s.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.t.4.k.g.a.f.s.#.+.I.I.",
+"7.u.t.5.l.g.a.i.d.#.+.%.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.5.l.g.a.i.d.#.+.%.X.| I.",
+"r.e.l.j.h.p.d.$. at .%.X. .} I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.l.j.h.p.d.$. at .%.X. .} :.;.",
+"4.k.h.p.f.s. at .O.o...} >.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.h.p.f.s. at .O.o...} >.-.*.3.",
+"g.a.f.s.#.+.o...| { -.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.f.s.#.+.o...| { -.=.&.1.<.",
+"i.d.$.+.%.X.| { :.;.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.$.+.%.X.| { :.;.&.2.,.` [ ",
+"$. at .O.X. .} >.;.*.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.O.X. .} >.;.*.3.,.` ) ] ^ ",
+"O.o...} >.-.=.3.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I...} >.-.=.3.1.<.) ] / ~ ( ",
+"..| { -.=.&.2.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.{ -.=.&.2.<._ [ ' ~ Q T I ",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.N.m.C.B.v.x.n.q.9.7.u.r.e.4.k.j.h.p.f.s.I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.C.B.v.x.n.q.9.8.6.y.t.5.l.j.h.p.f.s.#.+.I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.b.c. O.o.I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.z.w. X. .I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.q.9. } { I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.8.6. :.;.I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.y.t. =.&.I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.e.4. 2.1.I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.l.j. <._ I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.h.p. ) ] I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.i.d. / ^ I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.s.#. ! ( I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.+.%. T U I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I.o...| { :.;.=.&.2.,.` ) ] / ~ Q T U P L I.I.I.I.I.I.I.I.I.I.I.I.I.I.",
+"I.I.I.I.I.I.I.I.I.I.I.I.I.I. .} >.-.=.&.2.,.` ) [ ' ^ ! ( Y I L W R I.I.I.I.I.I.I.I.I.I.I.I.I.I."
+};
+/* XPM */
+static char *cdpaused[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 98 2",
+" c Black",
+". c Cyan",
+"X c #fb0f5f",
+"o c #fb125e",
+"O c #fa145d",
+"+ c #fa175c",
+"@ c #f9195b",
+"# c #f91c5a",
+"$ c #f81e59",
+"% c #fd0762",
+"& c #fc0a61",
+"* c #fc0c60",
+"= c #f72457",
+"- c #f72656",
+"; c #f62955",
+": c #f62b54",
+"> c #f52e53",
+", c #f82158",
+"< c #f3384f",
+"1 c #f33b4e",
+"2 c #f23d4d",
+"3 c #f53052",
+"4 c #f43351",
+"5 c #f43650",
+"6 c #eb5f3f",
+"7 c #eb613e",
+"8 c #ea643d",
+"9 c #ea673c",
+"0 c #e9693b",
+"q c #e96c3a",
+"w c #e86e39",
+"e c #e77337",
+"r c #e77636",
+"t c #e67935",
+"y c #e67b34",
+"u c #e57e33",
+"i c #e87138",
+"p c #ef4d47",
+"a c #ef4f46",
+"s c #ee5245",
+"d c #ed5742",
+"f c #ee5544",
+"g c #ec5a41",
+"h c #ec5c40",
+"j c #f1424b",
+"k c #f2404c",
+"l c #f1454a",
+"z c #f04849",
+"x c #f04a48",
+"c c #df9d27",
+"v c #df9f26",
+"b c #dbaf1f",
+"n c #dbb11e",
+"m c #dab41d",
+"M c #dab61c",
+"N c #d9b91b",
+"B c #d9bc1a",
+"V c #d8be19",
+"C c #dea225",
+"Z c #dda723",
+"A c #dea424",
+"S c #ddaa21",
+"D c #dcac20",
+"F c #e3882f",
+"G c #e38b2e",
+"H c #e28d2d",
+"J c #e58032",
+"K c #e48331",
+"L c #e48530",
+"P c #e1922b",
+"I c #e2902c",
+"U c #e1952a",
+"Y c #e09729",
+"T c #e09a28",
+"R c #d7c317",
+"E c #d7c616",
+"W c #d6c815",
+"Q c #d6cb14",
+"! c #d5ce13",
+"~ c #d8c118",
+"^ c #d3d80f",
+"/ c #d3da0e",
+"( c #d2dd0d",
+") c #d5d012",
+"_ c #d4d311",
+"` c #d4d510",
+"' c #cfec07",
+"] c #cfef06",
+"[ c #cef205",
+"{ c #cdf703",
+"} c #cef404",
+"| c #ccfc01",
+" . c #d1e20b",
+".. c #d2e00c",
+"X. c #d1e50a",
+"o. c #d0e709",
+"O. c #d0ea08",
+"+. c None",
+/* pixels */
+"| { } ] ' O.X. .( / ^ _ ) ! W E ~ V B M m b D S A C c T Y P I H F L J u y r e w q 0 8 7 h g d s ",
+"} [ ' O.o. .../ ^ ` ) ! Q E R V B N m n D S Z C v T Y U I H G L K u y t e i q 0 9 7 6 g d f a p ",
+"] O. x z ",
+"o.X. j k ",
+" ... 2 1 ",
+"( ^ < 4 ",
+"` _ 3 > ",
+") Q : - ",
+"W E = , ",
+"R ~ $ # ",
+"V N @ O ",
+"M m o X ",
+"n D * % ",
+"S Z A v c Y U P H G L K J y t e i w 0 9 8 6 h d f s p x l j k 1 < 4 3 > ; - = $ # + O o * & % % ",
+"A C c T U P I G F K J u t r i w q 9 8 7 h g f s a x z j k 2 < 5 3 > : - = , # @ O o X & % % % % ",
+"+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.",
+"+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.",
+"X...^ _ Q E V +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.} ] o...^ ) W ~ N n S C T ",
+"/ _ ! E ~ N m D +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.o.../ _ Q R B m D A c U H ",
+") W R B M b S C c +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+./ _ Q R V M b Z v Y I F J ",
+"R V M n S A c Y I G +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.! E V M b Z C T P G K y e ",
+"N n D A v Y P G L u t +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.~ N n S C T P H L u r w 9 ",
+"b Z C T U H F J y e w 9 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.m D A c U H L u r i 0 7 g ",
+"C c U I F K y r w 0 7 h f +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Z v Y I F J t i 0 7 h f p ",
+"Y I G K u r i 0 8 h d a +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.T P G K y e q 8 h f p l k ",
+"H L J t e q 9 6 g s p +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.H L u r w 9 6 d a z k < 3 ",
+"J y e w 9 7 g f p z +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.J t i 0 7 g s x j 1 4 : = ",
+"r w 0 7 h f a z j +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.e q 8 h f p l 2 5 > - $ + ",
+"q 8 6 d s x l 2 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.8 6 d a z k < 3 ; , @ o & ",
+"6 g s p l k < +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.d a z j 1 4 : = # O * % % ",
+"+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.",
+"+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.",
+"+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.",
+"+.+.+.+.+.+.+.+.+.+.+.+.+.+.{ [ ' o.../ ` ! W R V M n D Z v T U H F +.+.+.+.+.+.+.+.+.+.+.+.+.+.",
+"} ] +.+.+.+.+.+.N n S C T +.' o. .( ` ) Q E V N m D Z C c U I G L u +.} ] o...^ +.+.+.+.+.+.C T ",
+"o...+.+.+.+.+.m D A c U H +.X.( y e +.o.../ _ Q R +.+.+.+.+.U H ",
+"/ _ +.+.+.+.b Z v Y I F J +./ _ i 0 +./ _ Q R V M b +.+.+.+.F J ",
+"! E +.+.+.Z C T P G K y e +.) W 9 6 +.! E V M b Z C T +.+.+.y e ",
+"~ N +.+.C T P H L u r w 9 +.E V h d +.~ N n S C T P H L +.+.w 9 ",
+"m D +.c U H L u r i 0 7 g +.B M s p +.m D A c U H L u r i +.7 g ",
+"Z v Y I F J t i 0 7 h f p +.n D z j +.Z v Y I F J t i 0 7 h f p ",
+"T P +.K y e q 8 h f p l k +.Z C 2 < +.T P G K y e q 8 h f +.l k ",
+"H L +.+.w 9 6 d a z k < 3 +.c Y 4 > +.H L u r w 9 6 d a +.+.< 3 ",
+"J t +.+.+.g s x j 1 4 : = +.P H ; = +.J t i 0 7 g s x +.+.+.: = ",
+"e q +.+.+.+.l 2 5 > - $ + +.F K $ @ +.e q 8 h f p l +.+.+.+.$ + ",
+"8 6 +.+.+.+.+.3 ; , @ o & +.u t O X +.8 6 d a z k +.+.+.+.+.o & ",
+"d a +.+.+.+.+.+.# O * % % +.e w 0 7 h d s x l k < 4 > ; , # + o & % +.d a z j 1 +.+.+.+.+.+.% % ",
+"+.+.+.+.+.+.+.+.+.+.+.+.+.+.0 8 6 d s p z k 1 5 3 ; = $ + o * % % a +.+.+.+.+.+.+.+.+.+.+.+.+.+."
+};
+/* XPM */
+static char *cdplaying[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 107 2",
+" c Black",
+". c #001eff",
+"X c #002fff",
+"o c #0041fe",
+"O c #0054ff",
+"+ c #0064ff",
+"@ c #0077ff",
+"# c #008aff",
+"$ c #009aff",
+"% c #00adff",
+"& c Cyan",
+"* c #fb0f5f",
+"= c #fb125e",
+"- c #fa145d",
+"; c #fa175c",
+": c #f9195b",
+"> c #f91c5a",
+", c #f81e59",
+"< c #fd0762",
+"1 c #fc0a61",
+"2 c #fc0c60",
+"3 c #f72457",
+"4 c #f72656",
+"5 c #f62955",
+"6 c #f62b54",
+"7 c #f52e53",
+"8 c #f82158",
+"9 c #f3384f",
+"0 c #f33b4e",
+"q c #f23d4d",
+"w c #f53052",
+"e c #f43351",
+"r c #f43650",
+"t c #eb5f3f",
+"y c #eb613e",
+"u c #ea643d",
+"i c #ea673c",
+"p c #e9693b",
+"a c #e96c3a",
+"s c #e86e39",
+"d c #e77337",
+"f c #e77636",
+"g c #e67935",
+"h c #e67b34",
+"j c #e57e33",
+"k c #e87138",
+"l c #ef4d47",
+"z c #ef4f46",
+"x c #ee5245",
+"c c #ed5742",
+"v c #ee5544",
+"b c #ec5a41",
+"n c #ec5c40",
+"m c #f1424b",
+"M c #f2404c",
+"N c #f1454a",
+"B c #f04849",
+"V c #f04a48",
+"C c #df9d27",
+"Z c #df9f26",
+"A c #dbaf1f",
+"S c #dbb11e",
+"D c #dab41d",
+"F c #dab61c",
+"G c #d9b91b",
+"H c #d9bc1a",
+"J c #d8be19",
+"K c #dea225",
+"L c #dda723",
+"P c #dea424",
+"I c #ddaa21",
+"U c #dcac20",
+"Y c #e3882f",
+"T c #e38b2e",
+"R c #e28d2d",
+"E c #e58032",
+"W c #e48331",
+"Q c #e48530",
+"! c #e1922b",
+"~ c #e2902c",
+"^ c #e1952a",
+"/ c #e09729",
+"( c #e09a28",
+") c #d7c317",
+"_ c #d7c616",
+"` c #d6c815",
+"' c #d6cb14",
+"] c #d5ce13",
+"[ c #d8c118",
+"{ c #d3d80f",
+"} c #d3da0e",
+"| c #d2dd0d",
+" . c #d5d012",
+".. c #d4d311",
+"X. c #d4d510",
+"o. c #cfec07",
+"O. c #cfef06",
+"+. c #cef205",
+"@. c #cdf703",
+"#. c #cef404",
+"$. c #ccfc01",
+"%. c #d1e20b",
+"&. c #d2e00c",
+"*. c #d1e50a",
+"=. c #d0e709",
+"-. c #d0ea08",
+";. c None",
+/* pixels */
+"$. at .#.O.o.-.*.%.| } { .. .] ` _ [ J H F D A U I P K C ( / ! ~ R Y Q E j h f d s a p u y n b c x ",
+"#.+.o.-.=.%.&.} { X. .] ' _ ) J H G D S U I L K Z ( / ^ ~ R T Q W j h g d k a p i y t b c v z l ",
+"O.-. V B ",
+"=.*. m M ",
+"%.&. q 0 ",
+"| { 9 e ",
+"X... w 7 ",
+" .' 6 4 ",
+"` _ 3 8 ",
+") [ , > ",
+"J G : - ",
+"F D = * ",
+"S U 2 < ",
+"I L P Z C / ^ ! R T Q W E h g d k s p i u t n c v x l V N m M 0 9 e w 7 5 4 3 , > ; - = 2 1 < < ",
+"P K C ( ^ ! ~ T Y W E j g f k s a i u y n b v x z V B m M q 9 r w 7 6 4 3 8 > : - = * 1 < < < < ",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+"#.O.=.&.{ .` [ G S I K ( ;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.#.O.=.&.{ .` [ G S I K ( ",
+"=.&.} ..' ) % D U P C ^ R ;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.=.&.} ..' ) H D U P C ^ R ",
+"} ..' ) J F % L Z / ~ Y E ;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.} ..' ) J F A L Z / ~ Y E ",
+"] _ J F A L $ ( ! T W h d ;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.] _ J F A L K ( ! T W h d ",
+"[ G S I K ( # R Q j f s i ;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.[ G S I K ( ! R Q j f s i ",
+"D U P C ^ R @ j f k p y b ;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.D U P C ^ R Q j f k p y b ",
+"L Z / ~ Y E + k p y n v l ;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.L Z / ~ Y E g k p y n v l ",
+"( ! T W h d O u n v l N M ;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.( ! T W h d a u n v l N M ",
+"R Q j f s i o c z B M 9 w ;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.R Q j f s i t c z B M 9 w ",
+"E g k p y b X V m 0 e 6 3 ;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.E g k p y b x V m 0 e 6 3 ",
+"d a u n v l . q r 7 4 , ; ;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.d a u n v l N q r 7 4 , ; ",
+"u t c z B M . w 5 8 : = 1 ;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.u t c z B M 9 w 5 8 : = 1 ",
+"c z B m 0 e 6 3 > - 2 < < ;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.c z B m 0 e 6 3 > - 2 < < ",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;. at .+.o.=.&.} X.] ` ) J F S U L Z ( ^ R Y ;.;.;.;.;.;.;.;.;.;.;.;.;.;.",
+"#.O.;.;.;.;.;.;.G S I K ( ;.o.=.%.| X. .' _ J G D U L K C ^ ~ T Q j ;.#.O.=.&.{ ;.;.;.;.;.;.K ( ",
+"=.&.;.;.;.;.;.D U P C ^ R ;.*.| h d ;.=.&.} ..' ) ;.;.;.;.;.^ R ",
+"} ..;.;.;.;.A L Z / ~ Y E ;.} .. k p ;.} ..' ) J F A ;.;.;.;.Y E ",
+"] _ ;.;.;.L K ( ! T W h d ;. .` i t ;.] _ J F A L K ( ;.;.;.h d ",
+"[ G ;.;.K ( ! R Q j f s i ;._ J n c ;.[ G S I K ( ! R Q ;.;.s i ",
+"D U ;.C ^ R Q j f k p y b ;.H F x l ;.D U P C ^ R Q j f k ;.y b ",
+"L Z / ~ Y E g k p y n v l ;.S U B m ;.L Z / ~ Y E g k p y n v l ",
+"( ! ;.W h d a u n v l N M ;.L K q 9 ;.( ! T W h d a u n v ;.N M ",
+"R Q ;.;.s i t c z B M 9 w ;.C / e 7 ;.R Q j f s i t c z ;.;.9 w ",
+"E g ;.;.;.b x V m 0 e 6 3 ;.! R 5 3 ;.E g k p y b x V ;.;.;.6 3 ",
+"d a ;.;.;.;.N q r 7 4 , ; ;.Y W , : ;.d a u n v l N ;.;.;.;., ; ",
+"u t ;.;.;.;.;.w 5 8 : = 1 ;.j g - * ;.u t c z B M ;.;.;.;.;.= 1 ",
+"c z ;.;.;.;.;.;.> - 2 < < ;.d s p y n c x V N M 9 e 7 5 8 > ; = 1 < ;.c z B m 0 ;.;.;.;.;.;.< < ",
+";.;.;.;.;.;.;.;.;.;.;.;.;.;.p u t c x l B M 0 r w 5 3 , ; = 2 < < z ;.;.;.;.;.;.;.;.;.;.;.;.;.;."
+};
+/* XPM */
+static char *cdstopped[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 98 2",
+" c Black",
+". c Cyan",
+"X c #fb0f5f",
+"o c #fb125e",
+"O c #fa145d",
+"+ c #fa175c",
+"@ c #f9195b",
+"# c #f91c5a",
+"$ c #f81e59",
+"% c #fd0762",
+"& c #fc0a61",
+"* c #fc0c60",
+"= c #f72457",
+"- c #f72656",
+"; c #f62955",
+": c #f62b54",
+"> c #f52e53",
+", c #f82158",
+"< c #f3384f",
+"1 c #f33b4e",
+"2 c #f23d4d",
+"3 c #f53052",
+"4 c #f43351",
+"5 c #f43650",
+"6 c #eb5f3f",
+"7 c #eb613e",
+"8 c #ea643d",
+"9 c #ea673c",
+"0 c #e9693b",
+"q c #e96c3a",
+"w c #e86e39",
+"e c #e77337",
+"r c #e77636",
+"t c #e67935",
+"y c #e67b34",
+"u c #e57e33",
+"i c #e87138",
+"p c #ef4d47",
+"a c #ef4f46",
+"s c #ee5245",
+"d c #ed5742",
+"f c #ee5544",
+"g c #ec5a41",
+"h c #ec5c40",
+"j c #f1424b",
+"k c #f2404c",
+"l c #f1454a",
+"z c #f04849",
+"x c #f04a48",
+"c c #df9d27",
+"v c #df9f26",
+"b c #dbaf1f",
+"n c #dbb11e",
+"m c #dab41d",
+"M c #dab61c",
+"N c #d9b91b",
+"B c #d9bc1a",
+"V c #d8be19",
+"C c #dea225",
+"Z c #dda723",
+"A c #dea424",
+"S c #ddaa21",
+"D c #dcac20",
+"F c #e3882f",
+"G c #e38b2e",
+"H c #e28d2d",
+"J c #e58032",
+"K c #e48331",
+"L c #e48530",
+"P c #e1922b",
+"I c #e2902c",
+"U c #e1952a",
+"Y c #e09729",
+"T c #e09a28",
+"R c #d7c317",
+"E c #d7c616",
+"W c #d6c815",
+"Q c #d6cb14",
+"! c #d5ce13",
+"~ c #d8c118",
+"^ c #d3d80f",
+"/ c #d3da0e",
+"( c #d2dd0d",
+") c #d5d012",
+"_ c #d4d311",
+"` c #d4d510",
+"' c #cfec07",
+"] c #cfef06",
+"[ c #cef205",
+"{ c #cdf703",
+"} c #cef404",
+"| c #ccfc01",
+" . c #d1e20b",
+".. c #d2e00c",
+"X. c #d1e50a",
+"o. c #d0e709",
+"O. c #d0ea08",
+"+. c None",
+/* pixels */
+"| { } ] ' O.X. .( / ^ _ ) ! W E ~ V B M m b D S A C c T Y P I H F L J u y r e w q 0 8 7 h g d s ",
+"} [ ' O.o. .../ ^ ` ) ! Q E R V B N m n D S Z C v T Y U I H G L K u y t e i q 0 9 7 6 g d f a p ",
+"] O. x z ",
+"o.X. j k ",
+" ... 2 1 ",
+"( ^ < 4 ",
+"` _ 3 > ",
+") Q : - ",
+"W E = , ",
+"R ~ $ # ",
+"V N @ O ",
+"M m o X ",
+"n D * % ",
+"S Z A v c Y U P H G L K J y t e i w 0 9 8 6 h d f s p x l j k 1 < 4 3 > ; - = $ # + O o * & % % ",
+"A C c T U P I G F K J u t r i w q 9 8 7 h g f s a x z j k 2 < 5 3 > : - = , # @ O o X & % % % % ",
+"+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.",
+"+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.",
+"X...^ _ Q E V +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.} ] o...^ ) W ~ N n S C T ",
+"/ _ ! E ~ N m D +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.o.../ _ Q R B m D A c U H ",
+") W R B M b S C c +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+./ _ Q R V M b Z v Y I F J ",
+"R V M n S A c Y I G +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.! E V M b Z C T P G K y e ",
+"N n D A v Y P G L u t +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.~ N n S C T P H L u r w 9 ",
+"b Z C T U H F J y e w 9 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.m D A c U H L u r i 0 7 g ",
+"C c U I F K y r w 0 7 h f +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.Z v Y I F J t i 0 7 h f p ",
+"Y I G K u r i 0 8 h d a +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.P G K y e q 8 h f p l +.",
+"H L J t e q 9 6 g s p +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.u r w 9 6 d a z k +.+.",
+"J y e w 9 7 g f p z +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.0 7 g s x j 1 +.+.+.",
+"r w 0 7 h f a z j +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.f p l 2 5 +.+.+.+.",
+"q 8 6 d s x l 2 +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.k < 3 +.+.+.+.+.",
+"6 g s p l k < +.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.: +.+.+.+.+.+.",
+"+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.",
+"+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.",
+"+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.",
+"+.+.+.+.+.+.+.+.+.+.+.+.+.+.{ [ ' o.../ ` ! W R V M n D Z v T U H F +.+.+.+.+.+.+.+.+.+.+.+.+.+.",
+"} ] +.+.+.+.+.+.N n S C T +.' o. .( ` ) Q E V N m D Z C c U I G L u +.} ] o...^ +.+.+.+.+.+.C T ",
+"o...+.+.+.+.+.m D A c U H +.X.( y e +.o.../ _ Q R +.+.+.+.+.U H ",
+"/ _ +.+.+.+.b Z v Y I F J +./ _ i 0 +./ _ Q R V M b +.+.+.+.F J ",
+"! E +.+.+.Z C T P G K y e +.) W 9 6 +.! E V M b Z C T +.+.+.y e ",
+"~ N +.+.C T P H L u r w 9 +.E V h d +.~ N n S C T P H L +.+.w 9 ",
+"m D +.c U H L u r i 0 7 g +.B M s p +.m D A c U H L u r i +.7 g ",
+"Z v Y I F J t i 0 7 h f p +.n D z j +.Z v Y I F J t i 0 7 h f p ",
+"T P +.K y e q 8 h f p l k +.Z C 2 < +.T P G K y e q 8 h f +.l k ",
+"H L +.+.w 9 6 d a z k < 3 +.c Y 4 > +.H L u r w 9 6 d a +.+.< 3 ",
+"J t +.+.+.g s x j 1 4 : = +.P H ; = +.J t i 0 7 g s x +.+.+.: = ",
+"e q +.+.+.+.l 2 5 > - $ + +.F K $ @ +.e q 8 h f p l +.+.+.+.$ + ",
+"8 6 +.+.+.+.+.3 ; , @ o & +.u t O X +.8 6 d a z k +.+.+.+.+.o & ",
+"d a +.+.+.+.+.+.# O * % % +.e w 0 7 h d s x l k < 4 > ; , # + o & % +.d a z j 1 +.+.+.+.+.+.% % ",
+"+.+.+.+.+.+.+.+.+.+.+.+.+.+.0 8 6 d s p z k 1 5 3 ; = $ + o * % % a +.+.+.+.+.+.+.+.+.+.+.+.+.+."
+};
+/* XPM */
+static char * cdled[] = {
+"110 11 4 1",
+" c #000000000000 s led_color_back",
+". c #0000FFFF0000 s led_color_high",
+"X c #00009CE60000 s led_color_med",
+"o c #000063180000 s led_color_low",
+" ..... X X X ..... ..... X o X ..... ..... ..... ..... ..... X X X ... XoX .. Xo ",
+". oXo . o . X oXo . X oXo . . . . oXo X . oXo X o XoX . . oXo . . oXo . o X . X . . o o ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. X. oX . o .. Xo ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. .X Xo . X . . o o ",
+". . X . X XoX . o XoX . . oXo . . oXo X . oXo X o . . oXo . . oXo . X o . . X X ",
+" X o X o X o ..... ..... ..... ..... ..... X X X ..... ..... o X X ... oXo ",
+". . X . . oXo X X oXo . X oXo . o XoX . . oXo . X . . oXo . o XoX . X o . X ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. X. oX .. Xo ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. .X Xo . . o X ",
+". oXo . X . . oXo X o XoX . X . o XoX . . oXo . X . . oXo . o XoX . X X . o ",
+" ..... o X o ..... ..... o X o ..... ..... X X X ..... ..... X X o . X "};
diff --git a/XPM/blue.style b/XPM/blue.style
new file mode 100644
index 0000000..ec5d677
--- /dev/null
+++ b/XPM/blue.style
@@ -0,0 +1,327 @@
+/*
+ * This is a WMRack style
+ *
+ * Copyright 1997 by Heiko Wagner <hwagner at fga.de>
+ */
+/* XPM */
+static char *cdnodisc[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 22 1",
+" c Black",
+". c Blue",
+"X c #0099ff",
+"o c Red",
+"O c #fe8000",
+"+ c #fe8600",
+"@ c #fe8c00",
+"# c #fe9200",
+"$ c #fe9800",
+"% c #fe9e00",
+"& c #fea400",
+"* c #feaa00",
+"= c #feb000",
+"- c #feb600",
+"; c #febc00",
+": c #fec200",
+"> c #fec800",
+", c #fece00",
+"< c #fed400",
+"1 c #feda00",
+"2 c #fee000",
+"3 c None",
+/* pixels */
+".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"X.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"X.............................................X.",
+"...............................................X",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+".XXXXXXXXXXXX3333333333333333333333.XXXXXXXXXXXX",
+"X.XXXXXXXXXX.3333333333333333333333X.XXXXXXXXXX.",
+"XX21<,>:;-=..3333333333333333333333XX221<,>;-=..",
+"XX1....;-=*..3333333333333333333333XX21<,.;--*..",
+"XX<.22,.=*&..3333333333333333333333XX1<,.,.=*&..",
+"XX,.2,:=.%%..3333333333333333333333XX<,.,:=.&$..",
+"XX>.,:=&#.$..3333333333333333333333XX,.,:=&#.#..",
+"XX:.:=&#.$#..3333333333333333333333XX>.:=&#+. at ..",
+"XX;.-&#.$#@..3333333333333333333333XX;.-&#+O.+..",
+"XX-....$#@+..3333333333333333333333XX-.......O..",
+"XX=*&%$#@+O..3333333333333333333333XX=*&$#@+OO..",
+"X..........X.3333333333333333333333X..........X.",
+"............X3333333333333333333333............X",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"33333333333333.XXXXXXXXXXXXXXXXXXX33333333333333",
+"33333333333333X.XXXXXXXXXXXXXXXXX.33333333333333",
+"33333333333333XX ..33333333333333",
+"33333333333333XX ..33333333333333",
+"33333333333333XX ..33333333333333",
+"33333333333333XX ..33333333333333",
+"33333333333333XX ..33333333333333",
+"33333333333333XX ..33333333333333",
+"33333333333333XX ..33333333333333",
+"33333333333333XX ..33333333333333",
+"33333333333333XX ..33333333333333",
+"33333333333333XX ..33333333333333",
+"33333333333333XX ..33333333333333",
+"33333333333333X.................X.33333333333333",
+"33333333333333...................X33333333333333"
+};
+/* XPM */
+static char *cdpaused[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 22 1",
+" c Black",
+". c Blue",
+"X c #0099ff",
+"o c Red",
+"O c #fe8000",
+"+ c #fe8600",
+"@ c #fe8c00",
+"# c #fe9200",
+"$ c #fe9800",
+"% c #fe9e00",
+"& c #fea400",
+"* c #feaa00",
+"= c #feb000",
+"- c #feb600",
+"; c #febc00",
+": c #fec200",
+"> c #fec800",
+", c #fece00",
+"< c #fed400",
+"1 c #feda00",
+"2 c #fee000",
+"3 c None",
+/* pixels */
+".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"X.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"X.............................................X.",
+"...............................................X",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+".XXXXXXXXXXXX3333333333333333333333.XXXXXXXXXXXX",
+"X.XXXXXXXXXX.3333333333333333333333X.XXXXXXXXXX.",
+"XX21<,>:;-=..3333333333333333333333XX221<,>;-=..",
+"XX1....;-=*..3333333333333333333333XX2.......*..",
+"XX<.22,.=*&..3333333333333333333333XX1.,>;-=.&..",
+"XX,.2,:=.%%..3333333333333333333333XX<.>;-=*.$..",
+"XX>.,:=&#.$..3333333333333333333333XX,.;-=*&.#..",
+"XX:.:=&#.$#..3333333333333333333333XX>.-=*&$. at ..",
+"XX;.-&#.$#@..3333333333333333333333XX;.=*&$#.+..",
+"XX-....$#@+..3333333333333333333333XX-.......O..",
+"XX=*&%$#@+O..3333333333333333333333XX=*&$#@+OO..",
+"X..........X.3333333333333333333333X..........X.",
+"............X3333333333333333333333............X",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"33333333333333.XXXXXXXXXXXXXXXXXXX33333333333333",
+".XXXXXXXXXXXX3X.XXXXXXXXXXXXXXXXX.3.XXXXXXXXXXXX",
+"X.XXXXXXXXXX.3XX ..3X.XXXXXXXXXX.",
+"XX221<,>;-=..3XX ..3XX221<,>;-=..",
+"XX2.<,>...*..3XX ..3XX2...>;-.*..",
+"XX1.,>.-=.&..3XX ..3XX1.,>.-=.&..",
+"XX<.>.-=*.$..3XX ..3XX<.>;-.*.$..",
+"XX,..-=*&.#..3XX ..3XX,.;-=*..#..",
+"XX>.-.*&$. at ..3XX ..3XX>.-=*.$. at ..",
+"XX;.=*.$#.+..3XX ..3XX;.=*.$#.+..",
+"XX-.*&$...O..3XX ..3XX-...$#@.O..",
+"XX=*&$#@+OO..3XX ..3XX=*&$#@+OO..",
+"X..........X.3XX ..3X..........X.",
+"............X3X.................X.3............X",
+"33333333333333...................X33333333333333"
+};
+/* XPM */
+static char *cdplaying[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 22 1",
+" c Black",
+". c Blue",
+"X c #0099ff",
+"o c Red",
+"O c #fe8000",
+"+ c #fe8600",
+"@ c #fe8c00",
+"# c #fe9200",
+"$ c #fe9800",
+"% c #fe9e00",
+"& c #fea400",
+"* c #feaa00",
+"= c #feb000",
+"- c #feb600",
+"; c #febc00",
+": c #fec200",
+"> c #fec800",
+", c #fece00",
+"< c #fed400",
+"1 c #feda00",
+"2 c #fee000",
+"3 c None",
+/* pixels */
+".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"X.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"X.............................................X.",
+"...............................................X",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+".XXXXXXXXXXXX3333333333333333333333.XXXXXXXXXXXX",
+"X.XXXXXXXXXX.3333333333333333333333X.XXXXXXXXXX.",
+"XX221<,>;-=..3333333333333333333333XX21<,>:;-=..",
+"XX2...>...*..3333333333333333333333XX1.......*..",
+"XX1.,.;.=.&..3333333333333333333333XX<.>:;-=.&..",
+"XX<.>.-.*.$..3333333333333333333333XX,.:;-=*.%..",
+"XX,.;.=.&.#..3333333333333333333333XX>.;-=*&.$..",
+"XX>.-.*.$. at ..3333333333333333333333XX:.-=*&%.#..",
+"XX;.=.&.#.+..3333333333333333333333XX;.=*&%$. at ..",
+"XX-...$...O..3333333333333333333333XX-.......+..",
+"XX=*&$#@+OO..3333333333333333333333XX=*&%$#@+O..",
+"X..........X.3333333333333333333333X..........X.",
+"............X3333333333333333333333............X",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"33333333333333.XXXXXXXXXXXXXXXXXXX33333333333333",
+".XXXXXXXXXXXX3X.XXXXXXXXXXXXXXXXX.3.XXXXXXXXXXXX",
+"X.XXXXXXXXXX.3XX ..3X.XXXXXXXXXX.",
+"XX221<,>;-=..3XX ..3XX221<,>;-=..",
+"XX2.<,>...*..3XX ..3XX2...>;-.*..",
+"XX1.,>.-=.&..3XX ..3XX1.,>.-=.&..",
+"XX<.>.-=*.$..3XX ..3XX<.>;-.*.$..",
+"XX,..-=*&.#..3XX ..3XX,.;-=*..#..",
+"XX>.-.*&$. at ..3XX ..3XX>.-=*.$. at ..",
+"XX;.=*.$#.+..3XX ..3XX;.=*.$#.+..",
+"XX-.*&$...O..3XX ..3XX-...$#@.O..",
+"XX=*&$#@+OO..3XX ..3XX=*&$#@+OO..",
+"X..........X.3XX ..3X..........X.",
+"............X3X.................X.3............X",
+"33333333333333...................X33333333333333"
+};
+/* XPM */
+static char *cdstopped[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 22 1",
+" c Black",
+". c Blue",
+"X c #0099ff",
+"o c Red",
+"O c #fe8000",
+"+ c #fe8600",
+"@ c #fe8c00",
+"# c #fe9200",
+"$ c #fe9800",
+"% c #fe9e00",
+"& c #fea400",
+"* c #feaa00",
+"= c #feb000",
+"- c #feb600",
+"; c #febc00",
+": c #fec200",
+"> c #fec800",
+", c #fece00",
+"< c #fed400",
+"1 c #feda00",
+"2 c #fee000",
+"3 c None",
+/* pixels */
+".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"X.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"XX ..",
+"X.............................................X.",
+"...............................................X",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+".XXXXXXXXXXXX3333333333333333333333.XXXXXXXXXXXX",
+"X.XXXXXXXXXX.3333333333333333333333X.XXXXXXXXXX.",
+"XX21<,>:;-=..3333333333333333333333XX21<,>:;-=..",
+"XX1....;-=*..3333333333333333333333XX1.......*..",
+"XX<.22,.=*&..3333333333333333333333XX<.22,:=.&..",
+"XX,.2,:=.%%..3333333333333333333333XX,.2,:=&.%..",
+"XX>.,:=&#.$..3333333333333333333333XX>.,:=&#.$..",
+"XX:.:=&#.$#..3333333333333333333333XX:;.=&#.$#..",
+"XX;.-&#.$#@..3333333333333333333333XX;-=.#.$#@..",
+"XX-....$#@+..3333333333333333333333XX-=*&.$#@+..",
+"XX=*&%$#@+O..3333333333333333333333XX=*&%$#@+O..",
+"X..........X.3333333333333333333333X..........X.",
+"............X3333333333333333333333............X",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"33333333333333.XXXXXXXXXXXXXXXXXXX33333333333333",
+".XXXXXXXXXXXX3X.XXXXXXXXXXXXXXXXX.3.XXXXXXXXXXXX",
+"X.XXXXXXXXXX.3XX ..3X.XXXXXXXXXX.",
+"XX221<,>;-=..3XX ..3XX221<,>;-=..",
+"XX2.<,>...*..3XX ..3XX2...>;-.*..",
+"XX1.,>.-=.&..3XX ..3XX1.,>.-=.&..",
+"XX<.>.-=*.$..3XX ..3XX<.>;-.*.$..",
+"XX,..-=*&.#..3XX ..3XX,.;-=*..#..",
+"XX>.-.*&$. at ..3XX ..3XX>.-=*.$. at ..",
+"XX;.=*.$#.+..3XX ..3XX;.=*.$#.+..",
+"XX-.*&$...O..3XX ..3XX-...$#@.O..",
+"XX=*&$#@+OO..3XX ..3XX=*&$#@+OO..",
+"X..........X.3XX ..3X..........X.",
+"............X3X.................X.3............X",
+"33333333333333...................X33333333333333"
+};
+/* XPM */
+static char * cdled[] = {
+"110 11 4 1",
+" c #000000000000 s led_color_back",
+". c #0000FFFF0000 s led_color_high",
+"X c #00009CE60000 s led_color_med",
+"o c #000063180000 s led_color_low",
+" ..... X X X ..... ..... X o X ..... ..... ..... ..... ..... X X X ... XoX .. Xo ",
+". oXo . o . X oXo . X oXo . . . . oXo X . oXo X o XoX . . oXo . . oXo . o X . X . . o o ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. X. oX . o .. Xo ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. .X Xo . X . . o o ",
+". . X . X XoX . o XoX . . oXo . . oXo X . oXo X o . . oXo . . oXo . X o . . X X ",
+" X o X o X o ..... ..... ..... ..... ..... X X X ..... ..... o X X ... oXo ",
+". . X . . oXo X X oXo . X oXo . o XoX . . oXo . X . . oXo . o XoX . X o . X ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. X. oX .. Xo ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. .X Xo . . o X ",
+". oXo . X . . oXo X o XoX . X . o XoX . . oXo . X . . oXo . o XoX . X X . o ",
+" ..... o X o ..... ..... o X o ..... ..... X X X ..... ..... X X o . X "};
diff --git a/XPM/bluered.style b/XPM/bluered.style
new file mode 100644
index 0000000..8a18f90
--- /dev/null
+++ b/XPM/bluered.style
@@ -0,0 +1,1213 @@
+/*
+ * This is a WMRack style
+ *
+ * Copyright 1997 by Heiko Wagner <hwagner at fga.de>
+ */
+/* XPM */
+static char *cdnodisc[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 257 2",
+" c #040302",
+". c #353535",
+"X c Gray24",
+"o c #7e007f",
+"O c #7f007e",
+"+ c Gray27",
+"@ c Gray30",
+"# c #505050",
+"$ c #555555",
+"% c #5d5d5d",
+"& c Gray40",
+"* c #6c6c6c",
+"= c Gray43",
+"- c Gray44",
+"; c #767676",
+": c #797979",
+"> c Gray",
+", c #3f00bf",
+"< c #1f00df",
+"1 c #0f00ef",
+"2 c #0700f7",
+"3 c #0300fb",
+"4 c #0500f9",
+"5 c #0b00f3",
+"6 c #0900f6",
+"7 c #0a00f4",
+"8 c #0c00f2",
+"9 c #0e00f0",
+"0 c #1700e7",
+"q c #1300eb",
+"w c #1100ed",
+"e c #1000ee",
+"r c #1200ec",
+"t c #1500e9",
+"y c #1400ea",
+"u c #1600e8",
+"i c #1b00e3",
+"p c #1800e6",
+"a c #1a00e4",
+"s c #1d00e1",
+"d c #1c00e2",
+"f c #1e00e0",
+"g c #2f00cf",
+"h c #2700d7",
+"j c #2300db",
+"k c #2100dd",
+"l c #2000de",
+"z c #2200dc",
+"x c #2500d9",
+"c c #2400da",
+"v c #2600d8",
+"b c #2b00d3",
+"n c #2900d5",
+"m c #2800d6",
+"M c #2a00d4",
+"N c #2d00d1",
+"B c #2c00d2",
+"V c #2e00d0",
+"C c #3700c7",
+"Z c #3300cb",
+"A c #3100cd",
+"S c #3000ce",
+"D c #3200cc",
+"F c #3500c9",
+"G c #3400ca",
+"H c #3600c8",
+"J c #3b00c3",
+"K c #3900c5",
+"L c #3800c6",
+"P c #3a00c4",
+"I c #3d00c1",
+"U c #3c00c2",
+"Y c #3e00c0",
+"T c #5f009f",
+"R c #4f00af",
+"E c #4700b7",
+"W c #4300bb",
+"Q c #4100bd",
+"! c #4000be",
+"~ c #4200bc",
+"^ c #4500b9",
+"/ c #4400ba",
+"( c #4600b8",
+") c #4b00b3",
+"_ c #4900b5",
+"` c #4800b6",
+"' c #4a00b4",
+"] c #4d00b1",
+"[ c #4e00b0",
+"{ c #5700a7",
+"} c #5300ab",
+"| c #5100ad",
+" . c #5000ae",
+".. c #5200ac",
+"X. c #5500a9",
+"o. c #5400aa",
+"O. c #5600a8",
+"+. c #5b00a3",
+"@. c #5900a5",
+"#. c #5800a6",
+"$. c #5a00a4",
+"%. c #5d00a1",
+"&. c #5c00a3",
+"*. c #5e00a0",
+"=. c #6e008f",
+"-. c #6f008e",
+";. c #670097",
+":. c #63009b",
+">. c #61009d",
+",. c #60009e",
+"<. c #62009c",
+"1. c #650099",
+"2. c #64009a",
+"3. c #660098",
+"4. c #6a0093",
+"5. c #6b0092",
+"6. c #680095",
+"7. c #690094",
+"8. c #680096",
+"9. c #6d0091",
+"0. c #760087",
+"q. c #770086",
+"w. c #72008b",
+"e. c #73008a",
+"r. c #70008d",
+"t. c #71008c",
+"y. c #740089",
+"u. c #750088",
+"i. c #7a0083",
+"p. c #7b0082",
+"a. c #780085",
+"s. c #790084",
+"d. c #7c0081",
+"f. c #7d0080",
+"g. c #33ff66",
+"h. c #be003f",
+"j. c #bf003e",
+"k. c #9e005f",
+"l. c #9f005e",
+"z. c #8e006f",
+"x. c #8f006e",
+"c. c #860077",
+"v. c #870076",
+"b. c #82007b",
+"n. c #83007a",
+"m. c #80007d",
+"M. c #81007c",
+"N. c #840079",
+"B. c #850078",
+"V. c #8a0073",
+"C. c #8b0072",
+"Z. c #880075",
+"A. c #890074",
+"S. c #8c0071",
+"D. c #8d0070",
+"F. c #960067",
+"G. c #970066",
+"H. c #92006b",
+"J. c #93006a",
+"K. c #90006d",
+"L. c #91006c",
+"P. c #940069",
+"I. c #950068",
+"U. c #9a0063",
+"Y. c #9b0062",
+"T. c #980065",
+"R. c #9c0061",
+"E. c #ae004f",
+"W. c #af004e",
+"Q. c #a60057",
+"!. c #a70056",
+"~. c #a2005b",
+"^. c #a3005a",
+"/. c #a0005d",
+"(. c #a1005c",
+"). c #a40059",
+"_. c #a50058",
+"`. c #aa0053",
+"'. c #ab0052",
+"]. c #a80055",
+"[. c #a90054",
+"{. c #ad0050",
+"}. c #ad0052",
+"|. c #b60047",
+" X c #b70046",
+".X c #b2004b",
+"XX c #b3004a",
+"oX c #b0004d",
+"OX c #b1004c",
+"+X c #b40049",
+"@X c #b50048",
+"#X c #ba0043",
+"$X c #bb0042",
+"%X c #b80045",
+"&X c #b90044",
+"*X c #bc0041",
+"=X c #bd0040",
+"-X c #ce002f",
+";X c #cf002e",
+":X c #c60037",
+">X c #c70036",
+",X c #c2003b",
+"<X c #c3003a",
+"1X c #c1003c",
+"2X c #c40039",
+"3X c #c50038",
+"4X c #ca0033",
+"5X c #cb0032",
+"6X c #c80035",
+"7X c #c90034",
+"8X c #cc0031",
+"9X c #cd0030",
+"0X c #d2002b",
+"qX c #d0002d",
+"wX c #d1002c",
+"eX c #d40029",
+"rX c #d50028",
+"tX c #d70028",
+"yX c #d90027",
+"uX c #da0025",
+"iX c #dc0023",
+"pX c #de0021",
+"aX c #df0020",
+"sX c #e0001f",
+"dX c #e1001e",
+"fX c #e3001c",
+"gX c #e5001a",
+"hX c #e70018",
+"jX c #e90016",
+"kX c #eb0014",
+"lX c #ed0012",
+"zX c #ee0011",
+"xX c #f70007",
+"cX c #f1000e",
+"vX c #f3000c",
+"bX c #f50009",
+"nX c #f4000b",
+"mX c #fb0002",
+"MX c #f90004",
+"NX c Gray51",
+"BX c #868686",
+"VX c #8e8e8e",
+"CX c Gray58",
+"ZX c Gray59",
+"AX c Gray62",
+"SX c Gray63",
+"DX c #a5a5a5",
+"FX c Gray65",
+"GX c #aeaeae",
+"HX c #b6b6b6",
+"JX c #bcbcbc",
+"KX c #bebebe",
+"LX c #c6c6c6",
+"PX c #cecece",
+"IX c Gray84",
+"UX c Gray87",
+"YX c None",
+/* pixels */
+"mXxXvXzXjXgXsXuXtXwX8X6X<Xh.#X at XoX}.!.~.k.T.P.K.C.c.b.f.a.e.-.4.3.<.%.#.o.R ' ( Q U L Z V M x l ",
+"MXbXcXkXhXfXpXyXeX;X4X:X1X*X%XXXE.`._./.Y.G.H.D.A.N.O p.0.t.9.6.2.,.+.O...] ` / , P H A B m j f ",
+"xXvX k d ",
+"bXcX < a ",
+"nXzX s p ",
+"cXlX i u ",
+"cXkX p y ",
+"zXjX u r ",
+"kXhX y e ",
+"jXgX r 9 ",
+"hXfX e 5 ",
+"gXdX 9 6 ",
+"fXpX 8 2 ",
+"dXiXyX0X9X7X2Xj.$X|.OX{.].^.l.U.I.L.S.v.n.o s.y.r.5.;.:.*. at .X. .) E ~ I K G g b v k s p q 1 7 4 ",
+"aXuXrXqX5X>X,X=X&X+XW.'.Q.(.R.T.J.z.V.B.m.d.q.w.=.7.1.>.&.{ } [ _ ^ ! J C D N n c < i u w 8 6 3 ",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"hXaXrX9X3X=X+X}.).R.P.C.n.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXeX7X=XOX_.U.z.b.q.5.,.X._ ",
+"aXUXIXPXLXKXHX).R.P.C.n.p.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX;X<X%X}./.I.GXf.t.;.+.R / ",
+"rXIXPXLXKXHXGXFXP.C.n.p.e.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX4Xh..X!.Y.GXFXAX9.<.O.' , ",
+"9XPXLX+X}.).FXAXZXn.p.e.4.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX3X&X{.~.GXFXAXZXVX&.| ^ K ",
+"3XLXKX}.).R.P.ZXVXBXe.4.:.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXj.+X].GXFXAXs.VXBX> ) ! G ",
+"=XKXHX).R.P.C.n.BX> ; :.+.YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX#XW.GXFXAXm.y.6.> ; = J g ",
+"+XHXGXR.P.C.n.p.e.; = & } YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX at XGXFXAXc.p.-.2.#.= & % M ",
+"}.GXFXP.C.n.p.e.; = & } ' YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXoXFXAXD.M.u.4.T } ` % $ c ",
+").FXAXC.n.p.e.; = & } ' ~ YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX'.AXZXZ.d.r.1.$.[ ~ $ @ < ",
+"R.AXZXn.p.e.; = & } ' ~ P YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX_.ZXVXb.q.5.,.X._ I @ + a ",
+"P.ZXVXBX> ; = & } ' ~ P D YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX/.VXBX> ; = & % $ @ + X t ",
+"C.VXBX> ; = & } ' ~ P D M YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXY.BX> ; = & % $ @ + X . e ",
+"n.p.e.4.:.+.} ' ~ P D M k YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXF.V.o e.8.&.| ^ K V z u 7 ",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYXdXyXqX>Xj. XE.Q.k.I.D.N.d.y.5.2.&.} ) W YXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYXpXeX8X2X$XXX`.~.U.L.A.M.a.r.6.,.#. .E , YXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYXuXwX / J YXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYXrX9X ! C YXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYXwX7X U G YXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYX-X3X L S YXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYX4X,X F B YXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYX:Xh. A n YXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYX<X#X N x YXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYXj. X M k YXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYX$XXX v s YXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYX XW. z a YXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYX+X'. f u YXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYXoX].l.G.x.c.o 0.9.3.%.X.] / U G b j i r YXYXYXYXYXYXYXYXYXYXYXYXYXYX",
+"YXYXYXYXYXYXYXYXYXYXYXYXYXYX}.).R.J.C.b.i.w.7.<.$.| _ Q L S m < 0 1 YXYXYXYXYXYXYXYXYXYXYXYXYXYX"
+};
+/* XPM */
+static char *cdpaused[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 241 2",
+" c #040302",
+". c #353535",
+"X c Gray24",
+"o c #7e007f",
+"O c #7f007e",
+"+ c Gray27",
+"@ c #555555",
+"# c #5d5d5d",
+"$ c Gray40",
+"% c #6c6c6c",
+"& c Gray43",
+"* c #767676",
+"= c Gray",
+"- c #3f00bf",
+"; c #1f00df",
+": c #0f00ef",
+"> c #0700f7",
+", c #0300fb",
+"< c #0500f9",
+"1 c #0b00f3",
+"2 c #0900f6",
+"3 c #0a00f4",
+"4 c #0c00f2",
+"5 c #0e00f0",
+"6 c #1700e7",
+"7 c #1300eb",
+"8 c #1100ed",
+"9 c #1000ee",
+"0 c #1200ec",
+"q c #1400ea",
+"w c #1600e8",
+"e c #1b00e3",
+"r c #1800e6",
+"t c #1a00e4",
+"y c #1d00e1",
+"u c #1c00e2",
+"i c #1e00e0",
+"p c #2f00cf",
+"a c #2300db",
+"s c #2100dd",
+"d c #2000de",
+"f c #2200dc",
+"g c #2500d9",
+"h c #2400da",
+"j c #2600d8",
+"k c #2b00d3",
+"l c #2900d5",
+"z c #2800d6",
+"x c #2a00d4",
+"c c #2d00d1",
+"v c #2c00d2",
+"b c #2e00d0",
+"n c #3700c7",
+"m c #3300cb",
+"M c #3100cd",
+"N c #3000ce",
+"B c #3200cc",
+"V c #3500c9",
+"C c #3400ca",
+"Z c #3600c8",
+"A c #3b00c3",
+"S c #3900c5",
+"D c #3800c6",
+"F c #3a00c4",
+"G c #3d00c1",
+"H c #3c00c2",
+"J c #5f009f",
+"K c #4f00af",
+"L c #4700b7",
+"P c #4300bb",
+"I c #4100bd",
+"U c #4000be",
+"Y c #4200bc",
+"T c #4500b9",
+"R c #4400ba",
+"E c #4600b8",
+"W c #4b00b3",
+"Q c #4900b5",
+"! c #4800b6",
+"~ c #4a00b4",
+"^ c #4d00b1",
+"/ c #4e00b0",
+"( c #5700a7",
+") c #5300ab",
+"_ c #5100ad",
+"` c #5000ae",
+"' c #5200ac",
+"] c #5500a9",
+"[ c #5400aa",
+"{ c #5600a8",
+"} c #5b00a3",
+"| c #5900a5",
+" . c #5800a6",
+".. c #5a00a4",
+"X. c #5d00a1",
+"o. c #5c00a3",
+"O. c #5e00a0",
+"+. c #6e008f",
+"@. c #6f008e",
+"#. c #670097",
+"$. c #63009b",
+"%. c #61009d",
+"&. c #60009e",
+"*. c #62009c",
+"=. c #650099",
+"-. c #64009a",
+";. c #660098",
+":. c #6a0093",
+">. c #6b0092",
+",. c #680095",
+"<. c #690094",
+"1. c #6d0091",
+"2. c #760087",
+"3. c #770086",
+"4. c #72008b",
+"5. c #73008a",
+"6. c #70008d",
+"7. c #71008c",
+"8. c #740089",
+"9. c #7a0083",
+"0. c #7b0082",
+"q. c #780085",
+"w. c #790084",
+"e. c #7c0081",
+"r. c #7d0080",
+"t. c #33ff66",
+"y. c #be003f",
+"u. c #bf003e",
+"i. c #9e005f",
+"p. c #9f005e",
+"a. c #8e006f",
+"s. c #8f006e",
+"d. c #860077",
+"f. c #870076",
+"g. c #82007b",
+"h. c #83007a",
+"j. c #80007d",
+"k. c #81007c",
+"l. c #840079",
+"z. c #850078",
+"x. c #8a0073",
+"c. c #8b0072",
+"v. c #890074",
+"b. c #8c0071",
+"n. c #8d0070",
+"m. c #970066",
+"M. c #92006b",
+"N. c #93006a",
+"B. c #90006d",
+"V. c #91006c",
+"C. c #940069",
+"Z. c #950068",
+"A. c #9a0063",
+"S. c #9b0062",
+"D. c #980065",
+"F. c #9c0061",
+"G. c #ae004f",
+"H. c #af004e",
+"J. c #a60057",
+"K. c #a70056",
+"L. c #a2005b",
+"P. c #a3005a",
+"I. c #a0005d",
+"U. c #a1005c",
+"Y. c #a40059",
+"T. c #a50058",
+"R. c #aa0053",
+"E. c #ab0052",
+"W. c #a80055",
+"Q. c #ad0050",
+"!. c #ad0052",
+"~. c #b60047",
+"^. c #b70046",
+"/. c #b3004a",
+"(. c #b0004d",
+"). c #b1004c",
+"_. c #b40049",
+"`. c #b50048",
+"'. c #ba0043",
+"]. c #bb0042",
+"[. c #b80045",
+"{. c #b90044",
+"}. c #bc0041",
+"|. c #bd0040",
+" X c #ce002f",
+".X c #cf002e",
+"XX c #c60037",
+"oX c #c70036",
+"OX c #c2003b",
+"+X c #c3003a",
+"@X c #c1003c",
+"#X c #c40039",
+"$X c #c50038",
+"%X c #ca0033",
+"&X c #cb0032",
+"*X c #c80035",
+"=X c #c90034",
+"-X c #cc0031",
+";X c #cd0030",
+":X c #d2002b",
+">X c #d0002d",
+",X c #d1002c",
+"<X c #d40029",
+"1X c #d50028",
+"2X c #d70028",
+"3X c #d90027",
+"4X c #da0025",
+"5X c #dc0023",
+"6X c #de0021",
+"7X c #df0020",
+"8X c #e0001f",
+"9X c #e1001e",
+"0X c #e3001c",
+"qX c #e5001a",
+"wX c #e70018",
+"eX c #e90016",
+"rX c #eb0014",
+"tX c #ed0012",
+"yX c #ee0011",
+"uX c #f70007",
+"iX c #f1000e",
+"pX c #f3000c",
+"aX c #f50009",
+"sX c #f4000b",
+"dX c #fb0002",
+"fX c #f90004",
+"gX c Gray51",
+"hX c #868686",
+"jX c #8e8e8e",
+"kX c Gray58",
+"lX c Gray59",
+"zX c Gray62",
+"xX c Gray65",
+"cX c #aeaeae",
+"vX c #b6b6b6",
+"bX c #bebebe",
+"nX c #c6c6c6",
+"mX c #cecece",
+"MX c Gray84",
+"NX c Gray87",
+"BX c None",
+/* pixels */
+"dXuXpXyXeXqX8X4X2X,X-X*X+Xy.'.`.(.!.K.L.i.D.C.B.c.d.g.r.q.5. at .:.;.*.X. .[ K ~ E I H D m b x g d ",
+"fXaXiXrXwX0X6X3X<X.X%XXX at X}.[./.G.R.T.I.S.m.M.n.v.l.O 0.2.7.1.,.-.&.} { ' ^ ! R - F Z M v z a i ",
+"uXpX s u ",
+"aXiX ; t ",
+"sXyX y r ",
+"iXtX e w ",
+"iXrX r q ",
+"yXeX w 0 ",
+"rXwX q 9 ",
+"eXqX 0 5 ",
+"wX0X 9 1 ",
+"qX9X 5 2 ",
+"0X6X 4 > ",
+"9X5X3X:X;X=X#Xu.].~.).Q.W.P.p.A.Z.V.b.f.h.o w.8.6.>.#.$.O.| ] ` W L Y G S C p k j s y r 7 : 3 < ",
+"7X4X1X>X&XoXOX|.{._.H.E.J.U.F.D.N.a.x.z.j.e.3.4.+.<.=.%.o.( ) / Q T U A n B c l h ; e w 8 4 2 , ",
+"BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX",
+"BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX",
+"wX7X1X;X$X|._.!.Y.F.C.c.h.BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXaXrX9X2X-XOX[.G.Y.A.B.d.e.",
+"7XNXMXmXnXbXvXY.F.C.c.h.0.BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXrXNXNXNXMXnXbXvXxXzXkXhX4.",
+"1XMXmXnXbXvXcXxXC.c.h.0.5.BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX9XNXNXMXnXbXvXxXzXkXhX= ,.",
+";XmXnX_.!.Y.xXzXlXh.0.5.:.BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX2XNXMX[.G.Y.A.B.d.e.= * J ",
+"$XnXbX!.Y.F.C.lXjXhX5.:.$.BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX-XMXnXG.Y.A.B.d.e.4.* % ] ",
+"|.bXvXY.F.C.c.h.hX= * $.} BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXOXnXbXY.A.B.d.e.4.,.% # ~ ",
+"_.vXcXF.C.c.h.0.5.* & $ ) BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX[.bXvXA.B.d.e.4.,.J # @ U ",
+"!.cXxXC.c.h.0.5.* & $ ) ~ BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXG.vXxXB.d.e.4.,.J ] @ + Z ",
+"Y.xXzXc.h.0.5.* & $ ) ~ Y BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXY.xXzXd.e.4.,.J ] ~ + X v ",
+"F.zXlXh.0.5.* & $ ) ~ Y F BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXA.zXkXe.4.,.J ] ~ U X . f ",
+"C.lXjXhX= * & $ ) ~ Y F B BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXB.kXhX= * % # @ + X . . r ",
+"c.jXhX= * & $ ) ~ Y F B x BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXd.gX= * % # @ + X X . . 5 ",
+"h.0.5.:.$.} ) ~ Y F B x s BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXe.4.,.J ] ~ U Z v f r 5 < ",
+"BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX",
+"BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX",
+"BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX",
+"BXBXBXBXBXBXBXBXBXBXBXBXBXBX9X3X>XoXu.^.G.J.i.Z.n.l.e.8.>.-.o.) W P BXBXBXBXBXBXBXBXBXBXBXBXBXBX",
+"aXrX9X2X-XOX[.G.Y.A.B.d.e.BX6X<X-X#X]./.R.L.A.V.v.k.q.6.,.&. .` L - BXaXrX9X2X-XOX[.G.Y.A.B.d.e.",
+"rXNXNX-XOX[.bXvXxXzXkXhX4.BX4X,X R A BXrXNXNXNXMXnXbXY.A.B.kXhX4.",
+"9XNXNXOX[.bXvXxXzXkXhX= ,.BX1X;X U n BX9XNXNXMXnXbXvXxXB.d.hX= ,.",
+"2XNXMX[.bXvXxXB.d.e.= * J BX,X=X H C BX2XNXMX[.G.Y.xXzXkXe.= * J ",
+"-XMXnXbXvXxXB.d.e.4.* % ] BX X$X D N BX-XMXnXG.Y.A.B.kXhX= * % ] ",
+"OXnXbXvXxXB.d.e.4.,.% # ~ BX%XOX V v BXOXnXbXY.A.B.d.e.= * % # ~ ",
+"[.bXvXxXB.d.e.4.,.J # @ U BXXXy. M l BX[.bXvXA.B.d.e.4.,.% # @ U ",
+"G.vXxXzXkXe.4.,.J ] @ + Z BX+X'. c g BXG.vXxXB.d.e.4.,.% # @ + Z ",
+"Y.xXzXkXhX= ,.J ] ~ + X v BXu.^. x s BXY.xXzXd.e.4.,.% # @ + X v ",
+"A.zXkXe.= * % ] ~ U X . f BX]./. j y BXA.zXkXe.4.,.% # @ U X . f ",
+"B.kXhX4.,.% # @ + X . . r BX^.H. f t BXB.kXhX= * % # @ U Z . . r ",
+"d.gX= ,.J ] @ + X X . . 5 BX_.E. i w BXd.gX= * % # @ U Z v . . 5 ",
+"e.4.,.J ] ~ U Z v f r 5 < BX(.W.p.m.s.d.o 2.1.;.X.] ^ R H C k a e 0 BXe.4.,.J ] ~ U Z v f r 5 < ",
+"BXBXBXBXBXBXBXBXBXBXBXBXBXBX!.Y.F.N.c.g.9.4.<.*..._ Q I D N z ; 6 : BXBXBXBXBXBXBXBXBXBXBXBXBXBX"
+};
+/* XPM */
+static char *cdplaying[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 235 2",
+" c #040302",
+". c #353535",
+"X c Gray24",
+"o c #7e007f",
+"O c #7f007e",
+"+ c Gray27",
+"@ c #555555",
+"# c #5d5d5d",
+"$ c #6c6c6c",
+"% c #767676",
+"& c Gray",
+"* c #3f00bf",
+"= c #1f00df",
+"- c #0f00ef",
+"; c #0700f7",
+": c #0300fb",
+"> c #0500f9",
+", c #0b00f3",
+"< c #0900f6",
+"1 c #0a00f4",
+"2 c #0c00f2",
+"3 c #0e00f0",
+"4 c #1700e7",
+"5 c #1300eb",
+"6 c #1100ed",
+"7 c #1000ee",
+"8 c #1200ec",
+"9 c #1400ea",
+"0 c #1600e8",
+"q c #1b00e3",
+"w c #1800e6",
+"e c #1a00e4",
+"r c #1d00e1",
+"t c #1c00e2",
+"y c #1e00e0",
+"u c #2f00cf",
+"i c #2300db",
+"p c #2100dd",
+"a c #2000de",
+"s c #2200dc",
+"d c #2500d9",
+"f c #2400da",
+"g c #2600d8",
+"h c #2b00d3",
+"j c #2900d5",
+"k c #2800d6",
+"l c #2a00d4",
+"z c #2d00d1",
+"x c #2c00d2",
+"c c #2e00d0",
+"v c #3700c7",
+"b c #3300cb",
+"n c #3100cd",
+"m c #3000ce",
+"M c #3200cc",
+"N c #3500c9",
+"B c #3400ca",
+"V c #3600c8",
+"C c #3b00c3",
+"Z c #3900c5",
+"A c #3800c6",
+"S c #3a00c4",
+"D c #3d00c1",
+"F c #3c00c2",
+"G c #5f009f",
+"H c #4f00af",
+"J c #4700b7",
+"K c #4300bb",
+"L c #4100bd",
+"P c #4000be",
+"I c #4200bc",
+"U c #4500b9",
+"Y c #4400ba",
+"T c #4600b8",
+"R c #4b00b3",
+"E c #4900b5",
+"W c #4800b6",
+"Q c #4a00b4",
+"! c #4d00b1",
+"~ c #4e00b0",
+"^ c #5700a7",
+"/ c #5300ab",
+"( c #5100ad",
+") c #5000ae",
+"_ c #5200ac",
+"` c #5500a9",
+"' c #5400aa",
+"] c #5600a8",
+"[ c #5b00a3",
+"{ c #5900a5",
+"} c #5800a6",
+"| c #5a00a4",
+" . c #5d00a1",
+".. c #5c00a3",
+"X. c #5e00a0",
+"o. c #6e008f",
+"O. c #6f008e",
+"+. c #670097",
+"@. c #63009b",
+"#. c #61009d",
+"$. c #60009e",
+"%. c #62009c",
+"&. c #650099",
+"*. c #64009a",
+"=. c #660098",
+"-. c #6a0093",
+";. c #6b0092",
+":. c #680095",
+">. c #690094",
+",. c #6d0091",
+"<. c #760087",
+"1. c #770086",
+"2. c #72008b",
+"3. c #73008a",
+"4. c #70008d",
+"5. c #71008c",
+"6. c #740089",
+"7. c #7a0083",
+"8. c #7b0082",
+"9. c #780085",
+"0. c #790084",
+"q. c #7c0081",
+"w. c #7d0080",
+"e. c #33ff66",
+"r. c #be003f",
+"t. c #bf003e",
+"y. c #9e005f",
+"u. c #9f005e",
+"i. c #8e006f",
+"p. c #8f006e",
+"a. c #860077",
+"s. c #870076",
+"d. c #82007b",
+"f. c #83007a",
+"g. c #80007d",
+"h. c #81007c",
+"j. c #840079",
+"k. c #850078",
+"l. c #8a0073",
+"z. c #8b0072",
+"x. c #890074",
+"c. c #8c0071",
+"v. c #8d0070",
+"b. c #970066",
+"n. c #92006b",
+"m. c #93006a",
+"M. c #90006d",
+"N. c #91006c",
+"B. c #940069",
+"V. c #950068",
+"C. c #9a0063",
+"Z. c #9b0062",
+"A. c #980065",
+"S. c #9c0061",
+"D. c #ae004f",
+"F. c #af004e",
+"G. c #a60057",
+"H. c #a70056",
+"J. c #a2005b",
+"K. c #a3005a",
+"L. c #a0005d",
+"P. c #a1005c",
+"I. c #a40059",
+"U. c #a50058",
+"Y. c #aa0053",
+"T. c #ab0052",
+"R. c #a80055",
+"E. c #ad0050",
+"W. c #ad0052",
+"Q. c #b60047",
+"!. c #b70046",
+"~. c #b3004a",
+"^. c #b0004d",
+"/. c #b1004c",
+"(. c #b40049",
+"). c #b50048",
+"_. c #ba0043",
+"`. c #bb0042",
+"'. c #b80045",
+"]. c #b90044",
+"[. c #bc0041",
+"{. c #bd0040",
+"}. c #ce002f",
+"|. c #cf002e",
+" X c #c60037",
+".X c #c70036",
+"XX c #c2003b",
+"oX c #c3003a",
+"OX c #c1003c",
+"+X c #c40039",
+"@X c #c50038",
+"#X c #ca0033",
+"$X c #cb0032",
+"%X c #c80035",
+"&X c #c90034",
+"*X c #cc0031",
+"=X c #cd0030",
+"-X c #d2002b",
+";X c #d0002d",
+":X c #d1002c",
+">X c #d40029",
+",X c #d50028",
+"<X c #d70028",
+"1X c #d90027",
+"2X c #da0025",
+"3X c #dc0023",
+"4X c #de0021",
+"5X c #df0020",
+"6X c #e0001f",
+"7X c #e1001e",
+"8X c #e3001c",
+"9X c #e5001a",
+"0X c #e70018",
+"qX c #e90016",
+"wX c #eb0014",
+"eX c #ed0012",
+"rX c #ee0011",
+"tX c #f70007",
+"yX c #f1000e",
+"uX c #f3000c",
+"iX c #f50009",
+"pX c #f4000b",
+"aX c #fb0002",
+"sX c #f90004",
+"dX c Gray51",
+"fX c #868686",
+"gX c Gray58",
+"hX c Gray62",
+"jX c Gray65",
+"kX c #b6b6b6",
+"lX c #bebebe",
+"zX c #c6c6c6",
+"xX c Gray84",
+"cX c Gray87",
+"vX c None",
+/* pixels */
+"aXtXuXrXqX9X6X2X<X:X*X%XoXr._.).^.W.H.J.y.A.B.M.z.a.d.w.9.3.O.-.=.%. .} ' H Q T L F A b c l d a ",
+"sXiXyXwX0X8X4X1X>X|.#X XOX[.'.~.D.Y.U.L.Z.b.n.v.x.j.O 8.<.5.,.:.*.$.[ ] _ ! W Y * S V n x k i y ",
+"tXuX p t ",
+"iXyX = e ",
+"pXrX r w ",
+"yXeX q 0 ",
+"yXwX w 9 ",
+"rXqX 0 8 ",
+"wX0X 9 7 ",
+"qX9X 8 3 ",
+"0X8X 7 , ",
+"9X7X 3 < ",
+"8X4X 2 ; ",
+"7X3X1X-X=X&X+Xt.`.Q./.E.R.K.u.C.V.N.c.s.f.o 0.6.4.;.+. at .X.{ ` ) R J I D Z B u h g p r w 5 - 1 > ",
+"5X2X,X;X$X.XXX{.].(.F.T.G.P.S.A.m.i.l.k.g.q.1.2.o.>.&.#...^ / ~ E U P C v M z j f = q 0 6 2 < : ",
+"vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvX",
+"vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvX",
+"iXwX7X<X*XXX'.D.I.C.M.a.q.vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXiXwX7X<X*XXX'.D.I.C.M.a.q.",
+"wXcXcXcXxXzXlXkXjXhXgXfX2.vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXwXcXcXcXxXzXlXkXjXhXgXfX2.",
+"7XcXcXxXzXlXkXjXhXgXfX& :.vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvX7XcXcXxXzXlXkXjXhXgXfX& :.",
+"<XcXxX'.D.I.jXM.a.q.& % G vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvX<XcXxX'.D.I.C.M.a.q.& % G ",
+"*XxXzXD.I.C.hXa.q.2.% $ ` vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvX*XxXzXD.I.C.M.a.q.2.% $ ` ",
+"XXzXlXI.C.M.gXq.2.:.$ # Q vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXXXzXlXI.C.M.a.q.2.:.$ # Q ",
+"'.lXkXC.M.a.fX2.:.G # @ P vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvX'.lXkXC.M.a.q.2.:.G # @ P ",
+"D.kXjXM.a.q.& :.G ` @ + V vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXD.kXjXM.a.q.2.:.G ` @ + V ",
+"I.jXhXa.q.2.% G ` Q + X x vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXI.jXhXa.q.2.:.G ` Q + X x ",
+"C.hXgXq.2.:.$ ` Q P X . s vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXC.hXgXq.2.:.G ` Q P X . s ",
+"M.gXfX& % $ # @ + X . . w vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXM.gXfX& % $ # @ + X . . w ",
+"a.dX& % $ # @ + X X . . 3 vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXa.dX& % $ # @ + X X . . 3 ",
+"q.2.:.G ` Q P V x s w 3 > vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXq.2.:.G ` Q P V x s w 3 > ",
+"vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvX",
+"vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvX",
+"vXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvXvX",
+"vXvXvXvXvXvXvXvXvXvXvXvXvXvX7X1X;X.Xt.!.D.G.y.V.v.j.q.6.;.*.../ R K vXvXvXvXvXvXvXvXvXvXvXvXvXvX",
+"iXwX7X<X*XXX'.D.I.C.M.a.q.vX4X>X*X+X`.~.Y.J.C.N.x.h.9.4.:.$.} ) J * vXiXwX7X<X*XXX'.D.I.C.M.a.q.",
+"wXcXcX*XXX'.lXkXjXhXgXfX2.vX2X:X Y C vXwXcXcXcXxXzXlXI.C.M.gXfX2.",
+"7XcXcXXX'.lXkXjXhXgXfX& :.vX,X=X P v vX7XcXcXxXzXlXkXjXM.a.fX& :.",
+"<XcXxX'.lXkXjXM.a.q.& % G vX:X&X F B vX<XcXxX'.D.I.jXhXgXq.& % G ",
+"*XxXzXlXkXjXM.a.q.2.% $ ` vX}. at X A m vX*XxXzXD.I.C.M.gXfX& % $ ` ",
+"XXzXlXkXjXM.a.q.2.:.$ # Q vX#XXX N x vXXXzXlXI.C.M.a.q.& % $ # Q ",
+"'.lXkXjXM.a.q.2.:.G # @ P vX Xr. n j vX'.lXkXC.M.a.q.2.:.$ # @ P ",
+"D.kXjXhXgXq.2.:.G ` @ + V vXoX_. z d vXD.kXjXM.a.q.2.:.$ # @ + V ",
+"I.jXhXgXfX& :.G ` Q + X x vXt.!. l p vXI.jXhXa.q.2.:.$ # @ + X x ",
+"C.hXgXq.& % $ ` Q P X . s vX`.~. g r vXC.hXgXq.2.:.$ # @ P X . s ",
+"M.gXfX2.:.$ # @ + X . . w vX!.F. s e vXM.gXfX& % $ # @ P V . . w ",
+"a.dX& :.G ` @ + X X . . 3 vX(.T. y 0 vXa.dX& % $ # @ P V x . . 3 ",
+"q.2.:.G ` Q P V x s w 3 > vX^.R.u.b.p.a.o <.,.=. .` ! Y F B h i q 8 vXq.2.:.G ` Q P V x s w 3 > ",
+"vXvXvXvXvXvXvXvXvXvXvXvXvXvXW.I.S.m.z.d.7.2.>.%.| ( E L A m k = 4 - vXvXvXvXvXvXvXvXvXvXvXvXvXvX"
+};
+/* XPM */
+static char *cdstopped[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 241 2",
+" c #040302",
+". c #353535",
+"X c Gray24",
+"o c #7e007f",
+"O c #7f007e",
+"+ c Gray27",
+"@ c #555555",
+"# c #5d5d5d",
+"$ c Gray40",
+"% c #6c6c6c",
+"& c Gray43",
+"* c #767676",
+"= c Gray",
+"- c #3f00bf",
+"; c #1f00df",
+": c #0f00ef",
+"> c #0700f7",
+", c #0300fb",
+"< c #0500f9",
+"1 c #0b00f3",
+"2 c #0900f6",
+"3 c #0a00f4",
+"4 c #0c00f2",
+"5 c #0e00f0",
+"6 c #1700e7",
+"7 c #1300eb",
+"8 c #1100ed",
+"9 c #1000ee",
+"0 c #1200ec",
+"q c #1400ea",
+"w c #1600e8",
+"e c #1b00e3",
+"r c #1800e6",
+"t c #1a00e4",
+"y c #1d00e1",
+"u c #1c00e2",
+"i c #1e00e0",
+"p c #2f00cf",
+"a c #2300db",
+"s c #2100dd",
+"d c #2000de",
+"f c #2200dc",
+"g c #2500d9",
+"h c #2400da",
+"j c #2600d8",
+"k c #2b00d3",
+"l c #2900d5",
+"z c #2800d6",
+"x c #2a00d4",
+"c c #2d00d1",
+"v c #2c00d2",
+"b c #2e00d0",
+"n c #3700c7",
+"m c #3300cb",
+"M c #3100cd",
+"N c #3000ce",
+"B c #3200cc",
+"V c #3500c9",
+"C c #3400ca",
+"Z c #3600c8",
+"A c #3b00c3",
+"S c #3900c5",
+"D c #3800c6",
+"F c #3a00c4",
+"G c #3d00c1",
+"H c #3c00c2",
+"J c #5f009f",
+"K c #4f00af",
+"L c #4700b7",
+"P c #4300bb",
+"I c #4100bd",
+"U c #4000be",
+"Y c #4200bc",
+"T c #4500b9",
+"R c #4400ba",
+"E c #4600b8",
+"W c #4b00b3",
+"Q c #4900b5",
+"! c #4800b6",
+"~ c #4a00b4",
+"^ c #4d00b1",
+"/ c #4e00b0",
+"( c #5700a7",
+") c #5300ab",
+"_ c #5100ad",
+"` c #5000ae",
+"' c #5200ac",
+"] c #5500a9",
+"[ c #5400aa",
+"{ c #5600a8",
+"} c #5b00a3",
+"| c #5900a5",
+" . c #5800a6",
+".. c #5a00a4",
+"X. c #5d00a1",
+"o. c #5c00a3",
+"O. c #5e00a0",
+"+. c #6e008f",
+"@. c #6f008e",
+"#. c #670097",
+"$. c #63009b",
+"%. c #61009d",
+"&. c #60009e",
+"*. c #62009c",
+"=. c #650099",
+"-. c #64009a",
+";. c #660098",
+":. c #6a0093",
+">. c #6b0092",
+",. c #680095",
+"<. c #690094",
+"1. c #6d0091",
+"2. c #760087",
+"3. c #770086",
+"4. c #72008b",
+"5. c #73008a",
+"6. c #70008d",
+"7. c #71008c",
+"8. c #740089",
+"9. c #7a0083",
+"0. c #7b0082",
+"q. c #780085",
+"w. c #790084",
+"e. c #7c0081",
+"r. c #7d0080",
+"t. c #33ff66",
+"y. c #be003f",
+"u. c #bf003e",
+"i. c #9e005f",
+"p. c #9f005e",
+"a. c #8e006f",
+"s. c #8f006e",
+"d. c #860077",
+"f. c #870076",
+"g. c #82007b",
+"h. c #83007a",
+"j. c #80007d",
+"k. c #81007c",
+"l. c #840079",
+"z. c #850078",
+"x. c #8a0073",
+"c. c #8b0072",
+"v. c #890074",
+"b. c #8c0071",
+"n. c #8d0070",
+"m. c #970066",
+"M. c #92006b",
+"N. c #93006a",
+"B. c #90006d",
+"V. c #91006c",
+"C. c #940069",
+"Z. c #950068",
+"A. c #9a0063",
+"S. c #9b0062",
+"D. c #980065",
+"F. c #9c0061",
+"G. c #ae004f",
+"H. c #af004e",
+"J. c #a60057",
+"K. c #a70056",
+"L. c #a2005b",
+"P. c #a3005a",
+"I. c #a0005d",
+"U. c #a1005c",
+"Y. c #a40059",
+"T. c #a50058",
+"R. c #aa0053",
+"E. c #ab0052",
+"W. c #a80055",
+"Q. c #ad0050",
+"!. c #ad0052",
+"~. c #b60047",
+"^. c #b70046",
+"/. c #b3004a",
+"(. c #b0004d",
+"). c #b1004c",
+"_. c #b40049",
+"`. c #b50048",
+"'. c #ba0043",
+"]. c #bb0042",
+"[. c #b80045",
+"{. c #b90044",
+"}. c #bc0041",
+"|. c #bd0040",
+" X c #ce002f",
+".X c #cf002e",
+"XX c #c60037",
+"oX c #c70036",
+"OX c #c2003b",
+"+X c #c3003a",
+"@X c #c1003c",
+"#X c #c40039",
+"$X c #c50038",
+"%X c #ca0033",
+"&X c #cb0032",
+"*X c #c80035",
+"=X c #c90034",
+"-X c #cc0031",
+";X c #cd0030",
+":X c #d2002b",
+">X c #d0002d",
+",X c #d1002c",
+"<X c #d40029",
+"1X c #d50028",
+"2X c #d70028",
+"3X c #d90027",
+"4X c #da0025",
+"5X c #dc0023",
+"6X c #de0021",
+"7X c #df0020",
+"8X c #e0001f",
+"9X c #e1001e",
+"0X c #e3001c",
+"qX c #e5001a",
+"wX c #e70018",
+"eX c #e90016",
+"rX c #eb0014",
+"tX c #ed0012",
+"yX c #ee0011",
+"uX c #f70007",
+"iX c #f1000e",
+"pX c #f3000c",
+"aX c #f50009",
+"sX c #f4000b",
+"dX c #fb0002",
+"fX c #f90004",
+"gX c Gray51",
+"hX c #868686",
+"jX c #8e8e8e",
+"kX c Gray58",
+"lX c Gray59",
+"zX c Gray62",
+"xX c Gray65",
+"cX c #aeaeae",
+"vX c #b6b6b6",
+"bX c #bebebe",
+"nX c #c6c6c6",
+"mX c #cecece",
+"MX c Gray84",
+"NX c Gray87",
+"BX c None",
+/* pixels */
+"dXuXpXyXeXqX8X4X2X,X-X*X+Xy.'.`.(.!.K.L.i.D.C.B.c.d.g.r.q.5. at .:.;.*.X. .[ K ~ E I H D m b x g d ",
+"fXaXiXrXwX0X6X3X<X.X%XXX at X}.[./.G.R.T.I.S.m.M.n.v.l.O 0.2.7.1.,.-.&.} { ' ^ ! R - F Z M v z a i ",
+"uXpX s u ",
+"aXiX ; t ",
+"sXyX y r ",
+"iXtX e w ",
+"iXrX r q ",
+"yXeX w 0 ",
+"rXwX q 9 ",
+"eXqX 0 5 ",
+"wX0X 9 1 ",
+"qX9X 5 2 ",
+"0X6X 4 > ",
+"9X5X3X:X;X=X#Xu.].~.).Q.W.P.p.A.Z.V.b.f.h.o w.8.6.>.#.$.O.| ] ` W L Y G S C p k j s y r 7 : 3 < ",
+"7X4X1X>X&XoXOX|.{._.H.E.J.U.F.D.N.a.x.z.j.e.3.4.+.<.=.%.o.( ) / Q T U A n B c l h ; e w 8 4 2 , ",
+"BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX",
+"BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX",
+"wX7X1X;X$X|._.!.Y.F.C.c.h.BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXaXrX9X2X-XOX[.G.Y.A.B.d.e.",
+"7XNXMXmXnXbXvXY.F.C.c.h.0.BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXrXNXNXNXMXnXbXvXxXzXkXhX4.",
+"1XMXmXnXbXvXcXxXC.c.h.0.5.BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX9XNXNXMXnXbXvXxXzXkXhX= ,.",
+";XmXnX_.!.Y.xXzXlXh.0.5.:.BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX2XNXMX[.G.Y.A.B.d.e.= * J ",
+"$XnXbX!.Y.F.C.lXjXhX5.:.$.BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX-XMXnXG.Y.A.B.d.e.4.* % ] ",
+"|.bXvXY.F.C.c.h.hX= * $.} BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXOXnXbXY.A.B.d.e.4.,.% # ~ ",
+"_.vXcXF.C.c.h.0.5.* & $ ) BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX[.bXvXxXB.d.e.4.,.% # @ U ",
+"!.cXxXC.c.h.0.5.* & $ ) ~ BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXG.Y.xXzXkXe.4.,.% # @ U Z ",
+"Y.xXzXc.h.0.5.* & $ ) ~ Y BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXY.A.B.kXhX= ,.% # @ U Z v ",
+"F.zXlXh.0.5.* & $ ) ~ Y F BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXA.B.d.e.= * % # @ U Z v f ",
+"C.lXjXhX= * & $ ) ~ Y F B BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXB.d.e.4.,.% # @ U Z v f r ",
+"c.jXhX= * & $ ) ~ Y F B x BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXd.e.4.,.J ] @ U Z v f r 5 ",
+"h.0.5.:.$.} ) ~ Y F B x s BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXe.4.,.J ] ~ U Z v f r 5 < ",
+"BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX",
+"BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX",
+"BXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBX",
+"BXBXBXBXBXBXBXBXBXBXBXBXBXBX9X3X>XoXu.^.G.J.i.Z.n.l.e.8.>.-.o.) W P BXBXBXBXBXBXBXBXBXBXBXBXBXBX",
+"aXrX9X2X-XOX[.G.Y.A.B.d.e.BX6X<X-X#X]./.R.L.A.V.v.k.q.6.,.&. .` L - BXaXrX9X2X-XOX[.G.Y.A.B.d.e.",
+"rXNXNX-XOX[.bXvXxXzXkXhX4.BX4X,X R A BXrXNXNXNXMXnXbXY.A.B.kXhX4.",
+"9XNXNXOX[.bXvXxXzXkXhX= ,.BX1X;X U n BX9XNXNXMXnXbXvXxXB.d.hX= ,.",
+"2XNXMX[.bXvXxXB.d.e.= * J BX,X=X H C BX2XNXMX[.G.Y.xXzXkXe.= * J ",
+"-XMXnXbXvXxXB.d.e.4.* % ] BX X$X D N BX-XMXnXG.Y.A.B.kXhX= * % ] ",
+"OXnXbXvXxXB.d.e.4.,.% # ~ BX%XOX V v BXOXnXbXY.A.B.d.e.= * % # ~ ",
+"[.bXvXxXB.d.e.4.,.J # @ U BXXXy. M l BX[.bXvXA.B.d.e.4.,.% # @ U ",
+"G.vXxXzXkXe.4.,.J ] @ + Z BX+X'. c g BXG.vXxXB.d.e.4.,.% # @ + Z ",
+"Y.xXzXkXhX= ,.J ] ~ + X v BXu.^. x s BXY.xXzXd.e.4.,.% # @ + X v ",
+"A.zXkXe.= * % ] ~ U X . f BX]./. j y BXA.zXkXe.4.,.% # @ U X . f ",
+"B.kXhX4.,.% # @ + X . . r BX^.H. f t BXB.kXhX= * % # @ U Z . . r ",
+"d.gX= ,.J ] @ + X X . . 5 BX_.E. i w BXd.gX= * % # @ U Z v . . 5 ",
+"e.4.,.J ] ~ U Z v f r 5 < BX(.W.p.m.s.d.o 2.1.;.X.] ^ R H C k a e 0 BXe.4.,.J ] ~ U Z v f r 5 < ",
+"BXBXBXBXBXBXBXBXBXBXBXBXBXBX!.Y.F.N.c.g.9.4.<.*..._ Q I D N z ; 6 : BXBXBXBXBXBXBXBXBXBXBXBXBXBX"
+};
+/* XPM */
+static char * cdled[] = {
+"110 11 4 1",
+" c #000000000000 s led_color_back",
+". c #0000FFFF0000 s led_color_high",
+"X c #00009CE60000 s led_color_med",
+"o c #000063180000 s led_color_low",
+" ..... X X X ..... ..... X o X ..... ..... ..... ..... ..... X X X ... XoX .. Xo ",
+". oXo . o . X oXo . X oXo . . . . oXo X . oXo X o XoX . . oXo . . oXo . o X . X . . o o ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. X. oX . o .. Xo ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. .X Xo . X . . o o ",
+". . X . X XoX . o XoX . . oXo . . oXo X . oXo X o . . oXo . . oXo . X o . . X X ",
+" X o X o X o ..... ..... ..... ..... ..... X X X ..... ..... o X X ... oXo ",
+". . X . . oXo X X oXo . X oXo . o XoX . . oXo . X . . oXo . o XoX . X o . X ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. X. oX .. Xo ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. .X Xo . . o X ",
+". oXo . X . . oXo X o XoX . X . o XoX . . oXo . X . . oXo . o XoX . X X . o ",
+" ..... o X o ..... ..... o X o ..... ..... X X X ..... ..... X X o . X "};
diff --git a/XPM/cd-mask.xpm b/XPM/cd-mask.xpm
new file mode 100644
index 0000000..cd9a2af
--- /dev/null
+++ b/XPM/cd-mask.xpm
@@ -0,0 +1,57 @@
+/* XPM */
+static char *sample_mask[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 3 1",
+" c Black",
+". c Gray100",
+"X c None",
+/* pixels */
+"................................................",
+"................................................",
+"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+"..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..",
+"................................................",
+"................................................",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+".............XXXXXXXXXXXXXXXXXXXXXX.............",
+".............XXXXXXXXXXXXXXXXXXXXXX.............",
+".............XXXXXXXXXXXXXXXXXXXXXX.............",
+".............XXXXXXXXXXXXXXXXXXXXXX.............",
+".............XXXXXXXXXXXXXXXXXXXXXX.............",
+".............XXXXXXXXXXXXXXXXXXXXXX.............",
+".............XXXXXXXXXXXXXXXXXXXXXX.............",
+".............XXXXXXXXXXXXXXXXXXXXXX.............",
+".............XXXXXXXXXXXXXXXXXXXXXX.............",
+".............XXXXXXXXXXXXXXXXXXXXXX.............",
+".............XXXXXXXXXXXXXXXXXXXXXX.............",
+".............XXXXXXXXXXXXXXXXXXXXXX.............",
+".............XXXXXXXXXXXXXXXXXXXXXX.............",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX....................XXXXXXXXXXXXXX",
+".............X....................X.............",
+".............X..XXXXXXXXXXXXXXXX..X.............",
+".............X..XXXXXXXXXXXXXXXX..X.............",
+".............X..XXXXXXXXXXXXXXXX..X.............",
+".............X..XXXXXXXXXXXXXXXX..X.............",
+".............X..XXXXXXXXXXXXXXXX..X.............",
+".............X..XXXXXXXXXXXXXXXX..X.............",
+".............X..XXXXXXXXXXXXXXXX..X.............",
+".............X..XXXXXXXXXXXXXXXX..X.............",
+".............X..XXXXXXXXXXXXXXXX..X.............",
+".............X..XXXXXXXXXXXXXXXX..X.............",
+".............X..XXXXXXXXXXXXXXXX..X.............",
+".............X....................X.............",
+"XXXXXXXXXXXXXX....................XXXXXXXXXXXXXX"
+};
diff --git a/XPM/gold.style b/XPM/gold.style
new file mode 100644
index 0000000..dcbd624
--- /dev/null
+++ b/XPM/gold.style
@@ -0,0 +1,402 @@
+/*
+ * This is a WMRack style
+ *
+ * Copyright 1997 by Heiko Wagner <hwagner at fga.de>
+ */
+/* XPM */
+static char *cdnodisc[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 47 1",
+" c Black",
+". c #623620",
+"X c #783f2a",
+"o c #79412a",
+"O c #7b7b7b",
+"+ c Blue",
+"@ c #00ccff",
+"# c #84571f",
+"$ c #8a522b",
+"% c #8d552b",
+"& c #9a632c",
+"* c #9c652c",
+"= c #a16a2c",
+"- c #a26c2d",
+"; c #a77920",
+": c #ab752d",
+"> c #ae782d",
+", c #b47e2e",
+"< c #b57f2e",
+"1 c #bd872e",
+"2 c #c08b2f",
+"3 c #c6902f",
+"4 c #c9942f",
+"5 c #cc962f",
+"6 c #c99b20",
+"7 c #ce992f",
+"8 c #d2a03d",
+"9 c #d6a84e",
+"0 c #d8ad57",
+"q c #dab160",
+"w c #dcb76b",
+"e c #dbbb64",
+"r c #e0bf7d",
+"t c #dec273",
+"y c #e3c588",
+"u c #e5ce90",
+"i c #e9d2a2",
+"p c #ead3a5",
+"a c #eddeb4",
+"s c #eeddb9",
+"d c #f1e2c5",
+"f c #f8f1e2",
+"g c #f9f3e8",
+"h c #faf5eb",
+"j c #fdfbf6",
+"k c #fefefd",
+"l c None",
+/* pixels */
+".#;6eakfdpyww97311,::::::::::,11379wwypdfkae6;#.",
+"#;6eaakfdpyw97311,:----------:,11379wypdfkaae6;#",
+"#; ;#",
+"#; ;#",
+"#; ;#",
+"#; ;#",
+"#; ;#",
+";6 6;",
+";6 6;",
+"#; ;#",
+"#; ;#",
+"#; ;#",
+"#; ;#",
+"#;6eakfdpyww9731,:--&&&&&&&&--:,1379wwypdfkae6;#",
+"#;6eaakfdpyw97311,:----------:,11379wypdfkaae6;#",
+"llllllllllllllllllllllllllllllllllllllllllllllll",
+"llllllllllllllllllllllllllllllllllllllllllllllll",
+"srr88888888rrllllllllllllllllllllllr88888888rrsj",
+"s++++++22228rllllllllllllllllllllll822222+228rsj",
+"r+++++++>>228llllllllllllllllllllll22>>>+++228rs",
+"r++@@@+++*>28llllllllllllllllllllll2>**+++++28rs",
+"r++@@@@+++>28llllllllllllllllllllll2>*+++ at +++8rs",
+"8++@@@@@+++>2llllllllllllllllllllll>*+++@@@+++8r",
+"8++@@@@@@+++2llllllllllllllllllllll>+++@@@@@+++r",
+"r++@@@@@+++28llllllllllllllllllllll2++@@@@@@@++s",
+"r++@@@@+++>28llllllllllllllllllllll2++@@@@@@@++s",
+"r++@@@+++>228llllllllllllllllllllll2++@@@@@@@++s",
+"s+++++++2228rllllllllllllllllllllll8+++++++++++j",
+"s++++++8888rrllllllllllllllllllllllr+++++++++++j",
+"jsrrrrrrrrrrsllllllllllllllllllllllrrrrrrrrrrsjt",
+"llllllllllllllllllllllllllllllllllllllllllllllll",
+"llllllllllllllllllllllllllllllllllllllllllllllll",
+"llllllllllllllllllllllllllllllllllllllllllllllll",
+"llllllllllllllhsy05511111111550yshllllllllllllll",
+"llllllllllllllsyy051>>>>>>>>150yysllllllllllllll",
+"llllllllllllllsy ysllllllllllllll",
+"llllllllllllllsy ysllllllllllllll",
+"llllllllllllllsy ysllllllllllllll",
+"lllllllllllllly0 0yllllllllllllli",
+"lllllllllllllly0 0yllllllllllllll",
+"llllllllllllllsy ysllllllllllllll",
+"llllllllllllllsy ysllllllllllllll",
+"llllllllllllllsy ysllllllllllllll",
+"llllllllllllllsy ysllllllllllllll",
+"llllllllllllllhs shllllllllllllll",
+"llllllllllllllhs shllllllllllllll",
+"llllllllllllllahssy0000000000ysshallllllllllllll",
+"llllllllllllllaahssyyyyyyyyyysshaallllllllllllll"
+};
+/* XPM */
+static char *cdpaused[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 42 1",
+" c Black",
+". c #623620",
+"X c #7b7b7b",
+"o c Blue",
+"O c #00ccff",
+"+ c #84571f",
+"@ c #9a632c",
+"# c #9c652c",
+"$ c #a16a2c",
+"% c #a26c2d",
+"& c #a77920",
+"* c #ab752d",
+"= c #ae782d",
+"- c #b47e2e",
+"; c #b57f2e",
+": c #bd872e",
+"> c #c08b2f",
+", c #c6902f",
+"< c #c9942f",
+"1 c #cc962f",
+"2 c #c99b20",
+"3 c #ce992f",
+"4 c #d2a03d",
+"5 c #d6a84e",
+"6 c #d8ad57",
+"7 c #dab160",
+"8 c #dcb76b",
+"9 c #dbbb64",
+"0 c #e0bf7d",
+"q c #e3c588",
+"w c #e5ce90",
+"e c #e9d2a2",
+"r c #ead3a5",
+"t c #eddeb4",
+"y c #eeddb9",
+"u c #f1e2c5",
+"i c #f8f1e2",
+"p c #f9f3e8",
+"a c #faf5eb",
+"s c #fdfbf6",
+"d c #fefefd",
+"f c None",
+/* pixels */
+".+&29tdiurq8853,::-**********-::,3588qruidt92&+.",
+"+&29ttdiurq853,::-*%%%%%%%%%%*-::,358qruidtt92&+",
+"+& &+",
+"+& &+",
+"+& &+",
+"+& &+",
+"+& &+",
+"&2 2&",
+"&2 2&",
+"+& &+",
+"+& &+",
+"+& &+",
+"+& &+",
+"+&29tdiurq8853,:-*%%@@@@@@@@%%*-:,3588qruidt92&+",
+"+&29ttdiurq853,::-*%%%%%%%%%%*-::,358qruidtt92&+",
+"ffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffffffffffffffffffffffffffffffffffffffffff",
+"y004444444400ffffffffffffffffffffffee77777777eep",
+"yoooooo>>>>40ffffffffffffffffffffffeooooooooooop",
+"0ooooooo==>>4ffffffffffffffffffffff7oooooooooooe",
+"0ooOOOooo#=>4ffffffffffffffffffffff7ooOOOOOOOooe",
+"0ooOOOOooo=>4ffffffffffffffffffffff7ooOOOOOOOooe",
+"4ooOOOOOooo=>ffffffffffffffffffffff<ooOOOOOOOoo7",
+"4ooOOOOOOooo>ffffffffffffffffffffff<ooOOOOOOOoo7",
+"0ooOOOOOooo>4ffffffffffffffffffffff7ooOOOOOOOooe",
+"0ooOOOOooo=>4ffffffffffffffffffffff7ooOOOOOOOooe",
+"0ooOOOooo=>>4ffffffffffffffffffffff7ooOOOOOOOooe",
+"yooooooo>>>40ffffffffffffffffffffffeooooooooooop",
+"yoooooo444400ffffffffffffffffffffffeooooooooooop",
+"sy0000000000yffffffffffffffffffffffpeeeeeeeeeepw",
+"ffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffffffffffffffffffffffffffffffffffffffffff",
+"ffffffffffffffayq611::::::::116qyaffffffffffffff",
+"ee77777777eepfyqq61:========:16qqyfee77777777eep",
+"eoo<<<oooooopfyq qyfeoooooo<<<oop",
+"7oo;;oooooooefyq qyf7ooooooo;<ooe",
+"7oo$oooOOOooefyq qyf7ooOOOooo;ooe",
+"7oooooOOOOooefq6 6qf7ooOOOOoooooe",
+"<ooooOOOOOoo7fq6 6qf<ooOOOOOoooo7",
+"<oooOOOOOOoo7fyq qyf<ooOOOOOOooo7",
+"7ooooOOOOOooefyq qyf7ooOOOOOooooe",
+"7oooooOOOOooefyq qyf7ooOOOOoooooe",
+"7oo;oooOOOooefyq qyf7ooOOOooo<ooe",
+"eoo<<ooooooopfay yafeooooooo<<oop",
+"eoo777oooooopfay yafeoooooo777oop",
+"peeeeeeeeeepwftayyq6666666666qyyatfpeeeeeeeeeepw",
+"ffffffffffffffttayyqqqqqqqqqqyyattffffffffffffff"
+};
+/* XPM */
+static char *cdplaying[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 37 1",
+" c Black",
+". c #623620",
+"X c #7b7b7b",
+"o c Blue",
+"O c #00ccff",
+"+ c #84571f",
+"@ c #9a632c",
+"# c #a16a2c",
+"$ c #a26c2d",
+"% c #a77920",
+"& c #ab752d",
+"* c #ae782d",
+"= c #b47e2e",
+"- c #b57f2e",
+"; c #bd872e",
+": c #c6902f",
+"> c #c9942f",
+", c #cc962f",
+"< c #c99b20",
+"1 c #ce992f",
+"2 c #d6a84e",
+"3 c #d8ad57",
+"4 c #dab160",
+"5 c #dcb76b",
+"6 c #dbbb64",
+"7 c #e3c588",
+"8 c #e5ce90",
+"9 c #e9d2a2",
+"0 c #ead3a5",
+"q c #eddeb4",
+"w c #eeddb9",
+"e c #f1e2c5",
+"r c #f8f1e2",
+"t c #f9f3e8",
+"y c #faf5eb",
+"u c #fefefd",
+"i c None",
+/* pixels */
+".+%<6qure075521:;;=&&&&&&&&&&=;;:125570eruq6<%+.",
+"+%<6qqure07521:;;=&$$$$$$$$$$&=;;:12570eruqq6<%+",
+"+% %+",
+"+% %+",
+"+% %+",
+"+% %+",
+"+% %+",
+"%< <%",
+"%< <%",
+"+% %+",
+"+% %+",
+"+% %+",
+"+% %+",
+"+%<6qure075521:;=&$$@@@@@@@@$$&=;:125570eruq6<%+",
+"+%<6qqure07521:;;=&$$$$$$$$$$&=;;:12570eruqq6<%+",
+"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+"994444444499tiiiiiiiiiiiiiiiiiiiiii994444444499t",
+"9oooooooooootiiiiiiiiiiiiiiiiiiiiii9ooooooooooot",
+"4ooooooooooo9iiiiiiiiiiiiiiiiiiiiii4ooooooooooo9",
+"4ooOOOoOOOoo9iiiiiiiiiiiiiiiiiiiiii4ooOOOOOOOoo9",
+"4ooOOOoOOOoo9iiiiiiiiiiiiiiiiiiiiii4ooOOOOOOOoo9",
+">ooOOOoOOOoo4iiiiiiiiiiiiiiiiiiiiii>ooOOOOOOOoo4",
+">ooOOOoOOOoo4iiiiiiiiiiiiiiiiiiiiii>ooOOOOOOOoo4",
+"4ooOOOoOOOoo9iiiiiiiiiiiiiiiiiiiiii4ooOOOOOOOoo9",
+"4ooOOOoOOOoo9iiiiiiiiiiiiiiiiiiiiii4ooOOOOOOOoo9",
+"4ooOOOoOOOoo9iiiiiiiiiiiiiiiiiiiiii4ooOOOOOOOoo9",
+"9oooooooooootiiiiiiiiiiiiiiiiiiiiii9ooooooooooot",
+"9oooooooooootiiiiiiiiiiiiiiiiiiiiii9ooooooooooot",
+"t9999999999t8iiiiiiiiiiiiiiiiiiiiiit9999999999t8",
+"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+"iiiiiiiiiiiiiiyw73,,;;;;;;;;,,37wyiiiiiiiiiiiiii",
+"994444444499tiw773,;********;,377wi994444444499t",
+"9oo>>>ooooootiw7 7wi9oooooo>>>oot",
+"4oo--ooooooo9iw7 7wi4ooooooo->oo9",
+"4oo#oooOOOoo9iw7 7wi4ooOOOooo-oo9",
+"4oooooOOOOoo9i73 37i4ooOOOOooooo9",
+">ooooOOOOOoo4i73 37i>ooOOOOOoooo4",
+">oooOOOOOOoo4iw7 7wi>ooOOOOOOooo4",
+"4ooooOOOOOoo9iw7 7wi4ooOOOOOoooo9",
+"4oooooOOOOoo9iw7 7wi4ooOOOOooooo9",
+"4oo-oooOOOoo9iw7 7wi4ooOOOooo>oo9",
+"9oo>>oooooootiyw wyi9ooooooo>>oot",
+"9oo444ooooootiyw wyi9oooooo444oot",
+"t9999999999t8iqyww733333333337wwyqit9999999999t8",
+"iiiiiiiiiiiiiiqqyww7777777777wwyqqiiiiiiiiiiiiii"
+};
+/* XPM */
+static char *cdstopped[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 37 1",
+" c Black",
+". c #623620",
+"X c #7b7b7b",
+"o c Blue",
+"O c #00ccff",
+"+ c #84571f",
+"@ c #9a632c",
+"# c #a16a2c",
+"$ c #a26c2d",
+"% c #a77920",
+"& c #ab752d",
+"* c #ae782d",
+"= c #b47e2e",
+"- c #b57f2e",
+"; c #bd872e",
+": c #c6902f",
+"> c #c9942f",
+", c #cc962f",
+"< c #c99b20",
+"1 c #ce992f",
+"2 c #d6a84e",
+"3 c #d8ad57",
+"4 c #dab160",
+"5 c #dcb76b",
+"6 c #dbbb64",
+"7 c #e3c588",
+"8 c #e5ce90",
+"9 c #e9d2a2",
+"0 c #ead3a5",
+"q c #eddeb4",
+"w c #eeddb9",
+"e c #f1e2c5",
+"r c #f8f1e2",
+"t c #f9f3e8",
+"y c #faf5eb",
+"u c #fefefd",
+"i c None",
+/* pixels */
+".+%<6qure075521:;;=&&&&&&&&&&=;;:125570eruq6<%+.",
+"+%<6qqure07521:;;=&$$$$$$$$$$&=;;:12570eruqq6<%+",
+"+% %+",
+"+% %+",
+"+% %+",
+"+% %+",
+"+% %+",
+"%< <%",
+"%< <%",
+"+% %+",
+"+% %+",
+"+% %+",
+"+% %+",
+"+%<6qure075521:;=&$$@@@@@@@@$$&=;:125570eruq6<%+",
+"+%<6qqure07521:;;=&$$$$$$$$$$&=;;:12570eruqq6<%+",
+"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+"994444444499tiiiiiiiiiiiiiiiiiiiiii994444444499t",
+"9oooooo>>>49tiiiiiiiiiiiiiiiiiiiiii9ooooooooooot",
+"4ooooooo->>49iiiiiiiiiiiiiiiiiiiiii4ooooooooooo9",
+"4ooOOOooo->49iiiiiiiiiiiiiiiiiiiiii4ooOOOOOOOoo9",
+"4ooOOOOooo>49iiiiiiiiiiiiiiiiiiiiii4ooOOOOOOOoo9",
+">ooOOOOOooo>4iiiiiiiiiiiiiiiiiiiiii>ooOOOOOOOoo4",
+">ooOOOOOOooo4iiiiiiiiiiiiiiiiiiiiii>oooOOOOOooo4",
+"4ooOOOOOooo49iiiiiiiiiiiiiiiiiiiiii4>oooOOOooo49",
+"4ooOOOOooo>49iiiiiiiiiiiiiiiiiiiiii4>-oooOooo>49",
+"4ooOOOooo>>49iiiiiiiiiiiiiiiiiiiiii4>>-ooooo>>49",
+"9ooooooo>>49tiiiiiiiiiiiiiiiiiiiiii94>>>ooo>>49t",
+"9oooooo44499tiiiiiiiiiiiiiiiiiiiiii994444o44499t",
+"t9999999999t8iiiiiiiiiiiiiiiiiiiiiit9999999999t8",
+"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+"iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+"iiiiiiiiiiiiiiyw73,,;;;;;;;;,,37wyiiiiiiiiiiiiii",
+"994444444499tiw773,;********;,377wi994444444499t",
+"9oo>>>ooooootiw7 7wi9oooooo>>>oot",
+"4oo--ooooooo9iw7 7wi4ooooooo->oo9",
+"4oo#oooOOOoo9iw7 7wi4ooOOOooo-oo9",
+"4oooooOOOOoo9i73 37i4ooOOOOooooo9",
+">ooooOOOOOoo4i73 37i>ooOOOOOoooo4",
+">oooOOOOOOoo4iw7 7wi>ooOOOOOOooo4",
+"4ooooOOOOOoo9iw7 7wi4ooOOOOOoooo9",
+"4oooooOOOOoo9iw7 7wi4ooOOOOooooo9",
+"4oo-oooOOOoo9iw7 7wi4ooOOOooo>oo9",
+"9oo>>oooooootiyw wyi9ooooooo>>oot",
+"9oo444ooooootiyw wyi9oooooo444oot",
+"t9999999999t8iqyww733333333337wwyqit9999999999t8",
+"iiiiiiiiiiiiiiqqyww7777777777wwyqqiiiiiiiiiiiiii"
+};
+/* XPM */
+static char * cdled[] = {
+"110 11 4 1",
+" c #000000000000 s led_color_back",
+". c #0000FFFF0000 s led_color_high",
+"X c #00009CE60000 s led_color_med",
+"o c #000063180000 s led_color_low",
+" ..... X X X ..... ..... X o X ..... ..... ..... ..... ..... X X X ... XoX .. Xo ",
+". oXo . o . X oXo . X oXo . . . . oXo X . oXo X o XoX . . oXo . . oXo . o X . X . . o o ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. X. oX . o .. Xo ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. .X Xo . X . . o o ",
+". . X . X XoX . o XoX . . oXo . . oXo X . oXo X o . . oXo . . oXo . X o . . X X ",
+" X o X o X o ..... ..... ..... ..... ..... X X X ..... ..... o X X ... oXo ",
+". . X . . oXo X X oXo . X oXo . o XoX . . oXo . X . . oXo . o XoX . X o . X ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. X. oX .. Xo ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. .X Xo . . o X ",
+". oXo . X . . oXo X o XoX . X . o XoX . . oXo . X . . oXo . o XoX . X X . o ",
+" ..... o X o ..... ..... o X o ..... ..... X X X ..... ..... X X o . X "};
diff --git a/XPM/grey.style b/XPM/grey.style
new file mode 100644
index 0000000..fa72a9f
--- /dev/null
+++ b/XPM/grey.style
@@ -0,0 +1,255 @@
+/*
+ * WMRack standart style
+ *
+ * Copyright 1997 by Oliver Graf <ograf at fga.de>
+ */
+/* XPM */
+static char * cdnodisc[] = {
+"48 48 7 1",
+" c #631863186318",
+". c #318C318C318C",
+"X c #9CE69CE69CE6",
+"o c #000000000000",
+"O c #CE72CE72CE72",
+"+ c none",
+"@ c #0000FFFF0000 s led_color_high",
+" ",
+" ..............................................X",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"OOOOOOOOOOOOO++++++++++++++++++++++OOOOOOOOOOOOO",
+"OXXXXXXXXXXXo++++++++++++++++++++++OXXXXXXXXXXXo",
+"OX .o++++++++++++++++++++++OX .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX @ .o++++++++++++++++++++++OX @ .o",
+"OX @@@ .o++++++++++++++++++++++OX @ .o",
+"OX @@@@@ .o++++++++++++++++++++++OX @@@ .o",
+"OX @@@ .o++++++++++++++++++++++OX @@@ .o",
+"OX @ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX..........o++++++++++++++++++++++OX..........o",
+"Ooooooooooooo++++++++++++++++++++++Ooooooooooooo",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++ ++++++++++++++",
+"++++++++++++++ ..................X++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .XXXXXXXXXXXXXXXXXX++++++++++++++",
+"++++++++++++++ OOOOOOOOOOOOOOOOOOO++++++++++++++"};
+/* XPM */
+static char * cdpaused[] = {
+"48 48 7 1",
+" c #631863186318",
+". c #318C318C318C",
+"X c #9CE69CE69CE6",
+"o c #000000000000",
+"O c #CE72CE72CE72",
+"+ c none",
+"@ c #0000FFFF0000 s led_color_high",
+" ",
+" ..............................................X",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"OOOOOOOOOOOOO++++++++++++++++++++++OOOOOOOOOOOOO",
+"OXXXXXXXXXXXo++++++++++++++++++++++OXXXXXXXXXXXo",
+"OX .o++++++++++++++++++++++OX .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX @ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @@@ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @@@@@ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @@@ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX..........o++++++++++++++++++++++OX..........o",
+"Ooooooooooooo++++++++++++++++++++++Ooooooooooooo",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++ ++++++++++++++",
+"OOOOOOOOOOOOO+ ..................X+OOOOOOOOOOOOO",
+"OXXXXXXXXXXXo+ .ooooooooooooooooXX+OXXXXXXXXXXXo",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX @ @ .o+ .ooooooooooooooooXX+OX @ @ .o",
+"OX @ @@@ .o+ .ooooooooooooooooXX+OX @@@ @ .o",
+"OX @@@@@ .o+ .ooooooooooooooooXX+OX @@@@@ .o",
+"OX @ @@@ .o+ .ooooooooooooooooXX+OX @@@ @ .o",
+"OX @ @ .o+ .ooooooooooooooooXX+OX @ @ .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX..........o+ .ooooooooooooooooXX+OX..........o",
+"Ooooooooooooo+ .XXXXXXXXXXXXXXXXXX+Ooooooooooooo",
+"++++++++++++++ OOOOOOOOOOOOOOOOOOO++++++++++++++"};
+/* XPM */
+static char * cdplaying[] = {
+"48 48 7 1",
+" c #631863186318",
+". c #318C318C318C",
+"X c #9CE69CE69CE6",
+"o c #000000000000",
+"O c #CE72CE72CE72",
+"+ c none",
+"@ c #0000FFFF0000 s led_color_high",
+" ",
+" ..............................................X",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"OOOOOOOOOOOOO++++++++++++++++++++++OOOOOOOOOOOOO",
+"OXXXXXXXXXXXo++++++++++++++++++++++OXXXXXXXXXXXo",
+"OX .o++++++++++++++++++++++OX .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX @@ @@ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @@ @@ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @@ @@ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @@ @@ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @@ @@ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX..........o++++++++++++++++++++++OX..........o",
+"Ooooooooooooo++++++++++++++++++++++Ooooooooooooo",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++ ++++++++++++++",
+"OOOOOOOOOOOOO+ ..................X+OOOOOOOOOOOOO",
+"OXXXXXXXXXXXo+ .ooooooooooooooooXX+OXXXXXXXXXXXo",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX @ @ .o+ .ooooooooooooooooXX+OX @ @ .o",
+"OX @ @@@ .o+ .ooooooooooooooooXX+OX @@@ @ .o",
+"OX @@@@@ .o+ .ooooooooooooooooXX+OX @@@@@ .o",
+"OX @ @@@ .o+ .ooooooooooooooooXX+OX @@@ @ .o",
+"OX @ @ .o+ .ooooooooooooooooXX+OX @ @ .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX..........o+ .ooooooooooooooooXX+OX..........o",
+"Ooooooooooooo+ .XXXXXXXXXXXXXXXXXX+Ooooooooooooo",
+"++++++++++++++ OOOOOOOOOOOOOOOOOOO++++++++++++++"};
+/* XPM */
+static char * cdstopped[] = {
+"48 48 7 1",
+" c #631863186318",
+". c #318C318C318C",
+"X c #9CE69CE69CE6",
+"o c #000000000000",
+"O c #CE72CE72CE72",
+"+ c none",
+"@ c #0000FFFF0000 s led_color_high",
+" ",
+" ..............................................X",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"OOOOOOOOOOOOO++++++++++++++++++++++OOOOOOOOOOOOO",
+"OXXXXXXXXXXXo++++++++++++++++++++++OXXXXXXXXXXXo",
+"OX .o++++++++++++++++++++++OX .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX @ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @@@ .o++++++++++++++++++++++OX @@@ .o",
+"OX @@@@@ .o++++++++++++++++++++++OX @@@ .o",
+"OX @@@ .o++++++++++++++++++++++OX @ .o",
+"OX @ .o++++++++++++++++++++++OX @ .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX..........o++++++++++++++++++++++OX..........o",
+"Ooooooooooooo++++++++++++++++++++++Ooooooooooooo",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++ ++++++++++++++",
+"OOOOOOOOOOOOO+ ..................X+OOOOOOOOOOOOO",
+"OXXXXXXXXXXXo+ .ooooooooooooooooXX+OXXXXXXXXXXXo",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX @ @ .o+ .ooooooooooooooooXX+OX @ @ .o",
+"OX @ @@@ .o+ .ooooooooooooooooXX+OX @@@ @ .o",
+"OX @@@@@ .o+ .ooooooooooooooooXX+OX @@@@@ .o",
+"OX @ @@@ .o+ .ooooooooooooooooXX+OX @@@ @ .o",
+"OX @ @ .o+ .ooooooooooooooooXX+OX @ @ .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX..........o+ .ooooooooooooooooXX+OX..........o",
+"Ooooooooooooo+ .XXXXXXXXXXXXXXXXXX+Ooooooooooooo",
+"++++++++++++++ OOOOOOOOOOOOOOOOOOO++++++++++++++"};
+/* XPM */
+static char * cdled[] = {
+"110 11 4 1",
+" c #000000000000 s led_color_back",
+". c #0000FFFF0000 s led_color_high",
+"X c #00009CE60000 s led_color_med",
+"o c #000063180000 s led_color_low",
+" ..... X X X ..... ..... X o X ..... ..... ..... ..... ..... X X X ... XoX .. Xo ",
+". oXo . o . X oXo . X oXo . . . . oXo X . oXo X o XoX . . oXo . . oXo . o X . X . . o o ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. X. oX . o .. Xo ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. .X Xo . X . . o o ",
+". . X . X XoX . o XoX . . oXo . . oXo X . oXo X o . . oXo . . oXo . X o . . X X ",
+" X o X o X o ..... ..... ..... ..... ..... X X X ..... ..... o X X ... oXo ",
+". . X . . oXo X X oXo . X oXo . o XoX . . oXo . X . . oXo . o XoX . X o . X ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. X. oX .. Xo ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. .X Xo . . o X ",
+". oXo . X . . oXo X o XoX . X . o XoX . . oXo . X . . oXo . o XoX . X X . o ",
+" ..... o X o ..... ..... o X o ..... ..... X X X ..... ..... X X o . X "};
diff --git a/XPM/grey/cdnodisc.xpm b/XPM/grey/cdnodisc.xpm
new file mode 100644
index 0000000..a4f1099
--- /dev/null
+++ b/XPM/grey/cdnodisc.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char * cdnodisc[] = {
+"48 48 7 1",
+" c #631863186318",
+". c #318C318C318C",
+"X c #9CE69CE69CE6",
+"o c #000000000000",
+"O c #CE72CE72CE72",
+"+ c none",
+"@ c #0000FFFF0000 s led_color_high",
+" ",
+" ..............................................X",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"OOOOOOOOOOOOO++++++++++++++++++++++OOOOOOOOOOOOO",
+"OXXXXXXXXXXXo++++++++++++++++++++++OXXXXXXXXXXXo",
+"OX .o++++++++++++++++++++++OX .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX @ .o++++++++++++++++++++++OX @ .o",
+"OX @@@ .o++++++++++++++++++++++OX @ .o",
+"OX @@@@@ .o++++++++++++++++++++++OX @@@ .o",
+"OX @@@ .o++++++++++++++++++++++OX @@@ .o",
+"OX @ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX..........o++++++++++++++++++++++OX..........o",
+"Ooooooooooooo++++++++++++++++++++++Ooooooooooooo",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++ ++++++++++++++",
+"++++++++++++++ ..................X++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
+"++++++++++++++ .XXXXXXXXXXXXXXXXXX++++++++++++++",
+"++++++++++++++ OOOOOOOOOOOOOOOOOOO++++++++++++++"};
diff --git a/XPM/grey/cdpaused.xpm b/XPM/grey/cdpaused.xpm
new file mode 100644
index 0000000..2f6c1db
--- /dev/null
+++ b/XPM/grey/cdpaused.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char * cdpaused[] = {
+"48 48 7 1",
+" c #631863186318",
+". c #318C318C318C",
+"X c #9CE69CE69CE6",
+"o c #000000000000",
+"O c #CE72CE72CE72",
+"+ c none",
+"@ c #0000FFFF0000 s led_color_high",
+" ",
+" ..............................................X",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"OOOOOOOOOOOOO++++++++++++++++++++++OOOOOOOOOOOOO",
+"OXXXXXXXXXXXo++++++++++++++++++++++OXXXXXXXXXXXo",
+"OX .o++++++++++++++++++++++OX .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX @ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @@@ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @@@@@ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @@@ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX..........o++++++++++++++++++++++OX..........o",
+"Ooooooooooooo++++++++++++++++++++++Ooooooooooooo",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++ ++++++++++++++",
+"OOOOOOOOOOOOO+ ..................X+OOOOOOOOOOOOO",
+"OXXXXXXXXXXXo+ .ooooooooooooooooXX+OXXXXXXXXXXXo",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX @ @ .o+ .ooooooooooooooooXX+OX @ @ .o",
+"OX @ @@@ .o+ .ooooooooooooooooXX+OX @@@ @ .o",
+"OX @@@@@ .o+ .ooooooooooooooooXX+OX @@@@@ .o",
+"OX @ @@@ .o+ .ooooooooooooooooXX+OX @@@ @ .o",
+"OX @ @ .o+ .ooooooooooooooooXX+OX @ @ .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX..........o+ .ooooooooooooooooXX+OX..........o",
+"Ooooooooooooo+ .XXXXXXXXXXXXXXXXXX+Ooooooooooooo",
+"++++++++++++++ OOOOOOOOOOOOOOOOOOO++++++++++++++"};
diff --git a/XPM/grey/cdplaying.xpm b/XPM/grey/cdplaying.xpm
new file mode 100644
index 0000000..376b9a4
--- /dev/null
+++ b/XPM/grey/cdplaying.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char * cdplaying[] = {
+"48 48 7 1",
+" c #631863186318",
+". c #318C318C318C",
+"X c #9CE69CE69CE6",
+"o c #000000000000",
+"O c #CE72CE72CE72",
+"+ c none",
+"@ c #0000FFFF0000 s led_color_high",
+" ",
+" ..............................................X",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"OOOOOOOOOOOOO++++++++++++++++++++++OOOOOOOOOOOOO",
+"OXXXXXXXXXXXo++++++++++++++++++++++OXXXXXXXXXXXo",
+"OX .o++++++++++++++++++++++OX .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX @@ @@ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @@ @@ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @@ @@ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @@ @@ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @@ @@ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX..........o++++++++++++++++++++++OX..........o",
+"Ooooooooooooo++++++++++++++++++++++Ooooooooooooo",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++ ++++++++++++++",
+"OOOOOOOOOOOOO+ ..................X+OOOOOOOOOOOOO",
+"OXXXXXXXXXXXo+ .ooooooooooooooooXX+OXXXXXXXXXXXo",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX @ @ .o+ .ooooooooooooooooXX+OX @ @ .o",
+"OX @ @@@ .o+ .ooooooooooooooooXX+OX @@@ @ .o",
+"OX @@@@@ .o+ .ooooooooooooooooXX+OX @@@@@ .o",
+"OX @ @@@ .o+ .ooooooooooooooooXX+OX @@@ @ .o",
+"OX @ @ .o+ .ooooooooooooooooXX+OX @ @ .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX..........o+ .ooooooooooooooooXX+OX..........o",
+"Ooooooooooooo+ .XXXXXXXXXXXXXXXXXX+Ooooooooooooo",
+"++++++++++++++ OOOOOOOOOOOOOOOOOOO++++++++++++++"};
diff --git a/XPM/grey/cdstopped.xpm b/XPM/grey/cdstopped.xpm
new file mode 100644
index 0000000..40cceee
--- /dev/null
+++ b/XPM/grey/cdstopped.xpm
@@ -0,0 +1,58 @@
+/* XPM */
+static char * cdstopped[] = {
+"48 48 7 1",
+" c #631863186318",
+". c #318C318C318C",
+"X c #9CE69CE69CE6",
+"o c #000000000000",
+"O c #CE72CE72CE72",
+"+ c none",
+"@ c #0000FFFF0000 s led_color_high",
+" ",
+" ..............................................X",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .ooooooooooooooooooooooooooooooooooooooooooooXX",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+" OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"OOOOOOOOOOOOO++++++++++++++++++++++OOOOOOOOOOOOO",
+"OXXXXXXXXXXXo++++++++++++++++++++++OXXXXXXXXXXXo",
+"OX .o++++++++++++++++++++++OX .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX @ .o++++++++++++++++++++++OX @@@@@ .o",
+"OX @@@ .o++++++++++++++++++++++OX @@@ .o",
+"OX @@@@@ .o++++++++++++++++++++++OX @@@ .o",
+"OX @@@ .o++++++++++++++++++++++OX @ .o",
+"OX @ .o++++++++++++++++++++++OX @ .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX .o++++++++++++++++++++++OX .o",
+"OX..........o++++++++++++++++++++++OX..........o",
+"Ooooooooooooo++++++++++++++++++++++Ooooooooooooo",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++ ++++++++++++++",
+"OOOOOOOOOOOOO+ ..................X+OOOOOOOOOOOOO",
+"OXXXXXXXXXXXo+ .ooooooooooooooooXX+OXXXXXXXXXXXo",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX @ @ .o+ .ooooooooooooooooXX+OX @ @ .o",
+"OX @ @@@ .o+ .ooooooooooooooooXX+OX @@@ @ .o",
+"OX @@@@@ .o+ .ooooooooooooooooXX+OX @@@@@ .o",
+"OX @ @@@ .o+ .ooooooooooooooooXX+OX @@@ @ .o",
+"OX @ @ .o+ .ooooooooooooooooXX+OX @ @ .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX .o+ .ooooooooooooooooXX+OX .o",
+"OX..........o+ .ooooooooooooooooXX+OX..........o",
+"Ooooooooooooo+ .XXXXXXXXXXXXXXXXXX+Ooooooooooooo",
+"++++++++++++++ OOOOOOOOOOOOOOOOOOO++++++++++++++"};
diff --git a/XPM/grey/led.xpm b/XPM/grey/led.xpm
new file mode 100644
index 0000000..1759f9e
--- /dev/null
+++ b/XPM/grey/led.xpm
@@ -0,0 +1,18 @@
+/* XPM */
+static char * cdled[] = {
+"110 11 4 1",
+" c #000000000000 s led_color_back",
+". c #0000FFFF0000 s led_color_high",
+"X c #00009CE60000 s led_color_med",
+"o c #000063180000 s led_color_low",
+" ..... X X X ..... ..... X o X ..... ..... ..... ..... ..... X X X ... XoX .. Xo ",
+". oXo . o . X oXo . X oXo . . . . oXo X . oXo X o XoX . . oXo . . oXo . o X . X . . o o ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. X. oX . o .. Xo ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. .X Xo . X . . o o ",
+". . X . X XoX . o XoX . . oXo . . oXo X . oXo X o . . oXo . . oXo . X o . . X X ",
+" X o X o X o ..... ..... ..... ..... ..... X X X ..... ..... o X X ... oXo ",
+". . X . . oXo X X oXo . X oXo . o XoX . . oXo . X . . oXo . o XoX . X o . X ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. X. oX .. Xo ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. .X Xo . . o X ",
+". oXo . X . . oXo X o XoX . X . o XoX . . oXo . X . . oXo . o XoX . X X . o ",
+" ..... o X o ..... ..... o X o ..... ..... X X X ..... ..... X X o . X "};
diff --git a/XPM/led.xpm b/XPM/led.xpm
new file mode 100644
index 0000000..1759f9e
--- /dev/null
+++ b/XPM/led.xpm
@@ -0,0 +1,18 @@
+/* XPM */
+static char * cdled[] = {
+"110 11 4 1",
+" c #000000000000 s led_color_back",
+". c #0000FFFF0000 s led_color_high",
+"X c #00009CE60000 s led_color_med",
+"o c #000063180000 s led_color_low",
+" ..... X X X ..... ..... X o X ..... ..... ..... ..... ..... X X X ... XoX .. Xo ",
+". oXo . o . X oXo . X oXo . . . . oXo X . oXo X o XoX . . oXo . . oXo . o X . X . . o o ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. X. oX . o .. Xo ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. .X Xo . X . . o o ",
+". . X . X XoX . o XoX . . oXo . . oXo X . oXo X o . . oXo . . oXo . X o . . X X ",
+" X o X o X o ..... ..... ..... ..... ..... X X X ..... ..... o X X ... oXo ",
+". . X . . oXo X X oXo . X oXo . o XoX . . oXo . X . . oXo . o XoX . X o . X ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. X. oX .. Xo ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. .X Xo . . o X ",
+". oXo . X . . oXo X o XoX . X . o XoX . . oXo . X . . oXo . o XoX . X X . o ",
+" ..... o X o ..... ..... o X o ..... ..... X X X ..... ..... X X o . X "};
diff --git a/XPM/orange.style b/XPM/orange.style
new file mode 100644
index 0000000..d3cbf0a
--- /dev/null
+++ b/XPM/orange.style
@@ -0,0 +1,327 @@
+/*
+ * This is a WMRack style
+ *
+ * Copyright 1997 by Heiko Wagner <hwagner at fga.de>
+ */
+/* XPM */
+static char *cdnodisc[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 22 1",
+" c Black",
+". c Blue",
+"X c #000aff",
+"o c #0013ff",
+"O c #001dff",
+"+ c #0026ff",
+"@ c #0030ff",
+"# c #0039ff",
+"$ c #0043ff",
+"% c #004dff",
+"& c #0056ff",
+"* c #0060ff",
+"= c #0069ff",
+"- c #0073ff",
+"; c #007cff",
+": c #0086ff",
+"> c #008fff",
+", c #0099ff",
+"< c Red",
+"1 c #fe8000",
+"2 c #fee000",
+"3 c None",
+/* pixels */
+"122222222222222222222222222222222222222222222222",
+"212222222222222222222222222222222222222222222221",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"211111111111111111111111111111111111111111111121",
+"111111111111111111111111111111111111111111111112",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"122222222222233333333333333333333331222222222222",
+"212222222222133333333333333333333332122222222221",
+"22,>:;-=*&%11333333333333333333333322,,>:;-*&%11",
+"22>1111*&%$11333333333333333333333322,>:;1*&&$11",
+"22:1,,;1%$#11333333333333333333333322>:;1;1%$#11",
+"22;1,;=%1@@11333333333333333333333322:;1;=%1#+11",
+"22-1;=%#O1+11333333333333333333333322;1;=%#O1O11",
+"22=1=%#O1+O11333333333333333333333322-1=%#OX1o11",
+"22*1&#O1+Oo11333333333333333333333322*1&#OX.1X11",
+"22&1111+OoX11333333333333333333333322&1111111.11",
+"22%$#@+OoX.11333333333333333333333322%$#+OoX..11",
+"211111111112133333333333333333333332111111111121",
+"111111111111233333333333333333333331111111111112",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"333333333333331222222222222222222233333333333333",
+"333333333333332122222222222222222133333333333333",
+"3333333333333322 1133333333333333",
+"3333333333333322 1133333333333333",
+"3333333333333322 1133333333333333",
+"3333333333333322 1133333333333333",
+"3333333333333322 1133333333333333",
+"3333333333333322 1133333333333333",
+"3333333333333322 1133333333333333",
+"3333333333333322 1133333333333333",
+"3333333333333322 1133333333333333",
+"3333333333333322 1133333333333333",
+"3333333333333322 1133333333333333",
+"333333333333332111111111111111112133333333333333",
+"333333333333331111111111111111111233333333333333"
+};
+/* XPM */
+static char *cdpaused[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 22 1",
+" c Black",
+". c Blue",
+"X c #000aff",
+"o c #0013ff",
+"O c #001dff",
+"+ c #0026ff",
+"@ c #0030ff",
+"# c #0039ff",
+"$ c #0043ff",
+"% c #004dff",
+"& c #0056ff",
+"* c #0060ff",
+"= c #0069ff",
+"- c #0073ff",
+"; c #007cff",
+": c #0086ff",
+"> c #008fff",
+", c #0099ff",
+"< c Red",
+"1 c #fe8000",
+"2 c #fee000",
+"3 c None",
+/* pixels */
+"122222222222222222222222222222222222222222222222",
+"212222222222222222222222222222222222222222222221",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"211111111111111111111111111111111111111111111121",
+"111111111111111111111111111111111111111111111112",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"122222222222233333333333333333333331222222222222",
+"212222222222133333333333333333333332122222222221",
+"22,>:;-=*&%11333333333333333333333322,,>:;-*&%11",
+"22>1111*&%$11333333333333333333333322,1111111$11",
+"22:1,,;1%$#11333333333333333333333322>1;-*&%1#11",
+"22;1,;=%1@@11333333333333333333333322:1-*&%$1+11",
+"22-1;=%#O1+11333333333333333333333322;1*&%$#1O11",
+"22=1=%#O1+O11333333333333333333333322-1&%$#+1o11",
+"22*1&#O1+Oo11333333333333333333333322*1%$#+O1X11",
+"22&1111+OoX11333333333333333333333322&1111111.11",
+"22%$#@+OoX.11333333333333333333333322%$#+OoX..11",
+"211111111112133333333333333333333332111111111121",
+"111111111111233333333333333333333331111111111112",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"333333333333331222222222222222222233333333333333",
+"122222222222232122222222222222222131222222222222",
+"2122222222221322 1132122222222221",
+"22,,>:;-*&%11322 11322,,>:;-*&%11",
+"22,1:;-111$11322 11322,111-*&1$11",
+"22>1;-1&%1#11322 11322>1;-1&%1#11",
+"22:1-1&%$1+11322 11322:1-*&1$1+11",
+"22;11&%$#1O11322 11322;1*&%$11O11",
+"22-1&1$#+1o11322 11322-1&%$1+1o11",
+"22*1%$1+O1X11322 11322*1%$1+O1X11",
+"22&1$#+111.11322 11322&111+Oo1.11",
+"22%$#+OoX..11322 11322%$#+OoX..11",
+"2111111111121322 1132111111111121",
+"111111111111232111111111111111112131111111111112",
+"333333333333331111111111111111111233333333333333"
+};
+/* XPM */
+static char *cdplaying[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 22 1",
+" c Black",
+". c Blue",
+"X c #000aff",
+"o c #0013ff",
+"O c #001dff",
+"+ c #0026ff",
+"@ c #0030ff",
+"# c #0039ff",
+"$ c #0043ff",
+"% c #004dff",
+"& c #0056ff",
+"* c #0060ff",
+"= c #0069ff",
+"- c #0073ff",
+"; c #007cff",
+": c #0086ff",
+"> c #008fff",
+", c #0099ff",
+"< c Red",
+"1 c #fe8000",
+"2 c #fee000",
+"3 c None",
+/* pixels */
+"122222222222222222222222222222222222222222222222",
+"212222222222222222222222222222222222222222222221",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"211111111111111111111111111111111111111111111121",
+"111111111111111111111111111111111111111111111112",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"122222222222233333333333333333333331222222222222",
+"212222222222133333333333333333333332122222222221",
+"22,,>:;-*&%11333333333333333333333322,>:;-=*&%11",
+"22,111-111$11333333333333333333333322>1111111$11",
+"22>1;1*1%1#11333333333333333333333322:1-=*&%1#11",
+"22:1-1&1$1+11333333333333333333333322;1=*&%$1 at 11",
+"22;1*1%1#1O11333333333333333333333322-1*&%$#1+11",
+"22-1&1$1+1o11333333333333333333333322=1&%$#@1O11",
+"22*1%1#1O1X11333333333333333333333322*1%$#@+1o11",
+"22&111+111.11333333333333333333333322&1111111X11",
+"22%$#+OoX..11333333333333333333333322%$#@+OoX.11",
+"211111111112133333333333333333333332111111111121",
+"111111111111233333333333333333333331111111111112",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"333333333333331222222222222222222233333333333333",
+"122222222222232122222222222222222131222222222222",
+"2122222222221322 1132122222222221",
+"22,,>:;-*&%11322 11322,,>:;-*&%11",
+"22,1:;-111$11322 11322,111-*&1$11",
+"22>1;-1&%1#11322 11322>1;-1&%1#11",
+"22:1-1&%$1+11322 11322:1-*&1$1+11",
+"22;11&%$#1O11322 11322;1*&%$11O11",
+"22-1&1$#+1o11322 11322-1&%$1+1o11",
+"22*1%$1+O1X11322 11322*1%$1+O1X11",
+"22&1$#+111.11322 11322&111+Oo1.11",
+"22%$#+OoX..11322 11322%$#+OoX..11",
+"2111111111121322 1132111111111121",
+"111111111111232111111111111111112131111111111112",
+"333333333333331111111111111111111233333333333333"
+};
+/* XPM */
+static char *cdstopped[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 22 1",
+" c Black",
+". c Blue",
+"X c #000aff",
+"o c #0013ff",
+"O c #001dff",
+"+ c #0026ff",
+"@ c #0030ff",
+"# c #0039ff",
+"$ c #0043ff",
+"% c #004dff",
+"& c #0056ff",
+"* c #0060ff",
+"= c #0069ff",
+"- c #0073ff",
+"; c #007cff",
+": c #0086ff",
+"> c #008fff",
+", c #0099ff",
+"< c Red",
+"1 c #fe8000",
+"2 c #fee000",
+"3 c None",
+/* pixels */
+"122222222222222222222222222222222222222222222222",
+"212222222222222222222222222222222222222222222221",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"22 11",
+"211111111111111111111111111111111111111111111121",
+"111111111111111111111111111111111111111111111112",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"122222222222233333333333333333333331222222222222",
+"212222222222133333333333333333333332122222222221",
+"22,>:;-=*&%11333333333333333333333322,>:;-=*&%11",
+"22>1111*&%$11333333333333333333333322>1111111$11",
+"22:1,,;1%$#11333333333333333333333322:1,,;=%1#11",
+"22;1,;=%1@@11333333333333333333333322;1,;=%#1 at 11",
+"22-1;=%#O1+11333333333333333333333322-1;=%#O1+11",
+"22=1=%#O1+O11333333333333333333333322=*1%#O1+O11",
+"22*1&#O1+Oo11333333333333333333333322*&%1O1+Oo11",
+"22&1111+OoX11333333333333333333333322&%$#1+OoX11",
+"22%$#@+OoX.11333333333333333333333322%$#@+OoX.11",
+"211111111112133333333333333333333332111111111121",
+"111111111111233333333333333333333331111111111112",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"333333333333333333333333333333333333333333333333",
+"333333333333331222222222222222222233333333333333",
+"122222222222232122222222222222222131222222222222",
+"2122222222221322 1132122222222221",
+"22,,>:;-*&%11322 11322,,>:;-*&%11",
+"22,1:;-111$11322 11322,111-*&1$11",
+"22>1;-1&%1#11322 11322>1;-1&%1#11",
+"22:1-1&%$1+11322 11322:1-*&1$1+11",
+"22;11&%$#1O11322 11322;1*&%$11O11",
+"22-1&1$#+1o11322 11322-1&%$1+1o11",
+"22*1%$1+O1X11322 11322*1%$1+O1X11",
+"22&1$#+111.11322 11322&111+Oo1.11",
+"22%$#+OoX..11322 11322%$#+OoX..11",
+"2111111111121322 1132111111111121",
+"111111111111232111111111111111112131111111111112",
+"333333333333331111111111111111111233333333333333"
+};
+/* XPM */
+static char * cdled[] = {
+"110 11 4 1",
+" c #000000000000 s led_color_back",
+". c #0000FFFF0000 s led_color_high",
+"X c #00009CE60000 s led_color_med",
+"o c #000063180000 s led_color_low",
+" ..... X X X ..... ..... X o X ..... ..... ..... ..... ..... X X X ... XoX .. Xo ",
+". oXo . o . X oXo . X oXo . . . . oXo X . oXo X o XoX . . oXo . . oXo . o X . X . . o o ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. X. oX . o .. Xo ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. .X Xo . X . . o o ",
+". . X . X XoX . o XoX . . oXo . . oXo X . oXo X o . . oXo . . oXo . X o . . X X ",
+" X o X o X o ..... ..... ..... ..... ..... X X X ..... ..... o X X ... oXo ",
+". . X . . oXo X X oXo . X oXo . o XoX . . oXo . X . . oXo . o XoX . X o . X ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. X. oX .. Xo ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. .X Xo . . o X ",
+". oXo . X . . oXo X o XoX . X . o XoX . . oXo . X . . oXo . o XoX . X X . o ",
+" ..... o X o ..... ..... o X o ..... ..... X X X ..... ..... X X o . X "};
diff --git a/XPM/smiley.style b/XPM/smiley.style
new file mode 100644
index 0000000..afd7d6e
--- /dev/null
+++ b/XPM/smiley.style
@@ -0,0 +1,523 @@
+/*
+ * This is a WMRack style
+ *
+ * Copyright 1997 by Heiko Wagner <hwagner at fga.de>
+ */
+/* XPM */
+static char *cdnodisc[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 71 1",
+" c Black",
+". c Cyan",
+"X c #ff7d00",
+"o c #fe7e00",
+"O c #ff8000",
+"+ c #ff8100",
+"@ c #ff8300",
+"# c #ff8400",
+"$ c #ff8600",
+"% c #ff8800",
+"& c #ff8900",
+"* c #ff8b00",
+"= c DarkOrange",
+"- c #ff8e00",
+"; c #ff8f00",
+": c #ff9100",
+"> c #ff9200",
+", c #ff9400",
+"< c #ff9500",
+"1 c #fe9700",
+"2 c #ff9900",
+"3 c #ff9a00",
+"4 c #ff9c00",
+"5 c #ff9d00",
+"6 c #ff9f00",
+"7 c #ffa000",
+"8 c #ffa200",
+"9 c #ffa300",
+"0 c #ffa500",
+"q c #ffa600",
+"w c #ffa800",
+"e c #ffaa00",
+"r c #ffab00",
+"t c #ffad00",
+"y c #ffae00",
+"u c #ffb000",
+"i c #ffb100",
+"p c #ffb300",
+"a c #ffb400",
+"s c #ffb600",
+"d c #ffb700",
+"f c #ffb900",
+"g c #ffbb00",
+"h c #ffbc00",
+"j c #ffbe00",
+"k c #ffbf00",
+"l c #ffc100",
+"z c #ffc200",
+"x c #ffc400",
+"c c #ffc500",
+"v c #fec700",
+"b c #ffc800",
+"n c #ffca00",
+"m c #ffcc00",
+"M c #ffcd00",
+"N c #ffcf00",
+"B c #ffd000",
+"V c #ffd200",
+"C c #ffd300",
+"Z c #ffd500",
+"A c #ffd600",
+"S c #ffd800",
+"D c #ffd900",
+"F c #ffdb00",
+"G c #ffdd00",
+"H c #ffde00",
+"J c #ffe000",
+"K c #ffe100",
+"L c #ffe300",
+"P c #ffe400",
+"I c None",
+/* pixels */
+"IIIIIIIIIIIIIIIDSZCVBMmnvcxzkjhgdIIIIIIIIIIIIIII",
+"IIIIIIIIIKJHGDSAZVBNmnbvxzljhgfsapuytrwIIIIIIIII",
+"II II",
+"II II",
+"II II",
+"IP *I",
+"LK %$",
+"JG #+",
+"FD +o",
+"IA XI",
+"II II",
+"II II",
+"II II",
+"IIIIIIIIIfdapiytreq09765421<>:;-*&%$@+OIIIIIIIII",
+"IIIIIIIIIIIIIIIew09875431<,>;-=&%IIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIJGSZBIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJGSZBIIII",
+"IIIGDZVMncIIIIIIIIIIIIIIIIIIIIIIIIIIIIGDZVMncIII",
+"IIFACNmvxkhIIIIIIIIIIIIIIIIIIIIIIIIIIFAC xkhII",
+"ISC bx faiIIIIIIIIIIIIIIIIIIIIIIIISCB faiI",
+"ZBM lj yeqIIIIIIIIIIIIIIIIIIIIIIZBM j yeq",
+"Nnvzkgdp 97IIIIIIIIIIIIIIIIIIIIIINnv gdp w97",
+"vxkhdautw 52IIIIIIIIIIIIIIIIIIIIIIvxkhdautw0752",
+"lhfaite0 <>IIIIIIIIIIIIIIIIIIIIIIlhfaite0853<>",
+"gsp q9 ,;=IIIIIIIIIIIIIIIIIIIIIIgsp q96 ,;=",
+"Iur 74 :=&IIIIIIIIIIIIIIIIIIIIIIIIur 742 =&I",
+"II0752<:-&$IIIIIIIIIIIIIIIIIIIIIIIIII0752<:-&$II",
+"III31>;*%@IIIIIIIIIIIIIIIIIIIIIIIIIIII31>;*%@III",
+"IIII;=%#OIIIIIIIIIIIIIIIIIIIIIIIIIIIIII;=%#OIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIJGDACBMnIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIKHFSZVNmbczkIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIII IIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIII IIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIID 0IIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIISZ 75IIIIIIIIIIIIII",
+"IIIIIIIIIIIIIICB 42IIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIMn <>IIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIbc :-IIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIzk *%IIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIg $IIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIII IIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIII IIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIII7531,:-*%#+oIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIII<>;=&$@OIIIIIIIIIIIIIIIIIIII"
+};
+/* XPM */
+static char *cdpaused[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 71 1",
+" c Black",
+". c Cyan",
+"X c #ff7d00",
+"o c #fe7e00",
+"O c #ff8000",
+"+ c #ff8100",
+"@ c #ff8300",
+"# c #ff8400",
+"$ c #ff8600",
+"% c #ff8800",
+"& c #ff8900",
+"* c #ff8b00",
+"= c DarkOrange",
+"- c #ff8e00",
+"; c #ff8f00",
+": c #ff9100",
+"> c #ff9200",
+", c #ff9400",
+"< c #ff9500",
+"1 c #fe9700",
+"2 c #ff9900",
+"3 c #ff9a00",
+"4 c #ff9c00",
+"5 c #ff9d00",
+"6 c #ff9f00",
+"7 c #ffa000",
+"8 c #ffa200",
+"9 c #ffa300",
+"0 c #ffa500",
+"q c #ffa600",
+"w c #ffa800",
+"e c #ffaa00",
+"r c #ffab00",
+"t c #ffad00",
+"y c #ffae00",
+"u c #ffb000",
+"i c #ffb100",
+"p c #ffb300",
+"a c #ffb400",
+"s c #ffb600",
+"d c #ffb700",
+"f c #ffb900",
+"g c #ffbb00",
+"h c #ffbc00",
+"j c #ffbe00",
+"k c #ffbf00",
+"l c #ffc100",
+"z c #ffc200",
+"x c #ffc400",
+"c c #ffc500",
+"v c #fec700",
+"b c #ffc800",
+"n c #ffca00",
+"m c #ffcc00",
+"M c #ffcd00",
+"N c #ffcf00",
+"B c #ffd000",
+"V c #ffd200",
+"C c #ffd300",
+"Z c #ffd500",
+"A c #ffd600",
+"S c #ffd800",
+"D c #ffd900",
+"F c #ffdb00",
+"G c #ffdd00",
+"H c #ffde00",
+"J c #ffe000",
+"K c #ffe100",
+"L c #ffe300",
+"P c #ffe400",
+"I c None",
+/* pixels */
+"IIIIIIIIIIIIIIIDSZCVBMmnvcxzkjhgdIIIIIIIIIIIIIII",
+"IIIIIIIIIKJHGDSAZVBNmnbvxzljhgfsapuytrwIIIIIIIII",
+"II II",
+"II II",
+"II II",
+"IP *I",
+"LK %$",
+"JG #+",
+"FD +o",
+"IA XI",
+"II II",
+"II II",
+"II II",
+"IIIIIIIIIfdapiytreq09765421<>:;-*&%$@+OIIIIIIIII",
+"IIIIIIIIIIIIIIIew09875431<,>;-=&%IIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIJGSZBIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJGSZBIIII",
+"IIIGDZVMncIIIIIIIIIIIIIIIIIIIIIIIIIIIIGDZVMncIII",
+"IIFACNmvxkhIIIIIIIIIIIIIIIIIIIIIIIIIIFACNmvxkhII",
+"ISC bx faiIIIIIIIIIIIIIIIIIIIIIIIISC bxl aiI",
+"ZBM lj yeqIIIIIIIIIIIIIIIIIIIIIIZBM ljf yeq",
+"Nnvzkgdp 97IIIIIIIIIIIIIIIIIIIIIINnvzkgdpurw97",
+"vxkhdautw 52IIIIIIIIIIIIIIIIIIIIIIvxk 752",
+"lhfaite0 <>IIIIIIIIIIIIIIIIIIIIIIlhf ite08 3<>",
+"gsp q9 ,;=IIIIIIIIIIIIIIIIIIIIIIgsp rq964 ,;=",
+"Iur 74 :=&IIIIIIIIIIIIIIIIIIIIIIIIur =&I",
+"II0752<:-&$IIIIIIIIIIIIIIIIIIIIIIIIII0752<:-&$II",
+"III31>;*%@IIIIIIIIIIIIIIIIIIIIIIIIIIII31>;*%@III",
+"IIII;=%#OIIIIIIIIIIIIIIIIIIIIIIIIIIIIII;=%#OIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIJGDACBMnIIIIIIIIIIIIIIIIIIII",
+"IIIIJGSZBIIIIIIIIIKHFSZVNmbczkIIIIIIIIIJGSZBIIII",
+"IIIGDZVMncIIIIII IIIIIIGDZVMncIII",
+"IIFACNmvxkhIIIII IIIIIFACNmvxkhII",
+"ISC mb l aiIIID 0IIISC b lh aiI",
+"ZBM c f yeqISZ 75IZBM l s yeq",
+"Nnv purw97ICB 42INnvzkg w97",
+"vxk utw0752IMn <>Ivxkhdau 752",
+"lhf 0853<>Ibc :-Ilhfait 3<>",
+"gsp r 6 ,;=Izk *%Igsp q 4 ,;=",
+"Iur 97 2 =&IIIg $IIIur 7 2, =&I",
+"II0752<:-&$IIIII IIIII0752<:-&$II",
+"III31>;*%@IIIIII IIIIII31>;*%@III",
+"IIII;=%#OIIIIIIIII7531,:-*%#+oIIIIIIIII;=%#OIIII",
+"IIIIIIIIIIIIIIIIIIII<>;=&$@OIIIIIIIIIIIIIIIIIIII"
+};
+/* XPM */
+static char *cdplaying[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 71 1",
+" c Black",
+". c Cyan",
+"X c #ff7d00",
+"o c #fe7e00",
+"O c #ff8000",
+"+ c #ff8100",
+"@ c #ff8300",
+"# c #ff8400",
+"$ c #ff8600",
+"% c #ff8800",
+"& c #ff8900",
+"* c #ff8b00",
+"= c DarkOrange",
+"- c #ff8e00",
+"; c #ff8f00",
+": c #ff9100",
+"> c #ff9200",
+", c #ff9400",
+"< c #ff9500",
+"1 c #fe9700",
+"2 c #ff9900",
+"3 c #ff9a00",
+"4 c #ff9c00",
+"5 c #ff9d00",
+"6 c #ff9f00",
+"7 c #ffa000",
+"8 c #ffa200",
+"9 c #ffa300",
+"0 c #ffa500",
+"q c #ffa600",
+"w c #ffa800",
+"e c #ffaa00",
+"r c #ffab00",
+"t c #ffad00",
+"y c #ffae00",
+"u c #ffb000",
+"i c #ffb100",
+"p c #ffb300",
+"a c #ffb400",
+"s c #ffb600",
+"d c #ffb700",
+"f c #ffb900",
+"g c #ffbb00",
+"h c #ffbc00",
+"j c #ffbe00",
+"k c #ffbf00",
+"l c #ffc100",
+"z c #ffc200",
+"x c #ffc400",
+"c c #ffc500",
+"v c #fec700",
+"b c #ffc800",
+"n c #ffca00",
+"m c #ffcc00",
+"M c #ffcd00",
+"N c #ffcf00",
+"B c #ffd000",
+"V c #ffd200",
+"C c #ffd300",
+"Z c #ffd500",
+"A c #ffd600",
+"S c #ffd800",
+"D c #ffd900",
+"F c #ffdb00",
+"G c #ffdd00",
+"H c #ffde00",
+"J c #ffe000",
+"K c #ffe100",
+"L c #ffe300",
+"P c #ffe400",
+"I c None",
+/* pixels */
+"IIIIIIIIIIIIIIIDSZCVBMmnvcxzkjhgdIIIIIIIIIIIIIII",
+"IIIIIIIIIKJHGDSAZVBNmnbvxzljhgfsapuytrwIIIIIIIII",
+"II II",
+"II II",
+"II II",
+"IP *I",
+"LK %$",
+"JG #+",
+"FD +o",
+"IA XI",
+"II II",
+"II II",
+"II II",
+"IIIIIIIIIfdapiytreq09765421<>:;-*&%$@+OIIIIIIIII",
+"IIIIIIIIIIIIIIIew09875431<,>;-=&%IIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIJGSZBIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJGSZBIIII",
+"IIIGDZVMncIIIIIIIIIIIIIIIIIIIIIIIIIIIIGDZVMncIII",
+"IIFACNmvxkhIIIIIIIIIIIIIIIIIIIIIIIIIIFACNmvxkhII",
+"ISC bx h aiIIIIIIIIIIIIIIIIIIIIIIIISC bxl aiI",
+"ZBM lj s yeqIIIIIIIIIIIIIIIIIIIIIIZBM ljf yeq",
+"Nnvzkgd u w97IIIIIIIIIIIIIIIIIIIIIINnvzkgdpurw97",
+"vxkhdau w 752IIIIIIIIIIIIIIIIIIIIIIvxk 752",
+"lhfaite 8 3<>IIIIIIIIIIIIIIIIIIIIIIlhf ite08 3<>",
+"gsp q9 4 ,;=IIIIIIIIIIIIIIIIIIIIIIgsp rq964 ,;=",
+"Iur 74 , =&IIIIIIIIIIIIIIIIIIIIIIIIur =&I",
+"II0752<:-&$IIIIIIIIIIIIIIIIIIIIIIIIII0752<:-&$II",
+"III31>;*%@IIIIIIIIIIIIIIIIIIIIIIIIIIII31>;*%@III",
+"IIII;=%#OIIIIIIIIIIIIIIIIIIIIIIIIIIIIII;=%#OIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIJGDACBMnIIIIIIIIIIIIIIIIIIII",
+"IIIIJGSZBIIIIIIIIIKHFSZVNmbczkIIIIIIIIIJGSZBIIII",
+"IIIGDZVMncIIIIII IIIIIIGDZVMncIII",
+"IIFACNmvxkhIIIII IIIIIFACNmvxkhII",
+"ISC mb l aiIIID 0IIISC b lh aiI",
+"ZBM c f yeqISZ 75IZBM l s yeq",
+"Nnv purw97ICB 42INnvzkg w97",
+"vxk utw0752IMn <>Ivxkhdau 752",
+"lhf 0853<>Ibc :-Ilhfait 3<>",
+"gsp r 6 ,;=Izk *%Igsp q 4 ,;=",
+"Iur 97 2 =&IIIg $IIIur 7 2, =&I",
+"II0752<:-&$IIIII IIIII0752<:-&$II",
+"III31>;*%@IIIIII IIIIII31>;*%@III",
+"IIII;=%#OIIIIIIIII7531,:-*%#+oIIIIIIIII;=%#OIIII",
+"IIIIIIIIIIIIIIIIIIII<>;=&$@OIIIIIIIIIIIIIIIIIIII"
+};
+/* XPM */
+static char *cdstopped[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 71 1",
+" c Black",
+". c Cyan",
+"X c #ff7d00",
+"o c #fe7e00",
+"O c #ff8000",
+"+ c #ff8100",
+"@ c #ff8300",
+"# c #ff8400",
+"$ c #ff8600",
+"% c #ff8800",
+"& c #ff8900",
+"* c #ff8b00",
+"= c DarkOrange",
+"- c #ff8e00",
+"; c #ff8f00",
+": c #ff9100",
+"> c #ff9200",
+", c #ff9400",
+"< c #ff9500",
+"1 c #fe9700",
+"2 c #ff9900",
+"3 c #ff9a00",
+"4 c #ff9c00",
+"5 c #ff9d00",
+"6 c #ff9f00",
+"7 c #ffa000",
+"8 c #ffa200",
+"9 c #ffa300",
+"0 c #ffa500",
+"q c #ffa600",
+"w c #ffa800",
+"e c #ffaa00",
+"r c #ffab00",
+"t c #ffad00",
+"y c #ffae00",
+"u c #ffb000",
+"i c #ffb100",
+"p c #ffb300",
+"a c #ffb400",
+"s c #ffb600",
+"d c #ffb700",
+"f c #ffb900",
+"g c #ffbb00",
+"h c #ffbc00",
+"j c #ffbe00",
+"k c #ffbf00",
+"l c #ffc100",
+"z c #ffc200",
+"x c #ffc400",
+"c c #ffc500",
+"v c #fec700",
+"b c #ffc800",
+"n c #ffca00",
+"m c #ffcc00",
+"M c #ffcd00",
+"N c #ffcf00",
+"B c #ffd000",
+"V c #ffd200",
+"C c #ffd300",
+"Z c #ffd500",
+"A c #ffd600",
+"S c #ffd800",
+"D c #ffd900",
+"F c #ffdb00",
+"G c #ffdd00",
+"H c #ffde00",
+"J c #ffe000",
+"K c #ffe100",
+"L c #ffe300",
+"P c #ffe400",
+"I c None",
+/* pixels */
+"IIIIIIIIIIIIIIIDSZCVBMmnvcxzkjhgdIIIIIIIIIIIIIII",
+"IIIIIIIIIKJHGDSAZVBNmnbvxzljhgfsapuytrwIIIIIIIII",
+"II II",
+"II II",
+"II II",
+"IP *I",
+"LK %$",
+"JG #+",
+"FD +o",
+"IA XI",
+"II II",
+"II II",
+"II II",
+"IIIIIIIIIfdapiytreq09765421<>:;-*&%$@+OIIIIIIIII",
+"IIIIIIIIIIIIIIIew09875431<,>;-=&%IIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIJGSZBIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJGSZBIIII",
+"IIIGDZVMncIIIIIIIIIIIIIIIIIIIIIIIIIIIIGDZVMncIII",
+"IIFACNmvxkhIIIIIIIIIIIIIIIIIIIIIIIIIIFACNmvxkhII",
+"ISC bx faiIIIIIIIIIIIIIIIIIIIIIIIISC bxl aiI",
+"ZBM lj yeqIIIIIIIIIIIIIIIIIIIIIIZBM ljf yeq",
+"Nnvzkgdp 97IIIIIIIIIIIIIIIIIIIIIINnvzkgdpurw97",
+"vxkhdautw 52IIIIIIIIIIIIIIIIIIIIIIvxkhdautw0752",
+"lhfaite0 <>IIIIIIIIIIIIIIIIIIIIIIlhf te0 3<>",
+"gsp q9 ,;=IIIIIIIIIIIIIIIIIIIIIIgsp 9 ,;=",
+"Iur 74 :=&IIIIIIIIIIIIIIIIIIIIIIIIurw :=&I",
+"II0752<:-&$IIIIIIIIIIIIIIIIIIIIIIIIII075 -&$II",
+"III31>;*%@IIIIIIIIIIIIIIIIIIIIIIIIIIII31>;*%@III",
+"IIII;=%#OIIIIIIIIIIIIIIIIIIIIIIIIIIIIII;=%#OIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII",
+"IIIIIIIIIIIIIIIIIIIIJGDACBMnIIIIIIIIIIIIIIIIIIII",
+"IIIIJGSZBIIIIIIIIIKHFSZVNmbczkIIIIIIIIIJGSZBIIII",
+"IIIGDZVMncIIIIII IIIIIIGDZVMncIII",
+"IIFACNmvxkhIIIII IIIIIFACNmvxkhII",
+"ISC mb l aiIIID 0IIISC b lh aiI",
+"ZBM c f yeqISZ 75IZBM l s yeq",
+"Nnv purw97ICB 42INnvzkg w97",
+"vxk utw0752IMn <>Ivxkhdau 752",
+"lhf 0853<>Ibc :-Ilhfait 3<>",
+"gsp r 6 ,;=Izk *%Igsp q 4 ,;=",
+"Iur 97 2 =&IIIg $IIIur 7 2, =&I",
+"II0752<:-&$IIIII IIIII0752<:-&$II",
+"III31>;*%@IIIIII IIIIII31>;*%@III",
+"IIII;=%#OIIIIIIIII7531,:-*%#+oIIIIIIIII;=%#OIIII",
+"IIIIIIIIIIIIIIIIIIII<>;=&$@OIIIIIIIIIIIIIIIIIIII"
+};
+/* XPM */
+static char * cdled[] = {
+"110 11 4 1",
+" c #000000000000 s led_color_back",
+". c #0000FFFF0000 s led_color_high",
+"X c #00009CE60000 s led_color_med",
+"o c #000063180000 s led_color_low",
+" ..... X X X ..... ..... X o X ..... ..... ..... ..... ..... X X X ... XoX .. Xo ",
+". oXo . o . X oXo . X oXo . . . . oXo X . oXo X o XoX . . oXo . . oXo . o X . X . . o o ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. X. oX . o .. Xo ",
+".X X. X. X. X. .X X. .X .X o. .X X. .X X. .X Xo . X . . o o ",
+". . X . X XoX . o XoX . . oXo . . oXo X . oXo X o . . oXo . . oXo . X o . . X X ",
+" X o X o X o ..... ..... ..... ..... ..... X X X ..... ..... o X X ... oXo ",
+". . X . . oXo X X oXo . X oXo . o XoX . . oXo . X . . oXo . o XoX . X o . X ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. X. oX .. Xo ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. .X Xo . . o X ",
+". oXo . X . . oXo X o XoX . X . o XoX . . oXo . X . . oXo . o XoX . X X . o ",
+" ..... o X o ..... ..... o X o ..... ..... X X X ..... ..... X X o . X "};
diff --git a/XPM/standart.style b/XPM/standart.style
new file mode 120000
index 0000000..546daaf
--- /dev/null
+++ b/XPM/standart.style
@@ -0,0 +1 @@
+grey.style
\ No newline at end of file
diff --git a/cdctrl.c b/cdctrl.c
new file mode 100644
index 0000000..2a0efb7
--- /dev/null
+++ b/cdctrl.c
@@ -0,0 +1,121 @@
+/*
+ * $Id: cdctrl.c,v 1.2 1997/06/12 14:50:41 ograf Exp $
+ *
+ * Part of WMRack
+ *
+ * command line tool to control the cdrom
+ * created to test the cdrom control stuff
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "cdrom.h"
+
+char *commands[]={"info", "status", "play", "pause", "skip", "stop", "eject"};
+#define NUM_CMD 7
+
+void usage()
+{
+ fprintf(stderr,"Usage: cdrom [info|status|play|pause|skip|stop|eject] PARAMS\n");
+}
+
+int main(int argc, char **argv)
+{
+ CD *cd;
+ int i, s=0, e=0xaa, status;
+
+ if (argc<2)
+ {
+ usage();
+ exit(EXIT_FAILURE);
+ }
+
+ for (i=0; i<NUM_CMD; i++)
+ if (strcmp(argv[1],commands[i])==0)
+ break;
+ if (i==NUM_CMD)
+ {
+ usage();
+ exit(EXIT_FAILURE);
+ }
+
+ cd=cd_open("/dev/hdd",0);
+ if (cd->info==NULL)
+ printf("No CDROM in drive\n");
+ else
+ status=cd_getStatus(cd,0);
+
+ switch (i)
+ {
+ case 0:
+ printf("discid: %08lX\n",cd->info->discid);
+ printf("tracks: %d length: %dsec (%df)\n",
+ cd->info->tracks,cd->info->slen,cd->info->len);
+ for (i=0; i<cd->info->tracks; i++)
+ {
+ printf("%2d[%2d]: start(%10d) length(%10d f, %4d sec) %s\n",i,
+ cd->info->track[i].num,
+ cd->info->track[i].start,
+ cd->info->track[i].len,
+ cd->info->track[i].slen,
+ cd->info->track[i].data?"DATA":"");
+ }
+ break;
+ case 1:
+ printf("status is %d\n",status);
+ printf("mode %d track %d ind %d\n",
+ cd->info->current.mode,
+ cd->info->current.track,
+ cd->info->current.index);
+ i=cd->info->current.track;
+ if (i!=-1)
+ printf("%d[%d]: s%d l%d sl%d d%d\n",i,
+ cd->info->track[i].num,
+ cd->info->track[i].start,
+ cd->info->track[i].len,
+ cd->info->track[i].slen,
+ cd->info->track[i].data);
+ else
+ printf("no current track\n");
+ printf("rel %d:%d:%d abs %d:%d:%d\n",
+ cd->info->current.relmsf.minute,
+ cd->info->current.relmsf.second,
+ cd->info->current.relmsf.frame,
+ cd->info->current.absmsf.minute,
+ cd->info->current.absmsf.second,
+ cd->info->current.absmsf.frame);
+ break;
+ case 2:
+ if (argc>2)
+ s=atoi(argv[2]);
+ if (argc>3)
+ e=atoi(argv[3]);
+ cd_doPlay(cd,s,e);
+ break;
+ case 3:
+ cd_doPause(cd);
+ break;
+ case 4:
+ if (argc!=3)
+ {
+ fprintf(stderr,"skip needs only one arg (seconds)\n");
+ exit(EXIT_FAILURE);
+ }
+ s=atoi(argv[2]);
+ cd_doSkip(cd,s);
+ break;
+ case 5:
+ cd_doStop(cd);
+ break;
+ case 6:
+ cd_doEject(cd);
+ break;
+ default:
+ usage();
+ exit(EXIT_FAILURE);
+ }
+ cd_close(cd);
+ return EXIT_SUCCESS;
+}
diff --git a/cdrom.c b/cdrom.c
new file mode 100644
index 0000000..2ecb575
--- /dev/null
+++ b/cdrom.c
@@ -0,0 +1,902 @@
+/*
+ * $Id: cdrom.c,v 1.4 1997/06/12 16:27:28 ograf Exp $
+ *
+ * cdrom utility functions for WMRack
+ *
+ * written by Oliver Graf <ograf at fga.de>
+ *
+ * some hints taken from WorkBone
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/param.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <fcntl.h>
+
+#ifdef linux
+# include <linux/cdrom.h>
+#else
+# include <sundev/srreg.h>
+#endif /* linux */
+
+#include "cdrom.h"
+
+/* workaround -- used ints in MSF, linux uses u_char, what use other systems? */
+#define msftoMSF(d,s) d.minute=s.minute; d.second=s.second; d.frame=s.frame;
+#define MSFtocdmsf(d,s,e) d.cdmsf_min0=s.minute; d.cdmsf_sec0=s.second; d.cdmsf_frame0=s.frame; d.cdmsf_min1=e.minute; d.cdmsf_sec1=e.second; d.cdmsf_frame1=e.frame;
+
+/*
+ * cddb_sum(num)
+ *
+ * utility function to cddb_discid
+ */
+int cddb_sum(int n)
+{
+ char buf[12], *p;
+ int ret = 0;
+
+ /* For backward compatibility this algorithm must not change */
+ sprintf(buf,"%u",n);
+ for (p=buf; *p!='\0'; p++)
+ ret+=(*p-'0');
+ return (ret);
+}
+
+/*
+ * cddb_discid(cdinfo)
+ *
+ * calculates the id for a given cdinfo structure
+ */
+unsigned long cddb_discid(CDInfo *cdinfo)
+{
+ int i, t=0, n=0;
+
+ /* For backward compatibility this algorithm must not change */
+ for (i=0; i<cdinfo->tracks; i++) {
+ n+=cddb_sum((cdinfo->track[i].toc.minute*60) + cdinfo->track[i].toc.second);
+ t+=((cdinfo->track[i+1].toc.minute*60) + cdinfo->track[i+1].toc.second) -
+ ((cdinfo->track[i].toc.minute*60) + cdinfo->track[i].toc.second);
+ }
+ cdinfo->discid=((n % 0xff) << 24 | t << 8 | cdinfo->tracks);
+ return cdinfo->discid;
+}
+
+/*
+ * cd_readTOC(CD)
+ *
+ * Read the table of contents from the CD.
+ */
+CDInfo *cd_readTOC(CD *cd)
+{
+ struct cdrom_tochdr hdr;
+ struct cdrom_tocentry entry;
+ int i;
+ CDInfo *info;
+ MSF tmp;
+
+ if (cd->fd<0)
+ return NULL;
+
+ info=(CDInfo *)malloc(sizeof(CDInfo));
+ if (info==NULL)
+ {
+ perror("cd_readTOC[malloc]");
+ return NULL;
+ }
+
+ if (ioctl(cd->fd, CDROMREADTOCHDR, &hdr))
+ {
+ perror("cd_readTOC[readtochdr]");
+ free(info);
+ return NULL;
+ }
+
+ info->len=info->slen=0;
+ info->start=hdr.cdth_trk0;
+ info->end=hdr.cdth_trk1;
+ info->tracks=hdr.cdth_trk1-hdr.cdth_trk0+1;
+#ifdef DEBUG
+ fprintf(stderr,"cd_readTOC[DEBUG]: read header with %d tracks\n",
+ info->tracks);
+#endif
+
+ info->track=malloc((info->tracks+1)*sizeof(TrackInfo));
+ if (info->track==NULL)
+ {
+ perror("cd_readTOC[malloc]");
+ free(info);
+ return NULL;
+ }
+ for (i=0; i<=info->tracks; i++)
+ {
+ if (i==info->tracks)
+ entry.cdte_track=CDROM_LEADOUT;
+ else
+ entry.cdte_track=info->start+i;
+ entry.cdte_format=CDROM_MSF;
+ if (ioctl(cd->fd, CDROMREADTOCENTRY, &entry))
+ {
+ perror("cd_readTOC[tocentry read]");
+ free(info->track);
+ free(info);
+ return NULL;
+ }
+
+ info->track[i].num=i+1;
+ msftoMSF(info->track[i].toc,entry.cdte_addr.msf);
+ info->track[i].start=(((entry.cdte_addr.msf.minute*CD_SECS)+
+ entry.cdte_addr.msf.second)*CD_FRAMES+
+ entry.cdte_addr.msf.frame);
+ info->track[i].len=-1;
+ info->track[i].slen=-1;
+ info->track[i].data=entry.cdte_ctrl&CDROM_DATA_TRACK?1:0;
+ }
+
+ /* Now compute actual track lengths. */
+ for (i=0; i<info->tracks; i++)
+ {
+ info->track[i].len=info->track[i+1].start-info->track[i].start;
+ info->track[i].slen=info->track[i].len/CD_FRAMES;
+ }
+
+ tmp=subMSF(info->track[info->tracks].toc,info->track[0].toc);
+ info->len=msfFrames(tmp);
+ info->slen=info->len/CD_FRAMES;
+ cddb_discid(info);
+
+ return info;
+}
+
+/*
+ * cd_playMSF(cd,start,end)
+ *
+ * sends the actual play to the cdrom.
+ */
+int cd_playMSF(CD *cd, MSF start, MSF end)
+{
+ struct cdrom_msf msf;
+
+ if (cd==NULL || cd->fd<0 || cd->info==NULL)
+ return 1;
+
+ MSFtocdmsf(msf,start,end);
+
+ if (cd->info->current.mode==CDM_STOP)
+ if (ioctl(cd->fd, CDROMSTART))
+ {
+ perror("cd_playMSF[CDROMSTART]");
+ return 1;
+ }
+
+ if (ioctl(cd->fd, CDROMPLAYMSF, &msf))
+ {
+ printf("cd_playMSF[playmsf]\n");
+ printf(" msf = %d:%d:%d %d:%d:%d\n",
+ msf.cdmsf_min0, msf.cdmsf_sec0, msf.cdmsf_frame0,
+ msf.cdmsf_min1, msf.cdmsf_sec1, msf.cdmsf_frame1);
+ perror("cd_playMSF[CDROMPLAYMSF]");
+ return 1;
+ }
+ return 0;
+}
+
+/*
+ * cdinfo_free(info)
+ *
+ * frees a allocate CDInfo
+ */
+void cdinfo_free(CDInfo *info)
+{
+ if (info->track)
+ free(info->track);
+ free(info);
+}
+
+/*
+ * cd_close(cd)
+ *
+ * closes the cd device and frees all data structures inside
+ */
+void cd_close(CD *cd)
+{
+ if (cd==NULL)
+ return;
+
+ if (cd->numcd)
+ cdinfo_free(cd->info);
+ free(cd->device);
+ close(cd->fd);
+ free(cd);
+}
+
+/*
+ * cd_open(device)
+ *
+ * sets the device for further cd-access
+ * set force to TRUE for immidiate change
+ */
+CD *cd_open(char *device, int noopen)
+{
+ struct stat st;
+ CD *cd;
+
+ if (stat(device,&st))
+ {
+ perror("cd_open[stat]");
+ return NULL;
+ }
+
+ cd=(CD *)malloc(sizeof(CD));
+ if (cd==NULL)
+ {
+ perror("cd_open[malloc]");
+ return NULL;
+ }
+
+ cd->device=strdup(device);
+ cd->fd=-1;
+ cd->status=-1;
+ cd->numcd=0;
+ cd->info=NULL;
+
+ if (!noopen)
+ cd_reopen(cd);
+
+ return cd;
+}
+
+/*
+ * cd_suspend(cd)
+ *
+ * closes the cd device, but leaves all structures intact
+ */
+int cd_suspend(CD *cd)
+{
+ if (cd==NULL)
+ return -1;
+
+ close(cd->fd);
+ cd->fd=-1;
+ cd->status=-1;
+
+ if (cd->info)
+ memset(&cd->info->current,0xff,sizeof(CDPosition));
+
+ return 0;
+}
+
+/*
+ * cd_reopen(cd)
+ *
+ * reopens a suspended cd device, and reads the new TOC if cd is changed
+ */
+int cd_reopen(CD *cd)
+{
+ if (cd==NULL)
+ return 1;
+
+ if ((cd->fd=open(cd->device,0))<0)
+ {
+ perror("cd_reopen[open]");
+ return 1;
+ }
+
+ if (cd->info)
+ cdinfo_free(cd->info);
+
+ cd->info=cd_readTOC(cd);
+ if (cd->info!=NULL)
+ {
+ cd->status=1;
+ cd->numcd=1;
+ cd->info->play.start_track=cd->info->start;
+ cd->info->play.end_track=cd->info->tracks;
+ }
+ else
+ {
+ cd->status=-1;
+ cd->numcd=0;
+ close(cd->fd);
+ cd->fd=-1;
+ }
+
+ return 0;
+}
+
+/*
+ * cd_status(cd,reopen)
+ *
+ * Return values:
+ * -1 error
+ * 0 No CD in drive.
+ * 1 CD in drive.
+ * 2 CD has just been inserted (TOC has been read)
+ *
+ * Updates the CDPosition struct of the cd.
+ * If reopen is not 0, the device is automatically reopened if needed.
+ */
+int cd_getStatus(CD *cd, int reopen)
+{
+ struct cdrom_subchnl sc;
+ int ret=1, newcd=0;
+ CDPosition *cur;
+
+ if (cd==NULL)
+ return -1;
+
+ if (cd->fd<0)
+ {
+ if (!reopen)
+ {
+ cd->status=0;
+ return 0;
+ }
+ if (cd_reopen(cd))
+ return -1;
+ newcd=1;
+ }
+
+ if (cd->info==NULL)
+ {
+ cd->status=0;
+ return 0;
+ }
+
+ cur=&cd->info->current;
+
+ sc.cdsc_format=CDROM_MSF;
+
+ if (ioctl(cd->fd, CDROMSUBCHNL, &sc))
+ {
+ memset(cur,0xff,sizeof(CDPosition));
+ cur->mode=CDM_EJECT;
+ cd->status=0;
+ return 0;
+ }
+
+ if (newcd)
+ {
+ memset(cur,0xff,sizeof(CDPosition));
+ cur->mode=CDM_STOP;
+ ret=2;
+ }
+
+ switch (sc.cdsc_audiostatus)
+ {
+ case CDROM_AUDIO_PLAY:
+ cur->mode=CDM_PLAY;
+
+ setpos:
+ cur->track=sc.cdsc_trk;
+ cur->index=sc.cdsc_ind;
+
+ msftoMSF(cur->relmsf,sc.cdsc_reladdr.msf);
+ msftoMSF(cur->absmsf,sc.cdsc_absaddr.msf);
+
+ break;
+
+ case CDROM_AUDIO_PAUSED:
+ cur->mode=CDM_PAUSE;
+ goto setpos;
+
+ case CDROM_AUDIO_COMPLETED:
+ cur->mode=CDM_COMP;
+ break;
+
+ case CDROM_AUDIO_NO_STATUS:
+ memset(cur,0xff,sizeof(CDPosition));
+ cur->mode=CDM_STOP;
+ break;
+ }
+ cd->status=ret;
+ return ret;
+}
+
+/*
+ * cd_doPlay(cd,start,end);
+ *
+ * start playing the cd. cd must be opened. play starts at track start goes
+ * until end of track end.
+ * 1 is the first track of the cd.
+ */
+int cd_doPlay(CD *cd, int start, int end)
+{
+ if (cd==NULL || cd->fd<0 || cd->info==NULL)
+ return 1;
+ if (start>end)
+ {
+ int d=end;
+ end=start;
+ start=d;
+ }
+ start-=cd->info->start;
+ if (start<0) start=0;
+ if (end>cd->info->tracks) end=cd->info->tracks; /* LEADOUT */
+#ifdef DEBUG
+ fprintf(stderr,"cd_doPlay[DEBUG]: play from [%d]%d:%d:%d to [%d]%d:%d:%d\n",
+ start,
+ cd->info->track[start].toc.minute,
+ cd->info->track[start].toc.second,
+ cd->info->track[start].toc.frame,
+ end,
+ cd->info->track[end].toc.minute,
+ cd->info->track[end].toc.second,
+ cd->info->track[end].toc.frame);
+#endif
+ cd->info->play.start_track=start+cd->info->start;
+ cd->info->play.end_track=end;
+ return cd_playMSF(cd,cd->info->track[start].toc,cd->info->track[end].toc);
+}
+
+/*
+ * cd_doPause(cd)
+ *
+ * Pause the CD, if it's in play mode.
+ * Resume the CD, If it's already paused.
+ */
+int cd_doPause(CD *cd)
+{
+ if (cd==NULL || cd->fd<0 || cd->info==NULL)
+ return 1;
+
+ switch (cd->info->current.mode) {
+ case CDM_PLAY:
+ cd->info->current.mode=CDM_PAUSE;
+#ifdef DEBUG
+ fprintf(stderr,"cd_doPause[DEBUG]: pausing cdrom\n");
+#endif
+ ioctl(cd->fd, CDROMPAUSE);
+ break;
+ case CDM_PAUSE:
+ cd->info->current.mode=CDM_PLAY;
+#ifdef DEBUG
+ fprintf(stderr,"cd_doPause[DEBUG]: resuming cdrom\n");
+#endif
+ ioctl(cd->fd, CDROMRESUME);
+ break;
+#ifdef DEBUG
+ default:
+ fprintf(stderr,"cd_doPause[DEBUG]: not playing or pausing\n");
+#endif
+ }
+ return 0;
+}
+
+/*
+ * cd_doStop(cd)
+ *
+ * Stop the CD if it's not already stopped.
+ */
+int cd_doStop(CD *cd)
+{
+ if (cd==NULL || cd->fd<0 || cd->info==NULL)
+ return 1;
+
+ if (cd->info->current.mode!=CDM_STOP)
+ {
+#ifdef DEBUG
+ fprintf(stderr,"cd_doStop[DEBUG]: stopping cdrom\n");
+#endif
+ if (ioctl(cd->fd, CDROMSTOP))
+ {
+ perror("cd_doStop[CDROMSTOP]");
+ return 1;
+ }
+ if (cd->info->current.track>=cd->info->tracks)
+ cd->info->play.start_track=cd->info->start;
+ else
+ cd->info->play.start_track=cd->info->current.track;
+ memset(&cd->info->current,0xff,sizeof(CDPosition));
+ cd->info->current.mode=CDM_STOP;
+ }
+ return 0;
+}
+
+/*
+ * cd_doEject(CD *cd)
+ *
+ * Eject the current CD, if there is one.
+ * Returns 0 on success, 1 if the CD couldn't be ejected, or 2 if the
+ * CD contains a mounted filesystem.
+ */
+int cd_doEject(CD *cd)
+{
+ struct stat stbuf;
+ struct ustat ust;
+
+ if (cd==NULL || cd->fd<0 || cd->info==NULL)
+ return 0;
+ if (cd->info->current.mode==CDM_EJECT)
+ return 0;
+
+ if (fstat(cd->fd, &stbuf) != 0)
+ {
+ perror("cd_doEject[fstat]");
+ return 1;
+ }
+
+ /* check for mounted filesystem */
+ if (ustat(stbuf.st_rdev, &ust)==0)
+ {
+ perror("cd_doEject[mounted]");
+ return 2;
+ }
+
+#ifdef DEBUG
+ fprintf(stderr,"cd_doEject[DEBUG]: stopping cdrom\n");
+#endif
+ ioctl(cd->fd, CDROMSTOP);
+#ifdef DEBUG
+ fprintf(stderr,"cd_doEject[DEBUG]: ejecting cdrom\n");
+#endif
+ if (ioctl(cd->fd, CDROMEJECT))
+ {
+ perror("cd_doEject[CDROMEJECT]");
+ return 1;
+ }
+
+ cd_suspend(cd);
+
+ return 0;
+}
+
+/*
+ * cd_doSkip(cd,seconds)
+ *
+ * Skip some seconds from current position
+ */
+int cd_doSkip(CD *cd, int secs)
+{
+ MSF start, end;
+
+ if (cd==NULL || cd->fd<0 || cd->info==NULL)
+ return 1;
+
+ end=cd->info->track[cd->info->tracks].toc;
+ start=cd->info->current.absmsf;
+ start.second+=secs;
+#ifdef DEBUG
+ fprintf(stderr,"cd_doSkip[DEBUG]: skipping %d seconds\n",secs);
+#endif
+ while (start.second>59)
+ {
+ start.second-=60;
+ start.minute++;
+ }
+ while (start.second<0)
+ {
+ start.second+=60;
+ start.minute--;
+ }
+ if (cmpMSF(start,cd->info->track[0].toc)<0)
+ {
+ start=cd->info->track[0].toc;
+#ifdef DEBUG
+ fprintf(stderr,"cd_doSkip[DEBUG]: can't skip before first track\n");
+#endif
+ }
+
+#ifdef DEBUG
+ fprintf(stderr,"cd_doSkip[DEBUG]: play from %d:%d:%d to %d:%d:%d\n",
+ start.minute, start.second, start.frame,
+ end.minute, end.second, end.frame);
+#endif
+ return cd_playMSF(cd,start,end);
+}
+
+/*
+ * cmpMSF(a,b)
+ *
+ * compares two MSF structs
+ */
+int cmpMSF(MSF a, MSF b)
+{
+ int fa=msfFrames(a), fb=msfFrames(b);
+ if (fa<fb)
+ return -1;
+ else if (fa>fb)
+ return 1;
+ return 0;
+}
+
+/*
+ * subMSF(a,b)
+ *
+ * subtract b from a
+ */
+MSF subMSF(MSF a, MSF b)
+{
+ MSF c;
+ c.minute=a.minute-b.minute;
+ c.second=a.second-b.second;
+ c.frame =a.frame -b.frame;
+ while (c.frame<0) {c.frame+=75; c.second--;}
+ while (c.second<0) {c.second+=60; c.minute--;}
+ if (c.minute<0) c.minute=0;
+ return c;
+}
+
+#ifdef 0
+#ifdef BOZO /* this seems to be sun/dec stuff */
+/*
+ * The minimum volume setting for the Sun and DEC CD-ROMs is 128 but for other
+ * machines this might not be the case.
+ */
+int min_volume = 128;
+int max_volume = 255;
+
+/*
+ * scale_volume(vol, max)
+ *
+ * Return a volume value suitable for passing to the CD-ROM drive. "vol"
+ * is a volume slider setting; "max" is the slider's maximum value.
+ *
+ * On Sun and DEC CD-ROM drives, the amount of sound coming out the jack
+ * increases much faster toward the top end of the volume scale than it
+ * does at the bottom. To make up for this, we make the volume scale look
+ * sort of logarithmic (actually an upside-down inverse square curve) so
+ * that the volume value passed to the drive changes less and less as you
+ * approach the maximum slider setting. The actual formula looks like
+ *
+ * (max^2 - (max - vol)^2) * (max_volume - min_volume)
+ * v = --------------------------------------------------- + min_volume
+ * max^2
+ *
+ * If your system's volume settings aren't broken in this way, something
+ * like the following should work:
+ *
+ * return ((vol * (max_volume - min_volume)) / max + min_volume);
+ */
+scale_volume(vol, max)
+ int vol, max;
+{
+ return ((max * max - (max - vol) * (max - vol)) *
+ (max_volume - min_volume) / (max * max) + min_volume);
+}
+
+/*
+ * unscale_volume(cd_vol, max)
+ *
+ * Given a value between min_volume and max_volume, return the volume slider
+ * value needed to achieve that value.
+ *
+ * Rather than perform floating-point calculations to reverse the above
+ * formula, we simply do a binary search of scale_volume()'s return values.
+ */
+unscale_volume(cd_vol, max)
+ int cd_vol, max;
+{
+ int vol, incr, scaled;
+
+ for (vol = max / 2, incr = max / 4 + 1; incr; incr /= 2)
+ {
+ scaled = scale_volume(vol, max);
+ if (cd_vol == scaled)
+ break;
+ if (cd_vol < scaled)
+ vol -= incr;
+ else
+ vol += incr;
+ }
+
+ if (vol < 0)
+ vol = 0;
+ else if (vol > max)
+ vol = max;
+
+ return (vol);
+}
+
+/*
+ * cd_volume(vol, bal, max)
+ *
+ * Set the volume levels. "vol" and "bal" are the volume and balance knob
+ * settings, respectively. "max" is the maximum value of the volume knob
+ * (the balance knob is assumed to always go from 0 to 20.)
+ */
+void
+cd_volume(vol, bal, max)
+ int vol, bal, max;
+{
+ int left, right;
+ struct cdrom_volctrl v;
+
+ /*
+ * Set "left" and "right" to volume-slider values accounting for the
+ * balance setting.
+ *
+ * XXX - the maximum volume setting is assumed to be in the 20-30 range.
+ */
+ if (bal < 9)
+ right = vol - (9 - bal) * 2;
+ else
+ right = vol;
+ if (bal > 11)
+ left = vol - (bal - 11) * 2;
+ else
+ left = vol;
+
+ /* Adjust the volume to make up for the CD-ROM drive's weirdness. */
+ left = scale_volume(left, max);
+ right = scale_volume(right, max);
+
+ v.channel0 = left < 0 ? 0 : left > 255 ? 255 : left;
+ v.channel1 = right < 0 ? 0 : right > 255 ? 255 : right;
+ if (cd_fd >= 0)
+ (void) ioctl(cd_fd, CDROMVOLCTRL, &v);
+}
+
+/*
+ * Set the offset into the current track and play. -1 means end of track
+ * (i.e., go to next track.)
+ */
+void
+play_from_pos(pos)
+ int pos;
+{
+ if (pos == -1)
+ if (cd)
+ pos = cd->trk[cur_track - 1].length - 1;
+ if (cur_cdmode == 1)
+ play_cd(cur_track, pos, playlist[cur_listno-1].end);
+}
+
+/* Try to keep the CD open all the time. This is run in a subprocess. */
+void
+keep_cd_open()
+{
+ int fd;
+ struct flock fl;
+ extern end;
+
+ for (fd = 0; fd < 256; fd++)
+ close(fd);
+
+ if (fork())
+ exit(0);
+
+ if ((fd = open("/tmp/cd.lock", O_RDWR | O_CREAT, 0666)) < 0)
+ exit(0);
+ fl.l_type = F_WRLCK;
+ fl.l_whence = 0;
+ fl.l_start = 0;
+ fl.l_len = 0;
+ if (fcntl(fd, F_SETLK, &fl) < 0)
+ exit(0);
+
+ if (open(cd_device, 0) >= 0)
+ {
+ brk(&end);
+ pause();
+ }
+
+ exit(0);
+}
+
+/*
+ * find_trkind(track, index)
+ *
+ * Start playing at a particular track and index, optionally using a particular
+ * frame as a starting position. Returns a frame number near the start of the
+ * index mark if successful, 0 if the track/index didn't exist.
+ *
+ * This is made significantly more tedious (though probably easier to port)
+ * by the fact that CDROMPLAYTRKIND doesn't work as advertised. The routine
+ * does a binary search of the track, terminating when the interval gets to
+ * around 10 frames or when the next track is encountered, at which point
+ * it's a fair bet the index in question doesn't exist.
+ */
+find_trkind(track, index, start)
+ int track, index, start;
+{
+ int top = 0, bottom, current, interval, ret = 0, i;
+
+ if (cd == NULL || cd_fd < 0)
+ return;
+
+ for (i = 0; i < cur_ntracks; i++)
+ if (cd->trk[i].track == track)
+ break;
+ bottom = cd->trk[i].start;
+
+ for (; i < cur_ntracks; i++)
+ if (cd->trk[i].track > track)
+ break;
+
+ top = i == cur_ntracks ? (cd->length - 1) * CD_FRAMES : cd->trk[i].start;
+
+ if (start > bottom && start < top)
+ bottom = start;
+
+ current = (top + bottom) / 2;
+ interval = (top - bottom) / 4;
+
+ do {
+ play_chunk(current, current + CD_FRAMES);
+
+ if (cd_status() != 1)
+ return (0);
+ while (cur_frame < current)
+ if (cd_status() != 1 || cur_cdmode != 1)
+ return (0);
+ else
+ susleep(1);
+
+ if (cd->trk[cur_track - 1].track > track)
+ break;
+
+ if (cur_index >= index)
+ {
+ ret = current;
+ current -= interval;
+ }
+ else
+ current += interval;
+ interval /= 2;
+ } while (interval > 2);
+
+ return (ret);
+}
+
+/*
+ * Simulate usleep() using select().
+ */
+susleep(usec)
+ int usec;
+{
+ struct timeval tv;
+
+ timerclear(&tv);
+ tv.tv_sec = usec / 1000000;
+ tv.tv_usec = usec % 1000000;
+ return (select(0, NULL, NULL, NULL, &tv));
+}
+/*
+ * Read the initial volume from the drive, if available. Set cur_balance to
+ * the balance level (0-20, 10=centered) and return the proper setting for
+ * the volume knob.
+ *
+ * "max" is the maximum value of the volume knob.
+ */
+read_initial_volume(max)
+ int max;
+{
+ int left, right;
+
+ /* Suns can't read the volume; oh well */
+ left = right = 255;
+
+ left = unscale_volume(left, max);
+ right = unscale_volume(right, max);
+
+ if (left < right)
+ {
+ cur_balance = (right - left) / 2 + 11;
+ if (cur_balance > 20)
+ cur_balance = 20;
+
+ return (right);
+ }
+ else if (left == right)
+ {
+ cur_balance = 10;
+ return (left);
+ }
+ else
+ {
+ cur_balance = (right - left) / 2 + 9;
+ if (cur_balance < 0)
+ cur_balance = 0;
+
+ return (left);
+ }
+}
+#endif /* BOZO */
+#endif
diff --git a/cdrom.h b/cdrom.h
new file mode 100644
index 0000000..f423c9d
--- /dev/null
+++ b/cdrom.h
@@ -0,0 +1,96 @@
+/*
+ * $Id: cdrom.h,v 1.3 1997/06/12 14:51:32 ograf Exp $
+ */
+
+#ifndef _MY_CDROM_H
+#define _MY_CDROM_H
+
+/* cd status modes */
+#define CDM_CLOSED -1
+#define CDM_COMP 0
+#define CDM_PLAY 1
+#define CDM_PAUSE 2
+#define CDM_STOP 3
+#define CDM_EJECT CDM_CLOSED
+
+typedef struct {
+ int minute;
+ int second;
+ int frame;
+} MSF;
+
+#define fSecs(f) (int)(f/75)
+#define fMins(f) (int)(f/75/60)
+
+#define msfFrames(msf) (((msf.minute*60)+msf.second)*75+msf.frame)
+#define msfSecs(msf) (((msf.minute*60)+msf.second)
+
+#define MSFnone(msf) msf.minute=msf.second=msf.frame=-1
+
+typedef struct {
+ int num;
+ MSF toc; /* real start */
+ int start; /* start in frames */
+ int len; /* length in frames */
+ int slen; /* length in seconds */
+ int data; /* datatrack? */
+} TrackInfo;
+
+typedef struct {
+ int mode;
+ int track;
+ int index;
+ MSF relmsf;
+ MSF absmsf;
+} CDPosition;
+
+typedef struct { /* stores information about the last play action */
+ int start_track;
+ int end_track;
+} CDPlayInfo;
+
+typedef struct {
+ CDPosition current;
+ CDPlayInfo play;
+ unsigned long discid;
+ int len; /* cd length in frames */
+ int slen; /* cd length in seconds */
+ int start; /* first track of the cd */
+ int end; /* last track of the cd */
+ int tracks; /* number of tracks (end-start)+1 */
+ TrackInfo *track;
+} CDInfo;
+
+typedef struct {
+ int fd;
+ char *device;
+ int status; /* this keeps the return value of cd_getStatus() */
+ int numcd;
+ CDInfo *info;
+} CD;
+
+CD *cd_open(char *device, int noopen);
+int cd_reopen(CD *cd);
+int cd_suspend(CD *cd);
+void cd_close(CD *cd);
+
+void cdinfo_free(CDInfo *info);
+
+int cd_getStatus(CD *cd, int reopen);
+
+/*
+ * all cd_do* commands assume that prior to their call a cd_getStatus
+ * is done to update the CDPosition struct of the cd
+ */
+int cd_doPlay(CD *cd, int start, int end);
+int cd_doSkip(CD *cd, int secs);
+int cd_doPause(CD *cd);
+int cd_doStop(CD *cd);
+int cd_doEject(CD *cd);
+
+int cmpMSF(MSF a, MSF b);
+MSF subMSF(MSF a, MSF b);
+
+#define curMode(c) (c->info==NULL?CDM_EJECT:c->info->current.mode)
+
+#endif
diff --git a/wmrack.c b/wmrack.c
new file mode 100644
index 0000000..877e216
--- /dev/null
+++ b/wmrack.c
@@ -0,0 +1,854 @@
+/*
+ * $Id: wmrack.c,v 1.8 1997/06/14 13:24:57 ograf Exp $
+ *
+ * WMRack - WindowMaker Sound Control Panel
+ *
+ * Rewritten by Oliver Graf <ograf at fga.de> http://www.fga.de/~ograf/
+ * Graphics designed by Heiko Wagner <hwagner at fga.de> http://www.fga.de/~hwagner/
+ *
+ * ascd originally By Rob Malda <malda at cs.hope.edu> http://www.cs.hope.edu/~malda/
+ *
+ * This is an 'WindowMaker Look & Feel' Dock applet that can be
+ * used to control an cdrom. Also works with AfterSteps Wharf.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <X11/Xlib.h>
+#include <X11/xpm.h>
+#include <X11/extensions/shape.h>
+
+#include <errno.h>
+#include <unistd.h>
+#include <sys/time.h>
+
+#include <signal.h>
+
+#include "xpmicon.h"
+#include "cdrom.h"
+
+/* Functions *****************************************************************/
+void usage();
+void parseCmdLine(int argc, char *argv[]);
+void initHandler();
+void createWindow(int, char **);
+void shutDown(int);
+void mainLoop();
+int flushExpose(Window w);
+void redrawWindow();
+void redrawDisplay(int force_win);
+Pixel getColor(char *name);
+Time getTime();
+
+/* Global stuff **************************************************************/
+#define PLAY 0
+#define PAUSE 1
+#define STOP 2
+#define UPTRACK 3
+#define DNTRACK 4
+#define EJECT 5
+
+Display *Disp;
+Window Root;
+Window Iconwin;
+Window Win;
+char *Geometry=0;
+GC WinGC;
+
+/* varibles for the options */
+char *StyleXpmFile=NULL;
+char *LedColor=NULL;
+char CdDevice[1024]="/dev/cdrom";
+int withdraw=0;
+int noprobe=0;
+
+MSF last_time={-1,-1,-1};
+int last_track=-1;
+int last_cdmode=-1; /* to sense a change */
+int displaymode=0; /* bit 1 is run/remain, bit 2 is track/total */
+int playmode=0; /* 0==play through, 1==repeat all, 2==repeat track */
+int repeattrack=-1; /* for playmode 2 */
+int newdisc=0;
+Time press_time=-1;
+
+/* our cd device */
+CD *cd;
+
+/*
+ * start the whole stuff and enter the MainLoop
+ */
+int main(int argc,char *argv[])
+{
+ parseCmdLine(argc, argv);
+ cd=cd_open(CdDevice,noprobe);
+ if (cd_getStatus(cd,0)>0)
+ newdisc=1;
+ initHandler();
+ createWindow(argc, argv);
+ mainLoop();
+ return 0;
+}
+
+/*
+ * usage()
+ *
+ * print out usage text and exit
+ */
+void usage()
+{
+ fprintf(stderr,"wmrack - Version 0.9\n");
+ fprintf(stderr,"usage: wmrack [OPTIONS] \n");
+ fprintf(stderr,"\n");
+ fprintf(stderr,"OPTION DEFAULT DESCRIPTION\n");
+ fprintf(stderr,"-d|--device DEV /dev/cdrom device of the Drive\n");
+ fprintf(stderr,"-h|--help none display help\n");
+ fprintf(stderr,"-l|--ledcolor COLSPEC green set the color of the led\n");
+ fprintf(stderr,"-p|--noprobe off disable the startup probe\n");
+ fprintf(stderr,"-s|--style STYLEFILE compile-time load an alternate set of xpm\n");
+ fprintf(stderr,"-w|--withdrawn off start withdrawn or not\n");
+ fprintf(stderr,"\n");
+ exit(1);
+}
+
+/*
+ * parseCmdLine(argc,argv)
+ *
+ * parse the command line args
+ */
+void parseCmdLine(int argc, char *argv[])
+{
+ int i, j;
+ char opt;
+ struct {char *name, option;} Options[]={{"device",'d'},
+ {"withdrawn",'w'},
+ {"help",'h'},
+ {"ledcolor",'l'},
+ {"style",'s'},
+ {"noprobe",'p'},
+ {NULL,0}};
+
+ for(i=1; i<argc; i++)
+ {
+ if (argv[i][0]=='-')
+ {
+ if (argv[i][1]=='-')
+ {
+ for (j=0; Options[j].name!=NULL; j++)
+ if (strcmp(Options[j].name,argv[i]+2)==0)
+ {
+ opt=Options[j].option;
+ break;
+ }
+ if (Options[j].name==NULL)
+ usage();
+ }
+ else
+ {
+ if (argv[i][2]!=0)
+ usage();
+ opt=argv[i][1];
+ }
+ switch (opt)
+ {
+ case 'd': /* Device */
+ if (++i>=argc)
+ usage();
+ strcpy(CdDevice,argv[i]);
+ continue;
+ case 'w': /* start Withdrawn */
+ withdraw=1;
+ continue;
+ case 'h': /* usage */
+ usage();
+ break;
+ case 'l': /* Led Color */
+ if (++i>=argc)
+ usage();
+ LedColor=strdup(argv[i]);
+ continue;
+ case 's':
+ if (++i>=argc)
+ usage();
+ StyleXpmFile=strdup(argv[i]);
+ continue;
+ case 'p':
+ noprobe=1;
+ continue;
+ default:
+ usage();
+ }
+ }
+ else
+ usage();
+ }
+
+}
+
+/*
+ * initHandler()
+ *
+ * inits the signal handlers
+ */
+void initHandler()
+{
+ struct sigaction sa;
+ sa.sa_handler=shutDown;
+ sigfillset(&sa.sa_mask);
+ sa.sa_flags=0;
+ sa.sa_restorer=NULL;
+ sigaction(SIGTERM,&sa,NULL);
+ sigaction(SIGINT,&sa,NULL);
+ sigaction(SIGHUP,&sa,NULL);
+ sigaction(SIGQUIT,&sa,NULL);
+ sigaction(SIGPIPE,&sa,NULL);
+ sa.sa_handler=SIG_IGN;
+ sigaction(SIGUSR1,&sa,NULL);
+ sigaction(SIGUSR2,&sa,NULL);
+}
+
+/*
+ * createWindow(argc,argv)
+ *
+ * create the basic shaped window and set all the required stuff
+ */
+void createWindow(int argc, char **argv)
+{
+ int i;
+ unsigned int borderwidth ;
+ char *display_name=NULL;
+ char *wname="wmrack";
+ XGCValues gcv;
+ unsigned long gcm;
+ XTextProperty name;
+ Pixel back_pix, fore_pix;
+ int screen;
+ int x_fd;
+ int d_depth;
+ int ScreenWidth, ScreenHeight;
+ XSizeHints SizeHints;
+ XWMHints WmHints;
+ XClassHint classHint;
+
+ /* Open display */
+ if (!(Disp = XOpenDisplay(display_name)))
+ {
+ fprintf(stderr,"wmrack: can't open display %s\n", XDisplayName(display_name));
+ exit (1);
+ }
+
+ screen=DefaultScreen(Disp);
+ Root=RootWindow(Disp, screen);
+ d_depth=DefaultDepth(Disp, screen);
+ x_fd=XConnectionNumber(Disp);
+ ScreenHeight=DisplayHeight(Disp,screen);
+ ScreenWidth=DisplayWidth(Disp,screen);
+
+ xpm_setDefaultAttr(Disp,Root,LedColor);
+ if (StyleXpmFile)
+ {
+ if (xpm_loadSet(Disp,Root,StyleXpmFile))
+ {
+ fprintf(stderr,"wmrack: can't load and create pixmaps\n");
+ XCloseDisplay(Disp);
+ exit(1);
+ }
+ }
+ else if (xpm_setDefaultSet(Disp,Root,RACK_MAX))
+ {
+ fprintf(stderr,"wmrack: can't create pixmaps\n");
+ XCloseDisplay(Disp);
+ exit(1);
+ }
+
+ SizeHints.flags=USSize|USPosition;
+ SizeHints.x=0;
+ SizeHints.y=0;
+ back_pix=getColor("white");
+ fore_pix=getColor("black");
+
+ XWMGeometry(Disp, screen, Geometry, NULL, (borderwidth=1), &SizeHints,
+ &SizeHints.x,&SizeHints.y,&SizeHints.width,
+ &SizeHints.height, &i);
+
+ SizeHints.width=currentXpm(attributes).width;
+ SizeHints.height=currentXpm(attributes).height;
+ Win=XCreateSimpleWindow(Disp,Root,SizeHints.x,SizeHints.y,
+ SizeHints.width,SizeHints.height,
+ borderwidth,fore_pix,back_pix);
+ Iconwin=XCreateSimpleWindow(Disp,Win,SizeHints.x,SizeHints.y,
+ SizeHints.width,SizeHints.height,
+ borderwidth,fore_pix,back_pix);
+ XSetWMNormalHints(Disp, Win, &SizeHints);
+
+ classHint.res_name="wmrack";
+ classHint.res_class="WMRack";
+ XSetClassHint(Disp, Win, &classHint);
+
+ XSelectInput(Disp, Win, (ExposureMask|ButtonPressMask|ButtonReleaseMask|
+ StructureNotifyMask));
+ XSelectInput(Disp, Iconwin, (ExposureMask|ButtonPressMask|ButtonReleaseMask|
+ StructureNotifyMask));
+
+ if (XStringListToTextProperty(&wname, 1, &name) ==0)
+ {
+ fprintf(stderr, "wmrack: can't allocate window name\n");
+ exit(-1);
+ }
+ XSetWMName(Disp, Win, &name);
+
+ /* Create WinGC */
+ gcm=GCForeground|GCBackground|GCGraphicsExposures;
+ gcv.foreground=fore_pix;
+ gcv.background=back_pix;
+ gcv.graphics_exposures=False;
+ WinGC=XCreateGC(Disp, Root, gcm, &gcv);
+
+ XShapeCombineMask(Disp, Win, ShapeBounding, 0, 0,
+ currentXpm(mask), ShapeSet);
+ XShapeCombineMask(Disp, Iconwin, ShapeBounding, 0, 0,
+ currentXpm(mask), ShapeSet);
+
+ WmHints.initial_state=withdraw?WithdrawnState:NormalState;
+ WmHints.icon_window=Iconwin;
+ WmHints.window_group=Win;
+ WmHints.icon_x=SizeHints.x;
+ WmHints.icon_y=SizeHints.y;
+ WmHints.flags=StateHint|IconWindowHint|IconPositionHint|WindowGroupHint;
+ XSetCommand(Disp, Win, argv, argc);
+ XSetWMHints(Disp, Win, &WmHints);
+ XMapWindow(Disp,Win);
+ redrawDisplay(1);
+}
+
+/*
+ * shutDown(int sig)
+ *
+ * handler for signal and close-down function
+ */
+void shutDown(int sig)
+{
+#ifdef DEBUG
+ fprintf(stderr,"wmrack: Shutting down\n");
+#endif
+#ifdef 0 /* this is not good, because CloseDisplay woes with this stuff freed */
+ xpm_freeSet(Disp);
+# ifdef DEBUG
+ fprintf(stderr,"wmrack: XPMs freed\n");
+# endif
+ XFreeGC(Disp, WinGC);
+# ifdef DEBUG
+ fprintf(stderr,"wmrack: GC freed\n");
+# endif
+ XDestroyWindow(Disp, Win);
+# ifdef DEBUG
+ fprintf(stderr,"wmrack: Win destroyed\n");
+# endif
+ XDestroyWindow(Disp, Iconwin);
+# ifdef DEBUG
+ fprintf(stderr,"wmrack: Iconwin destroyed\n");
+# endif
+#endif
+ XCloseDisplay(Disp);
+#ifdef DEBUG
+ fprintf(stderr,"wmrack: Display closed\n");
+#endif
+ exit(0);
+}
+
+/*
+ * mainLoop()
+ *
+ * the main event loop
+ */
+void mainLoop()
+{
+ XEvent Event;
+ Time when;
+ int skip_count, skip_amount, skip_delay;
+
+ while(1)
+ {
+ /* Check events */
+ while (XPending(Disp))
+ {
+ XNextEvent(Disp,&Event);
+ switch (Event.type)
+ {
+ case Expose:
+ if (Event.xexpose.count==0)
+ last_time.minute=last_time.second=last_time.frame=-1;
+ redrawDisplay(1);
+ continue;
+ case ButtonPress:
+ newdisc=0;
+ cd_getStatus(cd,0);
+ if (Event.xbutton.y<15 && curMode(cd)==CDM_PLAY)
+ {
+ switch (Event.xbutton.button)
+ {
+ case 1:
+ displaymode^=1;
+ break;
+ case 2:
+ displaymode^=2;
+ break;
+ case 3:
+ playmode++;
+ if (playmode>2)
+ playmode=0;
+ if (playmode==2)
+ repeattrack=cd->info->current.track;
+ else
+ repeattrack=-1;
+ break;
+ }
+ }
+ else if (Event.xbutton.y>15 && Event.xbutton.y<32)
+ {
+ if (Event.xbutton.x<17)
+ {
+ if (curMode(cd)==CDM_PLAY || curMode(cd)==CDM_PAUSE)
+ cd_doPause(cd);
+ else if (curMode(cd)==CDM_EJECT)
+ {
+ if (cd_getStatus(cd,1))
+ {
+ newdisc=1;
+ cd_doPlay(cd,cd->info->play.start_track,99);
+ }
+ }
+ else
+ cd_doPlay(cd,cd->info->play.start_track,99);
+ }
+ else if (Event.xbutton.x>34)
+ {
+ if (curMode(cd)==CDM_PLAY || curMode(cd)==CDM_PAUSE)
+ cd_doStop(cd);
+ else if (curMode(cd)==CDM_EJECT)
+ {
+ if (cd_getStatus(cd,1))
+ newdisc=1;
+ }
+ else
+ cd_doEject(cd);
+ }
+ }
+ else if (Event.xbutton.y>32)
+ {
+ press_time=Event.xbutton.time;
+ skip_count=0;
+ skip_delay=8;
+ if (Event.xbutton.x<17)
+ skip_amount=-1;
+ else if (Event.xbutton.x>34)
+ skip_amount=1;
+ }
+ break;
+ case ButtonRelease:
+ if (Event.xbutton.time-press_time<200 && Event.xbutton.y>32)
+ {
+ if (curMode(cd)==CDM_PLAY || curMode(cd)==CDM_PAUSE)
+ {
+ if (Event.xbutton.x<17)
+ {
+ if (cd->info->current.relmsf.minute ||
+ cd->info->current.relmsf.second>2)
+ cd_doPlay(cd,cd->info->current.track,99);
+ else
+ cd_doPlay(cd,cd->info->current.track-1,99);
+ }
+ else if (Event.xbutton.x>34)
+ cd_doPlay(cd,cd->info->current.track+1,99);
+ }
+ else if (curMode(cd)==CDM_STOP)
+ {
+ if (Event.xbutton.x<17)
+ {
+ if (cd->info->play.start_track>1)
+ cd->info->play.start_track--;
+ else
+ cd->info->play.start_track=cd->info->tracks;
+ if (repeattrack>-1)
+ repeattrack=cd->info->play.start_track;
+ }
+ else if (Event.xbutton.x>34)
+ {
+ if (cd->info->play.start_track<cd->info->tracks)
+ cd->info->play.start_track++;
+ else
+ cd->info->play.start_track=1;
+ if (repeattrack>-1)
+ repeattrack=cd->info->play.start_track;
+ }
+ }
+ else
+ ;
+ }
+ press_time=-1;
+ break;
+ case DestroyNotify:
+ shutDown(SIGTERM);
+ break;
+ }
+ XFlush(Disp);
+ }
+ /* now check for a pressed button */
+ if (press_time!=-1)
+ {
+ if (curMode(cd)==CDM_PLAY)
+ {
+ when=getTime();
+ if (when-press_time>500)
+ {
+ skip_count++;
+ if (skip_count%skip_delay==0)
+ {
+ if (Event.xbutton.x<17)
+ cd_doSkip(cd,skip_amount);
+ else if (Event.xbutton.x>34)
+ cd_doSkip(cd,skip_amount);
+ }
+ switch (skip_count)
+ {
+ case 10:
+ case 25:
+ case 50:
+ skip_delay>>=1;
+ break;
+ }
+ }
+ }
+ }
+ /* do a redraw of the LED display */
+ redrawDisplay(0);
+ usleep(1000L);
+ }
+}
+
+/*
+ * flushExpose(window)
+ *
+ * remove any Expose events from the current EventQueue
+ */
+int flushExpose(Window w)
+{
+ XEvent dummy;
+ int i=0;
+
+ while (XCheckTypedWindowEvent (Disp, w, Expose, &dummy)) i++;
+ return i;
+}
+
+/*
+ * redrawWindow()
+ *
+ * combine mask and draw pixmap
+ */
+void redrawWindow()
+{
+ flushExpose(Win);
+ flushExpose(Iconwin);
+
+ XShapeCombineMask(Disp, Win, ShapeBounding, 0, 0,
+ currentXpm(mask), ShapeSet);
+ XShapeCombineMask(Disp, Iconwin, ShapeBounding, 0, 0,
+ currentXpm(mask), ShapeSet);
+
+ XCopyArea(Disp,currentXpm(pixmap),Win,WinGC,
+ 0,0,currentXpm(attributes).width, currentXpm(attributes).height,0,0);
+ XCopyArea(Disp,currentXpm(pixmap),Iconwin,WinGC,
+ 0,0,currentXpm(attributes).width, currentXpm(attributes).height,0,0);
+}
+
+/*
+ * split this function into the real redraw and a pure
+ * display time/track function.
+ * redraw wants a complete redraw (covering, movement, etc.)
+ * but the display of the time/track does not need this overhead (SHAPE)
+ */
+void redrawDisplay(int force_win)
+{
+ int track[2]={0,0};
+ int cdtime[4]={0,0,0,0};
+ static time_t last_flash_time;
+ static flash=0;
+ int st=0, newRack=RACK_NODISC, im_stop=0;
+ MSF pos;
+
+ st=cd_getStatus(cd,0);
+
+ if (st>0 && cd->info->current.track>cd->info->tracks &&
+ curMode(cd)!=CDM_EJECT)
+ {
+ cd_doStop(cd);
+ im_stop=1;
+ }
+ else
+ if (!force_win &&
+ curMode(cd)!=CDM_PAUSE &&
+ last_cdmode==curMode(cd) &&
+ (st<1 ||
+ (last_time.minute==cd->info->current.relmsf.minute &&
+ last_time.second==cd->info->current.relmsf.second &&
+ last_track==cd->info->play.start_track)))
+ /* no change in second or mode, and no pause blink */
+ return;
+
+#ifdef DEBUG
+ if (last_cdmode!=curMode(cd)) {
+ fprintf(stderr,"wmrack: cur_cdmode %d\n",curMode(cd));
+ }
+#endif
+
+ switch (playmode) /* handle repeats */
+ {
+ case 1:
+ if (curMode(cd)==CDM_COMP || im_stop)
+ cd_doPlay(cd,1,99);
+ break;
+ case 2:
+ if ((repeattrack>-1 &&
+ cd->info->current.track!=repeattrack &&
+ curMode(cd)==CDM_PLAY) ||
+ (repeattrack>-1 &&
+ (curMode(cd)==CDM_COMP || im_stop)))
+ cd_doPlay(cd,repeattrack,repeattrack);
+ break;
+ }
+
+ last_cdmode=curMode(cd);
+ if (st>0)
+ {
+ last_time=cd->info->current.relmsf;
+ last_track=cd->info->play.start_track;
+ }
+ else
+ {
+ MSFnone(last_time);
+ last_track=-1;
+ }
+
+ if (curMode(cd)==CDM_PAUSE)
+ {
+ time_t flash_time=time(NULL);
+ if (flash_time==last_flash_time && !force_win)
+ return;
+ last_flash_time=flash_time;
+ flash=!flash;
+ }
+ else
+ {
+ last_flash_time=0;
+ flash=1;
+ }
+
+ newRack=RACK_PLAY;
+ switch (curMode(cd))
+ {
+ case CDM_PAUSE:
+ newRack=RACK_PAUSE;
+ case CDM_PLAY:
+ track[0]=cd->info->current.track/10;
+ track[1]=cd->info->current.track%10;
+ switch (displaymode)
+ {
+ case 0:
+ pos=cd->info->current.relmsf;
+ break;
+ case 1:
+ pos=subMSF(cd->info->track[cd->info->current.track].toc,
+ cd->info->current.absmsf);
+ break;
+ case 2: /* this does not work */
+ pos=subMSF(cd->info->current.absmsf,
+ cd->info->track[0].toc);
+ break;
+ case 3:
+ pos=subMSF(cd->info->track[cd->info->tracks].toc,
+ cd->info->current.absmsf);
+ break;
+ }
+ cdtime[0]=pos.minute/10;
+ cdtime[1]=pos.minute%10;
+ cdtime[2]=pos.second/10;
+ cdtime[3]=pos.second%10;
+ break;
+ case CDM_STOP:
+ newRack=RACK_STOP;
+ if (newdisc)
+ {
+ track[0]=cd->info->tracks/10;
+ track[1]=cd->info->tracks%10;
+ }
+ else
+ {
+ track[0]=cd->info->play.start_track/10;
+ track[1]=cd->info->play.start_track%10;
+ }
+ cdtime[0]=(cd->info->slen/60)/10;
+ cdtime[1]=(cd->info->slen/60)%10;
+ cdtime[2]=(cd->info->slen%60)/10;
+ cdtime[3]=(cd->info->slen%10);
+ break;
+ case CDM_COMP:
+ newRack=RACK_STOP;
+ goto set_null;
+ case CDM_EJECT:
+ newRack=RACK_NODISC;
+ default:
+ set_null:
+ track[0]= 0;
+ track[1]= 0;
+ cdtime[0]=0;
+ cdtime[1]=0;
+ cdtime[2]=0;
+ cdtime[3]=0;
+ break;
+ }
+
+ if (newRack!=curRack || force_win)
+ {
+ /* Mode has changed, paint new mask and pixmap */
+ curRack=newRack;
+ redrawWindow();
+ }
+
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ (track[0]?8*track[0]:80),0, 8,11, 16,35);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ (track[0]?8*track[0]:80),0, 8,11, 16,35);
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ 8*track[1],0, 8,11, 24,35);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ 8*track[1],0, 8,11, 24,35);
+
+ if (flash || curMode(cd)!=CDM_PAUSE)
+ {
+ if (curMode(cd)==CDM_PLAY || curMode(cd)==CDM_PAUSE)
+ {
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ ((displaymode&2)?94:98),0, 4,5, 3,2);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ ((displaymode&2)?94:98),0, 4,5, 3,2);
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ ((displaymode&1)?94:98),5, 4,6, 3,7);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ ((displaymode&1)?94:98),5, 4,6, 3,7);
+ }
+ else
+ {
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ 98,0, 4,11, 3,2);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ 98,0, 4,11, 3,2);
+ }
+
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ (cdtime[0]?8*cdtime[0]:80),0, 8,11, 7,2);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ (cdtime[0]?8*cdtime[0]:80),0, 8,11, 7,2);
+
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ 8*cdtime[1],0, 8,11, 15,2);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ 8*cdtime[1],0, 8,11, 15,2);
+
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ 88,0, 3,11, 23,2);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ 88,0, 3,11, 23,2);
+
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ 8*cdtime[2],0, 8,11, 26,2);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ 8*cdtime[2],0, 8,11, 26,2);
+
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ 8*cdtime[3],0, 8,11, 34,2);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ 8*cdtime[3],0, 8,11, 34,2);
+
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ (playmode?102:106),0, 4,5, 42,2);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ (playmode?102:106),0, 4,5, 42,2);
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ (playmode==2?102:106),6, 4,5, 42,8);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ (playmode==2?102:106),6, 4,5, 42,8);
+ }
+ else
+ {
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ 98,0, 4,11, 3,2);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ 98,0, 4,11, 3,2);
+
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ 80,0, 8,11, 7,2);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ 80,0, 8,11, 7,2);
+
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ 80,0, 8,11, 15,2);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ 80,0, 8,11, 15,2);
+
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ 91,0, 3,11, 23,2);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ 91,0, 3,11, 23,2);
+
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ 80,0, 8,11, 26,2);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ 80,0, 8,11, 26,2);
+
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ 80,0, 8,11, 34,2);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ 80,0, 8,11, 34,2);
+
+ XCopyArea(Disp, currentLed(pixmap), Win, WinGC,
+ 106,0, 4,11, 42,2);
+ XCopyArea(Disp, currentLed(pixmap), Iconwin, WinGC,
+ 106,0, 4,11, 42,2);
+ }
+
+}
+
+/*
+ * getColor(colorname)
+ *
+ * save way to get a color from X
+ */
+Pixel getColor(char *ColorName)
+{
+ XColor Color;
+ XWindowAttributes Attributes;
+
+ XGetWindowAttributes(Disp,Root,&Attributes);
+ Color.pixel = 0;
+
+ if (!XParseColor (Disp, Attributes.colormap, ColorName, &Color))
+ fprintf(stderr,"wmrack: can't parse %s\n", ColorName);
+ else if(!XAllocColor (Disp, Attributes.colormap, &Color))
+ fprintf(stderr,"wmrack: can't allocate %s\n", ColorName);
+
+ return Color.pixel;
+}
+
+/*
+ * getTime()
+ *
+ * returns the time in milliseconds
+ */
+Time getTime()
+{
+ struct timeval tv;
+ gettimeofday(&tv,NULL);
+ return (tv.tv_sec*1000)+(tv.tv_usec/1000);
+}
diff --git a/wmrack.man b/wmrack.man
new file mode 100644
index 0000000..b5c073a
--- /dev/null
+++ b/wmrack.man
@@ -0,0 +1,126 @@
+.ds = \-\^\-
+.de Sp
+.if t .sp .3
+.if n .sp
+..
+.TH wmrack 1.0 "1 June 1997" wmrack
+.UC
+.SH NAME
+\fBwmrack\fP \- the WindowMaker Sound Control
+.SH SYNOPSIS
+.B wmrack
+[options]
+.SH DESCRIPTION
+The \fBwmrack\fP is CD player and Audio Mixer written to play audio CD's
+integrated in AfterSteps Wharf module or docked to WindowMaker.
+\fBwmrack\fP handles mounted volumes, opens and closes the tray, can
+display the current position in various ways and skips also data tracks.
+.SH OPTIONS
+.TP
+\fB\-d\fP \fBDEVICE\fP or \fB\*=device\fP \fBDEVICE\fP
+Sets the CD-ROM device. This defaults to /dev/cdrom.
+.TP
+\fB\-h\fP or \fB\*=help\fP
+Prints a summary of supported options and their default values.
+.TP
+\fB\-l\fP \fBCOLSPEC\fP or \fB\*=ledcolor\fP \fBCOLSPEC\fP
+Specifies the color of the led. It is darkened two times (for a total of
+three colors) to get all needed colors. So better use a bright color.
+.Sp
+For the design of own XPM, the ledcolor is made avaiable through the use
+of the symbolic xpm color names
+.I led_color_high,
+.I led_color_low,
+and
+.I led_color_med.
+There is also a symbol named
+.I led_color_back
+to get the default background color of the led\-display.
+.Sp
+To find out what colors are available, try
+.I showrgb
+(part of X11).
+.TP
+\fB\-p\fP or \fB\*=noprobe\fP
+This option disables the startup probing for a cd. Default is to probe the
+cdrom. This will close the tray and read the TOC of the cd (if there is one).
+.TP
+\fB\-s\fP \fBSTYLEFILE\fP or \fB\*=style\fP \fBSTYLEFILE\fP
+.B wmrack
+will try to load its window\-pixmaps from the specified
+.B STYLEFILE.
+It will search this file for XPM pixmaps named
+.I cdnodisc,
+.I cdplaying,
+.I cdpaused,
+.I cdstopped,
+.I cdled,
+.I mixer,
+and
+.I mixled.
+If some of those are not defined, the compile\-time defaults will be used.
+.TP
+\fB\-w\fP or \fB\*=withdrawn\fP
+Starts the
+.B wmrack
+in withdrawn window state. This is useful to dock the window to
+.B WindowMaker.
+.SH INVOCATION
+\fBwmrack\fP can be called using different ways. The most common invocation
+is from your dock file:
+.Sp
+ wmrack
+ WMRack
+ \fIPOSITION\fP 2 -1 0
+ wmrack
+ --withdrawn
+.Sp
+Another way to call \fBwmrack\fP is to swallow it into the \fBafterstep (1)\fP
+\fBWharf (1)\fP. This is best done playcing the following line into your
+\fI.steprc\fP:
+.Sp
+ *Wharf WMRack nil Swallow "wmrack" wmrack &
+.Sp
+This method will also work for other button\-bars, such as the \fBFvwmButtons (1)\fP
+of the \fBfvwm (1)\fP window manager.
+.SH USAGE
+The \fBwmrack\fP features a simple click interface. All times the buttons will
+show a standart sign which specifies the action it will do. But there are some
+noteable extensions to that explained below.
+.Sp
+The default behavior of \fBwmrack\fP is to try to read the cdrom at
+startup. If there was no cd, it will not try again unless you press the close
+or play button. This will close the cdrom and again try to read it. Unless
+there is a cd, \fBwmrack\fP will again suspend until your next action.
+.TP
+.B skip
+By pressing the button down and holding it on one of the prev/next track
+buttons the cdrom goes fast forward or backward.
+.TP
+.B time left
+A button-1 click into the time display switches between time running and time
+left display.
+.TP
+.B total time
+A button-2 click into the time display switches between track and total time.
+.TP
+.B repeat
+A button-3 click into the time display cycles through normal mode, repeat all,
+and repeat one play mode.
+.SH COPYRIGHTS
+Copyright 1997, Oliver Graf <ograf at fga.de>.
+Most styles copyright 1997, Heiko Wagner <hwagner at fga.de>.
+.Sp
+No guarantees or warranties or anything are provided or implied in any way
+whatsoever. Use this program at your own risk. Permission to use this program
+for any purpose is given, as long as the copyright is kept intact.
+.SH AUTHORS
+Oliver Graf <ograf at fga.de> -- the coding
+.Sp
+Heiko Wagner <hwagner at fga.de> -- the hyped window shapes
+.SH CREDITS
+Rob Malda <malda at cs.hope.edu> -- who had written ascd and asmixer
+.Sp
+Michael Kurz <mkurz at rzws.fh-aalen.de> -- also for ascd and asmixer
+.Sp
+Thomas McWilliams <tgm at netcom.com> -- who has done Workbone
diff --git a/xpmicon.c b/xpmicon.c
new file mode 100644
index 0000000..02a072f
--- /dev/null
+++ b/xpmicon.c
@@ -0,0 +1,306 @@
+/*
+ * $Id: xpmicon.c,v 1.3 1997/06/12 16:27:28 ograf Exp $
+ *
+ * part of WMRack
+ *
+ * handles the whole pixmap stuff (styles)
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <X11/Xlib.h>
+#include <X11/xpm.h>
+#include <X11/extensions/shape.h>
+
+#include "xpmicon.h"
+
+/* include the default xpms */
+#include "XPM/standart.style"
+
+/*
+ * first some requires variables
+ */
+XpmAttributes rackDefaultAttr;
+XpmIcon rackXpm[7]={{"cdnodisc",cdnodisc},
+ {"cdstopped",cdstopped},
+ {"cdplaying",cdplaying},
+ {"cdpaused",cdpaused},
+ {"mixer",NULL},
+ {"cdled",cdled},
+ {"mixled",NULL}};
+
+int curRack=RACK_NODISC, curLed=RACK_LED_PLAYER;
+
+XpmColorSymbol LedColorSymbols[4]={{"led_color_back", "#000000000000", 0},
+ {"led_color_high", "#0000FFFF0000", 0},
+ {"led_color_med", "#00009CE60000", 0},
+ {"led_color_low", "#000063180000", 0}};
+
+/*
+ * some internal functions
+ */
+/****************************************************************************/
+Pixel xpm_getDimColor(Display *disp, Drawable draw, char *ColorName, float dim)
+{
+ XColor Color;
+ XWindowAttributes Attributes;
+
+ XGetWindowAttributes(disp,draw,&Attributes);
+ Color.pixel = 0;
+
+ if (!XParseColor (disp, Attributes.colormap, ColorName, &Color))
+ fprintf(stderr,"xpm_getDimColor: can't parse %s\n", ColorName);
+ else
+ {
+ Color.red/=dim;
+ Color.green/=dim;
+ Color.blue/=dim;
+ Color.flags=DoRed|DoGreen|DoBlue;
+ if (!XAllocColor (disp, Attributes.colormap, &Color))
+ fprintf(stderr,"xpm_getDimColor: can't allocate %s\n", ColorName);
+ }
+
+ return Color.pixel;
+}
+
+int parseXpm(Display *disp, Drawable draw, char *buffer)
+{
+ int i, len;
+ char *d1, *d2;
+
+ /* check header */
+ if (strncmp(buffer,"/* XPM */\nstatic char *",23)!=0)
+ {
+ fprintf(stderr,"parseXpm: invalid start of xpm\n");
+ fprintf(stderr,buffer);
+ return 1;
+ }
+ /* skip spaces */
+ for (d1=buffer+23; *d1==32; d1++);
+ /* find end */
+ d2=strchr(d1,'[');
+ if (d2==NULL)
+ {
+ fprintf(stderr,"parseXpm: can't parse xpm-name\n");
+ return 1;
+ }
+ for (; *(d2-1)==32; d2--);
+ len=d2-d1;
+#ifdef DEBUG
+ {
+ char name[200];
+ strncpy(name,d1,len);
+ name[len]=0;
+ fprintf(stderr,"parseXpm: found XPM %s\n",name);
+ }
+#endif
+ /* find the right place */
+ for (i=0; i<RACK_MAX; i++)
+ {
+ if (strncmp(rackXpm[i].name,d1,len)==0)
+ {
+ if (rackXpm[i].loaded)
+ {
+ fprintf(stderr,"parseXpm: skipping double XPM for %s\n",d1);
+ break;
+ }
+ else
+ {
+ rackXpm[i].attributes=rackDefaultAttr;
+ if (XpmCreatePixmapFromBuffer(disp, draw, buffer,
+ &rackXpm[i].pixmap,
+ &rackXpm[i].mask,
+ &rackXpm[i].attributes)!=XpmSuccess)
+ {
+ fprintf(stderr,"parseXpm: can't create pixmap from buffer\n");
+ return 1;
+ }
+ rackXpm[i].loaded=1;
+ break;
+ }
+ }
+ }
+ return 0;
+}
+
+/*
+ * now the interface functions
+ */
+
+/*
+ * xpm_setDefaultAttr(color)
+ *
+ * creates the attributes for xpm pixmap creation and sets
+ * the led symbol colors to the specified color and 2 shades of it.
+ */
+int xpm_setDefaultAttr(Display *disp, Drawable draw, char *color)
+{
+ rackDefaultAttr.valuemask=XpmReturnPixels | XpmReturnExtensions | XpmColorSymbols;
+ rackDefaultAttr.numsymbols=4;
+ if (color!=NULL)
+ {
+ LedColorSymbols[1].value=NULL;
+ LedColorSymbols[1].pixel=xpm_getDimColor(disp,draw,color,1);
+ LedColorSymbols[2].value=NULL;
+ LedColorSymbols[2].pixel=xpm_getDimColor(disp,draw,color,1.65);
+ LedColorSymbols[3].value=NULL;
+ LedColorSymbols[3].pixel=xpm_getDimColor(disp,draw,color,2.6);
+ }
+ rackDefaultAttr.colorsymbols=LedColorSymbols;
+ return 0;
+}
+
+/*
+ * xpm_loadSet(display, drawable, filename)
+ *
+ * loads a style file
+ */
+int xpm_loadSet(Display *disp, Drawable draw, char *filename)
+{
+ FILE *f;
+ char *buffer=NULL, line[4096];
+ int bufpos=0, bufalloc=0, i;
+
+ f=fopen(filename,"r");
+ if (f==NULL)
+ {
+ perror("xpm_loadSet");
+ return 1;
+ }
+
+ for (i=0; i<RACK_MAX; i++)
+ rackXpm[i].loaded=0;
+
+ while (fgets(line,4095,f)!=NULL)
+ {
+ if (strcmp(line,"/* XPM */\n")==0)
+ {
+ if (buffer!=NULL)
+ {
+ if (parseXpm(disp,draw,buffer))
+ {
+ free(buffer);
+ fclose(f);
+ return 1;
+ }
+ free(buffer);
+ bufpos=bufalloc=0;
+ }
+ buffer=(char *)malloc(4096);
+ if (buffer==NULL)
+ {
+ fprintf(stderr,"xpm_loadSet: can' alloc enough mem\n");
+ fclose(f);
+ return 1;
+ }
+ bufalloc=4096;
+ strcpy(buffer+bufpos,line);
+ bufpos=strlen(buffer);
+ continue;
+ }
+ if (buffer!=NULL)
+ {
+ if (bufpos+strlen(line)>=bufalloc)
+ {
+ char *newbuf;
+ newbuf=(char *)realloc(buffer,bufalloc+4096);
+ if (newbuf==NULL)
+ {
+ fprintf(stderr,"xpm_loadSet: can' alloc enough mem\n");
+ fclose(f);
+ return 1;
+ }
+ buffer=newbuf;
+ bufalloc+=4096;
+ }
+ strcpy(buffer+bufpos,line);
+ bufpos+=strlen(line);
+ }
+ }
+ fclose(f);
+
+ if (buffer!=NULL)
+ {
+ if (parseXpm(disp,draw,buffer))
+ {
+ free(buffer);
+ return 1;
+ }
+ free(buffer);
+ }
+
+ /* check if all xpms are loaded */
+ for (i=0; i<RACK_MAX; i++)
+ if (!rackXpm[i].loaded)
+ {
+ fprintf(stderr,"xpm_loadSet: xpm for %s is missing, using default\n",
+ rackXpm[i].name);
+ if (xpm_setDefaultSet(disp,draw,i))
+ {
+ fprintf(stderr,"xpm_loadSet: can't set default pixmap\n");
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+/*
+ * int xpm_getDefaultsSet(display, drawable, num)
+ *
+ * sets the specified pixmap buffer to the compiletime default
+ * sets all pixmap buffers, if num is RACK_MAX
+ *
+ * returns 0 on success
+ */
+int xpm_setDefaultSet(Display *disp, Drawable draw, int num)
+{
+ int i, ret=0;
+
+ if (num==RACK_MAX)
+ for (i=0; i<RACK_MAX; i++)
+ {
+ if (rackXpm[i].standart==NULL)
+ continue;
+ rackXpm[i].attributes=rackDefaultAttr;
+ ret|=XpmCreatePixmapFromData(disp, draw, rackXpm[i].standart,
+ &rackXpm[i].pixmap,
+ &rackXpm[i].mask,
+ &rackXpm[i].attributes)!=XpmSuccess;
+ }
+ else
+ {
+ if (rackXpm[num].standart==NULL)
+ return 0;
+ rackXpm[num].attributes=rackDefaultAttr;
+ ret|=XpmCreatePixmapFromData(disp, draw, rackXpm[num].standart,
+ &rackXpm[num].pixmap,
+ &rackXpm[num].mask,
+ &rackXpm[num].attributes)!=XpmSuccess;
+ }
+ return ret;
+}
+
+/*
+ * xpm_freeSet(display)
+ *
+ * frees all pixmap data
+ */
+void xpm_freeSet(Display *disp)
+{
+ int i;
+
+#ifdef DEBUG
+ fprintf(stderr,"xpm_freeSet: freeing pixmaps\n");
+#endif
+ for (i=0; i<RACK_MAX; i++)
+ {
+ XFreePixmap(disp,rackXpm[i].pixmap);
+ XFreePixmap(disp,rackXpm[i].mask);
+ }
+#ifdef DEBUG
+ fprintf(stderr,"xpm_freeSet: done.\n");
+#endif
+}
+
diff --git a/xpmicon.h b/xpmicon.h
new file mode 100644
index 0000000..d38c60a
--- /dev/null
+++ b/xpmicon.h
@@ -0,0 +1,42 @@
+/*
+ * $Id: xpmicon.h,v 1.2 1997/06/04 19:41:38 ograf Exp $
+ *
+ * part of wmrack
+ *
+ * handles the whole pixmap stuff
+ */
+#ifndef _XPMICON_H
+#define _XPMICON_H
+
+/* Xpm struct */
+typedef struct {
+ char *name;
+ char **standart;
+ int loaded;
+ XpmAttributes attributes;
+ Pixmap pixmap;
+ Pixmap mask;
+} XpmIcon;
+
+/* the XpmIcon definitions and variables */
+#define RACK_NODISC 0
+#define RACK_STOP 1
+#define RACK_PLAY 2
+#define RACK_PAUSE 3
+#define RACK_MIXER 4
+#define RACK_LED_PLAYER 5
+#define RACK_LED_MIXER 6
+#define RACK_MAX 7
+
+extern XpmIcon rackXpm[];
+extern int curRack, curLed;
+
+#define currentXpm(w) rackXpm[curRack].##w
+#define currentLed(w) rackXpm[curLed].##w
+
+int xpm_setDefaultAttr(Display *disp, Drawable draw, char *color);
+int xpm_loadSet(Display *disp, Drawable draw, char *filename);
+int xpm_setDefaultSet(Display *disp, Drawable draw, int num);
+void xpm_freeSet(Display *disp);
+
+#endif
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-wmaker/wmrack.git
More information about the Pkg-wmaker-commits
mailing list