[Pkg-wmaker-commits] [wmrack] 32/97: Imported Upstream version 1.0b5
Doug Torrance
dtorrance-guest at moszumanska.debian.org
Sat Aug 22 02:42:02 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 b70b1b68d66c8e78e6eb15ecb85105a003994490
Author: Doug Torrance <dtorrance at monmouthcollege.edu>
Date: Tue Jan 6 18:32:58 2015 -0600
Imported Upstream version 1.0b5
---
.cvsignore | 8 +
CHANGES | 49 ++
Imakefile | 12 -
Makefile.cdctrl | 12 -
Makefile.in | 77 +++
README | 47 +-
README.cdctrl | 8 -
README.ctrl | 10 +
TODO | 18 +-
XPM/.cvsignore | 2 +
XPM/Makefile.in | 21 +
XPM/README | 29 +-
XPM/big.style | 705 -------------------
XPM/blue.style | 327 ---------
XPM/bluered.style | 1213 --------------------------------
XPM/cd-mask.xpm | 72 +-
XPM/clean.style | 374 ++++++++++
XPM/gold.style | 402 -----------
XPM/grey.style | 475 ++++++++-----
XPM/grey/alphaled.xpm | 18 +
XPM/grey/cdnodisc.xpm | 83 +--
XPM/grey/cdpaused.xpm | 83 +--
XPM/grey/cdplaying.xpm | 83 +--
XPM/grey/cdstopped.xpm | 83 +--
XPM/grey/led.xpm | 12 +-
XPM/grey/mixer.xpm | 59 ++
XPM/grey/mixled.xpm | 52 ++
XPM/led.xpm | 12 +-
XPM/mixer-mask.xpm | 54 ++
XPM/orange.style | 327 ---------
XPM/smiley.style | 523 --------------
XPM/standart.style | 1 -
cdctrl.c | 153 +++--
cdrom.c | 947 ++++++++++++++-----------
cdrom.h | 91 ++-
config.h.in | 7 +
configure | 1786 ++++++++++++++++++++++++++++++++++++++++++++++++
configure.in | 118 ++++
install-sh | 250 +++++++
library.c | 163 +++++
library.h | 33 +
mixctrl.c | 141 ++++
mixer.c | 511 ++++++++++++++
mixer.h | 59 ++
wmrack.c | 1267 +++++++++++++++++++++++++---------
wmrack.man | 117 +++-
xpmicon.c | 66 +-
xpmicon.h | 14 +-
48 files changed, 6222 insertions(+), 4752 deletions(-)
diff --git a/.cvsignore b/.cvsignore
index b8348e3..cccad1d 100644
--- a/.cvsignore
+++ b/.cvsignore
@@ -1,3 +1,11 @@
wmrack
cdctrl
+mixctrl
Makefile
+config.log
+config.cache
+config.status
+config.h
+confdefs.*
+configure
+.depend
diff --git a/CHANGES b/CHANGES
new file mode 100644
index 0000000..c19f80c
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,49 @@
+1.0b4 -> 1.0b5
+--------------
+- use of stafs in cd_doEject regargdless of libc version
+
+1.0b3 -> 1.0b4
+--------------
+- fixed the ustat problem with redhat 5
+- fixed the -X11 stuff in configure.in
+- changed a ifdef 0 in wmrack.c
+- fixed a segfault in lib_open/loadMixerRC
+
+1.0b2 -> 1.0b3
+--------------
+- tested repeat behaviour of play-lists -> all ok (at least for me)
+- fixed segfaults when no mixer file is present
+- my new Toshiba cdrom returnes AUDIO_INVALID on new disc
+ added code to handle this behaviour to cdrom.c
+- some stop changes (by dledford at dialnet.net)
+- mainLoop uwait upgraded to 5000ms to reduce polling (this is not the
+ right solution -- I want a sort of select....)
+- cd_getStatus will now only update after at least 5000ms passed
+ to prevent constant cdrom polling
+
+1.0b1 -> 1.0b2
+--------------
+- play sequence corrected after some tests
+- corrected GNUstep path autodetection and library creation
+- enabled GNUstep/Library path searchs for mixer and styles
+- fixed some play-opt leaks
+- added automatic play optimization (longest-sequence play)
+- another starttrack typo
+- missing led color symbols added
+- fixed starttrack set to curtrack when STOP is pressed
+- fixed missing mode & cur_track in cd_reopen
+- fixed track-display bug at end of disc
+- cd_doPlay only plays ONE track getStatus switches to next
+- changed CDPlayInfo start/end handling to just current
+
+0.9 -> 1.0b1
+------------
+- added a DATA notice for data-only discs
+- finished playlist stuff (automatic play of list, programing)
+- added exit function (Ctrl-Button-3 click on the mode changer)
+- added randomize to playlist
+- added playlist support
+- changed load/eject behaviour: button-3 click will always open the tray
+- added mixer library file
+- added mixer support (linux)
+- changed configuration from Imake to autoconf
diff --git a/Imakefile b/Imakefile
deleted file mode 100644
index a30cd3c..0000000
--- a/Imakefile
+++ /dev/null
@@ -1,12 +0,0 @@
-
-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/Makefile.cdctrl b/Makefile.cdctrl
deleted file mode 100644
index f2815ec..0000000
--- a/Makefile.cdctrl
+++ /dev/null
@@ -1,12 +0,0 @@
-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/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..d60cc11
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,77 @@
+
+# WMRack Makefile.in for autoconf
+#
+# Copyright (c) 1997 by Oliver Graf <ograf at fga.de>
+
+CC = @CC@
+CFLAGS = @CFLAGS@
+LIBS = @LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+RM = rm -f
+
+SOURCES = xpmicon.c library.c cdrom.c mixer.c wmrack.c \
+ cdctrl.c mixctrl.c
+OBJECTS = xpmicon.o library.o cdrom.o mixer.o wmrack.o
+CD_CTRL_OBJS = cdrom.o cdctrl.o
+MIXER_CTRL_OBJS = mixer.o mixctrl.o
+
+TARGETS = wmrack @CTRL@
+
+MANPAGES = wmrack.man
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+BINDIR = @bindir@
+MANDIR = @mandir@
+LIBDIR = @libdir@/WMRack
+
+MAN1DIR = $(MANDIR)/man1
+
+all: depend standart.style $(TARGETS)
+
+standart.style:
+ (cd XPM; make standart.style)
+
+wmrack: $(OBJECTS)
+ $(CC) $(OBJECTS) -o $@ $(LIBS)
+
+cdctrl: $(CD_CTRL_OBJS)
+ $(CC) $(CD_CTRL_OBJS) -o $@ $(LIBS)
+
+mixctrl: $(MIXER_CTRL_OBJS)
+ $(CC) $(MIXER_CTRL_OBJS) -o $@ $(LIBS)
+
+install: $(TARGETS) install-bin install-man install-lib
+
+install-bin:
+ mkdir -p $(BINDIR)
+ for prog in $(TARGETS); do \
+ $(INSTALL) $${prog} $(BINDIR) ; \
+ done
+
+install-man:
+ mkdir -p $(MAN1DIR)
+ for man in $(MANPAGES); do \
+ $(INSTALL_DATA) $${man} $(MAN1DIR)/`basename $${man} .man`.1x ; \
+ done
+
+install-lib:
+ (cd XPM; make install)
+
+clean:
+ $(RM) *.o core
+
+binclean: clean
+ $(RM) wmrack cdctrl mixctrl
+
+distclean: binclean
+ $(RM) Makefile XPM/Makefile config.h .depend \
+ config.status config.log config.cache XPM/standart.style
+
+depend: standart.style .depend
+
+.depend:
+ gcc -M $(SOURCES) >> Makefile
+ echo "Done" > .depend
+
diff --git a/README b/README
index 82ec1b9..f4cb170 100644
--- a/README
+++ b/README
@@ -3,14 +3,14 @@
The WindowMaker Sound Control Panel
by
- Oliver Graf <ograf at fga.de> and Heiko Wagner <hwagner at fga.de>
+ Oliver Graf <ograf 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).
+your CDROM, the Mixer and hopefully in the future to other sound related
+stuff (feel free to send suggestions).
It's main advantage is the high configurability, which will let you specify
different looks for the window at startup.
@@ -23,39 +23,50 @@ CD-Functions:
Mixer Functions:
* startup options for initial volume
- * four volume displays at one time
- * switchable sources at run-time
-
+ * control all your mixer devices
+ * control balance
+ * change record sources
INSTALLATION:
-------------
-xmkmf
-(make depend -- if you want to)
-make
-make install
-make install.man
+First you need to configure the whole package with:
+
+./configure (see './configure --help' for options)
+
+Now you can make a link in XPM to the style you want compiled into
+WMRack using 'ln -s A.style standart.style' or do nothing for the
+default.
+
+After this a 'make' will compile WMRack and a 'make install' will
+install it.
USAGE:
------
-Look into the manpage for supported options.
+Look into the manpage for supported options and functions.
+
+Easily swallowed by dock (use the --withdrawn option).
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
+Please send bug reports or suggestions to ograf at fga.de. Include
+a description how the bug can be reproduced plus the vendor and
+model of your cdrom and/or soundcard. Also include a debug log
+(configure with --with-debug -- this is the default for beta
+versions) created with your bug-reproduction-recipe.
+
+Send new styles or style questions to ograf at fga.de
+
HISTORY:
--------
-Basically this thing borrows much from WorkBone, ascd and asmixer. But in
+Basically this thing borrowed 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 $
+$Id: README,v 1.8 1997/10/21 15:42:10 ograf Exp $
diff --git a/README.cdctrl b/README.cdctrl
deleted file mode 100644
index caba465..0000000
--- a/README.cdctrl
+++ /dev/null
@@ -1,8 +0,0 @@
-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/README.ctrl b/README.ctrl
new file mode 100644
index 0000000..064b1be
--- /dev/null
+++ b/README.ctrl
@@ -0,0 +1,10 @@
+cdctrl and mixctrl are test programs for the cdrom.* and mixer.*
+stuff.
+
+To compile it you must give configure the --with-ctrl switch.
+
+Without the DEBUG and gdb stuff it also gives a useful command-line
+interface to your cdrom and mixer.
+
+-----
+$Id: README.ctrl,v 1.3 1997/07/17 14:51:45 ograf Exp $
diff --git a/TODO b/TODO
index 401ba52..ce162d2 100644
--- a/TODO
+++ b/TODO
@@ -1,14 +1,12 @@
-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
+ - WindowMaker Application Menu integration (if I get the test app to
+ run ;-) )
+ - 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
+ - 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
+ - cddb lookups + scroll text display
+ - cd-changer (I can't test this because I don't have such a thing)
+ - sound-file-player
+ - spectrum analyzer
diff --git a/XPM/.cvsignore b/XPM/.cvsignore
index a9a5aec..05b6a52 100644
--- a/XPM/.cvsignore
+++ b/XPM/.cvsignore
@@ -1 +1,3 @@
tmp
+standart.style
+Makefile
diff --git a/XPM/Makefile.in b/XPM/Makefile.in
new file mode 100644
index 0000000..41de47a
--- /dev/null
+++ b/XPM/Makefile.in
@@ -0,0 +1,21 @@
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+LN = @LN_S@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+BINDIR = @bindir@
+MANDIR = @mandir@
+LIBDIR = @libdir@/WMRack
+
+standart.style: grey.style
+ $(LN) grey.style standart.style
+
+install:
+ mkdir -p $(LIBDIR)
+ for style in *.style; do \
+ if test "$${style}" != "standart.style"; then \
+ $(INSTALL_DATA) $${style} $(LIBDIR); \
+ fi \
+ done
diff --git a/XPM/README b/XPM/README
index 6d4b714..45143c2 100644
--- a/XPM/README
+++ b/XPM/README
@@ -4,19 +4,24 @@ 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.
+cd_mask.xpm is the standart mask of on of the window faces.
+mixer_mask.xpm is the standart mask of the mixer window face.
+led.xpm are the digits and signs for the cdplayer.
+mixled.xpm these are the scales and source buttons of the mixer.
+alphaled.xpm this is a Dot-LED style characterset (uppercase + digits).
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'
+ cdnodisc (do not include any track +/- buttons)
+ cdpaused
+ cdplaying
+ cdstopped
+ mixer
+ mixled (this must be changed because of the recsrc button)
+plus (until now not really needed, the compiletime default will do):
+ led
+ alphaled
+cat all eight into one file using for example:
+ 'cat no.xpm pl.xpm pau.xpm sto.xpm mix.xpm led.xpm mixled.xpm alpha.xpm >a.style'
If you want to submit new styles to the WMRack distribution, send
-them to Heiko Wagner <hwagner at fga.de>.
+them to Oliver Graf <ograf at fga.de>.
diff --git a/XPM/big.style b/XPM/big.style
deleted file mode 100644
index b479cb1..0000000
--- a/XPM/big.style
+++ /dev/null
@@ -1,705 +0,0 @@
-/*
- * 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
deleted file mode 100644
index ec5d677..0000000
--- a/XPM/blue.style
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * 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
deleted file mode 100644
index 8a18f90..0000000
--- a/XPM/bluered.style
+++ /dev/null
@@ -1,1213 +0,0 @@
-/*
- * 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
index cd9a2af..163d703 100644
--- a/XPM/cd-mask.xpm
+++ b/XPM/cd-mask.xpm
@@ -3,55 +3,55 @@ static char *sample_mask[] = {
/* columns rows colors chars-per-pixel */
"48 48 3 1",
" c Black",
-". c Gray100",
+". c Gray50",
"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.............",
+".............XXXX..............XXXX.............",
+".............XXXX..............XXXX.............",
+".............XXXX..............XXXX.............",
+".............XXXX..............XXXX.............",
+".............XXXX..............XXXX.............",
+".............XXXX..............XXXX.............",
+".............XXXX..............XXXX.............",
+".............XXXX..............XXXX.............",
+".............XXXX..............XXXX.............",
+".............XXXX..............XXXX.............",
+".............XXXX..............XXXX.............",
+".............XXXX..............XXXX.............",
+".............XXXX..............XXXX.............",
"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.............",
+".............X.. ..X.............",
+".............X.. ..X.............",
+".............X.. ..X.............",
+".............X.. ..X.............",
+".............X.. ..X.............",
+".............X.. ..X.............",
+".............X.. ..X.............",
+".............X.. ..X.............",
+".............X.. ..X.............",
+".............X.. ..X.............",
".............X....................X.............",
"XXXXXXXXXXXXXX....................XXXXXXXXXXXXXX"
};
diff --git a/XPM/clean.style b/XPM/clean.style
new file mode 100644
index 0000000..6519d73
--- /dev/null
+++ b/XPM/clean.style
@@ -0,0 +1,374 @@
+/*
+ * 'clean' style created by <ulho at uni-paderborn.de>
+ *
+ * named after the schumacher-clean font
+ *
+ */
+/* XPM */
+static char * alphaled[] = {
+"296 11 2 1",
+" s led_color_back c black",
+". s led_color_high c green",
+" .... . .... .... .. ...... ... ...... .... .... ",
+" . ...... .... ..... ....... ....... .... . . ..... ... . . . . . . . ... ...... ... ...... ..... ....... . . . . . . . . . . ....... . . .. . . . . .. . . . . . . . . ",
+" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+" ... . . . . . . . . . . . . . . . .. .. .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+" . . . . . . . . . . . . . . . . . .. .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... . . ..... ..... . .... . . ",
+" . . ...... . . . ..... ..... . ....... . . .. . . . . . . . . . . ...... . . ...... ..... . . . . . . . . . . . . . . . . . . . . . . . . . ..... ",
+" ..... . . . . . . . . ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+" . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . .. .. . . . . . . . . . ...... . . . . . . . ",
+" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. .. . . . . . . . . . . . . . . . . . . . ",
+" .. .. ...... .... ..... ....... . ..... . . ..... .... . . ...... . . . . ... . ... . . ..... . ..... . . . . . . ....... .... . ...... .... ... .... .... . .... ... ",
+" "};
+/* XPM */
+static char * cdnodisc[] = {
+"48 48 6 1",
+" c #318C318C318C",
+". c #631863186318",
+"X s led_color_back c black",
+"o c #CE72CE72CE72",
+"O c none",
+"+ s led_color_high c green",
+" .",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+".ooooooooooooooooooooooooooooooooooooooooooooooo",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"oooooooooooo.OOOOooooooooooooo.OOOOoooooooooooo.",
+"oXXXXXXXXXXX OOOOoXXXXXXXXXXXX OOOOoXXXXXXXXXXX ",
+"oXXXXXXXXXXX OOOOoXXXXXX++XXXX OOOOoXXXXX+XXXXX ",
+"oXX+++XXXXXX OOOOoXXXXX+++X+XX OOOOoXXXX+++XXXX ",
+"oXX+X++XXXXX OOOOoXX++++X+XXXX OOOOoXXX++X++XXX ",
+"oXX+XX++XXXX OOOOoXX+X+XX+XXXX OOOOoXX++XXX++XX ",
+"oXX+XXX++XXX OOOOoXX+X+XX+XX+X OOOOoXX+XXXXX+XX ",
+"oXX+XX++XXXX OOOOoXX+X+XX+XXXX OOOOoXX+++++++XX ",
+"oXX+X++XXXXX OOOOoXX++++X+XXXX OOOOoXXXXXXXXXXX ",
+"oXX+++XXXXXX OOOOoXXXXX+++X+XX OOOOoXX+++++++XX ",
+"oXXXXXXXXXXX OOOOoXXXXXX++XXXX OOOOoXXXXXXXXXXX ",
+"oXXXXXXXXXXX OOOOoXXXXXXXXXXXX OOOOoXXXXXXXXXXX ",
+". OOOO. OOOO. ",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOO .OOOOOOOOOOOOOOO",
+"oooooooooooo.OO XOXOXOXOXOXOXOXOoOOoooooooooooo.",
+"oXOXOXOXOXOX OO OXOXOXOXOXOXOXOXoOOoXOXOXOXOXOX ",
+"oOXOXOXOXOXO OO XOXOXOXOXOXOXOXOoOOoOXOXOXOXOXO ",
+"oXO+OXO+O+OX OO OXOXOXOXOXOXOXOXoOOoXO+O+OXO+OX ",
+"oOXOXO+OXOXO OO XOXOXOXOXOXOXOXOoOOoOXOXO+OXOXO ",
+"oXO+O+OXO+OX OO OXOXOXOXOXOXOXOXoOOoXO+OXO+O+OX ",
+"oOXO+OXOXOXO OO XOXOXOXOXOXOXOXOoOOoOXOXOXO+OXO ",
+"oXO+O+OXO+OX OO OXOXOXOXOXOXOXOXoOOoXO+OXO+O+OX ",
+"oOXOXO+OXOXO OO XOXOXOXOXOXOXOXOoOOoOXOXO+OXOXO ",
+"oXO+OXO+O+OX OO OXOXOXOXOXOXOXOXoOOoXO+O+OXO+OX ",
+"oOXOXOXOXOXO OO XOXOXOXOXOXOXOXOoOOoOXOXOXOXOXO ",
+"oXOXOXOXOXOX OO OXOXOXOXOXOXOXOXoOOoXOXOXOXOXOX ",
+".. OO XOXOXOXOXOXOXOXXoOO. ",
+"OOOOOOOOOOOOOOO.oooooooooooooooooOOOOOOOOOOOOOOO"};
+/* XPM */
+static char * cdpaused[] = {
+"48 48 7 1",
+" c #318C318C318C",
+". c #631863186318",
+"X s led_color_back c black",
+"o c #CE72CE72CE72",
+"O c #9CE69CE69CE6",
+"+ c none",
+"@ s led_color_high c green",
+" .",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+"Oooooooooooooooooooooooooooooooooooooooooooooooo",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"ooooooooooooO++++oooooooooooooO++++ooooooooooooO",
+"oXXXXXXXXXXX ++++oXXXXXXXXXXXX ++++oXXXXXXXXXXX ",
+"oXXXXXXXXXXX ++++oXXXXXX@@XXXX ++++oXXXXXXXXXXX ",
+"oXX@@@XXXXXX ++++oXXXXX@@@XXXX ++++oXX@@@@@@@XX ",
+"oXX at X@@XXXXX ++++oXX@@@@X at X@XX ++++oXX at XXXXX@XX ",
+"oXX at XX@@XXXX ++++oXX at X@XX at XXXX ++++oXX at XXXXX@XX ",
+"oXX at XXX@@XXX ++++oXX at X@XX at XX@X ++++oXX at XXXXX@XX ",
+"oXX at XX@@XXXX ++++oXX at X@XX at XXXX ++++oXX at XXXXX@XX ",
+"oXX at X@@XXXXX ++++oXX@@@@X at X@XX ++++oXX at XXXXX@XX ",
+"oXX@@@XXXXXX ++++oXXXXX@@@XXXX ++++oXX@@@@@@@XX ",
+"oXXXXXXXXXXX ++++oXXXXXX@@XXXX ++++oXXXXXXXXXXX ",
+"oXXXXXXXXXXX ++++oXXXXXXXXXXXX ++++oXXXXXXXXXXX ",
+"O ++++O ++++O ",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++++++++++ O+++++++++++++++",
+"ooooooooooooO++ XXXXXXXXXXXXXXXXo++ooooooooooooO",
+"oXXXXXXXXXXX ++ XXXXXXXXXXXXXXXXo++oXXXXXXXXXXX ",
+"oXXXXXXXXXXX ++ XXXXXXXXXXXXXXXXo++oXXXXXXXXXXX ",
+"oXX at XXX@@@XX ++ XXXXXXXXXXXXXXXXo++oXX@@@XXX at XX ",
+"oXX at XX@@X at XX ++ XXXXXXXXXXXXXXXXo++oXX at X@@XX at XX ",
+"oXX at X@@XX at XX ++ XXXXXXXXXXXXXXXXo++oXX at XX@@X at XX ",
+"oXX@@@XXX at XX ++ XXXXXXXXXXXXXXXXo++oXX at XXX@@@XX ",
+"oXX at X@@XX at XX ++ XXXXXXXXXXXXXXXXo++oXX at XX@@X at XX ",
+"oXX at XX@@X at XX ++ XXXXXXXXXXXXXXXXo++oXX at X@@XX at XX ",
+"oXX at XXX@@@XX ++ XXXXXXXXXXXXXXXXo++oXX@@@XXX at XX ",
+"oXXXXXXXXXXX ++ XXXXXXXXXXXXXXXXo++oXXXXXXXXXXX ",
+"oXXXXXXXXXXX ++ XXXXXXXXXXXXXXXXo++oXXXXXXXXXXX ",
+"O ++ XXXXXXXXXXXXXXXXo++O ",
+"+++++++++++++++Oooooooooooooooooo+++++++++++++++"};
+/* XPM */
+static char * cdplaying[] = {
+"48 48 7 1",
+" c #318C318C318C",
+". c #631863186318",
+"X s led_color_back c black",
+"o c #CE72CE72CE72",
+"O c #9CE69CE69CE6",
+"+ c none",
+"@ s led_color_high c green",
+" .",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+"Oooooooooooooooooooooooooooooooooooooooooooooooo",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"ooooooooooooO++++oooooooooooooO++++ooooooooooooO",
+"oXXXXXXXXXXX ++++oXXXXXXXXXXXX ++++oXXXXXXXXXXX ",
+"oXXXXXXXXXXX ++++oXXXXXX@@XXXX ++++oXXXXXXXXXXX ",
+"oXX@@@X@@@XX ++++oXXXXX@@@XXXX ++++oXX@@@@@@@XX ",
+"oXX at X@X at X@XX ++++oXX@@@@X at X@XX ++++oXX at XXXXX@XX ",
+"oXX at X@X at X@XX ++++oXX at X@XX at XXXX ++++oXX at XXXXX@XX ",
+"oXX at X@X at X@XX ++++oXX at X@XX at XX@X ++++oXX at XXXXX@XX ",
+"oXX at X@X at X@XX ++++oXX at X@XX at XXXX ++++oXX at XXXXX@XX ",
+"oXX at X@X at X@XX ++++oXX@@@@X at X@XX ++++oXX at XXXXX@XX ",
+"oXX@@@X@@@XX ++++oXXXXX@@@XXXX ++++oXX@@@@@@@XX ",
+"oXXXXXXXXXXX ++++oXXXXXX@@XXXX ++++oXXXXXXXXXXX ",
+"oXXXXXXXXXXX ++++oXXXXXXXXXXXX ++++oXXXXXXXXXXX ",
+"O ++++O ++++O ",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++++++++++ O+++++++++++++++",
+"ooooooooooooO++ XXXXXXXXXXXXXXXXo++ooooooooooooO",
+"oXXXXXXXXXXX ++ XXXXXXXXXXXXXXXXo++oXXXXXXXXXXX ",
+"oXXXXXXXXXXX ++ XXXXXXXXXXXXXXXXo++oXXXXXXXXXXX ",
+"oXX at XXX@@@XX ++ XXXXXXXXXXXXXXXXo++oXX@@@XXX at XX ",
+"oXX at XX@@X at XX ++ XXXXXXXXXXXXXXXXo++oXX at X@@XX at XX ",
+"oXX at X@@XX at XX ++ XXXXXXXXXXXXXXXXo++oXX at XX@@X at XX ",
+"oXX@@@XXX at XX ++ XXXXXXXXXXXXXXXXo++oXX at XXX@@@XX ",
+"oXX at X@@XX at XX ++ XXXXXXXXXXXXXXXXo++oXX at XX@@X at XX ",
+"oXX at XX@@X at XX ++ XXXXXXXXXXXXXXXXo++oXX at X@@XX at XX ",
+"oXX at XXX@@@XX ++ XXXXXXXXXXXXXXXXo++oXX@@@XXX at XX ",
+"oXXXXXXXXXXX ++ XXXXXXXXXXXXXXXXo++oXXXXXXXXXXX ",
+"oXXXXXXXXXXX ++ XXXXXXXXXXXXXXXXo++oXXXXXXXXXXX ",
+"O ++ XXXXXXXXXXXXXXXXo++O ",
+"+++++++++++++++Oooooooooooooooooo+++++++++++++++"};
+/* XPM */
+static char * cdstopped[] = {
+"48 48 7 1",
+" c #318C318C318C",
+". c #631863186318",
+"X s led_color_back c black",
+"o c #CE72CE72CE72",
+"O c #9CE69CE69CE6",
+"+ c none",
+"@ s led_color_high c green",
+" .",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo",
+"Oooooooooooooooooooooooooooooooooooooooooooooooo",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"ooooooooooooO++++oooooooooooooO++++ooooooooooooO",
+"oXXXXXXXXXXX ++++oXXXXXXXXXXXX ++++oXXXXXXXXXXX ",
+"oXXXXXXXXXXX ++++oXXXXXX@@XXXX ++++oXXXXX at XXXXX ",
+"oXX@@@XXXXXX ++++oXXXXX@@@XXXX ++++oXXXX@@@XXXX ",
+"oXX at X@@XXXXX ++++oXX@@@@X at X@XX ++++oXXX@@X@@XXX ",
+"oXX at XX@@XXXX ++++oXX at X@XX at XXXX ++++oXX@@XXX@@XX ",
+"oXX at XXX@@XXX ++++oXX at X@XX at XX@X ++++oXX at XXXXX@XX ",
+"oXX at XX@@XXXX ++++oXX at X@XX at XXXX ++++oXX@@@@@@@XX ",
+"oXX at X@@XXXXX ++++oXX@@@@X at X@XX ++++oXXXXXXXXXXX ",
+"oXX@@@XXXXXX ++++oXXXXX@@@XXXX ++++oXX@@@@@@@XX ",
+"oXXXXXXXXXXX ++++oXXXXXX@@XXXX ++++oXXXXXXXXXXX ",
+"oXXXXXXXXXXX ++++oXXXXXXXXXXXX ++++oXXXXXXXXXXX ",
+"O ++++O ++++O ",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++++++++++++++++++",
+"+++++++++++++++ O+++++++++++++++",
+"ooooooooooooO++ XXXXXXXXXXXXXXXXo++ooooooooooooO",
+"oXXXXXXXXXXX ++ XXXXXXXXXXXXXXXXo++oXXXXXXXXXXX ",
+"oXXXXXXXXXXX ++ XXXXXXXXXXXXXXXXo++oXXXXXXXXXXX ",
+"oXX at XXX@@@XX ++ XXXXXXXXXXXXXXXXo++oXX@@@XXX at XX ",
+"oXX at XX@@X at XX ++ XXXXXXXXXXXXXXXXo++oXX at X@@XX at XX ",
+"oXX at X@@XX at XX ++ XXXXXXXXXXXXXXXXo++oXX at XX@@X at XX ",
+"oXX@@@XXX at XX ++ XXXXXXXXXXXXXXXXo++oXX at XXX@@@XX ",
+"oXX at X@@XX at XX ++ XXXXXXXXXXXXXXXXo++oXX at XX@@X at XX ",
+"oXX at XX@@X at XX ++ XXXXXXXXXXXXXXXXo++oXX at X@@XX at XX ",
+"oXX at XXX@@@XX ++ XXXXXXXXXXXXXXXXo++oXX@@@XXX at XX ",
+"oXXXXXXXXXXX ++ XXXXXXXXXXXXXXXXo++oXXXXXXXXXXX ",
+"oXXXXXXXXXXX ++ XXXXXXXXXXXXXXXXo++oXXXXXXXXXXX ",
+"O ++ XXXXXXXXXXXXXXXXo++O ",
+"+++++++++++++++Oooooooooooooooooo+++++++++++++++"};
+/* XPM */
+static char * cdled[] = {
+"110 11 2 1",
+" s led_color_back c black",
+". s led_color_high c green",
+" .... . .... .... .. ...... ... ...... .... .... ... .. ",
+". . .. . . . . .. . . . . . . . . . . . ",
+". . . . . . . . . . . . . . . . .. ",
+". . . . . . . . . . . . . . . . . ",
+". . . . ... . . ..... ..... . .... . . . . ",
+". . . . . . . . . . . . . ..... ... ",
+". . . . . . . . . . . . . . . ",
+". . . . . ...... . . . . . . . . . . .. ",
+". . . . . . . . . . . . . . . ... . ",
+" .... . ...... .... ... .... .... . .... ... . . . ",
+" . . . "};
+/* XPM */
+static char * mixer[] = {
+"48 48 6 1",
+" c #318C318C318C",
+". c #631863186318",
+"X c none",
+"o s led_color_back c black",
+"O c #CE72CE72CE72",
+"+ s led_color_high c green",
+" .XXX .XXX .",
+" oooooooooOXXX ooooooooooooooooooOXXX oooooooooO",
+" oooooooooOXXX ooooooooooooooooooOXXX oooooooooO",
+" oooooooooOXXX ooooooooooooooooooOXXX oooooooooO",
+" oooooooooOXXX ooooooooooooooooooOXXX oooooooooO",
+" oooooooooOXXX ooooooooooooooooooOXXX oooooooooO",
+" oooooooooOXXX ooooooooooooooooooOXXX oooooooooO",
+" oooooooooOXXX ooooooooooooooooooOXXX oooooooooO",
+" oooooooooOXXX ooooooooooooooooooOXXX oooooooooO",
+" oooooooooOXXX ooooooooooooooooooOXXX oooooooooO",
+" oooooooooOXXX ooooooooooooooooooOXXX oooooooooO",
+" oooooooooOXXX ooooooooooooooooooOXXX oooooooooO",
+" oooooooooOXXX ooooooooooooooooooOXXX oooooooooO",
+" oooooooooOXXX ooooooooooooooooooOXXX oooooooooO",
+" oooooooooOXXX.OOOOOOOOOOOOOOOOOOOXXX oooooooooO",
+" oooooooooOXXXXXXXXXXXXXXXXXXXXXXXXXX oooooooooO",
+" oooooooooOXXXXXXXXXXXXXXXXXXXXXXXXXX oooooooooO",
+" oooooooooOXXXXXXXXXXXXXXXXXXXXXXXXXX oooooooooO",
+" oooooooooOXXXXXXOOOOOOOOOOOOO.XXXXXX oooooooooO",
+" oooooooooOXXXXXXOoooooooooooo XXXXXX oooooooooO",
+" oooooooooOXXXXXXOoooooooooooo XXXXXX oooooooooO",
+" oooooooooOXXXXXXOoooo++++oooo XXXXXX oooooooooO",
+" oooooooooOXXXXXXOooo++oo++ooo XXXXXX oooooooooO",
+" oooooooooOXXXXXXOoo++oooo++oo XXXXXX oooooooooO",
+" oooooooooOXXXXXXOoo+oo++oo+oo XXXXXX oooooooooO",
+" oooooooooOXXXXXXOoo++oooo++oo XXXXXX oooooooooO",
+" oooooooooOXXXXXXOooo++oo++ooo XXXXXX oooooooooO",
+" oooooooooOXXXXXXOoooo++++oooo XXXXXX oooooooooO",
+" oooooooooOXXXXXXOoooooooooooo XXXXXX oooooooooO",
+" oooooooooOXXXXXXOoooooooooooo XXXXXX oooooooooO",
+" oooooooooOXXXXXX. XXXXXX oooooooooO",
+" oooooooooOXXXXXXXXXXXXXXXXXXXXXXXXXX oooooooooO",
+" oooooooooOXXXXXXXXXXXXXXXXXXXXXXXXXX oooooooooO",
+" oooooooooOXXXXXXXXXXXXXXXXXXXXXXXXXX oooooooooO",
+" oooooooooOXXXXXX..............XXXXXX oooooooooO",
+" oooooooooOXXXXXX.oooooooooooo.XXXXXX oooooooooO",
+" oooooooooOXXXXXX.oooooooooooo.XXXXXX oooooooooO",
+" oooooooooOXXXXXX.oooooooooooo.XXXXXX oooooooooO",
+" oooooooooOXXXXXX.oooooooooooo.XXXXXX oooooooooO",
+" oooooooooOXXXXXX.oooooooooooo.XXXXXX oooooooooO",
+" oooooooooOXXXXXX.oooooooooooo.XXXXXX oooooooooO",
+" oooooooooOXXXXXX.oooooooooooo.XXXXXX oooooooooO",
+" oooooooooOXXXXXX.oooooooooooo.XXXXXX oooooooooO",
+" oooooooooOXXXXXX.oooooooooooo.XXXXXX oooooooooO",
+" oooooooooOXXXXXX.oooooooooooo.XXXXXX oooooooooO",
+" oooooooooOXXXXXX.oooooooooooo.XXXXXX oooooooooO",
+".OOOOOOOOOOXXXXXX..............XXXXXX.OOOOOOOOOO",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"};
+/* XPM */
+static char * mixled[] = {
+"58 39 6 1",
+" s led_color_back c black",
+". c red",
+"X s led_color_high c green",
+"o c #CE72CE72CE72",
+"O c #631863186318",
+"+ c #318C318C318C",
+" . . . . . . . . . . X .oooooooooooooO",
+" . . . . . . . . . . X .o +",
+" . . . . . . . . . . X .o X +",
+"X X.X X.X X.X X.X X.X X.X X.X X.X X.XXX.XXX.o XX X +",
+" . . . . . . . . . X . X .o XX X X +",
+" . . . . . . . . . X . X .o X X X +",
+" . . . . . . . . . X . X .o X X X X +",
+"X X.X X.X X.X X.X X.X X.X X.X X.XXX.XXX.XXX.o X X X +",
+" . . . . . . . . X . X . X .o XX X X +",
+" . . . . . . . . X . X . X .o XX X +",
+" . . . . . . . . X . X . X .o X +",
+"X X.X X.X X.X X.X X.X X.X X.XXX.XXX.XXX.XXX.o +",
+" . . . . . . . X . X . X . X .O+++++++++++++",
+" . . . . . . . X . X . X . X .+++++++++++++O",
+" . . . . . . . X . X . X . X .+ o",
+"X X.X X.X X.X X.X X.X X.XXX.XXX.XXX.XXX.XXX.+ X o",
+" . . . . . . X . X . X . X . X .+ XXX X o",
+" . . . . . . X . X . X . X . X .+ X X X o",
+" . . . . . . X . X . X . X . X .+ X XX o",
+"X X.X X.X X.X X.X X.XXX.XXX.XXX.XXX.XXX.XXX.+ X XX o",
+" . . . . . X . X . X . X . X . X .+ X XX o",
+" . . . . . X . X . X . X . X . X .+ X X X o",
+" . . . . . X . X . X . X . X . X .+ XXX X o",
+"X X.X X.X X.X X.XXX.XXX.XXX.XXX.XXX.XXX.XXX.+ X o",
+" . . . . X . X . X . X . X . X . X .+ o",
+" . . . . X . X . X . X . X . X . X .Oooooooooooooo",
+" . . . . X . X . X . X . X . X . X . ",
+"X X.X X.X X.XXX.XXX.XXX.XXX.XXX.XXX.XXX.XXX. ",
+" . . . X . X . X . X . X . X . X . X . ",
+" . . . X . X . X . X . X . X . X . X . ",
+" . . . X . X . X . X . X . X . X . X . ",
+"X X.X X.XXX.XXX.XXX.XXX.XXX.XXX.XXX.XXX.XXX. ",
+" . . X . X . X . X . X . X . X . X . X . ",
+" . . X . X . X . X . X . X . X . X . X . ",
+" . . X . X . X . X . X . X . X . X . X . ",
+"X X.XXX.XXX.XXX.XXX.XXX.XXX.XXX.XXX.XXX.XXX. ",
+" . X . X . X . X . X . X . X . X . X . X . ",
+" . X . X . X . X . X . X . X . X . X . X . ",
+" . X . X . X . X . X . X . X . X . X . X . "};
diff --git a/XPM/gold.style b/XPM/gold.style
deleted file mode 100644
index dcbd624..0000000
--- a/XPM/gold.style
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- * 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
index fa72a9f..f3d678e 100644
--- a/XPM/grey.style
+++ b/XPM/grey.style
@@ -1,247 +1,269 @@
/*
- * WMRack standart style
+ * This is a WMRack style
*
* Copyright 1997 by Oliver Graf <ograf at fga.de>
*/
/* XPM */
+static char * alphaled[] = {
+"296 11 4 1",
+" c #000063180000 s led_color_low",
+". c #000000000000 s led_color_back",
+"X c #0000FFFF0000 s led_color_high",
+"o c #00009CE60000 s led_color_med",
+" .XoX. .XoXoX. . .XoX. .XoXoX. .XoXoXoX.XoXoXoX. .XoX. .X. . .X. oXoXo .XoXoXoX.X. . .X.X. . . .X. . .X.X. . .X. .XoX. .XoXoX. . .XoX. .XoXoX. . .XoX. .XoXoXoX.X. . .X.X. . .X.X. . .X.X. . .X.X. . .X.XoXoXoX. .XoX. . . . .X. .XoX. . .XoX. .X. . . .XoXoXoX. . .XoX.XoXoXoX. .XoX. . .XoX. . . . . .",
+".o...o..o....o...o...o..o....o..o.......o........o...o..o.....o....X..........o.o....o..o.......oX...Xo.oo....o..o...o..o....o...o...o..o....o...o...o.....X....o.....o.o.....o.o.....o.o.....o.o.....o.......o..o...o.......oo..o...o...o...o..o.......o..........o..........o..o...o...o...o.... .....",
+"X. . .X.X. . .X.X. . .X.X. . .X.X. . . .X. . . .X. . .X.X. . .X. . o . . . . .X.X. .X. .X. . . .X.X.X.X.X.X. .X.X. . .X.X. . .X.X. . .X.X. . .X.X. . .X. . o . .X. . .X.X. . .X.X. . .X.X. . .X.X. . .X. . . .X.X. .X.X. . .X.X.X. . .X.X. . .X.X. . . .X. . . . .X. . . . . .X.X. . .X.X. . .X. . . . .",
+"o.....o.o.....o.o.......o.....o.o.......o.......o.......o.....o....X..........o.o..o....o.......o..X..o.o.o...o.o.....o.o.....o.o.....o.o.....o.o..........X....o.....o.o.....o.o.....o..o...o...o...o.......o..o...o.o....o..o.......o.......o.o.......o........o...........o...o...o..o.....o.........",
+"X. . .X.X. . .X.X. . . .X. . .X.X. . . .X. . . .X. . . .X. . .X. . o . . . . .X.X.X. . .X. . . .X. . .X.X.X. .X.X. . .X.X. . .X.X. . .X.X. . .X. X . . . . o . .X. . .X.X. . .X.X. X .X. .X.X. . .X.X. . . .X. .X. .X.X. .X. .X. . . .X. . . .X.X. .X. .XoXoXo .X.XoX. . . .X. . .XoX. .X. . .X. . . . .",
+"oXoXoXo.oXoXoX..o.......o.....o.oXoXoX..oXoXoX..o..XoXo.oXoXoXo....X..........o.oo......o.......o.....o.o..o..o.o.....o.o....o..o.....o.o....o....XoX......X....o.....o..o...o..o..o..o....o.......o.......o....o..o..o.......o......o....oXoX..o...o.........o.oo...o......o....o...o...o...oo.........",
+"X. . .X.X. . .X.X. . . .X. . .X.X. . . .X. . . .X. . .X.X. . .X. . o . . . . .X.X.X. . .X. . . .X. . .X.X. .X.X.X. . .X.XoXoX. .X.X. .X.XoXoX. . . . X . . o . .X. . .X. X . X .X. X .X. .X.X. . . X . . .X. . .X.X. .X. . . .X. . .X. . . . .X.XoXoXoX. . . .X.X. . .X. . .X. .X. . .X. .XoX.X. . . . .",
+"o.....o.o.....o.o.......o.....o.o.......o.......o.....o.o.....o....X..........o.o..o....o.......o.....o.o...o.o.o.....o.o.......o..o..o.o..o..........o....X....o.....o...o.o....o.o.o...o...o.....o.....o......o.o...o.......o....o..........o.....o.........o.o.....o....o....o.....o......o..........",
+"X. . .X.X. . .X.X. . .X.X. . .X.X. . . .X. . . .X. . .X.X. . .X. . o . .X. . .X.X. .X. .X. . . .X. . .X.X. .X.X.X. . .X.X. . . .X. .X.X.X. .X. .X. . .X. . o . .X. . .X. .X.X. . X X X .X. . .X. . X . .X. . . .X.X. .X. . . .X. .X. . .X. . .X. . .X. .X. . .X.X. . .X. .X. . .X. . .X. . .X. . . . . .",
+"o.....o.o....o...o...o..o....o..o.......o........o...o..o.....o....X.....o...o..o....o..o.......o.....o.o....oo..o...o..o........o...o..o....o...o...o.....X.....o...o.....o......o.o...o.....o....o....o........o...o........o..o.......o...o......o....o...o...o...o....o......o...o.....o............",
+"X. . .X.XoXoX. . .XoX. .XoXoX. .XoXoXoX.X. . . . .XoX. .X. . .X. oXoXo . .XoX. .X. . .X.XoXoXoX.X. . .X.X. . .X. .XoX. .X. . . . .XoX.X.X. . .X. .XoX. . . o . . .XoX. . . X . . .X.X. .X. . .X. . X . .XoXoXoX. .XoX. . . . .X.XoXoXoX. .XoX. . . .X. . .XoX. . .XoX. . .X. . . .XoX. .XoX. . . . . . ."};
+/* XPM */
static char * cdnodisc[] = {
-"48 48 7 1",
+"48 48 8 1",
" c #631863186318",
". c #318C318C318C",
"X c #9CE69CE69CE6",
-"o c #000000000000",
+"o c #000000000000 s led_color_back",
"O c #CE72CE72CE72",
"+ c none",
"@ c #0000FFFF0000 s led_color_high",
+"a c #000000000000",
" ",
-" ..............................................X",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+" ..............................................O",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXO",
" 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++++OOOOOOOOOOOOOO++++OOOOOOOOOOOOO",
+"OXXXXXXXXXXXa++++OXXXXXXXXXXXXa++++OXXXXXXXXXXXa",
+"OX .a++++OX @ .a++++OX .a",
+"OX .a++++OX @ @ .a++++OX .a",
+"OX @ .a++++OX @@ @ .a++++OX @ .a",
+"OX @@@ .a++++OX @@@ @ .a++++OX @ .a",
+"OX @@@@@ .a++++OX @@@ @ .a++++OX @@@ .a",
+"OX @@@ .a++++OX @@@ @ .a++++OX @@@ .a",
+"OX @ .a++++OX @@ @ .a++++OX @@@@@ .a",
+"OX .a++++OX @ @ .a++++OX .a",
+"OX .a++++OX @ .a++++OX .a",
+"OX..........a++++OX...........a++++OX..........a",
+"Oaaaaaaaaaaaa++++Oaaaaaaaaaaaaa++++Oaaaaaaaaaaaa",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++ ++++++++++++++",
-"++++++++++++++ ..................X++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .XXXXXXXXXXXXXXXXXX++++++++++++++",
+"++++++++++++++ ..................O++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .XXXXXXXXXXXXXXXXXO++++++++++++++",
"++++++++++++++ OOOOOOOOOOOOOOOOOOO++++++++++++++"};
/* XPM */
static char * cdpaused[] = {
-"48 48 7 1",
+"48 48 8 1",
" c #631863186318",
". c #318C318C318C",
"X c #9CE69CE69CE6",
-"o c #000000000000",
+"o c #000000000000 s led_color_back",
"O c #CE72CE72CE72",
"+ c none",
"@ c #0000FFFF0000 s led_color_high",
+"a c #000000000000",
" ",
-" ..............................................X",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+" ..............................................O",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXO",
" 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++++OOOOOOOOOOOOOO++++OOOOOOOOOOOOO",
+"OXXXXXXXXXXXa++++OXXXXXXXXXXXXa++++OXXXXXXXXXXXa",
+"OX .a++++OX @ .a++++OX .a",
+"OX .a++++OX @ @ .a++++OX .a",
+"OX @ .a++++OX @@ @ .a++++OX @@@@@ .a",
+"OX @@@ .a++++OX @@@ @ .a++++OX @@@@@ .a",
+"OX @@@@@ .a++++OX @@@ @ .a++++OX @@@@@ .a",
+"OX @@@ .a++++OX @@@ @ .a++++OX @@@@@ .a",
+"OX @ .a++++OX @@ @ .a++++OX @@@@@ .a",
+"OX .a++++OX @ @ .a++++OX .a",
+"OX .a++++OX @ .a++++OX .a",
+"OX..........a++++OX...........a++++OX..........a",
+"Oaaaaaaaaaaaa++++Oaaaaaaaaaaaaa++++Oaaaaaaaaaaaa",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++ ++++++++++++++",
-"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",
+"OOOOOOOOOOOOO+ ..................O+OOOOOOOOOOOOO",
+"OXXXXXXXXXXXa+ .ooooooooooooooooXO+OXXXXXXXXXXXa",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX @ @ .a+ .ooooooooooooooooXO+OX @ @ .a",
+"OX @ @@@ .a+ .ooooooooooooooooXO+OX @@@ @ .a",
+"OX @@@@@ .a+ .ooooooooooooooooXO+OX @@@@@ .a",
+"OX @ @@@ .a+ .ooooooooooooooooXO+OX @@@ @ .a",
+"OX @ @ .a+ .ooooooooooooooooXO+OX @ @ .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX..........a+ .ooooooooooooooooXO+OX..........a",
+"Oaaaaaaaaaaaa+ .XXXXXXXXXXXXXXXXXO+Oaaaaaaaaaaaa",
"++++++++++++++ OOOOOOOOOOOOOOOOOOO++++++++++++++"};
/* XPM */
static char * cdplaying[] = {
-"48 48 7 1",
+"48 48 8 1",
" c #631863186318",
". c #318C318C318C",
"X c #9CE69CE69CE6",
-"o c #000000000000",
+"o c #000000000000 s led_color_back",
"O c #CE72CE72CE72",
"+ c none",
"@ c #0000FFFF0000 s led_color_high",
+"a c #000000000000",
" ",
-" ..............................................X",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+" ..............................................O",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXO",
" 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++++OOOOOOOOOOOOOO++++OOOOOOOOOOOOO",
+"OXXXXXXXXXXXa++++OXXXXXXXXXXXXa++++OXXXXXXXXXXXa",
+"OX .a++++OX @ .a++++OX .a",
+"OX .a++++OX @ @ .a++++OX .a",
+"OX @@ @@ .a++++OX @@ @ .a++++OX @@@@@ .a",
+"OX @@ @@ .a++++OX @@@ @ .a++++OX @@@@@ .a",
+"OX @@ @@ .a++++OX @@@ @ .a++++OX @@@@@ .a",
+"OX @@ @@ .a++++OX @@@ @ .a++++OX @@@@@ .a",
+"OX @@ @@ .a++++OX @@ @ .a++++OX @@@@@ .a",
+"OX .a++++OX @ @ .a++++OX .a",
+"OX .a++++OX @ .a++++OX .a",
+"OX..........a++++OX...........a++++OX..........a",
+"Oaaaaaaaaaaaa++++Oaaaaaaaaaaaaa++++Oaaaaaaaaaaaa",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++ ++++++++++++++",
-"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",
+"OOOOOOOOOOOOO+ ..................O+OOOOOOOOOOOOO",
+"OXXXXXXXXXXXa+ .ooooooooooooooooXO+OXXXXXXXXXXXa",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX @ @ .a+ .ooooooooooooooooXO+OX @ @ .a",
+"OX @ @@@ .a+ .ooooooooooooooooXO+OX @@@ @ .a",
+"OX @@@@@ .a+ .ooooooooooooooooXO+OX @@@@@ .a",
+"OX @ @@@ .a+ .ooooooooooooooooXO+OX @@@ @ .a",
+"OX @ @ .a+ .ooooooooooooooooXO+OX @ @ .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX..........a+ .ooooooooooooooooXO+OX..........a",
+"Oaaaaaaaaaaaa+ .XXXXXXXXXXXXXXXXXO+Oaaaaaaaaaaaa",
"++++++++++++++ OOOOOOOOOOOOOOOOOOO++++++++++++++"};
/* XPM */
static char * cdstopped[] = {
-"48 48 7 1",
+"48 48 8 1",
" c #631863186318",
". c #318C318C318C",
"X c #9CE69CE69CE6",
-"o c #000000000000",
+"o c #000000000000 s led_color_back",
"O c #CE72CE72CE72",
"+ c none",
"@ c #0000FFFF0000 s led_color_high",
+"a c #000000000000",
" ",
-" ..............................................X",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+" ..............................................O",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXO",
" 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++++OOOOOOOOOOOOOO++++OOOOOOOOOOOOO",
+"OXXXXXXXXXXXa++++OXXXXXXXXXXXXa++++OXXXXXXXXXXXa",
+"OX .a++++OX @ .a++++OX .a",
+"OX .a++++OX @ @ .a++++OX .a",
+"OX @ .a++++OX @@ @ .a++++OX @@@@@ .a",
+"OX @@@ .a++++OX @@@ @ .a++++OX @@@ .a",
+"OX @@@@@ .a++++OX @@@ @ .a++++OX @@@ .a",
+"OX @@@ .a++++OX @@@ @ .a++++OX @ .a",
+"OX @ .a++++OX @@ @ .a++++OX @ .a",
+"OX .a++++OX @ @ .a++++OX .a",
+"OX .a++++OX @ .a++++OX .a",
+"OX..........a++++OX...........a++++OX..........a",
+"Oaaaaaaaaaaaa++++Oaaaaaaaaaaaaa++++Oaaaaaaaaaaaa",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++ ++++++++++++++",
-"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",
+"OOOOOOOOOOOOO+ ..................O+OOOOOOOOOOOOO",
+"OXXXXXXXXXXXa+ .ooooooooooooooooXO+OXXXXXXXXXXXa",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX @ @ .a+ .ooooooooooooooooXO+OX @ @ .a",
+"OX @ @@@ .a+ .ooooooooooooooooXO+OX @@@ @ .a",
+"OX @@@@@ .a+ .ooooooooooooooooXO+OX @@@@@ .a",
+"OX @ @@@ .a+ .ooooooooooooooooXO+OX @@@ @ .a",
+"OX @ @ .a+ .ooooooooooooooooXO+OX @ @ .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX..........a+ .ooooooooooooooooXO+OX..........a",
+"Oaaaaaaaaaaaa+ .XXXXXXXXXXXXXXXXXO+Oaaaaaaaaaaaa",
"++++++++++++++ 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 c #00009E790000 s led_color_med",
+"o c #000061850000 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 ",
@@ -249,7 +271,118 @@ static char * cdled[] = {
". . 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 "};
+".X X. X. .X X. X. o. .X X. o. .X X. o. X. oX . . X X .. Xo ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. .X Xo ... ooo . . o X ",
+". oXo . X . . oXo X o XoX . X . o XoX . . oXo . X . . oXo . o XoX . X X . . X X . o ",
+" ..... o X o ..... ..... o X o ..... ..... X X X ..... ..... X X o . . o o . X "};
+/* XPM */
+static char * mixer[] = {
+"48 48 8 1",
+" c #631863186318",
+". c none",
+"X c #318C318C318C",
+"o c #9CE69CE69CE6",
+"O c #000000000000 s led_color_back",
+"+ c #CE72CE72CE72",
+"@ c #0000FFFF0000 s led_color_high",
+"a c #000000000000",
+" ... ... ",
+" XXXXXXXXX+... XXXXXXXXXXXXXXXXXX+... XXXXXXXXX+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... Xooooooooooooooooo+... XOOOOOOOo+",
+" XOOOOOOOo+... +++++++++++++++++++... XOOOOOOOo+",
+" XOOOOOOOo+.......................... XOOOOOOOo+",
+" XOOOOOOOo+.......................... XOOOOOOOo+",
+" XOOOOOOOo+......++++++++++++++...... XOOOOOOOo+",
+" XOOOOOOOo+......+ooooooooooooa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o @@@ Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o @@@@@ Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o @@@ @@@ Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o @@ @@ Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o @@@ @@@ Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o @@@@@ Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o @@@ Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+oXXXXXXXXXXXa...... XOOOOOOOo+",
+" XOOOOOOOo+......+aaaaaaaaaaaaa...... XOOOOOOOo+",
+" XOOOOOOOo+.......................... XOOOOOOOo+",
+" XOOOOOOOo+.......................... XOOOOOOOo+",
+" XOOOOOOOo+.......................... XOOOOOOOo+",
+" XOOOOOOOo+.......................... XOOOOOOOo+",
+" XOOOOOOOo+......++++++++++++++...... XOOOOOOOo+",
+" XOOOOOOOo+......+ooooooooooooa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o O O Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o oO Oo Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o oO Oo Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o oOo Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o OoO Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o Oo oO Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o Oo oO Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o Xa...... XOOOOOOOo+",
+" Xoooooooo+......+oXXXXXXXXXXXa...... Xoooooooo+",
+" ++++++++++......+aaaaaaaaaaaaa...... ++++++++++",
+"................................................"};
+/* XPM */
+static char * mixled[] = {
+"58 39 10 1",
+" c #000063180000 s led_color_low",
+". c #00009CE60000 s led_color_med",
+"X c #FFFF00000000",
+"o c #0000FFFF0000 s led_color_high",
+"O c #CE72CE72CE72",
+"+ c #9CE69CE69CE6",
+"@ c #000000000000 s led_color_back",
+"# c #631863186318",
+"$ c #318C318C318C",
+"a c #000000000000",
+" . X . X . X . X . X . X . X . X . X . XoooXOOOOOOOOOOOOOO",
+". .X. .X. .X. .X. .X. .X. .X. .X. .X. .XoooXO++++++++++++a",
+" . X . X . X . X . X . X . X . X . X . XoooXO+######o###$a",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@XO+###o###o##$a",
+" . X . X . X . X . X . X . X . X . XoooXoooXO+##oo#o####$a",
+". .X. .X. .X. .X. .X. .X. .X. .X. .XoooXoooXO+#ooo####o#$a",
+" . X . X . X . X . X . X . X . X . XoooXoooXO+#ooo##o###$a",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@XO+#ooo####o#$a",
+" . X . X . X . X . X . X . X . XoooXoooXoooXO+##oo#o####$a",
+". .X. .X. .X. .X. .X. .X. .X. .XoooXoooXoooXO+###o###o##$a",
+" . X . X . X . X . X . X . X . XoooXoooXoooXO+######o###$a",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@XO+$$$$$$$$$$$a",
+" . X . X . X . X . X . X . XoooXoooXoooXoooXOaaaaaaaaaaaaa",
+". .X. .X. .X. .X. .X. .X. .XoooXoooXoooXoooXaaaaaaaaaaaaaa",
+" . X . X . X . X . X . X . XoooXoooXoooXoooXa$$$$$$$$$$$$O",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@Xa$#######o##+O",
+" . X . X . X . X . X . XoooXoooXoooXoooXoooXa$###ooo#o##+O",
+". .X. .X. .X. .X. .X. .XoooXoooXoooXoooXoooXa$##o###oo##+O",
+" . X . X . X . X . X . XoooXoooXoooXoooXoooXa$#o#####o##+O",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@Xa$#o#####o##+O",
+" . X . X . X . X . XoooXoooXoooXoooXoooXoooXa$#o#####o##+O",
+". .X. .X. .X. .X. .XoooXoooXoooXoooXoooXoooXa$##o###oo##+O",
+" . X . X . X . X . XoooXoooXoooXoooXoooXoooXa$###ooo#o##+O",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@Xa$#######o##+O",
+" . X . X . X . XoooXoooXoooXoooXoooXoooXoooXa$+++++++++++O",
+". .X. .X. .X. .XoooXoooXoooXoooXoooXoooXoooXaOOOOOOOOOOOOO",
+" . X . X . X . XoooXoooXoooXoooXoooXoooXoooXOOOOOOOOOOOOOO",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@XO++++++++++++a",
+" . X . X . XoooXoooXoooXoooXoooXoooXoooXoooXO+##########$a",
+". .X. .X. .XoooXoooXoooXoooXoooXoooXoooXoooXO+##@#####@#$a",
+" . X . X . XoooXoooXoooXoooXoooXoooXoooXoooXO+##+@###@+#$a",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@XO+###+@#@+##$a",
+" . X . XoooXoooXoooXoooXoooXoooXoooXoooXoooXO+####+ at +###$a",
+". .X. .XoooXoooXoooXoooXoooXoooXoooXoooXoooXO+####@+@###$a",
+" . X . XoooXoooXoooXoooXoooXoooXoooXoooXoooXO+###@+#+@##$a",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@XO+##@+###+@#$a",
+" . XoooXoooXoooXoooXoooXoooXoooXoooXoooXoooXO+##########$a",
+". .XoooXoooXoooXoooXoooXoooXoooXoooXoooXoooXO+$$$$$$$$$$$a",
+" . XoooXoooXoooXoooXoooXoooXoooXoooXoooXoooXOaaaaaaaaaaaaa"};
diff --git a/XPM/grey/alphaled.xpm b/XPM/grey/alphaled.xpm
new file mode 100644
index 0000000..d5d63fb
--- /dev/null
+++ b/XPM/grey/alphaled.xpm
@@ -0,0 +1,18 @@
+/* XPM */
+static char * alphaled[] = {
+"296 11 4 1",
+" c #000063180000 s led_color_low",
+". c #000000000000 s led_color_back",
+"X c #0000FFFF0000 s led_color_high",
+"o c #00009CE60000 s led_color_med",
+" .XoX. .XoXoX. . .XoX. .XoXoX. .XoXoXoX.XoXoXoX. .XoX. .X. . .X. oXoXo .XoXoXoX.X. . .X.X. . . .X. . .X.X. . .X. .XoX. .XoXoX. . .XoX. .XoXoX. . .XoX. .XoXoXoX.X. . .X.X. . .X.X. . .X.X. . .X.X. . .X.XoXoXoX. .XoX. . . . .X. .XoX. . .XoX. .X. . . .XoXoXoX. . .XoX.XoXoXoX. .XoX. . .XoX. . . . . .",
+".o...o..o....o...o...o..o....o..o.......o........o...o..o.....o....X..........o.o....o..o.......oX...Xo.oo....o..o...o..o....o...o...o..o....o...o...o.....X....o.....o.o.....o.o.....o.o.....o.o.....o.......o..o...o.......oo..o...o...o...o..o.......o..........o..........o..o...o...o...o.... .....",
+"X. . .X.X. . .X.X. . .X.X. . .X.X. . . .X. . . .X. . .X.X. . .X. . o . . . . .X.X. .X. .X. . . .X.X.X.X.X.X. .X.X. . .X.X. . .X.X. . .X.X. . .X.X. . .X. . o . .X. . .X.X. . .X.X. . .X.X. . .X.X. . .X. . . .X.X. .X.X. . .X.X.X. . .X.X. . .X.X. . . .X. . . . .X. . . . . .X.X. . .X.X. . .X. . . . .",
+"o.....o.o.....o.o.......o.....o.o.......o.......o.......o.....o....X..........o.o..o....o.......o..X..o.o.o...o.o.....o.o.....o.o.....o.o.....o.o..........X....o.....o.o.....o.o.....o..o...o...o...o.......o..o...o.o....o..o.......o.......o.o.......o........o...........o...o...o..o.....o.........",
+"X. . .X.X. . .X.X. . . .X. . .X.X. . . .X. . . .X. . . .X. . .X. . o . . . . .X.X.X. . .X. . . .X. . .X.X.X. .X.X. . .X.X. . .X.X. . .X.X. . .X. X . . . . o . .X. . .X.X. . .X.X. X .X. .X.X. . .X.X. . . .X. .X. .X.X. .X. .X. . . .X. . . .X.X. .X. .XoXoXo .X.XoX. . . .X. . .XoX. .X. . .X. . . . .",
+"oXoXoXo.oXoXoX..o.......o.....o.oXoXoX..oXoXoX..o..XoXo.oXoXoXo....X..........o.oo......o.......o.....o.o..o..o.o.....o.o....o..o.....o.o....o....XoX......X....o.....o..o...o..o..o..o....o.......o.......o....o..o..o.......o......o....oXoX..o...o.........o.oo...o......o....o...o...o...oo.........",
+"X. . .X.X. . .X.X. . . .X. . .X.X. . . .X. . . .X. . .X.X. . .X. . o . . . . .X.X.X. . .X. . . .X. . .X.X. .X.X.X. . .X.XoXoX. .X.X. .X.XoXoX. . . . X . . o . .X. . .X. X . X .X. X .X. .X.X. . . X . . .X. . .X.X. .X. . . .X. . .X. . . . .X.XoXoXoX. . . .X.X. . .X. . .X. .X. . .X. .XoX.X. . . . .",
+"o.....o.o.....o.o.......o.....o.o.......o.......o.....o.o.....o....X..........o.o..o....o.......o.....o.o...o.o.o.....o.o.......o..o..o.o..o..........o....X....o.....o...o.o....o.o.o...o...o.....o.....o......o.o...o.......o....o..........o.....o.........o.o.....o....o....o.....o......o..........",
+"X. . .X.X. . .X.X. . .X.X. . .X.X. . . .X. . . .X. . .X.X. . .X. . o . .X. . .X.X. .X. .X. . . .X. . .X.X. .X.X.X. . .X.X. . . .X. .X.X.X. .X. .X. . .X. . o . .X. . .X. .X.X. . X X X .X. . .X. . X . .X. . . .X.X. .X. . . .X. .X. . .X. . .X. . .X. .X. . .X.X. . .X. .X. . .X. . .X. . .X. . . . . .",
+"o.....o.o....o...o...o..o....o..o.......o........o...o..o.....o....X.....o...o..o....o..o.......o.....o.o....oo..o...o..o........o...o..o....o...o...o.....X.....o...o.....o......o.o...o.....o....o....o........o...o........o..o.......o...o......o....o...o...o...o....o......o...o.....o............",
+"X. . .X.XoXoX. . .XoX. .XoXoX. .XoXoXoX.X. . . . .XoX. .X. . .X. oXoXo . .XoX. .X. . .X.XoXoXoX.X. . .X.X. . .X. .XoX. .X. . . . .XoX.X.X. . .X. .XoX. . . o . . .XoX. . . X . . .X.X. .X. . .X. . X . .XoXoXoX. .XoX. . . . .X.XoXoXoX. .XoX. . . .X. . .XoX. . .XoX. . .X. . . .XoX. .XoX. . . . . . ."};
diff --git a/XPM/grey/cdnodisc.xpm b/XPM/grey/cdnodisc.xpm
index a4f1099..e54646e 100644
--- a/XPM/grey/cdnodisc.xpm
+++ b/XPM/grey/cdnodisc.xpm
@@ -1,58 +1,59 @@
/* XPM */
static char * cdnodisc[] = {
-"48 48 7 1",
+"48 48 8 1",
" c #631863186318",
". c #318C318C318C",
"X c #9CE69CE69CE6",
-"o c #000000000000",
+"o c #000000000000 s led_color_back",
"O c #CE72CE72CE72",
"+ c none",
"@ c #0000FFFF0000 s led_color_high",
+"a c #000000000000",
" ",
-" ..............................................X",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+" ..............................................O",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXO",
" 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++++OOOOOOOOOOOOOO++++OOOOOOOOOOOOO",
+"OXXXXXXXXXXXa++++OXXXXXXXXXXXXa++++OXXXXXXXXXXXa",
+"OX .a++++OX @ .a++++OX .a",
+"OX .a++++OX @ @ .a++++OX .a",
+"OX @ .a++++OX @@ @ .a++++OX @ .a",
+"OX @@@ .a++++OX @@@ @ .a++++OX @ .a",
+"OX @@@@@ .a++++OX @@@ @ .a++++OX @@@ .a",
+"OX @@@ .a++++OX @@@ @ .a++++OX @@@ .a",
+"OX @ .a++++OX @@ @ .a++++OX @@@@@ .a",
+"OX .a++++OX @ @ .a++++OX .a",
+"OX .a++++OX @ .a++++OX .a",
+"OX..........a++++OX...........a++++OX..........a",
+"Oaaaaaaaaaaaa++++Oaaaaaaaaaaaaa++++Oaaaaaaaaaaaa",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++ ++++++++++++++",
-"++++++++++++++ ..................X++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .ooooooooooooooooXX++++++++++++++",
-"++++++++++++++ .XXXXXXXXXXXXXXXXXX++++++++++++++",
+"++++++++++++++ ..................O++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .ooooooooooooooooXO++++++++++++++",
+"++++++++++++++ .XXXXXXXXXXXXXXXXXO++++++++++++++",
"++++++++++++++ OOOOOOOOOOOOOOOOOOO++++++++++++++"};
diff --git a/XPM/grey/cdpaused.xpm b/XPM/grey/cdpaused.xpm
index 2f6c1db..6141ef1 100644
--- a/XPM/grey/cdpaused.xpm
+++ b/XPM/grey/cdpaused.xpm
@@ -1,58 +1,59 @@
/* XPM */
static char * cdpaused[] = {
-"48 48 7 1",
+"48 48 8 1",
" c #631863186318",
". c #318C318C318C",
"X c #9CE69CE69CE6",
-"o c #000000000000",
+"o c #000000000000 s led_color_back",
"O c #CE72CE72CE72",
"+ c none",
"@ c #0000FFFF0000 s led_color_high",
+"a c #000000000000",
" ",
-" ..............................................X",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+" ..............................................O",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXO",
" 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++++OOOOOOOOOOOOOO++++OOOOOOOOOOOOO",
+"OXXXXXXXXXXXa++++OXXXXXXXXXXXXa++++OXXXXXXXXXXXa",
+"OX .a++++OX @ .a++++OX .a",
+"OX .a++++OX @ @ .a++++OX .a",
+"OX @ .a++++OX @@ @ .a++++OX @@@@@ .a",
+"OX @@@ .a++++OX @@@ @ .a++++OX @@@@@ .a",
+"OX @@@@@ .a++++OX @@@ @ .a++++OX @@@@@ .a",
+"OX @@@ .a++++OX @@@ @ .a++++OX @@@@@ .a",
+"OX @ .a++++OX @@ @ .a++++OX @@@@@ .a",
+"OX .a++++OX @ @ .a++++OX .a",
+"OX .a++++OX @ .a++++OX .a",
+"OX..........a++++OX...........a++++OX..........a",
+"Oaaaaaaaaaaaa++++Oaaaaaaaaaaaaa++++Oaaaaaaaaaaaa",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++ ++++++++++++++",
-"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",
+"OOOOOOOOOOOOO+ ..................O+OOOOOOOOOOOOO",
+"OXXXXXXXXXXXa+ .ooooooooooooooooXO+OXXXXXXXXXXXa",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX @ @ .a+ .ooooooooooooooooXO+OX @ @ .a",
+"OX @ @@@ .a+ .ooooooooooooooooXO+OX @@@ @ .a",
+"OX @@@@@ .a+ .ooooooooooooooooXO+OX @@@@@ .a",
+"OX @ @@@ .a+ .ooooooooooooooooXO+OX @@@ @ .a",
+"OX @ @ .a+ .ooooooooooooooooXO+OX @ @ .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX..........a+ .ooooooooooooooooXO+OX..........a",
+"Oaaaaaaaaaaaa+ .XXXXXXXXXXXXXXXXXO+Oaaaaaaaaaaaa",
"++++++++++++++ OOOOOOOOOOOOOOOOOOO++++++++++++++"};
diff --git a/XPM/grey/cdplaying.xpm b/XPM/grey/cdplaying.xpm
index 376b9a4..824d0f3 100644
--- a/XPM/grey/cdplaying.xpm
+++ b/XPM/grey/cdplaying.xpm
@@ -1,58 +1,59 @@
/* XPM */
static char * cdplaying[] = {
-"48 48 7 1",
+"48 48 8 1",
" c #631863186318",
". c #318C318C318C",
"X c #9CE69CE69CE6",
-"o c #000000000000",
+"o c #000000000000 s led_color_back",
"O c #CE72CE72CE72",
"+ c none",
"@ c #0000FFFF0000 s led_color_high",
+"a c #000000000000",
" ",
-" ..............................................X",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+" ..............................................O",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXO",
" 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++++OOOOOOOOOOOOOO++++OOOOOOOOOOOOO",
+"OXXXXXXXXXXXa++++OXXXXXXXXXXXXa++++OXXXXXXXXXXXa",
+"OX .a++++OX @ .a++++OX .a",
+"OX .a++++OX @ @ .a++++OX .a",
+"OX @@ @@ .a++++OX @@ @ .a++++OX @@@@@ .a",
+"OX @@ @@ .a++++OX @@@ @ .a++++OX @@@@@ .a",
+"OX @@ @@ .a++++OX @@@ @ .a++++OX @@@@@ .a",
+"OX @@ @@ .a++++OX @@@ @ .a++++OX @@@@@ .a",
+"OX @@ @@ .a++++OX @@ @ .a++++OX @@@@@ .a",
+"OX .a++++OX @ @ .a++++OX .a",
+"OX .a++++OX @ .a++++OX .a",
+"OX..........a++++OX...........a++++OX..........a",
+"Oaaaaaaaaaaaa++++Oaaaaaaaaaaaaa++++Oaaaaaaaaaaaa",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++ ++++++++++++++",
-"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",
+"OOOOOOOOOOOOO+ ..................O+OOOOOOOOOOOOO",
+"OXXXXXXXXXXXa+ .ooooooooooooooooXO+OXXXXXXXXXXXa",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX @ @ .a+ .ooooooooooooooooXO+OX @ @ .a",
+"OX @ @@@ .a+ .ooooooooooooooooXO+OX @@@ @ .a",
+"OX @@@@@ .a+ .ooooooooooooooooXO+OX @@@@@ .a",
+"OX @ @@@ .a+ .ooooooooooooooooXO+OX @@@ @ .a",
+"OX @ @ .a+ .ooooooooooooooooXO+OX @ @ .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX..........a+ .ooooooooooooooooXO+OX..........a",
+"Oaaaaaaaaaaaa+ .XXXXXXXXXXXXXXXXXO+Oaaaaaaaaaaaa",
"++++++++++++++ OOOOOOOOOOOOOOOOOOO++++++++++++++"};
diff --git a/XPM/grey/cdstopped.xpm b/XPM/grey/cdstopped.xpm
index 40cceee..7353cbc 100644
--- a/XPM/grey/cdstopped.xpm
+++ b/XPM/grey/cdstopped.xpm
@@ -1,58 +1,59 @@
/* XPM */
static char * cdstopped[] = {
-"48 48 7 1",
+"48 48 8 1",
" c #631863186318",
". c #318C318C318C",
"X c #9CE69CE69CE6",
-"o c #000000000000",
+"o c #000000000000 s led_color_back",
"O c #CE72CE72CE72",
"+ c none",
"@ c #0000FFFF0000 s led_color_high",
+"a c #000000000000",
" ",
-" ..............................................X",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .ooooooooooooooooooooooooooooooooooooooooooooXX",
-" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+" ..............................................O",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .ooooooooooooooooooooooooooooooooooooooooooooXO",
+" .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXO",
" 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++++OOOOOOOOOOOOOO++++OOOOOOOOOOOOO",
+"OXXXXXXXXXXXa++++OXXXXXXXXXXXXa++++OXXXXXXXXXXXa",
+"OX .a++++OX @ .a++++OX .a",
+"OX .a++++OX @ @ .a++++OX .a",
+"OX @ .a++++OX @@ @ .a++++OX @@@@@ .a",
+"OX @@@ .a++++OX @@@ @ .a++++OX @@@ .a",
+"OX @@@@@ .a++++OX @@@ @ .a++++OX @@@ .a",
+"OX @@@ .a++++OX @@@ @ .a++++OX @ .a",
+"OX @ .a++++OX @@ @ .a++++OX @ .a",
+"OX .a++++OX @ @ .a++++OX .a",
+"OX .a++++OX @ .a++++OX .a",
+"OX..........a++++OX...........a++++OX..........a",
+"Oaaaaaaaaaaaa++++Oaaaaaaaaaaaaa++++Oaaaaaaaaaaaa",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++ ++++++++++++++",
-"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",
+"OOOOOOOOOOOOO+ ..................O+OOOOOOOOOOOOO",
+"OXXXXXXXXXXXa+ .ooooooooooooooooXO+OXXXXXXXXXXXa",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX @ @ .a+ .ooooooooooooooooXO+OX @ @ .a",
+"OX @ @@@ .a+ .ooooooooooooooooXO+OX @@@ @ .a",
+"OX @@@@@ .a+ .ooooooooooooooooXO+OX @@@@@ .a",
+"OX @ @@@ .a+ .ooooooooooooooooXO+OX @@@ @ .a",
+"OX @ @ .a+ .ooooooooooooooooXO+OX @ @ .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX .a+ .ooooooooooooooooXO+OX .a",
+"OX..........a+ .ooooooooooooooooXO+OX..........a",
+"Oaaaaaaaaaaaa+ .XXXXXXXXXXXXXXXXXO+Oaaaaaaaaaaaa",
"++++++++++++++ OOOOOOOOOOOOOOOOOOO++++++++++++++"};
diff --git a/XPM/grey/led.xpm b/XPM/grey/led.xpm
index 1759f9e..39b293b 100644
--- a/XPM/grey/led.xpm
+++ b/XPM/grey/led.xpm
@@ -3,8 +3,8 @@ 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 c #00009E790000 s led_color_med",
+"o c #000061850000 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 ",
@@ -12,7 +12,7 @@ static char * cdled[] = {
". . 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 "};
+".X X. X. .X X. X. o. .X X. o. .X X. o. X. oX . . X X .. Xo ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. .X Xo ... ooo . . o X ",
+". oXo . X . . oXo X o XoX . X . o XoX . . oXo . X . . oXo . o XoX . X X . . X X . o ",
+" ..... o X o ..... ..... o X o ..... ..... X X X ..... ..... X X o . . o o . X "};
diff --git a/XPM/grey/mixer.xpm b/XPM/grey/mixer.xpm
new file mode 100644
index 0000000..8bdb2cb
--- /dev/null
+++ b/XPM/grey/mixer.xpm
@@ -0,0 +1,59 @@
+/* XPM */
+static char * mixer[] = {
+"48 48 8 1",
+" c #631863186318",
+". c none",
+"X c #318C318C318C",
+"o c #9CE69CE69CE6",
+"O c #000000000000 s led_color_back",
+"+ c #CE72CE72CE72",
+"@ c #0000FFFF0000 s led_color_high",
+"a c #000000000000",
+" ... ... ",
+" XXXXXXXXX+... XXXXXXXXXXXXXXXXXX+... XXXXXXXXX+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... XOOOOOOOOOOOOOOOOo+... XOOOOOOOo+",
+" XOOOOOOOo+... Xooooooooooooooooo+... XOOOOOOOo+",
+" XOOOOOOOo+... +++++++++++++++++++... XOOOOOOOo+",
+" XOOOOOOOo+.......................... XOOOOOOOo+",
+" XOOOOOOOo+.......................... XOOOOOOOo+",
+" XOOOOOOOo+......++++++++++++++...... XOOOOOOOo+",
+" XOOOOOOOo+......+ooooooooooooa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o @@@ Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o @@@@@ Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o @@@ @@@ Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o @@ @@ Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o @@@ @@@ Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o @@@@@ Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o @@@ Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+oXXXXXXXXXXXa...... XOOOOOOOo+",
+" XOOOOOOOo+......+aaaaaaaaaaaaa...... XOOOOOOOo+",
+" XOOOOOOOo+.......................... XOOOOOOOo+",
+" XOOOOOOOo+.......................... XOOOOOOOo+",
+" XOOOOOOOo+.......................... XOOOOOOOo+",
+" XOOOOOOOo+.......................... XOOOOOOOo+",
+" XOOOOOOOo+......++++++++++++++...... XOOOOOOOo+",
+" XOOOOOOOo+......+ooooooooooooa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o O O Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o oO Oo Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o oO Oo Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o oOo Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o OoO Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o Oo oO Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o Oo oO Xa...... XOOOOOOOo+",
+" XOOOOOOOo+......+o Xa...... XOOOOOOOo+",
+" Xoooooooo+......+oXXXXXXXXXXXa...... Xoooooooo+",
+" ++++++++++......+aaaaaaaaaaaaa...... ++++++++++",
+"................................................"};
diff --git a/XPM/grey/mixled.xpm b/XPM/grey/mixled.xpm
new file mode 100644
index 0000000..526439b
--- /dev/null
+++ b/XPM/grey/mixled.xpm
@@ -0,0 +1,52 @@
+/* XPM */
+static char * mixled[] = {
+"58 39 10 1",
+" c #000063180000 s led_color_low",
+". c #00009CE60000 s led_color_med",
+"X c #FFFF00000000",
+"o c #0000FFFF0000 s led_color_high",
+"O c #CE72CE72CE72",
+"+ c #9CE69CE69CE6",
+"@ c #000000000000 s led_color_back",
+"# c #631863186318",
+"$ c #318C318C318C",
+"a c #000000000000",
+" . X . X . X . X . X . X . X . X . X . XoooXOOOOOOOOOOOOOO",
+". .X. .X. .X. .X. .X. .X. .X. .X. .X. .XoooXO++++++++++++a",
+" . X . X . X . X . X . X . X . X . X . XoooXO+######o###$a",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@XO+###o###o##$a",
+" . X . X . X . X . X . X . X . X . XoooXoooXO+##oo#o####$a",
+". .X. .X. .X. .X. .X. .X. .X. .X. .XoooXoooXO+#ooo####o#$a",
+" . X . X . X . X . X . X . X . X . XoooXoooXO+#ooo##o###$a",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@XO+#ooo####o#$a",
+" . X . X . X . X . X . X . X . XoooXoooXoooXO+##oo#o####$a",
+". .X. .X. .X. .X. .X. .X. .X. .XoooXoooXoooXO+###o###o##$a",
+" . X . X . X . X . X . X . X . XoooXoooXoooXO+######o###$a",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@XO+$$$$$$$$$$$a",
+" . X . X . X . X . X . X . XoooXoooXoooXoooXOaaaaaaaaaaaaa",
+". .X. .X. .X. .X. .X. .X. .XoooXoooXoooXoooXaaaaaaaaaaaaaa",
+" . X . X . X . X . X . X . XoooXoooXoooXoooXa$$$$$$$$$$$$O",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@Xa$#######o##+O",
+" . X . X . X . X . X . XoooXoooXoooXoooXoooXa$###ooo#o##+O",
+". .X. .X. .X. .X. .X. .XoooXoooXoooXoooXoooXa$##o###oo##+O",
+" . X . X . X . X . X . XoooXoooXoooXoooXoooXa$#o#####o##+O",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@Xa$#o#####o##+O",
+" . X . X . X . X . XoooXoooXoooXoooXoooXoooXa$#o#####o##+O",
+". .X. .X. .X. .X. .XoooXoooXoooXoooXoooXoooXa$##o###oo##+O",
+" . X . X . X . X . XoooXoooXoooXoooXoooXoooXa$###ooo#o##+O",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@Xa$#######o##+O",
+" . X . X . X . XoooXoooXoooXoooXoooXoooXoooXa$+++++++++++O",
+". .X. .X. .X. .XoooXoooXoooXoooXoooXoooXoooXaOOOOOOOOOOOOO",
+" . X . X . X . XoooXoooXoooXoooXoooXoooXoooXOOOOOOOOOOOOOO",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@XO++++++++++++a",
+" . X . X . XoooXoooXoooXoooXoooXoooXoooXoooXO+##########$a",
+". .X. .X. .XoooXoooXoooXoooXoooXoooXoooXoooXO+##@#####@#$a",
+" . X . X . XoooXoooXoooXoooXoooXoooXoooXoooXO+##+@###@+#$a",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@XO+###+@#@+##$a",
+" . X . XoooXoooXoooXoooXoooXoooXoooXoooXoooXO+####+ at +###$a",
+". .X. .XoooXoooXoooXoooXoooXoooXoooXoooXoooXO+####@+@###$a",
+" . X . XoooXoooXoooXoooXoooXoooXoooXoooXoooXO+###@+#+@##$a",
+"@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@X@@@XO+##@+###+@#$a",
+" . XoooXoooXoooXoooXoooXoooXoooXoooXoooXoooXO+##########$a",
+". .XoooXoooXoooXoooXoooXoooXoooXoooXoooXoooXO+$$$$$$$$$$$a",
+" . XoooXoooXoooXoooXoooXoooXoooXoooXoooXoooXOaaaaaaaaaaaaa"};
diff --git a/XPM/led.xpm b/XPM/led.xpm
index 1759f9e..39b293b 100644
--- a/XPM/led.xpm
+++ b/XPM/led.xpm
@@ -3,8 +3,8 @@ 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 c #00009E790000 s led_color_med",
+"o c #000061850000 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 ",
@@ -12,7 +12,7 @@ static char * cdled[] = {
". . 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 "};
+".X X. X. .X X. X. o. .X X. o. .X X. o. X. oX . . X X .. Xo ",
+".X X. X. .X X. X. o. .X X. o. .X X. o. .X Xo ... ooo . . o X ",
+". oXo . X . . oXo X o XoX . X . o XoX . . oXo . X . . oXo . o XoX . X X . . X X . o ",
+" ..... o X o ..... ..... o X o ..... ..... X X X ..... ..... X X o . . o o . X "};
diff --git a/XPM/mixer-mask.xpm b/XPM/mixer-mask.xpm
new file mode 100644
index 0000000..95a1e98
--- /dev/null
+++ b/XPM/mixer-mask.xpm
@@ -0,0 +1,54 @@
+/* XPM */
+static char * mixer_mask_xpm[] = {
+"48 48 3 1",
+" c None",
+". c #79E77DF779E7",
+"X c #000000000000",
+"........... .................... ...........",
+"........... .................... ...........",
+"..XXXXXXX.. ..XXXXXXXXXXXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. ..XXXXXXXXXXXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. ..XXXXXXXXXXXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. ..XXXXXXXXXXXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. ..XXXXXXXXXXXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. ..XXXXXXXXXXXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. ..XXXXXXXXXXXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. ..XXXXXXXXXXXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. ..XXXXXXXXXXXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. ..XXXXXXXXXXXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. ..XXXXXXXXXXXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. .................... ..XXXXXXX..",
+"..XXXXXXX.. .................... ..XXXXXXX..",
+"..XXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"..XXXXXXX.. .............. ..XXXXXXX..",
+"........... .............. ...........",
+"........... .............. ...........",
+" "};
diff --git a/XPM/orange.style b/XPM/orange.style
deleted file mode 100644
index d3cbf0a..0000000
--- a/XPM/orange.style
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * 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
deleted file mode 100644
index afd7d6e..0000000
--- a/XPM/smiley.style
+++ /dev/null
@@ -1,523 +0,0 @@
-/*
- * 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
deleted file mode 120000
index 546daaf..0000000
--- a/XPM/standart.style
+++ /dev/null
@@ -1 +0,0 @@
-grey.style
\ No newline at end of file
diff --git a/cdctrl.c b/cdctrl.c
index 2a0efb7..0ed9697 100644
--- a/cdctrl.c
+++ b/cdctrl.c
@@ -1,30 +1,51 @@
/*
- * $Id: cdctrl.c,v 1.2 1997/06/12 14:50:41 ograf Exp $
+ * $Id: cdctrl.c,v 1.7 1997/10/30 11:24:51 ograf Exp $
*
* Part of WMRack
*
* command line tool to control the cdrom
* created to test the cdrom control stuff
*
+ * Copyright (c) 1997 by Oliver Graf <ograf at fga.de>
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <sys/time.h>
+#include <unistd.h>
#include "cdrom.h"
-char *commands[]={"info", "status", "play", "pause", "skip", "stop", "eject"};
-#define NUM_CMD 7
+char *commands[]={"info", "status", "play", "pause", "skip", "stop", "eject", "playlist"};
+#define NUM_CMD 8
void usage()
{
- fprintf(stderr,"Usage: cdrom [info|status|play|pause|skip|stop|eject] PARAMS\n");
+ fprintf(stderr,"Usage: cdctrl [-d DEVICE] [info|status|play|pause|skip|stop|eject|playlist] PARAMS\n");
}
int main(int argc, char **argv)
{
CD *cd;
- int i, s=0, e=0xaa, status;
+ int fa=1, i, s=0, e=0xaa, status;
+ char *device="/dev/cdrom";
+ struct timeval tm;
+
+ gettimeofday(&tm,NULL);
+ srandom(tm.tv_usec^tm.tv_sec);
+
+ if (argc<2)
+ {
+ usage();
+ exit(EXIT_FAILURE);
+ }
+
+ if (strcmp(argv[1],"-d")==0)
+ {
+ device=argv[2];
+ fa=3;
+ argc-=2;
+ }
if (argc<2)
{
@@ -33,7 +54,7 @@ int main(int argc, char **argv)
}
for (i=0; i<NUM_CMD; i++)
- if (strcmp(argv[1],commands[i])==0)
+ if (strcmp(argv[fa],commands[i])==0)
break;
if (i==NUM_CMD)
{
@@ -41,58 +62,86 @@ int main(int argc, char **argv)
exit(EXIT_FAILURE);
}
- cd=cd_open("/dev/hdd",0);
- if (cd->info==NULL)
+ cd=cd_open(device,0);
+ if (cd->status==-1)
printf("No CDROM in drive\n");
else
- status=cd_getStatus(cd,0);
+ status=cd_getStatus(cd,0,1);
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("discid: %08lX\n",cd_info(cd,discid));
+ printf("Tracks: %d\n",cd_info(cd,tracks));
+ for (i=0; i<cd_info(cd,tracks); i++)
+ {
+ printf("%2d[%2d]: start(%02d:%02d:%02d) end(%02d:%02d:%02d) len(%02d:%02d:%02d) %s\n",i,
+ cd_info(cd,track)[i].num,
+ cd_info(cd,track)[i].start.minute,
+ cd_info(cd,track)[i].start.second,
+ cd_info(cd,track)[i].start.frame,
+ cd_info(cd,track)[i].end.minute,
+ cd_info(cd,track)[i].end.second,
+ cd_info(cd,track)[i].end.frame,
+ cd_info(cd,track)[i].length.minute,
+ cd_info(cd,track)[i].length.second,
+ cd_info(cd,track)[i].length.frame,
+ cd_info(cd,track)[i].data?"DATA":"");
+ }
+ showlist:
+ printf("PlayList: %d length(%02d:%02d:%02d)\n",
+ cd_list(cd,tracks),
+ cd_list(cd,length).minute,
+ cd_list(cd,length).second,
+ cd_list(cd,length).frame);
+ for (i=0; i<cd_list(cd,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":"");
+ printf("%2d[%2d]: start(%02d:%02d:%02d) end(%02d:%02d:%02d) len(%02d:%02d:%02d) %s\n",i,
+ cd_list(cd,track)[i].num,
+ cd_list(cd,track)[i].start.minute,
+ cd_list(cd,track)[i].start.second,
+ cd_list(cd,track)[i].start.frame,
+ cd_list(cd,track)[i].end.minute,
+ cd_list(cd,track)[i].end.second,
+ cd_list(cd,track)[i].end.frame,
+ cd_list(cd,track)[i].length.minute,
+ cd_list(cd,track)[i].length.second,
+ cd_list(cd,track)[i].length.frame,
+ cd_list(cd,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);
+ printf("mode %d track %d\n",
+ cd_cur(cd,mode),cd_cur(cd,track));
+ if (cd_cur(cd,track)!=-1)
+ printf("%d[%d]: %02d:%02d:%02d->%02d:%02d:%02d len(%02d:%02d:%02d) d%d\n",
+ cd_cur(cd,track),
+ cd_list(cd,track)[cd_cur(cd,track)].num,
+ cd_list(cd,track)[cd_cur(cd,track)].start.minute,
+ cd_list(cd,track)[cd_cur(cd,track)].start.second,
+ cd_list(cd,track)[cd_cur(cd,track)].start.frame,
+ cd_list(cd,track)[cd_cur(cd,track)].end.minute,
+ cd_list(cd,track)[cd_cur(cd,track)].end.second,
+ cd_list(cd,track)[cd_cur(cd,track)].end.frame,
+ cd_list(cd,track)[cd_cur(cd,track)].length.minute,
+ cd_list(cd,track)[cd_cur(cd,track)].length.second,
+ cd_list(cd,track)[cd_cur(cd,track)].length.frame,
+ cd_list(cd,track)[cd_cur(cd,track)].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);
+ printf("rel %02d:%02d:%02d abs %02d:%02d:%02d\n",
+ cd_cur(cd,relmsf.minute),
+ cd_cur(cd,relmsf.second),
+ cd_cur(cd,relmsf.frame),
+ cd_cur(cd,absmsf.minute),
+ cd_cur(cd,absmsf.second),
+ cd_cur(cd,absmsf.frame));
break;
case 2:
if (argc>2)
- s=atoi(argv[2]);
- if (argc>3)
- e=atoi(argv[3]);
- cd_doPlay(cd,s,e);
+ s=atoi(argv[fa+1]);
+ cd_doPlay(cd,s);
break;
case 3:
cd_doPause(cd);
@@ -103,7 +152,7 @@ int main(int argc, char **argv)
fprintf(stderr,"skip needs only one arg (seconds)\n");
exit(EXIT_FAILURE);
}
- s=atoi(argv[2]);
+ s=atoi(argv[fa+1]);
cd_doSkip(cd,s);
break;
case 5:
@@ -112,6 +161,24 @@ int main(int argc, char **argv)
case 6:
cd_doEject(cd);
break;
+ case 7:
+ if (argc==2)
+ cd_randomize(cd);
+ else
+ {
+ CDPlayList *list=cdpl_new();
+ int t;
+ for (i=fa+1; i<argc+fa-1; i++)
+ {
+ t=cd_findtrack(cd,atoi(argv[i]));
+ if (t>=0)
+ cdpl_add(list,cd,t);
+ }
+ cd_setpl(cd,list);
+ }
+ cd_doPlay(cd,0);
+ fprintf(stderr,"\nWARNING: cdctrl CAN ONLY SET PLAYLIST, BUT PLAYING IS LINEAR\n\n");
+ goto showlist;
default:
usage();
exit(EXIT_FAILURE);
diff --git a/cdrom.c b/cdrom.c
index 2ecb575..616e297 100644
--- a/cdrom.c
+++ b/cdrom.c
@@ -1,16 +1,19 @@
/*
- * $Id: cdrom.c,v 1.4 1997/06/12 16:27:28 ograf Exp $
+ * $Id: cdrom.c,v 1.17.2.4 1998/08/06 19:38:11 ograf Exp $
*
* cdrom utility functions for WMRack
*
- * written by Oliver Graf <ograf at fga.de>
+ * Copyright (c) 1997 by Oliver Graf <ograf at fga.de>
*
* some hints taken from WorkBone
+ *
+ * this is very linux specific !!!
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
@@ -19,6 +22,7 @@
#include <sys/stat.h>
#include <sys/time.h>
#include <fcntl.h>
+#include <sys/vfs.h>
#ifdef linux
# include <linux/cdrom.h>
@@ -60,9 +64,9 @@ unsigned long cddb_discid(CDInfo *cdinfo)
/* 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);
+ n+=cddb_sum((cdinfo->track[i].start.minute*60) + cdinfo->track[i].start.second);
+ t+=((cdinfo->track[i+1].start.minute*60) + cdinfo->track[i+1].start.second) -
+ ((cdinfo->track[i].start.minute*60) + cdinfo->track[i].start.second);
}
cdinfo->discid=((n % 0xff) << 24 | t << 8 | cdinfo->tracks);
return cdinfo->discid;
@@ -72,86 +76,78 @@ unsigned long cddb_discid(CDInfo *cdinfo)
* cd_readTOC(CD)
*
* Read the table of contents from the CD.
+ * returns 0 on success
*/
-CDInfo *cd_readTOC(CD *cd)
+int cd_readTOC(CD *cd)
{
struct cdrom_tochdr hdr;
struct cdrom_tocentry entry;
- int i;
- CDInfo *info;
+ int i, j;
MSF tmp;
if (cd->fd<0)
- return NULL;
-
- info=(CDInfo *)malloc(sizeof(CDInfo));
- if (info==NULL)
- {
- perror("cd_readTOC[malloc]");
- return NULL;
- }
+ return 1;
if (ioctl(cd->fd, CDROMREADTOCHDR, &hdr))
{
perror("cd_readTOC[readtochdr]");
- free(info);
- return NULL;
+ return 1;
}
- info->len=info->slen=0;
- info->start=hdr.cdth_trk0;
- info->end=hdr.cdth_trk1;
- info->tracks=hdr.cdth_trk1-hdr.cdth_trk0+1;
+ cd->info.start=hdr.cdth_trk0;
+ cd->info.end=hdr.cdth_trk1;
+ cd->info.tracks=hdr.cdth_trk1-hdr.cdth_trk0+1;
#ifdef DEBUG
fprintf(stderr,"cd_readTOC[DEBUG]: read header with %d tracks\n",
- info->tracks);
+ cd->info.tracks);
#endif
- info->track=malloc((info->tracks+1)*sizeof(TrackInfo));
- if (info->track==NULL)
+ cd->info.track=malloc(cd->info.tracks*sizeof(TrackInfo));
+ if (cd->info.track==NULL)
{
perror("cd_readTOC[malloc]");
- free(info);
- return NULL;
+ return 1;
}
- for (i=0; i<=info->tracks; i++)
+ for (i=0; i<=cd->info.tracks; i++)
{
- if (i==info->tracks)
+ if (i==cd->info.tracks)
entry.cdte_track=CDROM_LEADOUT;
else
- entry.cdte_track=info->start+i;
+ entry.cdte_track=cd->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;
+ free(cd->info.track);
+ return 1;
}
- 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;
+ if (entry.cdte_track!=CDROM_LEADOUT)
+ {
+ cd->info.track[i].num=i+1;
+ msftoMSF(cd->info.track[i].start,entry.cdte_addr.msf);
+ cd->info.track[i].end.minute=-1;
+ cd->info.track[i].end.second=-1;
+ cd->info.track[i].end.frame=-1;
+ cd->info.track[i].data=entry.cdte_ctrl&CDROM_DATA_TRACK?1:0;
+ if (i>0)
+ {
+ cd->info.track[i-1].end=cd->info.track[i].start;
+ cd->info.track[i-1].length=subMSF(cd->info.track[i-1].end,
+ cd->info.track[i-1].start);
+ }
+ }
+ else
+ {
+ msftoMSF(cd->info.track[i-1].end,entry.cdte_addr.msf);
+ cd->info.track[i-1].length=subMSF(cd->info.track[i-1].end,
+ cd->info.track[i-1].start);
+ }
}
- tmp=subMSF(info->track[info->tracks].toc,info->track[0].toc);
- info->len=msfFrames(tmp);
- info->slen=info->len/CD_FRAMES;
- cddb_discid(info);
+ cddb_discid(&cd->info);
- return info;
+ return 0;
}
/*
@@ -163,12 +159,12 @@ int cd_playMSF(CD *cd, MSF start, MSF end)
{
struct cdrom_msf msf;
- if (cd==NULL || cd->fd<0 || cd->info==NULL)
+ if (cd==NULL || cd->fd<0)
return 1;
MSFtocdmsf(msf,start,end);
- if (cd->info->current.mode==CDM_STOP)
+ if (cd->info.current.mode==CDM_STOP)
if (ioctl(cd->fd, CDROMSTART))
{
perror("cd_playMSF[CDROMSTART]");
@@ -178,7 +174,7 @@ int cd_playMSF(CD *cd, MSF start, MSF end)
if (ioctl(cd->fd, CDROMPLAYMSF, &msf))
{
printf("cd_playMSF[playmsf]\n");
- printf(" msf = %d:%d:%d %d:%d:%d\n",
+ printf(" msf = %02d:%02d:%02d %02d:%02d:%02d\n",
msf.cdmsf_min0, msf.cdmsf_sec0, msf.cdmsf_frame0,
msf.cdmsf_min1, msf.cdmsf_sec1, msf.cdmsf_frame1);
perror("cd_playMSF[CDROMPLAYMSF]");
@@ -188,15 +184,21 @@ int cd_playMSF(CD *cd, MSF start, MSF end)
}
/*
- * cdinfo_free(info)
+ * cd_freeinfo(cd)
*
* frees a allocate CDInfo
*/
-void cdinfo_free(CDInfo *info)
+void cd_freeinfo(CD *cd)
{
- if (info->track)
- free(info->track);
- free(info);
+ if (cd->info.track)
+ free(cd->info.track);
+ if (cd->info.list.track)
+ free(cd->info.list.track);
+ memset(&cd->info,0x0,sizeof(CDInfo));
+ memset(&cd->info.current,0xff,sizeof(CDPosition));
+ /* paranoia */
+ cd->info.track=NULL;
+ cd->info.list.track=NULL;
}
/*
@@ -209,8 +211,7 @@ void cd_close(CD *cd)
if (cd==NULL)
return;
- if (cd->numcd)
- cdinfo_free(cd->info);
+ cd_freeinfo(cd);
free(cd->device);
close(cd->fd);
free(cd);
@@ -243,8 +244,8 @@ CD *cd_open(char *device, int noopen)
cd->device=strdup(device);
cd->fd=-1;
cd->status=-1;
- cd->numcd=0;
- cd->info=NULL;
+ memset(&cd->info,0x0,sizeof(CDInfo));
+ memset(&cd->info.current,0xff,sizeof(CDPosition));
if (!noopen)
cd_reopen(cd);
@@ -265,9 +266,7 @@ int cd_suspend(CD *cd)
close(cd->fd);
cd->fd=-1;
cd->status=-1;
-
- if (cd->info)
- memset(&cd->info->current,0xff,sizeof(CDPosition));
+ cd_freeinfo(cd);
return 0;
}
@@ -279,6 +278,8 @@ int cd_suspend(CD *cd)
*/
int cd_reopen(CD *cd)
{
+ int start, end, track;
+
if (cd==NULL)
return 1;
@@ -288,21 +289,46 @@ int cd_reopen(CD *cd)
return 1;
}
- if (cd->info)
- cdinfo_free(cd->info);
+ cd_freeinfo(cd);
- cd->info=cd_readTOC(cd);
- if (cd->info!=NULL)
+ if (!cd_readTOC(cd))
{
- cd->status=1;
- cd->numcd=1;
- cd->info->play.start_track=cd->info->start;
- cd->info->play.end_track=cd->info->tracks;
+ cd_resetpl(cd);
+ cd->status=cd_getStatus(cd,0,1);
+ switch (cd_cur(cd,mode))
+ {
+ case CDM_PLAY:
+ cd->info.play.last_action=CDA_PLAY;
+ break;
+ case CDM_PAUSE:
+ cd->info.play.last_action=CDA_PAUSE;
+ break;
+ case CDM_STOP:
+ cd->info.play.last_action=CDA_STOP;
+ break;
+ case CDM_COMP:
+ case CDM_EJECT:
+ cd->info.play.last_action=CDA_NONE;
+ break;
+ }
+ start=cd->info.play.cur_track=cd_findtrack(cd,cd_cur(cd,track));
+
+ /* do play list optimization:
+ * find the longest possible track sequence without jumps
+ */
+ for (track=cd_list(cd,track)[start].num, end=start+1;
+ end<cd_list(cd,tracks) && track==cd_list(cd,track)[end].num-1;
+ track=cd_list(cd,track)[end].num, end++);
+ end--;
+
+ cd->info.play.cur_end=end;
+ cd->info.play.repeat_mode=CDR_NONE;
+ cd->info.play.play_type=CDP_NORMAL;
}
else
{
+ cd_freeinfo(cd);
cd->status=-1;
- cd->numcd=0;
close(cd->fd);
cd->fd=-1;
}
@@ -310,8 +336,10 @@ int cd_reopen(CD *cd)
return 0;
}
+static struct timeval last_upd={0,0};
+
/*
- * cd_status(cd,reopen)
+ * cd_getStatus(cd,reopen,force)
*
* Return values:
* -1 error
@@ -321,12 +349,15 @@ int cd_reopen(CD *cd)
*
* Updates the CDPosition struct of the cd.
* If reopen is not 0, the device is automatically reopened if needed.
+ * This will query the cdrom only one time within 1/2 second to reduce
+ * overhead. Force will overide this behaviour.
*/
-int cd_getStatus(CD *cd, int reopen)
+int cd_getStatus(CD *cd, int reopen, int force)
{
struct cdrom_subchnl sc;
- int ret=1, newcd=0;
+ int ret=1, newcd=0, im_stop=0;
CDPosition *cur;
+ struct timeval now;
if (cd==NULL)
return -1;
@@ -343,96 +374,175 @@ int cd_getStatus(CD *cd, int reopen)
newcd=1;
}
- if (cd->info==NULL)
+ gettimeofday(&now,NULL);
+ if (force
+ || ((now.tv_sec-last_upd.tv_sec)*1000000L+(now.tv_usec-last_upd.tv_usec))>500000L)
{
- cd->status=0;
- return 0;
- }
-
- cur=&cd->info->current;
-
- sc.cdsc_format=CDROM_MSF;
+ 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 (ioctl(cd->fd, CDROMSUBCHNL, &sc))
- {
- memset(cur,0xff,sizeof(CDPosition));
- cur->mode=CDM_EJECT;
- cd->status=0;
- return 0;
- }
+ /* only set update time if ioctl was successful */
+ last_upd=now;
- if (newcd)
- {
- memset(cur,0xff,sizeof(CDPosition));
- cur->mode=CDM_STOP;
- ret=2;
+ 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=cd_findtrack(cd,sc.cdsc_trk);
+
+ msftoMSF(cur->relmsf,sc.cdsc_reladdr.msf);
+ msftoMSF(cur->absmsf,sc.cdsc_absaddr.msf);
+
+ break;
+
+ case CDROM_AUDIO_PAUSED:
+ if (cd_play(cd,last_action)!=CDA_STOP)
+ {
+ cur->mode=CDM_PAUSE;
+ goto setpos;
+ }
+ memset(cur,0xff,sizeof(CDPosition));
+ cur->mode=CDM_STOP;
+ break;
+
+ case CDROM_AUDIO_COMPLETED:
+ cur->mode=CDM_COMP;
+ break;
+
+ case CDROM_AUDIO_NO_STATUS:
+ case CDROM_AUDIO_INVALID: /* my TOSHIBA CD-ROM XM-5602B wants this */
+ memset(cur,0xff,sizeof(CDPosition));
+ cur->mode=CDM_STOP;
+ break;
+ }
+ cd->status=ret;
+
+ /*
+ if (ret>0 && cur->track>cd_info(cd,tracks) && cur->mode!=CDM_EJECT)
+ {
+ cd_doStop(cd);
+ im_stop=1;
+ }
+ */
+
+ switch (cd_play(cd,repeat_mode))
+ {
+ case CDR_NONE:
+ if ((cd_play(cd,last_action)==CDA_PLAY && cur->mode!=CDM_PLAY)
+ /* this means: the user wants the cdrom to play,
+ * but the cdrom does not play */
+ || cur->mode==CDM_COMP || im_stop)
+ {
+#ifdef DEBUG
+ fprintf(stderr,"cd_getStatus[DEBUG]: switching to next track\n");
+#endif
+ cd_play(cd,cur_track)=cd_play(cd,cur_end)+1;
+ if (cd_play(cd,cur_track)<cd_list(cd,tracks))
+ cd_doPlay(cd,cd_play(cd,cur_track));
+ else
+ cd_doStop(cd);
+ }
+ break;
+ case CDR_ALL:
+ if ((cd_play(cd,last_action)==CDA_PLAY && cur->mode!=CDM_PLAY)
+ || cur->mode==CDM_COMP || im_stop)
+ {
+ cd_play(cd,cur_track)++;
+ if (cd_play(cd,cur_track)>=cd_list(cd,tracks))
+ {
+#ifdef DEBUG
+ fprintf(stderr,"cd_getStatus[DEBUG]: repeating list\n");
+#endif
+ if (cd_play(cd,play_type)==CDP_RANDOM)
+ cd_randomize(cd);
+ cd_doPlay(cd,0);
+ }
+ else
+ {
+#ifdef DEBUG
+ fprintf(stderr,"cd_getStatus[DEBUG]: switching to next track\n");
+#endif
+ cd_doPlay(cd,cd_play(cd,cur_track));
+ }
+ }
+ break;
+ case CDR_ONE:
+ if ((cd_play(cd,last_action)==CDA_PLAY && cur->mode!=CDM_PLAY)
+ || cur->mode==CDM_COMP || im_stop)
+ {
+#ifdef DEBUG
+ fprintf(stderr,"cd_getStatus[DEBUG]: repeating track\n");
+#endif
+ cd_doPlay(cd,cd_play(cd,cur_track));
+ }
+ break;
+ }
}
- 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);
+ * cd_doPlay(cd,start);
*
* 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.
+ * 0 is the first track of the play list.
*/
-int cd_doPlay(CD *cd, int start, int end)
+int cd_doPlay(CD *cd, int start)
{
- if (cd==NULL || cd->fd<0 || cd->info==NULL)
+ int end, track;
+
+ if (cd==NULL || cd->fd<0)
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 */
+ if (start<0)
+ start=0;
+ if (start>=cd->info.list.tracks)
+ start=cd->info.list.tracks-1;
+
+ /* do play list optimization:
+ * find the longest possible track sequence without jumps
+ */
+ for (track=cd_list(cd,track)[start].num, end=start+1;
+ end<cd_list(cd,tracks) && track==cd_list(cd,track)[end].num-1;
+ track=cd_list(cd,track)[end].num, end++);
+ end--;
+
#ifdef DEBUG
- fprintf(stderr,"cd_doPlay[DEBUG]: play from [%d]%d:%d:%d to [%d]%d:%d:%d\n",
+ fprintf(stderr,"cd_doPlay[DEBUG]: play from [%d]%02d:%02d:%02d to end of [%d]%02d:%02d:%02d\n",
start,
- cd->info->track[start].toc.minute,
- cd->info->track[start].toc.second,
- cd->info->track[start].toc.frame,
+ cd->info.list.track[start].start.minute,
+ cd->info.list.track[start].start.second,
+ cd->info.list.track[start].start.frame,
end,
- cd->info->track[end].toc.minute,
- cd->info->track[end].toc.second,
- cd->info->track[end].toc.frame);
+ cd->info.list.track[end].end.minute,
+ cd->info.list.track[end].end.second,
+ cd->info.list.track[end].end.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->info.play.last_action=CDA_PLAY;
+ cd->info.play.cur_track=start;
+ cd->info.play.cur_end=end;
+ return cd_playMSF(cd,
+ cd->info.list.track[start].start,
+ cd->info.list.track[end].end);
}
/*
@@ -443,23 +553,25 @@ int cd_doPlay(CD *cd, int start, int end)
*/
int cd_doPause(CD *cd)
{
- if (cd==NULL || cd->fd<0 || cd->info==NULL)
+ if (cd==NULL || cd->fd<0)
return 1;
- switch (cd->info->current.mode) {
+ switch (cd->info.current.mode) {
case CDM_PLAY:
- cd->info->current.mode=CDM_PAUSE;
+ cd->info.current.mode=CDM_PAUSE;
#ifdef DEBUG
fprintf(stderr,"cd_doPause[DEBUG]: pausing cdrom\n");
#endif
ioctl(cd->fd, CDROMPAUSE);
+ cd->info.play.last_action=CDA_PAUSE;
break;
case CDM_PAUSE:
- cd->info->current.mode=CDM_PLAY;
+ cd->info.current.mode=CDM_PLAY;
#ifdef DEBUG
fprintf(stderr,"cd_doPause[DEBUG]: resuming cdrom\n");
#endif
ioctl(cd->fd, CDROMRESUME);
+ cd->info.play.last_action=CDA_PLAY;
break;
#ifdef DEBUG
default:
@@ -476,11 +588,14 @@ int cd_doPause(CD *cd)
*/
int cd_doStop(CD *cd)
{
- if (cd==NULL || cd->fd<0 || cd->info==NULL)
+ if (cd==NULL || cd->fd<0)
return 1;
- if (cd->info->current.mode!=CDM_STOP)
+ if (cd->info.current.mode!=CDM_STOP)
{
+ /* olis cdrom needs this */
+ if (cd->info.current.mode==CDM_PLAY)
+ cd_doPause(cd);
#ifdef DEBUG
fprintf(stderr,"cd_doStop[DEBUG]: stopping cdrom\n");
#endif
@@ -489,12 +604,13 @@ int cd_doStop(CD *cd)
perror("cd_doStop[CDROMSTOP]");
return 1;
}
- if (cd->info->current.track>=cd->info->tracks)
- cd->info->play.start_track=cd->info->start;
+ cd->info.play.last_action=CDA_STOP;
+ if (cd->info.current.track>=cd->info.list.tracks)
+ cd->info.play.cur_track=0;
else
- cd->info->play.start_track=cd->info->current.track;
- memset(&cd->info->current,0xff,sizeof(CDPosition));
- cd->info->current.mode=CDM_STOP;
+ cd->info.play.cur_track=cd->info.current.track;
+ memset(&cd->info.current,0xff,sizeof(CDPosition));
+ cd->info.current.mode=CDM_STOP;
}
return 0;
}
@@ -508,24 +624,24 @@ int cd_doStop(CD *cd)
*/
int cd_doEject(CD *cd)
{
- struct stat stbuf;
- struct ustat ust;
+ struct statfs ust;
- if (cd==NULL || cd->fd<0 || cd->info==NULL)
- return 0;
- if (cd->info->current.mode==CDM_EJECT)
+ if (cd==NULL)
return 0;
- if (fstat(cd->fd, &stbuf) != 0)
+ if (cd->fd<0) /* reopen a closed device */
{
- perror("cd_doEject[fstat]");
- return 1;
+ if ((cd->fd=open(cd->device,0))<0)
+ {
+ perror("cd_doEject[(re)open]");
+ return 1;
+ }
}
- /* check for mounted filesystem */
- if (ustat(stbuf.st_rdev, &ust)==0)
+ if (statfs(cd->device, &ust))
{
- perror("cd_doEject[mounted]");
+ perror("cd_doEject[is_mounted]");
+ cd_suspend(cd);
return 2;
}
@@ -533,12 +649,14 @@ int cd_doEject(CD *cd)
fprintf(stderr,"cd_doEject[DEBUG]: stopping cdrom\n");
#endif
ioctl(cd->fd, CDROMSTOP);
+ cd->info.play.last_action=CDA_STOP;
#ifdef DEBUG
fprintf(stderr,"cd_doEject[DEBUG]: ejecting cdrom\n");
#endif
if (ioctl(cd->fd, CDROMEJECT))
{
perror("cd_doEject[CDROMEJECT]");
+ cd_suspend(cd);
return 1;
}
@@ -556,35 +674,34 @@ int cd_doSkip(CD *cd, int secs)
{
MSF start, end;
- if (cd==NULL || cd->fd<0 || cd->info==NULL)
+ if (cd==NULL || cd->fd<0)
return 1;
- end=cd->info->track[cd->info->tracks].toc;
- start=cd->info->current.absmsf;
+ end=cd_list(cd,track)[cd_play(cd,cur_end)].end;
+ start=cd->info.current.absmsf;
start.second+=secs;
+ start=normMSF(start);
#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)
+ if (cmpMSF(start,cd->info.list.track[0].start)<0)
{
- start.second+=60;
- start.minute--;
+ start=cd->info.list.track[0].start;
+#ifdef DEBUG
+ fprintf(stderr,"cd_doSkip[DEBUG]: can't skip before first track\n");
+#endif
}
- if (cmpMSF(start,cd->info->track[0].toc)<0)
+
+ if (cmpMSF(start,end)>0)
{
- start=cd->info->track[0].toc;
#ifdef DEBUG
- fprintf(stderr,"cd_doSkip[DEBUG]: can't skip before first track\n");
+ fprintf(stderr,"cd_doSkip[DEBUG]: at end of track ... waiting\n");
+ return 0;
#endif
}
#ifdef DEBUG
- fprintf(stderr,"cd_doSkip[DEBUG]: play from %d:%d:%d to %d:%d:%d\n",
+ fprintf(stderr,"cd_doSkip[DEBUG]: play from %02d:%02d:%02d to %02d:%02d:%02d\n",
start.minute, start.second, start.frame,
end.minute, end.second, end.frame);
#endif
@@ -617,286 +734,314 @@ MSF subMSF(MSF a, MSF b)
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;
+ return normMSF(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.
+ * addMSF(a,b)
+ *
+ * add a to b
*/
-int min_volume = 128;
-int max_volume = 255;
+MSF addMSF(MSF a, MSF b)
+{
+ MSF c;
+ c.minute=a.minute+b.minute;
+ c.second=a.second+b.second;
+ c.frame =a.frame +b.frame;
+ return normMSF(c);
+}
/*
- * 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
+ * normMSF(msf)
*
- * 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);
+ * normalize msf to limits
*/
-scale_volume(vol, max)
- int vol, max;
+MSF normMSF(MSF msf)
{
- return ((max * max - (max - vol) * (max - vol)) *
- (max_volume - min_volume) / (max * max) + min_volume);
+ while (msf.frame<0) {msf.frame+=FRAMES; msf.second--;}
+ while (msf.second<0) {msf.second+=SECONDS; msf.minute--;}
+ if (msf.minute<0) msf.minute=0;
+ while (msf.frame>FRAMES) {msf.frame-=FRAMES; msf.second++;}
+ while (msf.second>SECONDS) {msf.second-=SECONDS; msf.minute++;}
+ return msf;
}
/*
- * unscale_volume(cd_vol, max)
- *
- * Given a value between min_volume and max_volume, return the volume slider
- * value needed to achieve that value.
+ * cd_resetpl(cd,all)
*
- * Rather than perform floating-point calculations to reverse the above
- * formula, we simply do a binary search of scale_volume()'s return values.
+ * reset the play list to all non-data tracks (or all tracks if all is true)
*/
-unscale_volume(cd_vol, max)
- int cd_vol, max;
+int cd_resetpl(CD *cd)
{
- int vol, incr, scaled;
+ int i;
+
+ if (cd==NULL)
+ return 1;
+
+ if (cd->info.list.track)
+ free(cd->info.list.track);
- for (vol = max / 2, incr = max / 4 + 1; incr; incr /= 2)
+ cd->info.list.tracks=0;
+ MSFzero(cd->info.list.length);
+
+ if (cd->info.tracks==0)
+ return 0;
+
+ cd->info.list.track=(TrackInfo *)malloc(cd->info.tracks*sizeof(TrackInfo));
+ if (cd->info.list.track==NULL)
{
- scaled = scale_volume(vol, max);
- if (cd_vol == scaled)
- break;
- if (cd_vol < scaled)
- vol -= incr;
- else
- vol += incr;
+ perror("cd_resetpl[malloc]");
+ return 1;
}
- if (vol < 0)
- vol = 0;
- else if (vol > max)
- vol = max;
+ cd->info.list.allocated=cd->info.tracks;
+ for (i=0; i<cd->info.tracks; i++)
+ if (!cd->info.track[i].data)
+ {
+ cd->info.list.track[cd->info.list.tracks++]=cd->info.track[i];
+ cd->info.list.length=addMSF(cd->info.list.length,
+ cd->info.list.track[cd->info.list.tracks-1].length);
+ }
- return (vol);
+ cd_play(cd,play_type)=CDP_NORMAL;
+
+#ifdef DEBUG
+ fprintf(stderr,"cd_resetpl[DEBUG]: cd playlist reseted\n");
+#endif
+
+ return 0;
}
/*
- * cd_volume(vol, bal, max)
+ * cd_findtrack(cd,number)
*
- * 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.)
+ * find the track with number in the play list and return it's index
+ * returns -1 if not found
*/
-void
-cd_volume(vol, bal, max)
- int vol, bal, max;
+int cd_findtrack(CD *cd, int num)
{
- 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;
+ int i;
+
+ if (cd==NULL || cd->info.track==NULL)
+ return -1;
- /* Adjust the volume to make up for the CD-ROM drive's weirdness. */
- left = scale_volume(left, max);
- right = scale_volume(right, max);
+ for (i=0; i<cd->info.list.tracks; i++)
+ if (cd->info.list.track[i].num==num)
+ return i;
- 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);
+ return -1;
}
/*
- * Set the offset into the current track and play. -1 means end of track
- * (i.e., go to next track.)
+ * cd_randomize(cd)
+ *
+ * create a random, non-repeating play list from all non-data tracks
*/
-void
-play_from_pos(pos)
- int pos;
+int cd_randomize(CD *cd)
{
- 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);
-}
+ int i, *wech, r, j;
-/* 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)
+ if (cd==NULL)
+ return 1;
+
+ if (cd->info.list.track)
+ free(cd->info.list.track);
+
+ cd->info.list.tracks=0;
+ MSFzero(cd->info.list.length);
+
+ if (cd->info.tracks==0)
+ return 0;
+
+ cd->info.list.track=(TrackInfo *)malloc(cd->info.tracks*sizeof(TrackInfo));
+ if (cd->info.list.track==NULL)
+ {
+ perror("cd_randomize[malloc]");
+ return 1;
+ }
+
+ wech=(int *)malloc(sizeof(int)*cd->info.tracks);
+ if (wech==NULL)
+ {
+ perror("cd_randomize[tmp-malloc]");
+ free(wech);
+ return 1;
+ }
+
+ r=cd->info.tracks;
+ for (i=0; i<cd->info.tracks; i++)
{
- brk(&end);
- pause();
+ if (!cd->info.track[i].data)
+ wech[i]=0;
+ else
+ {
+ wech[i]=1;
+ r--;
+ }
}
+
+
+ while (r)
+ {
+ i=random()%r;
+ for (j=0; j<cd->info.tracks; j++)
+ {
+ if (i)
+ i--;
+ else if (!i && !wech[j])
+ {
+ cd->info.list.track[cd->info.list.tracks++]=cd->info.track[j];
+ cd->info.list.length=addMSF(cd->info.list.length,
+ cd->info.list.track[cd->info.list.tracks-1].length);
+ wech[j]++;
+ r--;
+ break;
+ }
+ }
+ }
+
+ cd_play(cd,play_type)=CDP_RANDOM;
+
+#ifdef DEBUG
+ fprintf(stderr,"cd_randomize[DEBUG]: cd playlist randomized\n");
+#endif
- exit(0);
+ return 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.
+ * cd_setpl(cd,list)
*
- * 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.
+ * set the playlist of cd to list
*/
-find_trkind(track, index, start)
- int track, index, start;
+int cd_setpl(CD *cd, CDPlayList *list)
{
- 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;
+ if (cd==NULL || list==NULL)
+ return 1;
- for (; i < cur_ntracks; i++)
- if (cd->trk[i].track > track)
- break;
+ if (cd->info.list.track!=NULL)
+ free(cd->info.list.track);
- top = i == cur_ntracks ? (cd->length - 1) * CD_FRAMES : cd->trk[i].start;
+ cd->info.list.track=(TrackInfo *)malloc(list->allocated*sizeof(TrackInfo));
+ if (cd->info.list.track==NULL)
+ {
+ perror("cd_setpl[malloc]");
+ return 2;
+ }
- if (start > bottom && start < top)
- bottom = start;
+ cd->info.list.length=list->length;
+ cd->info.list.allocated=list->allocated;
+ cd->info.list.tracks=list->tracks;
+ memcpy(cd->info.list.track,list->track,list->allocated*sizeof(TrackInfo));
- current = (top + bottom) / 2;
- interval = (top - bottom) / 4;
+#ifdef DEBUG
+ fprintf(stderr,"cd_setpl[DEBUG]: cd playlist set to playlist 0x%08x\n",list);
+#endif
- do {
- play_chunk(current, current + CD_FRAMES);
+ return 0;
+}
- if (cd_status() != 1)
- return (0);
- while (cur_frame < current)
- if (cd_status() != 1 || cur_cdmode != 1)
- return (0);
- else
- susleep(1);
+/*
+ * cdpl_new()
+ *
+ * create a new empty playlist structure
+ */
+CDPlayList *cdpl_new()
+{
+ CDPlayList *new;
- if (cd->trk[cur_track - 1].track > track)
- break;
+ new=(CDPlayList *)malloc(sizeof(CDPlayList));
+ if (new==NULL)
+ {
+ perror("cdpl_new[malloc]");
+ return NULL;
+ }
+ memset(new,0,sizeof(CDPlayList));
- if (cur_index >= index)
- {
- ret = current;
- current -= interval;
- }
- else
- current += interval;
- interval /= 2;
- } while (interval > 2);
+#ifdef DEBUG
+ fprintf(stderr,"cdpl_new[DEBUG]: new playlist created (0x%08x)\n",new);
+#endif
- return (ret);
+ return new;
}
/*
- * Simulate usleep() using select().
+ * cdpl_free(list)
+ *
+ * free the memory occupied by a playlist
*/
-susleep(usec)
- int usec;
+int cdpl_free(CDPlayList *list)
{
- struct timeval tv;
-
- timerclear(&tv);
- tv.tv_sec = usec / 1000000;
- tv.tv_usec = usec % 1000000;
- return (select(0, NULL, NULL, NULL, &tv));
+ if (list)
+ {
+#ifdef DEBUG
+ fprintf(stderr,"cdpl_free[DEBUG]: free playlist 0x%08x\n",list);
+#endif
+ if (list->track)
+ free(list->track);
+ free(list);
+ }
+ return 0;
}
+
/*
- * 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.
+ * cdpl_add(cd,track)
*
- * "max" is the maximum value of the volume knob.
+ * add track to list
*/
-read_initial_volume(max)
- int max;
+int cdpl_add(CDPlayList *list, CD *cd, int track)
{
- 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 (list==NULL || track>=cd->info.tracks || track<0)
+ return 1;
- if (left < right)
+ if (list->track==NULL)
{
- cur_balance = (right - left) / 2 + 11;
- if (cur_balance > 20)
- cur_balance = 20;
-
- return (right);
+ list->track=(TrackInfo *)malloc(10*sizeof(TrackInfo));
+ list->allocated=10;
+ list->tracks=0;
}
- else if (left == right)
+ else if (list->allocated==list->tracks)
{
- cur_balance = 10;
- return (left);
+ TrackInfo *new;
+ list->allocated+=10;
+ new=realloc(list->track,list->allocated*sizeof(TrackInfo));
+ if (new==NULL)
+ {
+ perror("cdpl_add[realloc]");
+ return 2;
+ }
+ list->track=new;
}
- else
- {
- cur_balance = (right - left) / 2 + 9;
- if (cur_balance < 0)
- cur_balance = 0;
- return (left);
- }
+ list->track[list->tracks++]=cd->info.track[track];
+ list->length=addMSF(list->length,cd->info.track[track].length);
+
+#ifdef DEBUG
+ fprintf(stderr,"cdpl_add[DEBUG]: track %d added to playlist 0x%08x (size %d)\n",
+ cd->info.track[track].num,list,list->tracks);
+#endif
+
+ return 0;
}
-#endif /* BOZO */
+
+/*
+ * cdpl_reset(list)
+ *
+ * set the playlist to zero tracks
+ */
+int cdpl_reset(CDPlayList *list)
+{
+ if (list==NULL)
+ return 1;
+
+ if (list->track)
+ free(list->track);
+
+ memset(list,0,sizeof(CDPlayList));
+
+#ifdef DEBUG
+ fprintf(stderr,"cdpl_reset[DEBUG]: playlist 0x%08x reseted\n",list);
#endif
+
+ return 0;
+}
diff --git a/cdrom.h b/cdrom.h
index f423c9d..441ea38 100644
--- a/cdrom.h
+++ b/cdrom.h
@@ -1,5 +1,7 @@
/*
- * $Id: cdrom.h,v 1.3 1997/06/12 14:51:32 ograf Exp $
+ * $Id: cdrom.h,v 1.9 1997/10/30 11:24:51 ograf Exp $
+ *
+ * Copyright (c) 1997 by Oliver Graf <ograf at fga.de>
*/
#ifndef _MY_CDROM_H
@@ -13,48 +15,74 @@
#define CDM_STOP 3
#define CDM_EJECT CDM_CLOSED
+/* cd actions */
+#define CDA_NONE 0
+#define CDA_STOP 1
+#define CDA_PLAY 2
+#define CDA_PAUSE 3
+
+/* repeatmode */
+#define CDR_NONE 0
+#define CDR_ONE 1
+#define CDR_ALL 2
+
+/* playtype */
+#define CDP_NORMAL 0
+#define CDP_RANDOM 1
+
typedef struct {
int minute;
int second;
int frame;
} MSF;
-#define fSecs(f) (int)(f/75)
-#define fMins(f) (int)(f/75/60)
+#define FRAMES 75
+#define SECONDS 60
-#define msfFrames(msf) (((msf.minute*60)+msf.second)*75+msf.frame)
-#define msfSecs(msf) (((msf.minute*60)+msf.second)
+#define fSecs(f) (int)(f/FRAMES)
+#define fMins(f) (int)(f/FRAMES/SECONDS)
+
+#define msfFrames(msf) (((msf.minute*SECONDS)+msf.second)*FRAMES+msf.frame)
+#define msfSecs(msf) (((msf.minute*SECONDS)+msf.second)
#define MSFnone(msf) msf.minute=msf.second=msf.frame=-1
+#define MSFzero(msf) msf.minute=msf.second=msf.frame=0
typedef struct {
int num;
- MSF toc; /* real start */
- int start; /* start in frames */
- int len; /* length in frames */
- int slen; /* length in seconds */
+ MSF start; /* real start */
+ MSF end; /* start of the next track == end */
+ MSF length; /* length of the track in MSF */
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;
+ int last_action; /* last action, needed for auto-play-next-in-list */
+ int cur_track; /* this is the automatical up-counted track within the list */
+ int cur_end; /* this is the calculated end of an uninterupted sequence */
+ int repeat_mode; /* repeat some or all or none */
+ int play_type; /* normal or random */
} CDPlayInfo;
+typedef struct { /* stores a array of tracks to play */
+ MSF length; /* length of the play list */
+ int allocated; /* tracks allacated in track entry */
+ int tracks; /* number of tracks in the play list */
+ TrackInfo *track; /* the tracks */
+} CDPlayList;
+
typedef struct {
CDPosition current;
CDPlayInfo play;
+ CDPlayList list; /* is initialized with all non-data tracks */
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 */
@@ -65,8 +93,7 @@ typedef struct {
int fd;
char *device;
int status; /* this keeps the return value of cd_getStatus() */
- int numcd;
- CDInfo *info;
+ CDInfo info; /* only one cd per device, anything else is stupid */
} CD;
CD *cd_open(char *device, int noopen);
@@ -74,15 +101,16 @@ int cd_reopen(CD *cd);
int cd_suspend(CD *cd);
void cd_close(CD *cd);
-void cdinfo_free(CDInfo *info);
+void cd_freeinfo(CD *cd);
-int cd_getStatus(CD *cd, int reopen);
+int cd_getStatus(CD *cd, int reopen, int force);
/*
* 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_playMSF(CD *cd, MSF start, MSF end);
+int cd_doPlay(CD *cd, int start);
int cd_doSkip(CD *cd, int secs);
int cd_doPause(CD *cd);
int cd_doStop(CD *cd);
@@ -90,7 +118,30 @@ int cd_doEject(CD *cd);
int cmpMSF(MSF a, MSF b);
MSF subMSF(MSF a, MSF b);
+MSF addMSF(MSF a, MSF b);
+MSF normMSF(MSF msf);
-#define curMode(c) (c->info==NULL?CDM_EJECT:c->info->current.mode)
+/*
+ * play list functions
+ *
+ * first the CD internal stuff
+ */
+int cd_resetpl(CD *cd);
+int cd_findtrack(CD *cd, int num);
+int cd_randomize(CD *cd);
+int cd_setpl(CD *cd, CDPlayList *list);
+
+/*
+ * now extra play lists
+ */
+CDPlayList *cdpl_new();
+int cdpl_free(CDPlayList *list);
+int cdpl_add(CDPlayList *list, CD *cd, int track);
+int cdpl_reset(CDPlayList *list);
+
+#define cd_info(c,w) (c->info.##w)
+#define cd_cur(c,w) (c->info.current.##w)
+#define cd_play(c,w) (c->info.play.##w)
+#define cd_list(c,w) (c->info.list.##w)
#endif
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..f6dc4ce
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,7 @@
+/* config.h.in. Generated automatically from configure.in by autoheader. */
+
+/* Define if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define if you want GNUstep compilant paths. */
+#undef HAVE_GNUSTEP
diff --git a/configure b/configure
new file mode 100755
index 0000000..be7758a
--- /dev/null
+++ b/configure
@@ -0,0 +1,1786 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.12
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_help="$ac_help
+\
+ --without-ctrl Compile without command line tools."
+ac_help="$ac_help
+\
+ --without-debug Compile without extra debug messages."
+ac_help="$ac_help
+\
+ --without-gnustep Don't use GNUstep style library paths."
+ac_help="$ac_help
+ --with-x use the X Window System"
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ case "$ac_option" in
+ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) ac_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case "$ac_option" in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir="$ac_optarg" ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build="$ac_optarg" ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file="$ac_optarg" ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir="$ac_optarg" ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ eval "enable_${ac_feature}=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix="$ac_optarg" ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he)
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+ --cache-file=FILE cache test results in FILE
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
+ --version print the version of autoconf that created configure
+Directory and file names:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [same as prefix]
+ --bindir=DIR user executables in DIR [EPREFIX/bin]
+ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
+ --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data in DIR
+ [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data in DIR
+ [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
+ --libdir=DIR object code libraries in DIR [EPREFIX/lib]
+ --includedir=DIR C header files in DIR [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
+ --infodir=DIR info documentation in DIR [PREFIX/info]
+ --mandir=DIR man documentation in DIR [PREFIX/man]
+ --srcdir=DIR find the sources in DIR [configure dir or ..]
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM
+ run sed PROGRAM on installed program names
+EOF
+ cat << EOF
+Host type:
+ --build=BUILD configure for building on BUILD [BUILD=HOST]
+ --host=HOST configure for HOST [guessed]
+ --target=TARGET configure for TARGET [TARGET=HOST]
+Features and packages:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+EOF
+ if test -n "$ac_help"; then
+ echo "--enable and --with options recognized:$ac_help"
+ fi
+ exit 0 ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host="$ac_optarg" ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir="$ac_optarg" ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir="$ac_optarg" ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir="$ac_optarg" ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir="$ac_optarg" ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir="$ac_optarg" ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir="$ac_optarg" ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir="$ac_optarg" ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix="$ac_optarg" ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix="$ac_optarg" ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix="$ac_optarg" ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name="$ac_optarg" ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir="$ac_optarg" ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir="$ac_optarg" ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site="$ac_optarg" ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir="$ac_optarg" ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir="$ac_optarg" ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target="$ac_optarg" ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers)
+ echo "configure generated by autoconf version 2.12"
+ exit 0 ;;
+
+ -with-* | --with-*)
+ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_${ac_package}='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ eval "with_${ac_package}=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes="$ac_optarg" ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries="$ac_optarg" ;;
+
+ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ ;;
+
+ *)
+ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+ echo "configure: warning: $ac_option: invalid host type" 1>&2
+ fi
+ if test "x$nonopt" != xNONE; then
+ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+ fi
+ nonopt="$ac_option"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+ exec 6>/dev/null
+else
+ exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+ case "$ac_arg" in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set. These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=wmrack.c
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ else
+ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ echo "loading site script $ac_site_file"
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ echo "loading cache $cache_file"
+ . $cache_file
+else
+ echo "creating cache $cache_file"
+ > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says ghazi at caip.rutgers.edu.
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+else
+ ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+
+# Check whether --with-ctrl or --without-ctrl was given.
+if test "${with_ctrl+set}" = set; then
+ withval="$with_ctrl"
+ :
+else
+ with_ctrl="yes"
+fi
+
+# Check whether --with-debug or --without-debug was given.
+if test "${with_debug+set}" = set; then
+ withval="$with_debug"
+ :
+else
+ with_debug="yes"
+fi
+
+# Check whether --with-gnustep or --without-gnustep was given.
+if test "${with_gnustep+set}" = set; then
+ withval="$with_gnustep"
+ :
+fi
+
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:561: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="gcc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:590: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ ac_prog_rejected=no
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# -gt 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ set dummy "$ac_dir/$ac_word" "$@"
+ shift
+ ac_cv_prog_CC="$@"
+ fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:638: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext <<EOF
+#line 648 "configure"
+#include "confdefs.h"
+main(){return(0);}
+EOF
+if { (eval echo configure:652: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ ac_cv_prog_cc_works=yes
+ # If we can't run a trivial program, we are probably using a cross compiler.
+ if (./conftest; exit) 2>/dev/null; then
+ ac_cv_prog_cc_cross=no
+ else
+ ac_cv_prog_cc_cross=yes
+ fi
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+ { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:672: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:677: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.c <<EOF
+#ifdef __GNUC__
+ yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:686: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ ac_cv_prog_gcc=yes
+else
+ ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+ ac_test_CFLAGS="${CFLAGS+set}"
+ ac_save_CFLAGS="$CFLAGS"
+ CFLAGS=
+ echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:701: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+ ac_cv_prog_cc_g=yes
+else
+ ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+ if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+ elif test $ac_cv_prog_cc_g = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-O2"
+ fi
+else
+ GCC=
+ test "${CFLAGS+set}" = set || CFLAGS="-g"
+fi
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:758: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:"
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ for ac_prog in ginstall installbsd scoinst install; do
+ if test -f $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ # OSF/1 installbsd also uses dspmsg, but is usable.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_save_IFS"
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL="$ac_cv_path_install"
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL="$ac_install_sh"
+ fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
+echo "configure:808: checking whether ln -s works" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ rm -f conftestdata
+if ln -s X conftestdata 2>/dev/null
+then
+ rm -f conftestdata
+ ac_cv_prog_LN_S="ln -s"
+else
+ ac_cv_prog_LN_S=ln
+fi
+fi
+LN_S="$ac_cv_prog_LN_S"
+if test "$ac_cv_prog_LN_S" = "ln -s"; then
+ echo "$ac_t""yes" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+
+
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:832: checking how to run the C preprocessor" >&5
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # This must be in double quotes, not single quotes, because CPP may get
+ # substituted into the Makefile and "${CC-cc}" will confuse make.
+ CPP="${CC-cc} -E"
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp.
+ cat > conftest.$ac_ext <<EOF
+#line 847 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:853: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP="${CC-cc} -E -traditional-cpp"
+ cat > conftest.$ac_ext <<EOF
+#line 864 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:870: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+ ac_cv_prog_CPP="$CPP"
+fi
+ CPP="$ac_cv_prog_CPP"
+else
+ ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
+echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+echo "configure:893: checking for ANSI C header files" >&5
+if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 898 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:906: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ ac_cv_header_stdc=yes
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 923 "configure"
+#include "confdefs.h"
+#include <string.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "memchr" >/dev/null 2>&1; then
+ :
+else
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 941 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "free" >/dev/null 2>&1; then
+ :
+else
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+if test "$cross_compiling" = yes; then
+ :
+else
+ cat > conftest.$ac_ext <<EOF
+#line 962 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int main () { int i; for (i = 0; i < 256; i++)
+if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
+exit (0); }
+
+EOF
+if { (eval echo configure:973: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+ :
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_header_stdc=no
+fi
+rm -fr conftest*
+fi
+
+fi
+fi
+
+echo "$ac_t""$ac_cv_header_stdc" 1>&6
+if test $ac_cv_header_stdc = yes; then
+ cat >> confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+ac_safe=`echo "unistd.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for unistd.h""... $ac_c" 1>&6
+echo "configure:998: checking for unistd.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1003 "configure"
+#include "confdefs.h"
+#include <unistd.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1008: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+
+
+# If we find X, set shell vars x_includes and x_libraries to the
+# paths, otherwise set no_x=yes.
+# Uses ac_ vars as temps to allow command line to override cache and checks.
+# --without-x overrides everything else, but does not touch the cache.
+echo $ac_n "checking for X""... $ac_c" 1>&6
+echo "configure:1037: checking for X" >&5
+
+# Check whether --with-x or --without-x was given.
+if test "${with_x+set}" = set; then
+ withval="$with_x"
+ :
+fi
+
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+ # The user explicitly disabled X.
+ have_x=disabled
+else
+ if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
+ # Both variables are already set.
+ have_x=yes
+ else
+if eval "test \"`echo '$''{'ac_cv_have_x'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=NO ac_x_libraries=NO
+rm -fr conftestdir
+if mkdir conftestdir; then
+ cd conftestdir
+ # Make sure to not put "make" in the Imakefile rules, since we grep it out.
+ cat > Imakefile <<'EOF'
+acfindx:
+ @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
+EOF
+ if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
+ # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+ eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
+ # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+ for ac_extension in a so sl; do
+ if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
+ test -f $ac_im_libdir/libX11.$ac_extension; then
+ ac_im_usrlibdir=$ac_im_libdir; break
+ fi
+ done
+ # Screen out bogus values from the imake configuration. They are
+ # bogus both because they are the default anyway, and because
+ # using them would break gcc on systems where it needs fixed includes.
+ case "$ac_im_incroot" in
+ /usr/include) ;;
+ *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes="$ac_im_incroot" ;;
+ esac
+ case "$ac_im_usrlibdir" in
+ /usr/lib | /lib) ;;
+ *) test -d "$ac_im_usrlibdir" && ac_x_libraries="$ac_im_usrlibdir" ;;
+ esac
+ fi
+ cd ..
+ rm -fr conftestdir
+fi
+
+if test "$ac_x_includes" = NO; then
+ # Guess where to find include files, by looking for this one X11 .h file.
+ test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h
+
+ # First, try using that file with no special directory specified.
+cat > conftest.$ac_ext <<EOF
+#line 1099 "configure"
+#include "confdefs.h"
+#include <$x_direct_test_include>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1104: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ # Look for the header file in a standard set of common directories.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ for ac_dir in \
+ /usr/X11/include \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11R4/include \
+ \
+ /usr/include/X11 \
+ /usr/include/X11R6 \
+ /usr/include/X11R5 \
+ /usr/include/X11R4 \
+ \
+ /usr/local/X11/include \
+ /usr/local/X11R6/include \
+ /usr/local/X11R5/include \
+ /usr/local/X11R4/include \
+ \
+ /usr/local/include/X11 \
+ /usr/local/include/X11R6 \
+ /usr/local/include/X11R5 \
+ /usr/local/include/X11R4 \
+ \
+ /usr/X386/include \
+ /usr/x386/include \
+ /usr/XFree86/include/X11 \
+ \
+ /usr/include \
+ /usr/local/include \
+ /usr/unsupported/include \
+ /usr/athena/include \
+ /usr/local/x11r5/include \
+ /usr/lpp/Xamples/include \
+ \
+ /usr/openwin/include \
+ /usr/openwin/share/include \
+ ; \
+ do
+ if test -r "$ac_dir/$x_direct_test_include"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+ done
+fi
+rm -f conftest*
+fi # $ac_x_includes = NO
+
+if test "$ac_x_libraries" = NO; then
+ # Check for the libraries.
+
+ test -z "$x_direct_test_library" && x_direct_test_library=Xt
+ test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
+
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS="$LIBS"
+ LIBS="-l$x_direct_test_library $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1173 "configure"
+#include "confdefs.h"
+
+int main() {
+${x_direct_test_function}()
+; return 0; }
+EOF
+if { (eval echo configure:1180: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ LIBS="$ac_save_LIBS"
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ LIBS="$ac_save_LIBS"
+# First see if replacing the include by lib works.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \
+ /usr/X11/lib \
+ /usr/X11R6/lib \
+ /usr/X11R5/lib \
+ /usr/X11R4/lib \
+ \
+ /usr/lib/X11 \
+ /usr/lib/X11R6 \
+ /usr/lib/X11R5 \
+ /usr/lib/X11R4 \
+ \
+ /usr/local/X11/lib \
+ /usr/local/X11R6/lib \
+ /usr/local/X11R5/lib \
+ /usr/local/X11R4/lib \
+ \
+ /usr/local/lib/X11 \
+ /usr/local/lib/X11R6 \
+ /usr/local/lib/X11R5 \
+ /usr/local/lib/X11R4 \
+ \
+ /usr/X386/lib \
+ /usr/x386/lib \
+ /usr/XFree86/lib/X11 \
+ \
+ /usr/lib \
+ /usr/local/lib \
+ /usr/unsupported/lib \
+ /usr/athena/lib \
+ /usr/local/x11r5/lib \
+ /usr/lpp/Xamples/lib \
+ /lib/usr/lib/X11 \
+ \
+ /usr/openwin/lib \
+ /usr/openwin/share/lib \
+ ; \
+do
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+fi
+rm -f conftest*
+fi # $ac_x_libraries = NO
+
+if test "$ac_x_includes" = NO || test "$ac_x_libraries" = NO; then
+ # Didn't find X anywhere. Cache the known absence of X.
+ ac_cv_have_x="have_x=no"
+else
+ # Record where we found X for the cache.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
+fi
+fi
+ fi
+ eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+ echo "$ac_t""$have_x" 1>&6
+ no_x=yes
+else
+ # If each of the values was on the command line, it overrides each guess.
+ test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+ test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+ # Update the cache value to reflect the command line values.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
+ echo "$ac_t""libraries $x_libraries, headers $x_includes" 1>&6
+fi
+
+if test "x$no_x" = "xyes"; then
+ { echo "configure: error: WMRack needs X Windows!!!" 1>&2; exit 1; }
+else
+ CFLAGS="$CFLAGS -I${x_includes}"
+ LIBS="$LIBS -L${x_libraries} -lX11"
+fi
+
+echo $ac_n "checking for XpmCreatePixmapFromBuffer in -lXpm""... $ac_c" 1>&6
+echo "configure:1274: checking for XpmCreatePixmapFromBuffer in -lXpm" >&5
+ac_lib_var=`echo Xpm'_'XpmCreatePixmapFromBuffer | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lXpm \
+ -lX11 $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1283 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XpmCreatePixmapFromBuffer();
+
+int main() {
+XpmCreatePixmapFromBuffer()
+; return 0; }
+EOF
+if { (eval echo configure:1294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ \
+ LIBS="$LIBS -lXpm"
+else
+ echo "$ac_t""no" 1>&6
+\
+ { echo "configure: error: WMRack needs XPM support!!!" 1>&2; exit 1; }
+fi
+
+
+ac_safe=`echo "X11/extensions/shape.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for X11/extensions/shape.h""... $ac_c" 1>&6
+echo "configure:1320: checking for X11/extensions/shape.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1325 "configure"
+#include "confdefs.h"
+#include <X11/extensions/shape.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1330: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
+\
+ { echo "configure: error: WMRack needs X11 Shape extensions!!!" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking for XShapeCombineMask in -lXext""... $ac_c" 1>&6
+echo "configure:1354: checking for XShapeCombineMask in -lXext" >&5
+ac_lib_var=`echo Xext'_'XShapeCombineMask | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lXext \
+ -lX11 $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1363 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char XShapeCombineMask();
+
+int main() {
+XShapeCombineMask()
+; return 0; }
+EOF
+if { (eval echo configure:1374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ \
+ LIBS="$LIBS -lXext"
+else
+ echo "$ac_t""no" 1>&6
+\
+ { echo "configure: error: WMRack needs the X11 extension library!!!" 1>&2; exit 1; }
+fi
+
+
+echo
+
+if test "x${with_ctrl}" = "xyes"; then
+ echo "compiling the extra command line tools"
+ CTRL="cdctrl mixctrl"
+else
+ CTRL=""
+fi
+
+
+if test "x${with_debug}" = "xyes"; then
+ echo "adding extra DEBUG output"
+ CFLAGS="-ggdb -DDEBUG $CFLAGS"
+fi
+
+if test "x${with_gnustep}" = "xno"; then
+ echo "GNUstep path standarts disabled"
+else
+ echo -n "Trying to detect GNUstep paths..."
+ if test -d "$prefix/GNUstep" -o -d "$ac_default_prefix/GNUstep"; then
+ libdir=\${prefix}/GNUstep/Library
+ echo " $libdir"
+ cat >> confdefs.h <<\EOF
+#define HAVE_GNUSTEP 1
+EOF
+
+ else
+ echo " NOT FOUND -- DISABLED"
+ fi
+fi
+
+echo
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+ case `(ac_space=' '; set) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote substitution
+ # turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ -e "s/'/'\\\\''/g" \
+ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+ ;;
+ esac >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "\$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "$CONFIG_STATUS generated by autoconf version 2.12"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "\$ac_cs_usage"; exit 0 ;;
+ *) echo "\$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile XPM/Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@CC@%$CC%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@LN_S@%$LN_S%g
+s%@INSTALL@%$INSTALL%g
+s%@CPP@%$CPP%g
+s%@CTRL@%$CTRL%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ fi
+done
+if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile XPM/Makefile"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ case "$ac_given_INSTALL" in
+ [/$]*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='\([ ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+ CONFIG_HEADERS="config.h"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ echo creating $ac_file
+
+ rm -f conftest.frag conftest.in conftest.out
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ cat $ac_file_inputs > conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h. And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >> conftest.vals <<\EOF
+s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+while :
+do
+ ac_lines=`grep -c . conftest.vals`
+ # grep -c gives empty output for an empty file on some AIX systems.
+ if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+ # Write a limited-size here document to conftest.frag.
+ echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+ echo 'CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+ rm -f conftest.vals
+ mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+ rm -f conftest.frag conftest.h
+ echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
+ cat conftest.in >> conftest.h
+ rm -f conftest.in
+ if cmp -s $ac_file conftest.h 2>/dev/null; then
+ echo "$ac_file is unchanged"
+ rm -f conftest.h
+ else
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ fi
+ rm -f $ac_file
+ mv conftest.h $ac_file
+ fi
+fi; done
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
diff --git a/configure.in b/configure.in
new file mode 100644
index 0000000..1dc5fa1
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,118 @@
+dnl
+dnl WMRack autoconf stuff
+dnl
+dnl Copyright (c) 1997 by Oliver Graf <ograf at fga.de>
+dnl
+
+AC_INIT(wmrack.c)
+AC_CONFIG_HEADER(config.h)
+
+dnl package switches
+dnl
+dnl AC_ARG_WITH(cdplayer,[ --with-cdplayer Include cdplayer support.])
+dnl AC_ARG_WITH(mixer, [ --with-mixer Include mixer support.])
+AC_ARG_WITH(ctrl, \
+[ --without-ctrl Compile without command line tools.],[],[with_ctrl="yes"])
+AC_ARG_WITH(debug, \
+[ --without-debug Compile without extra debug messages.],[],[with_debug="yes"])
+AC_ARG_WITH(gnustep, \
+[ --without-gnustep Don't use GNUstep style library paths.])
+
+dnl check for standart compile && install stuff
+dnl
+AC_PROG_CC
+AC_PROG_INSTALL
+AC_PROG_LN_S
+
+AC_SUBST(INSTALL)
+
+dnl check for needed headers
+dnl
+AC_HEADER_STDC
+AC_CHECK_HEADER(unistd.h)
+
+dnl Check for Linux CDROM support
+dnl
+dnl if test "x${enable_cdplayer}" = "xno"; then
+dnl AC_MSG_WARN([cdplayer feature disabled])
+dnl else
+dnl AC_MSG_CHECKING([for cdplayer support])
+dnl AC_EGREP_HEADER([struct cdrom_msf],linux/cdrom.h,[echo yes
+dnl AC_DEFINE(WITH_CDPLAYER,linux)],[echo no])
+dnl fi
+
+dnl Check for Linux MIXER support
+dnl
+dnl if test "x${enable_mixer}" = "xno"; then
+dnl AC_MSG_WARN([mixer feature disabled])
+dnl else
+dnl AC_MSG_CHECKING([for mixer support])
+dnl AC_EGREP_HEADER([typedef struct mixer_info],linux/soundcard.h,[echo yes
+dnl AC_DEFINE(WITH_MIXER,linux)],[echo no])
+dnl fi
+
+dnl check for X11
+dnl
+AC_PATH_X
+if test "x$no_x" = "xyes"; then
+ AC_MSG_ERROR([WMRack needs X Windows!!!])
+else
+ CFLAGS="$CFLAGS -I${x_includes}"
+ LIBS="$LIBS -L${x_libraries} -lX11"
+fi
+
+dnl check for Xpm
+dnl
+AC_CHECK_LIB(Xpm,XpmCreatePixmapFromBuffer,\
+ [LIBS="$LIBS -lXpm"],\
+ AC_MSG_ERROR([WMRack needs XPM support!!!]),\
+ -lX11)
+
+dnl check for Shape extensions
+dnl
+AC_CHECK_HEADER(X11/extensions/shape.h,[],\
+ [AC_MSG_ERROR([WMRack needs X11 Shape extensions!!!])])
+AC_CHECK_LIB(Xext,XShapeCombineMask,\
+ [LIBS="$LIBS -lXext"],\
+ AC_MSG_ERROR([WMRack needs the X11 extension library!!!]),\
+ -lX11)
+
+dnl check for extra package options
+dnl
+echo
+
+dnl command line tools
+if test "x${with_ctrl}" = "xyes"; then
+ echo "compiling the extra command line tools"
+ CTRL="cdctrl mixctrl"
+else
+ CTRL=""
+fi
+AC_SUBST(CTRL)
+
+dnl DEBUG
+if test "x${with_debug}" = "xyes"; then
+ echo "adding extra DEBUG output"
+ CFLAGS="-ggdb -DDEBUG $CFLAGS"
+fi
+
+dnl GNUstep paths
+if test "x${with_gnustep}" = "xno"; then
+ echo "GNUstep path standarts disabled"
+else
+ echo -n "Trying to detect GNUstep paths..."
+ if test -d "$prefix/GNUstep" -o -d "$ac_default_prefix/GNUstep"; then
+ libdir=[\${prefix}/GNUstep/Library]
+ echo " $libdir"
+ AC_DEFINE(HAVE_GNUSTEP)
+ else
+ echo " NOT FOUND -- DISABLED"
+ fi
+fi
+
+echo
+
+dnl All done
+dnl create output
+dnl
+AC_OUTPUT(Makefile XPM/Makefile)
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..ebc6691
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,250 @@
+#! /bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission. M.I.T. makes no representations about the
+# suitability of this software for any purpose. It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+ case $1 in
+ -c) instcmd="$cpprog"
+ shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd="$stripprog"
+ shift
+ continue;;
+
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ shift
+ continue;;
+
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ shift
+ continue;;
+
+ *) if [ x"$src" = x ]
+ then
+ src=$1
+ else
+ # this colon is to work around a 386BSD /bin/sh bug
+ :
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if [ x"$src" = x ]
+then
+ echo "install: no input file specified"
+ exit 1
+else
+ true
+fi
+
+if [ x"$dir_arg" != x ]; then
+ dst=$src
+ src=""
+
+ if [ -d $dst ]; then
+ instcmd=:
+ else
+ instcmd=mkdir
+ fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+ if [ -f $src -o -d $src ]
+ then
+ true
+ else
+ echo "install: $src does not exist"
+ exit 1
+ fi
+
+ if [ x"$dst" = x ]
+ then
+ echo "install: no destination specified"
+ exit 1
+ else
+ true
+ fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+ if [ -d $dst ]
+ then
+ dst="$dst"/`basename $src`
+ else
+ true
+ fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+# this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+ pathcomp="${pathcomp}${1}"
+ shift
+
+ if [ ! -d "${pathcomp}" ] ;
+ then
+ $mkdirprog "${pathcomp}"
+ else
+ true
+ fi
+
+ pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+ $doit $instcmd $dst &&
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+ if [ x"$transformarg" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ dstfile=`basename $dst $transformbasename |
+ sed $transformarg`$transformbasename
+ fi
+
+# don't allow the sed command to completely eliminate the filename
+
+ if [ x"$dstfile" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ true
+ fi
+
+# Make a temp file name in the proper directory.
+
+ dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+ $doit $instcmd $src $dsttmp &&
+
+ trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing. If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+ $doit $rmcmd -f $dstdir/$dstfile &&
+ $doit $mvcmd $dsttmp $dstdir/$dstfile
+
+fi &&
+
+
+exit 0
diff --git a/library.c b/library.c
new file mode 100644
index 0000000..eda106a
--- /dev/null
+++ b/library.c
@@ -0,0 +1,163 @@
+/*
+ * $Id: library.c,v 1.4.2.1 1998/08/05 11:42:58 ograf Exp $
+ *
+ * part of wmrack
+ *
+ * handles the library path searchs
+ *
+ * Copyright (c) 1997 by Oliver Graf <ograf at fga.de>
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "config.h"
+#include "library.h"
+
+static char *lib_mode[]={"", "r", "w", "a"};
+
+#ifdef HAVE_GNUSTEP
+static char *lib_global_path[]={"/usr/local/GNUstep/Library/WMRack/",
+ "/usr/GNUstep/Library/WMRack/",
+ NULL};
+
+static char *lib_personal_path[]={"/GNUstep/Library/WMRack/",
+ NULL};
+#else
+static char *lib_global_path[]={"/usr/X11R6/lib/X11/WMRack/",
+ NULL};
+
+static char *lib_personal_path[]={"/.wmrack/",
+ NULL};
+#endif /* HAVE_GNUSTEP */
+
+static char lib_stat_path[4096]="";
+
+char *lib_findfile(char *name, int here)
+{
+ char path[4096]="";
+ int i;
+ struct stat st;
+
+ if (here)
+ {
+ strcpy(path,name);
+ if (stat(path,&st)!=0)
+ *path=0;
+ }
+
+ if (*path==0)
+ for (i=0; lib_personal_path[i]; i++)
+ {
+ strcpy(path,getenv("HOME"));
+ strcat(path,lib_personal_path[i]);
+ if (here)
+ {
+ strcat(path,name);
+ if (stat(path,&st)==0)
+ break;
+ }
+ else
+ if (stat(path,&st)==0)
+ {
+ strcat(path,name);
+ break;
+ }
+ *path=0;
+ }
+
+ if (*path==0)
+ {
+ for (i=0; lib_global_path[i]; i++)
+ {
+ strcpy(path,lib_global_path[i]);
+ strcat(path,name);
+ if (stat(path,&st)==0)
+ break;
+ *path=0;
+ }
+ if (*path==0)
+ {
+ strcpy(path,getenv("HOME"));
+ strcat(path,lib_personal_path[0]);
+ if (mkdir(path,0755))
+ return NULL;
+ strcat(path,name);
+ }
+ }
+
+ strcpy(lib_stat_path,path);
+
+ return lib_stat_path;
+}
+
+LIBRARY *lib_open(char *name, int mode)
+{
+ char *p=NULL;
+ LIBRARY *lib=NULL;
+ FILE *f=NULL;
+
+ p=lib_findfile(name,0);
+ if (p==NULL)
+ return NULL;
+
+ f=fopen(p,lib_mode[mode]);
+ if (f!=NULL)
+ {
+ lib=(LIBRARY *)malloc(sizeof(LIBRARY));
+ lib->name=strdup(p);
+ lib->f=fopen(lib->name,lib_mode[mode]);
+ lib->mode=mode;
+ }
+ return lib;
+}
+
+int lib_close(LIBRARY *lib)
+{
+ fclose(lib->f);
+ lib->f=NULL;
+ lib->mode=LIB_CLOSED;
+ return 0;
+}
+
+int lib_free(LIBRARY *lib)
+{
+ lib_close(lib);
+ free(lib->name);
+ free(lib);
+ return 0;
+}
+
+int lib_reopen(LIBRARY *lib, int mode)
+{
+ lib_close(lib);
+ lib->f=fopen(lib->name,lib_mode[mode]);
+ if (lib->f==NULL)
+ return -1;
+ return 0;
+}
+
+char *lib_gets(LIBRARY *lib, char *line, int len)
+{
+ if (lib->mode==LIB_READ)
+ return fgets(line,len,lib->f);
+ return NULL;
+}
+
+int lib_printf(LIBRARY *lib, char *format, ...)
+{
+ va_list args;
+ int s;
+
+ if (lib->mode==LIB_READ)
+ return 0;
+ va_start(args,format);
+ s=vfprintf(lib->f,format,args);
+ va_end(args);
+ return s;
+}
diff --git a/library.h b/library.h
new file mode 100644
index 0000000..c4b2407
--- /dev/null
+++ b/library.h
@@ -0,0 +1,33 @@
+/*
+ * $Id: library.h,v 1.3 1997/10/18 14:39:20 ograf Exp $
+ *
+ * part of wmrack
+ *
+ * handles the library path searchs
+ *
+ * Copyright (c) 1997 by Oliver Graf <ograf at fga.de>
+ */
+#ifndef _LIBRARY_H
+#define _LIBRARY_H
+
+#define LIB_CLOSED 0
+#define LIB_READ 1
+#define LIB_WRITE 2
+#define LIB_APPEND 3
+
+typedef struct
+{
+ FILE *f;
+ char *name;
+ int mode;
+} LIBRARY;
+
+char *lib_findfile(char *name, int here);
+LIBRARY *lib_open(char *name, int mode);
+int lib_close(LIBRARY *lib);
+int lib_free(LIBRARY *lib);
+int lib_reopen(LIBRARY *lib, int mode);
+char *lib_gets(LIBRARY *lib, char *line, int len);
+int lib_printf(LIBRARY *lib, char *format, ...);
+
+#endif
diff --git a/mixctrl.c b/mixctrl.c
new file mode 100644
index 0000000..a3e8076
--- /dev/null
+++ b/mixctrl.c
@@ -0,0 +1,141 @@
+/*
+ * $Id: mixctrl.c,v 1.3 1997/07/12 14:11:37 ograf Exp $
+ *
+ * Part of WMRack
+ *
+ * command line tool to control the mixer
+ * created to test the mixer control stuff
+ *
+ * Copyright (c) 1997 by Oliver Graf <ograf at fga.de>
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mixer.h"
+
+void usage()
+{
+ fprintf(stderr,"Usage: mixctrl [-d DEVICE] [CHANNELNAME|CHANNELNUM] [0-100|0-100:0-100|src|nosrc|exsrc]\n");
+}
+
+int main(int argc, char **argv)
+{
+ MIXER *mix;
+ int fa=1, i, volid, left=0, right=0, command=0;
+ char *device="/dev/mixer", *d1;
+
+ if (argc<1)
+ {
+ usage();
+ exit(EXIT_FAILURE);
+ }
+
+ if (argc>2 && strcmp(argv[1],"-d")==0)
+ {
+ device=argv[2];
+ argc-=2;
+ fa=3;
+ }
+
+ if (argc>2)
+ {
+ volid=strtol(argv[fa],&d1,10);
+ if (*d1!=0)
+ {
+ for (volid=0; volid<mixer_devices; volid++)
+ if (strcmp(argv[fa],mixer_names[volid])==0)
+ break;
+ }
+ d1=strchr(argv[fa+1],':');
+ if (d1)
+ {
+ *d1++=0;
+ left=atoi(argv[fa+1]);
+ right=atoi(d1);
+ command=1;
+ }
+ else
+ {
+ if (strcmp(argv[fa+1],"src")==0)
+ command=2;
+ else if (strcmp(argv[fa+1],"nosrc")==0)
+ command=3;
+ else if (strcmp(argv[fa+1],"exsrc")==0)
+ command=4;
+ else
+ {
+ left=atoi(argv[fa+1]);
+ command=0;
+ }
+ }
+ }
+
+ mix=mixer_open(device);
+ if (mix==NULL)
+ printf("Can't open mixer\n");
+ else
+ {
+ printf("Mixer initialized\n");
+ printf("Mixer id %s, Mixer name %s\n",mix->id,mix->name);
+ printf("Supported devices:\n");
+ for (i=0; i<mixer_devices; i++)
+ if (mixer_isdevice(mix,i))
+ {
+ if (mixer_isstereo(mix,i))
+ printf(" %2d - %-8s (%3d:%3d) %s%s\n",i,mixer_names[i],
+ mixer_volleft(mix,i),mixer_volright(mix,i),
+ (mixer_isrecdev(mix,i)?"REC":""),
+ (mixer_isrecsrc(mix,i)?"SRC":""));
+ else
+ printf(" %2d - %-8s ( %3d ) %s%s\n",i,mixer_names[i],
+ mixer_volmono(mix,i),
+ (mixer_isrecdev(mix,i)?"REC":""),
+ (mixer_isrecsrc(mix,i)?"SRC":""));
+ }
+ }
+
+ if (volid<mixer_devices)
+ {
+ switch (command)
+ {
+ case 0:
+ printf("Setting %s to volume %d\n",mixer_names[volid],left);
+ mixer_setvol(mix,volid,left);
+ break;
+ case 1:
+ printf("Setting %s to volume %d:%d\n",mixer_names[volid],left,right);
+ mixer_setvols(mix,volid,left,right);
+ break;
+ case 2:
+ printf("Setting %s as recsrc\n",mixer_names[volid]);
+ mixer_setrecsrc(mix,volid,1,0);
+ break;
+ case 3:
+ printf("Clearing recsrc of %s\n",mixer_names[volid]);
+ mixer_setrecsrc(mix,volid,0,0);
+ break;
+ case 4:
+ printf("Setting %s as exclusive recsrc\n",mixer_names[volid]);
+ mixer_setrecsrc(mix,volid,1,1);
+ break;
+ }
+ if (mixer_isdevice(mix,volid))
+ {
+ if (mixer_isstereo(mix,volid))
+ printf(" %2d - %-8s (%3d:%3d) %s%s\n",volid,mixer_names[volid],
+ mixer_volleft(mix,volid),mixer_volright(mix,volid),
+ (mixer_isrecdev(mix,volid)?"REC":""),
+ (mixer_isrecsrc(mix,volid)?"SRC":""));
+ else
+ printf(" %2d - %-8s ( %3d ) %s%s\n",volid,mixer_names[volid],
+ mixer_volmono(mix,volid),
+ (mixer_isrecdev(mix,volid)?"REC":""),
+ (mixer_isrecsrc(mix,volid)?"SRC":""));
+ }
+ }
+
+ mixer_close(mix);
+ printf("Mixer closed\n");
+ return EXIT_SUCCESS;
+}
diff --git a/mixer.c b/mixer.c
new file mode 100644
index 0000000..0d9eb28
--- /dev/null
+++ b/mixer.c
@@ -0,0 +1,511 @@
+/*
+ * $Id: mixer.c,v 1.6 1997/07/17 19:52:12 ograf Exp $
+ *
+ * mixer utility functions for WMRack
+ *
+ * Copyright (c) 1997 by Oliver Graf <ograf at fga.de>
+ *
+ * this is very linux specific !!!
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <unistd.h>
+#include <linux/soundcard.h>
+
+#include "mixer.h"
+
+char *mixer_labels[]=SOUND_DEVICE_LABELS;
+char *mixer_names[]=SOUND_DEVICE_NAMES;
+char *mixer_shortnames[]={"VO", "BA", "TR", "SY", "PC", "SP", "LI", "MI",
+ "CD", "MX", "P2", "RE", "IG", "OG", "L1", "L2", "L3"};
+int mixer_devices=SOUND_MIXER_NRDEVICES;
+
+/*
+ * mixer_getinfo(MIXER)
+ *
+ * reads the supported devices and their capabilities
+ *
+ * returns 0 on success
+ */
+int mixer_getinfo(MIXER *mix)
+{
+ if (!mix || mix->fd==0)
+ return -1;
+
+ if (ioctl(mix->fd,SOUND_MIXER_INFO,&mix->id)) {
+ fprintf(stderr,"mixer_getinfo[info]: %s\n",strerror(errno));
+ memset(&mix->id,0,48);
+ }
+#ifdef DEBUG
+ else
+ fprintf(stderr,"mixer_getinfo[info] - successful\n");
+#endif
+ if (ioctl(mix->fd,SOUND_MIXER_READ_DEVMASK,&mix->mask)) {
+ fprintf(stderr,"mixer_getinfo[devmask]: %s\n",strerror(errno));
+ mix->mask=0;
+ }
+#ifdef DEBUG
+ else
+ fprintf(stderr,"mixer_getinfo[devmask] - successful\n");
+#endif
+ if (ioctl(mix->fd,SOUND_MIXER_READ_STEREODEVS,&mix->stereo)) {
+ fprintf(stderr,"mixer_getinfo[stereodevs]: %s\n",strerror(errno));
+ mix->stereo=0;
+ }
+#ifdef DEBUG
+ else
+ fprintf(stderr,"mixer_getinfo[stereodevs] - successful\n");
+#endif
+ if (ioctl(mix->fd,SOUND_MIXER_READ_CAPS,&mix->caps)) {
+ fprintf(stderr,"mixer_getinfo[caps]: %s\n",strerror(errno));
+ mix->caps=0;
+ }
+#ifdef DEBUG
+ else
+ fprintf(stderr,"mixer_getinfo[caps] - successful\n");
+#endif
+ if (ioctl(mix->fd,SOUND_MIXER_READ_RECSRC,&mix->recsrc)) {
+ fprintf(stderr,"mixer_getinfo[recsrc]: %s\n",strerror(errno));
+ mix->recsrc=0;
+ }
+#ifdef DEBUG
+ else
+ fprintf(stderr,"mixer_getinfo[recsrc] - successful\n");
+#endif
+ if (ioctl(mix->fd,SOUND_MIXER_READ_RECMASK,&mix->recmask)) {
+ fprintf(stderr,"mixer_getinfo[recmask]: %s\n",strerror(errno));
+ mix->recmask=0;
+ }
+#ifdef DEBUG
+ else
+ fprintf(stderr,"mixer_getinfo[recmask] - successful\n");
+#endif
+ return 0;
+}
+
+/*
+ * mixer_readvol(mixer,dev)
+ *
+ * reads the current volume setting of the specified device
+ *
+ * returns 0 if volume is equal to last read, 1 if volume has changed
+ * and a negative value on failure
+ */
+int mixer_readvol(MIXER *mix, int dev)
+{
+ int i;
+
+ if (!mix || mix->fd==0)
+ return -1;
+
+ mix->old_vol[dev]=mix->cur_vol[dev];
+
+ if (mixer_isdevice(mix,dev))
+ {
+ if (ioctl(mix->fd,MIXER_READ(dev),&mix->cur_vol[dev]))
+ {
+ fprintf(stderr,"mixer_readvol[%s]: %s\n",mixer_names[dev],strerror(errno));
+ mix->cur_vol[dev]=-1;
+ }
+ else
+ if (mix->old_vol[dev]!=mix->cur_vol[dev])
+ return 1;
+ }
+ else
+ mix->cur_vol[i]=-1;
+
+ return 0;
+}
+
+/*
+ * mixer_readvols(MIXER)
+ *
+ * reads the current volume settings of all supported devices
+ *
+ * returns 0 if volume is equal to last read, 1 if volume has changed
+ * and a negative value on failure
+ */
+int mixer_readvols(MIXER *mix)
+{
+ int i, change=0;
+
+ if (!mix || mix->fd==0)
+ return -1;
+
+ memcpy(mix->old_vol,mix->cur_vol,sizeof(int)*32);
+
+ for (i=0; i<mixer_devices; i++)
+ {
+ if (mixer_isdevice(mix,i))
+ {
+ if (ioctl(mix->fd,MIXER_READ(i),&mix->cur_vol[i]))
+ {
+ fprintf(stderr,"mixer_readvol[%s]: %s\n",mixer_names[i],strerror(errno));
+ mix->cur_vol[i]=-1;
+ /* mix->mask&=~(1<<i); */
+ }
+ else
+ change|=mix->old_vol[i]!=mix->cur_vol[i];
+ }
+ else
+ mix->cur_vol[i]=-1;
+ }
+
+ return change;
+}
+
+/*
+ * mixer_open(char)
+ *
+ * opens the specified device as mixer and call getinfo and readvols
+ *
+ * returns a pointer to a MIXER struct on success or NULL on failure
+ */
+MIXER *mixer_open(char *device)
+{
+ MIXER *mix=NULL;
+ mix=malloc(sizeof(MIXER));
+ if (mix==NULL)
+ {
+ perror("mixer_open[malloc]");
+ return NULL;
+ }
+ mix->fd=open(device,0);
+ if (mix->fd<0) {
+ fprintf(stderr,"mixer_open: %s\n",strerror(errno));
+ free(mix);
+ return NULL;
+ }
+ mix->device=strdup(device);
+ mixer_getinfo(mix);
+ mixer_readvols(mix);
+ return mix;
+}
+
+/*
+ * mixer_close(MIXER)
+ *
+ * closes the mixer and frees all data
+ */
+void mixer_close(MIXER *mix)
+{
+ if (mix) {
+ close(mix->fd);
+ if (mix->device)
+ free(mix->device);
+ free(mix);
+ }
+}
+
+/*
+ * mixer_setvol(mix,dev,vol)
+ *
+ * sets the specified device to a mono volume
+ *
+ * returns 0 on success
+ */
+int mixer_setvol(MIXER *mix, int dev, int vol)
+{
+ if (!mix || mix->fd==0)
+ return -1;
+
+ if (!mixer_isdevice(mix,dev))
+ {
+#ifdef DEBUG
+ fprintf(stderr,"mixer_setvol: unsupported device\n");
+#endif
+ return 1;
+ }
+
+ if (vol<0) vol=0;
+ if (vol>100) vol=100;
+
+ if (mixer_isstereo(mix,dev))
+ mixer_setvols(mix,dev,vol,vol);
+ else
+ {
+ vol=mixer_makevol(vol,vol);
+ if (ioctl(mix->fd,MIXER_WRITE(dev),&vol))
+ perror("mixer_setvol[write]");
+#ifdef DEBUG
+ else
+ fprintf(stderr,"mixer_setvol[set]: vol set to %02d\n",vol>>8);
+#endif
+ }
+
+ return 0;
+}
+
+/*
+ * mixer_setvols(mix,dev,left,right)
+ *
+ * sets the specified device to a stereo volume
+ *
+ * returns 0 on success
+ */
+int mixer_setvols(MIXER *mix, int dev, int left, int right)
+{
+ int vol;
+
+ if (!mix || mix->fd==0)
+ return -1;
+
+ if (!mixer_isdevice(mix,dev))
+ {
+#ifdef DEBUG
+ fprintf(stderr,"mixer_setvols: unsupported device\n");
+#endif
+ return 1;
+ }
+
+ if (left<0) left=0;
+ if (left>100) left=100;
+ if (right<0) right=0;
+ if (right>100) right=100;
+ vol=mixer_makevol(left,right);
+
+ if (mixer_ismono(mix,dev))
+ mixer_setvol(mix,dev,(left+right)/2);
+ else
+ {
+ if (ioctl(mix->fd,MIXER_WRITE(dev),&vol))
+ perror("mixer_setvols[write]");
+#ifdef DEBUG
+ else
+ fprintf(stderr,"mixer_setvols[set]: vol set to %02d:%02d\n",
+ vol&0xff,(vol>>8)&0xff);
+#endif
+ }
+
+ return 0;
+}
+
+/*
+ * mixer_setrecsrc(mix,dev,state)
+ *
+ * sets or clears the RECSRC state of the specified device
+ *
+ * returns 0 on success
+ */
+int mixer_setrecsrc(MIXER *mix, int dev, int state, int exclusive)
+{
+ int new;
+
+ if (!mix || mix->fd==0)
+ return -1;
+
+ if (mixer_isdevice(mix,dev) && mixer_isrecdev(mix,dev))
+ {
+ mix->old_recsrc=mix->recsrc;
+ if (state)
+ {
+ if (mix->caps&SOUND_CAP_EXCL_INPUT || exclusive)
+ new=(1<<dev);
+ else
+ new=mix->recsrc|(1<<dev);
+ }
+ else
+ new=mix->recsrc&(~(1<<dev));
+#ifdef DEBUG
+ if (new==0)
+ fprintf(stderr,"mixer_setrecsrc[write]: warning, no recsrc may not be possible");
+#endif
+ if (ioctl(mix->fd,SOUND_MIXER_WRITE_RECSRC,&new))
+ perror("mixer_serrecsrc[write]");
+ else
+ {
+ if (ioctl(mix->fd,SOUND_MIXER_READ_RECSRC,&mix->recsrc))
+ {
+ perror("mixer_setrecsrc[read]");
+ mix->recsrc=0;
+ }
+#ifdef DEBUG
+ else
+ fprintf(stderr,"mixer_setrecsrc[read]: %s is %s\n",
+ mixer_names[dev],
+ mixer_isrecsrc(mix,dev)?"RECSRC":"not RECSRC");
+#endif
+ }
+ }
+ else
+ {
+#ifdef DEBUG
+ fprintf(stderr,"mixer_setrecsrc: unsupported device\n");
+#endif
+ return 1;
+ }
+ return 0;
+}
+
+int mixer_changevol(MIXER *mix, int dev, int delta)
+{
+ int left, right;
+
+ if (!mix || mix->fd==0)
+ return -1;
+
+ if (!mixer_isdevice(mix,dev))
+ {
+#ifdef DEBUG
+ fprintf(stderr,"mixer_changevol: unsupported device\n");
+#endif
+ return 1;
+ }
+
+ if (mixer_isstereo(mix,dev))
+ {
+ left=mixer_volleft(mix,dev)+delta;
+ if (left<0) left=0;
+ if (left>100) left=100;
+ right=mixer_volright(mix,dev)+delta;
+ if (right<0) right=0;
+ if (right>100) right=100;
+ left=mixer_makevol(left,right);
+ }
+ else
+ {
+ left=mixer_volmono(mix,dev)+delta;
+ if (left<0) left=0;
+ if (left>100) left=100;
+ left=mixer_makevol(left,left);
+ }
+ if (ioctl(mix->fd,MIXER_WRITE(dev),&left))
+ perror("mixer_changevol[write]");
+#ifdef DEBUG
+ else
+ fprintf(stderr,"mixer_changevol[set]: vol set to %02d:%02d\n",left&0xff,left>>8);
+#endif
+
+ return 0;
+}
+
+int mixer_changeleft(MIXER *mix, int dev, int delta)
+{
+ int vol;
+
+ if (!mix || mix->fd==0)
+ return -1;
+
+ if (!mixer_isdevice(mix,dev))
+ {
+#ifdef DEBUG
+ fprintf(stderr,"mixer_changeleft: unsupported device\n");
+#endif
+ return 1;
+ }
+
+ if (mixer_ismono(mix,dev))
+ mixer_changevol(mix,dev,delta);
+ else
+ {
+ vol=mixer_volleft(mix,dev)+delta;
+ if (vol<0) vol=0;
+ if (vol>100) vol=100;
+ vol=mixer_makevol(vol,mixer_volright(mix,dev));
+ if (ioctl(mix->fd,MIXER_WRITE(dev),&vol))
+ perror("mixer_changeleft[write]");
+#ifdef DEBUG
+ else
+ fprintf(stderr,"mixer_changeleft[set]: vol set to %02d:%02d\n",
+ vol&0xff,(vol>>8)&0xff);
+#endif
+ }
+
+ return 0;
+}
+
+int mixer_changeright(MIXER *mix, int dev, int delta)
+{
+ int vol;
+
+ if (!mix || mix->fd==0)
+ return -1;
+
+ if (!mixer_isdevice(mix,dev))
+ {
+#ifdef DEBUG
+ fprintf(stderr,"mixer_changeright: unsupported device\n");
+#endif
+ return 1;
+ }
+
+ if (mixer_ismono(mix,dev))
+ mixer_changevol(mix,dev,delta);
+ else
+ {
+ vol=mixer_volright(mix,dev)+delta;
+ if (vol<0) vol=0;
+ if (vol>100) vol=100;
+ vol=mixer_makevol(mixer_volleft(mix,dev),vol);
+ if (ioctl(mix->fd,MIXER_WRITE(dev),&vol))
+ perror("mixer_changeright[write]");
+#ifdef DEBUG
+ else
+ fprintf(stderr,"mixer_changeright[set]: vol set to %02d:%02d\n",
+ vol&0xff,(vol>>8)&0xff);
+#endif
+ }
+
+ return 0;
+}
+
+int mixer_changebal(MIXER *mix, int dev, int delta)
+{
+ int left, right;
+
+ if (!mix || mix->fd==0)
+ return -1;
+
+ if (!mixer_isdevice(mix,dev))
+ {
+#ifdef DEBUG
+ fprintf(stderr,"mixer_changebal: unsupported device\n");
+#endif
+ return 1;
+ }
+
+ if (mixer_ismono(mix,dev))
+ mixer_changevol(mix,dev,delta);
+ else
+ {
+ left=mixer_volleft(mix,dev)-delta;
+ right=mixer_volright(mix,dev)+delta;
+ if (left<0)
+ {
+ right+=left;
+ left=0;
+ }
+ if (right<0)
+ {
+ left+=right;
+ right=0;
+ }
+ if (left>100)
+ {
+ right+=(left-100);
+ left=100;
+ }
+ if (right>100)
+ {
+ left+=(right-100);
+ right=100;
+ }
+ left=mixer_makevol(left,right);
+ if (ioctl(mix->fd,MIXER_WRITE(dev),&left))
+ perror("mixer_changebal[write]");
+#ifdef DEBUG
+ else
+ fprintf(stderr,"mixer_changebal[set]: vol set to %02d:%02d\n",
+ left&0xff,(left>>8)&0xff);
+#endif
+ }
+
+ return 0;
+}
diff --git a/mixer.h b/mixer.h
new file mode 100644
index 0000000..1cde0df
--- /dev/null
+++ b/mixer.h
@@ -0,0 +1,59 @@
+/*
+ * $Id: mixer.h,v 1.5 1997/07/13 15:28:16 ograf Exp $
+ *
+ * Copyright (c) 1997 by Oliver Graf <ograf at fga.de>
+ */
+
+#ifndef _MYMIXER_H
+#define _MYMIXER_H
+
+extern char *mixer_labels[];
+extern char *mixer_names[];
+extern char *mixer_shortnames[];
+extern int mixer_devices;
+
+typedef struct {
+ char *device;
+ int fd;
+ char id[16];
+ char name[32];
+ int mask;
+ int recmask;
+ int recsrc;
+ int old_recsrc;
+ int stereo;
+ int caps;
+ int cur_vol[32];
+ int old_vol[32];
+} MIXER;
+
+#define mixer_isdevice(m,d) ((d<mixer_devices)?(m->mask&(1<<d)):0)
+#define mixer_isstereo(m,d) ((d<mixer_devices)?(m->stereo&(1<<d)):0)
+#define mixer_ismono(m,d) (!mixer_isstereo(m,d))
+#define mixer_isrecsrc(m,d) ((d<mixer_devices)?(m->recsrc&(1<<d)):0)
+#define mixer_isrecdev(m,d) ((d<mixer_devices)?(m->recmask&(1<<d)):0)
+
+#define mixer_makevol(l,r) ((r<<8)+l)
+#define mixer_volmono(m,d) ((d<mixer_devices)?((m->cur_vol[d]>>8)&0xff):-1)
+#define mixer_volleft(m,d) (mixer_isstereo(m,d)?((d<mixer_devices)?(m->cur_vol[d]&0xff):-1):mixer_volmono(m,d))
+#define mixer_volright(m,d) mixer_volmono(m,d)
+
+#define mixer_volchanged(m,d) (mixer_isdevice(m,d)?(m->old_vol[d]!=m->cur_vol[d]):0)
+#define mixer_srcchanged(m,d) (mixer_isrecdev(m,d) \
+ ? ((m->old_recsrc&(1<<d))!=(m->recsrc&(1<<d))) \
+ : 0)
+
+MIXER *mixer_open(char *device);
+void mixer_close(MIXER *mix);
+int mixer_readvol(MIXER *mix, int dev);
+int mixer_readvols(MIXER *mix);
+int mixer_setvol(MIXER *mix, int dev, int vol);
+int mixer_setvols(MIXER *mix, int dev, int left, int right);
+int mixer_setrecsrc(MIXER *mix, int dev, int state, int exclusive);
+
+int mixer_changevol(MIXER *mix, int dev, int delta);
+int mixer_changeleft(MIXER *mix, int dev, int delta);
+int mixer_changeright(MIXER *mix, int dev, int delta);
+int mixer_changebal(MIXER *mix, int dev, int delta);
+
+#endif /* _MYMIXER_H */
diff --git a/wmrack.c b/wmrack.c
index 877e216..be31ded 100644
--- a/wmrack.c
+++ b/wmrack.c
@@ -1,34 +1,37 @@
/*
- * $Id: wmrack.c,v 1.8 1997/06/14 13:24:57 ograf Exp $
+ * $Id: wmrack.c,v 1.22.2.3 1998/08/06 11:10:26 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/
+ * Copyright (c) 1997 by Oliver Graf <ograf at fga.de> http://www.fga.de/~ograf/
*
- * ascd originally By Rob Malda <malda at cs.hope.edu> http://www.cs.hope.edu/~malda/
+ * 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.
+ * used to control the cdrom and the mixer.
+ *
+ * Should also work swallowed in any fvwm compatible button bar.
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <ctype.h>
+#include <sys/time.h>
+#include <unistd.h>
+#include <errno.h>
+#include <signal.h>
#include <X11/Xlib.h>
+#include <X11/Xresource.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"
+#include "mixer.h"
+#include "library.h"
/* Functions *****************************************************************/
void usage();
@@ -39,18 +42,14 @@ void shutDown(int);
void mainLoop();
int flushExpose(Window w);
void redrawWindow();
-void redrawDisplay(int force_win);
+void redrawDisplay(int force_win, int force_disp);
Pixel getColor(char *name);
Time getTime();
+int loadMixerRC();
+int saveMixerRC();
+void rack_popup(char *msg);
/* 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;
@@ -61,7 +60,9 @@ GC WinGC;
/* varibles for the options */
char *StyleXpmFile=NULL;
char *LedColor=NULL;
+char *BackColor=NULL;
char CdDevice[1024]="/dev/cdrom";
+char MixerDevice[1024]="/dev/mixer";
int withdraw=0;
int noprobe=0;
@@ -69,24 +70,54 @@ 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;
+int curMixer=0; /* this is the device number of the currently shown mixer scale */
+int lastMixer=0;
+char *popup_display=NULL;
+time_t popup_time=0;
+int popup_done=0;
+
+/* Mode of WMRack */
+#define MODE_CDPLAYER 0
+#define MODE_MIXER 1
+int WMRack_Mode=MODE_CDPLAYER;
/* our cd device */
-CD *cd;
+CD *cd=NULL;
+CDPlayList *playlist=NULL;
+int start_track=0;
+
+/* and the mixer */
+MIXER *mixer=NULL;
+int mixer_order[32], mixer_max=0;
+LIBRARY *mixer_lib=NULL;
/*
* start the whole stuff and enter the MainLoop
*/
int main(int argc,char *argv[])
{
+ struct timeval tm;
parseCmdLine(argc, argv);
cd=cd_open(CdDevice,noprobe);
- if (cd_getStatus(cd,0)>0)
- newdisc=1;
+ if (cd_getStatus(cd,0,1)>0)
+ {
+ if (cd_list(cd,tracks)==0)
+ {
+ rack_popup("DATA");
+ cd_suspend(cd);
+ }
+ else
+ newdisc=1;
+ }
+ mixer=mixer_open(MixerDevice);
+ loadMixerRC();
+#ifdef DEBUG
+ fprintf(stderr,"wmrack: Mixer RC loaded\n");
+#endif
initHandler();
+ gettimeofday(&tm,NULL);
+ srandom(tm.tv_usec^tm.tv_sec);
createWindow(argc, argv);
mainLoop();
return 0;
@@ -99,16 +130,19 @@ int main(int argc,char *argv[])
*/
void usage()
{
- fprintf(stderr,"wmrack - Version 0.9\n");
+ fprintf(stderr,"wmrack - Version 1.0b5\n");
fprintf(stderr,"usage: wmrack [OPTIONS] \n");
fprintf(stderr,"\n");
fprintf(stderr,"OPTION DEFAULT DESCRIPTION\n");
+ fprintf(stderr,"-b|--background COLSPEC black color of the led background\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,"-m|--mixer DEV /dev/mixer device of the Mixer\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,"-M|--mode [cd|mixer] cd start in which mode\n");
fprintf(stderr,"\n");
exit(1);
}
@@ -122,12 +156,15 @@ void parseCmdLine(int argc, char *argv[])
{
int i, j;
char opt;
- struct {char *name, option;} Options[]={{"device",'d'},
+ struct {char *name, option;} Options[]={{"background",'b'},
+ {"device",'d'},
{"withdrawn",'w'},
{"help",'h'},
{"ledcolor",'l'},
+ {"mixer",'m'},
{"style",'s'},
{"noprobe",'p'},
+ {"mode",'M'},
{NULL,0}};
for(i=1; i<argc; i++)
@@ -153,6 +190,11 @@ void parseCmdLine(int argc, char *argv[])
}
switch (opt)
{
+ case 'b': /* Led Color */
+ if (++i>=argc)
+ usage();
+ BackColor=strdup(argv[i]);
+ continue;
case 'd': /* Device */
if (++i>=argc)
usage();
@@ -169,6 +211,11 @@ void parseCmdLine(int argc, char *argv[])
usage();
LedColor=strdup(argv[i]);
continue;
+ case 'm': /* Device */
+ if (++i>=argc)
+ usage();
+ strcpy(MixerDevice,argv[i]);
+ continue;
case 's':
if (++i>=argc)
usage();
@@ -177,6 +224,20 @@ void parseCmdLine(int argc, char *argv[])
case 'p':
noprobe=1;
continue;
+ case 'M':
+ if (++i>=argc)
+ usage();
+ if (strcmp(argv[i],"cd")==0)
+ {
+ WMRack_Mode=MODE_CDPLAYER;
+ curRack=RACK_NODISC;
+ }
+ else if (strcmp(argv[i],"mixer")==0)
+ {
+ WMRack_Mode=MODE_MIXER;
+ curRack=RACK_MIXER;
+ }
+ continue;
default:
usage();
}
@@ -246,7 +307,7 @@ void createWindow(int argc, char **argv)
ScreenHeight=DisplayHeight(Disp,screen);
ScreenWidth=DisplayWidth(Disp,screen);
- xpm_setDefaultAttr(Disp,Root,LedColor);
+ xpm_setDefaultAttr(Disp,Root,LedColor,BackColor);
if (StyleXpmFile)
{
if (xpm_loadSet(Disp,Root,StyleXpmFile))
@@ -287,10 +348,10 @@ void createWindow(int argc, char **argv)
classHint.res_class="WMRack";
XSetClassHint(Disp, Win, &classHint);
- XSelectInput(Disp, Win, (ExposureMask|ButtonPressMask|ButtonReleaseMask|
- StructureNotifyMask));
- XSelectInput(Disp, Iconwin, (ExposureMask|ButtonPressMask|ButtonReleaseMask|
- StructureNotifyMask));
+ XSelectInput(Disp, Win, (ExposureMask|ButtonPressMask|ButtonReleaseMask
+ |StructureNotifyMask|ButtonMotionMask));
+ XSelectInput(Disp, Iconwin, (ExposureMask|ButtonPressMask|ButtonReleaseMask
+ |StructureNotifyMask|ButtonMotionMask));
if (XStringListToTextProperty(&wname, 1, &name) ==0)
{
@@ -320,7 +381,7 @@ void createWindow(int argc, char **argv)
XSetCommand(Disp, Win, argv, argc);
XSetWMHints(Disp, Win, &WmHints);
XMapWindow(Disp,Win);
- redrawDisplay(1);
+ redrawDisplay(1,1);
}
/*
@@ -331,9 +392,25 @@ void createWindow(int argc, char **argv)
void shutDown(int sig)
{
#ifdef DEBUG
+ if (sig)
+ fprintf(stderr,"wmrack: got signal %s\n",strsignal(sig));
+ else
+ fprintf(stderr,"wmrack: manual shutdown\n");
fprintf(stderr,"wmrack: Shutting down\n");
#endif
-#ifdef 0 /* this is not good, because CloseDisplay woes with this stuff freed */
+ saveMixerRC();
+#ifdef DEBUG
+ fprintf(stderr,"wmrack: mixer RC written\n");
+#endif
+ cd_close(cd);
+#ifdef DEBUG
+ fprintf(stderr,"wmrack: cd closed\n");
+#endif
+ mixer_close(mixer);
+#ifdef DEBUG
+ fprintf(stderr,"wmrack: mixer closed\n");
+#endif
+/* cause it's no good, this is commented out (CloseDisplay woes)
xpm_freeSet(Disp);
# ifdef DEBUG
fprintf(stderr,"wmrack: XPMs freed\n");
@@ -350,7 +427,7 @@ void shutDown(int sig)
# ifdef DEBUG
fprintf(stderr,"wmrack: Iconwin destroyed\n");
# endif
-#endif
+*/
XCloseDisplay(Disp);
#ifdef DEBUG
fprintf(stderr,"wmrack: Display closed\n");
@@ -367,7 +444,10 @@ void mainLoop()
{
XEvent Event;
Time when;
+ Time press_time=-1;
int skip_count, skip_amount, skip_delay;
+ int force_win=0, force_disp=0;
+ int change_volume=0, vol_y, vol_side;
while(1)
{
@@ -380,114 +460,391 @@ void mainLoop()
case Expose:
if (Event.xexpose.count==0)
last_time.minute=last_time.second=last_time.frame=-1;
- redrawDisplay(1);
- continue;
+ force_win=1;
+ break;
case ButtonPress:
- newdisc=0;
- cd_getStatus(cd,0);
- if (Event.xbutton.y<15 && curMode(cd)==CDM_PLAY)
+ switch (WMRack_Mode)
{
- switch (Event.xbutton.button)
+ case MODE_CDPLAYER:
+ newdisc=0;
+ cd_getStatus(cd,0,0);
+ if (Event.xbutton.y<15)
{
- 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;
+ switch (Event.xbutton.button)
+ {
+ case 1:
+ if (cd_cur(cd,mode)==CDM_PLAY)
+ displaymode^=1;
+ break;
+ case 2:
+ if (cd_cur(cd,mode)==CDM_PLAY)
+ displaymode^=2;
+ break;
+ case 3:
+ switch (cd_play(cd,repeat_mode))
+ {
+ case CDR_NONE:
+ cd_play(cd,repeat_mode)=CDR_ALL;
+ break;
+ case CDR_ALL:
+ cd_play(cd,repeat_mode)=CDR_ONE;
+ break;
+ default:
+ cd_play(cd,repeat_mode)=CDR_NONE;
+ break;
+ }
+ if (cd_play(cd,repeat_mode)==2 && cd_cur(cd,mode)==CDM_PLAY)
+ start_track=cd_cur(cd,track);
+ break;
+ }
+ force_disp=1;
}
- }
- else if (Event.xbutton.y>15 && Event.xbutton.y<32)
- {
- if (Event.xbutton.x<17)
+ else if (Event.xbutton.y>15 && Event.xbutton.y<32)
{
- if (curMode(cd)==CDM_PLAY || curMode(cd)==CDM_PAUSE)
- cd_doPause(cd);
- else if (curMode(cd)==CDM_EJECT)
+ if (Event.xbutton.x<13)
+ {
+ if (cd_cur(cd,mode)==CDM_PLAY || cd_cur(cd,mode)==CDM_PAUSE)
+ cd_doPause(cd);
+ else if (cd_cur(cd,mode)==CDM_EJECT)
+ {
+ if (cd_getStatus(cd,1,0))
+ {
+ start_track=0;
+ if (cd_list(cd,tracks)==0)
+ {
+ rack_popup("DATA");
+ cd_suspend(cd);
+ }
+ else
+ {
+ newdisc=1;
+ cd_doPlay(cd,start_track);
+ }
+ }
+ }
+ else
+ {
+ if (playlist!=NULL)
+ {
+ cd_setpl(cd,playlist);
+ cdpl_free(playlist);
+ playlist=NULL;
+ cd_doPlay(cd,0);
+ }
+ else
+ cd_doPlay(cd,start_track);
+ }
+ }
+ else if (Event.xbutton.x>34)
{
- if (cd_getStatus(cd,1))
+ if (cd_cur(cd,mode)==CDM_PLAY || cd_cur(cd,mode)==CDM_PAUSE)
{
- newdisc=1;
- cd_doPlay(cd,cd->info->play.start_track,99);
+ cd_doStop(cd);
+ start_track=cd_play(cd,cur_track);
}
+ else if (cd_cur(cd,mode)==CDM_EJECT)
+ {
+ if (Event.xbutton.button==3)
+ cd_doEject(cd);
+ else
+ {
+ if (cd_getStatus(cd,1,1))
+ {
+ start_track=0;
+ if (cd_list(cd,tracks)==0)
+ {
+ rack_popup("DATA");
+ cd_suspend(cd);
+ }
+ else
+ newdisc=1;
+ }
+ }
+ }
+ else
+ cd_doEject(cd);
}
else
- cd_doPlay(cd,cd->info->play.start_track,99);
+ {
+ if (Event.xbutton.button==3
+ && (Event.xbutton.state&ControlMask))
+ shutDown(0);
+ WMRack_Mode=MODE_MIXER;
+ force_win=1;
+ }
+ }
+ else if (Event.xbutton.y>32)
+ {
+ if (Event.xbutton.x<13 || Event.xbutton.x>34)
+ {
+ press_time=Event.xbutton.time;
+ skip_count=0;
+ skip_delay=8;
+ if (Event.xbutton.x<13)
+ skip_amount=-1;
+ else
+ skip_amount=1;
+ }
+ else /* track display clicked */
+ {
+ if (cd_cur(cd,mode)!=CDM_STOP) break;
+ if (Event.xbutton.state&ControlMask)
+ {
+ switch (Event.xbutton.button)
+ {
+ case 1:
+ if (playlist!=NULL)
+ {
+ cdpl_free(playlist);
+ playlist=NULL;
+ force_disp=1;
+ }
+ else
+ {
+ playlist=cdpl_new();
+ cd_resetpl(cd);
+ rack_popup("PROG");
+ }
+ break;
+ case 3:
+ if (playlist!=NULL)
+ cdpl_free(playlist);
+ playlist=NULL;
+ cd_randomize(cd);
+ rack_popup("RAND");
+ break;
+ }
+ }
+ else if (Event.xbutton.state&Mod1Mask
+ && playlist!=NULL)
+ {
+ char num[20];
+ /* add current track to playlist */
+ cdpl_add(playlist,cd,start_track);
+ sprintf(num,"%02d%02d",
+ playlist->tracks,
+ playlist->track[playlist->tracks-1]);
+ rack_popup(num);
+ }
+ }
}
- else if (Event.xbutton.x>34)
+ break;
+ case MODE_MIXER:
+ if (Event.xbutton.y<15
+ && Event.xbutton.x>13 && Event.xbutton.x<34)
{
- if (curMode(cd)==CDM_PLAY || curMode(cd)==CDM_PAUSE)
- cd_doStop(cd);
- else if (curMode(cd)==CDM_EJECT)
+ if (Event.xbutton.state&ControlMask)
{
- if (cd_getStatus(cd,1))
- newdisc=1;
+ int i, j, c;
+ switch (Event.xbutton.button)
+ {
+ case 1: /* show all mixer devices */
+ c=mixer_order[curMixer];
+ for (j=i=0; i<mixer_devices; i++)
+ if (mixer_isdevice(mixer,i))
+ {
+ if (i==c)
+ curMixer=j;
+ mixer_order[j++]=i;
+ }
+ mixer_max=j;
+ force_disp=1;
+ break;
+ case 3: /* delete this device */
+ if (mixer_max>1)
+ {
+ if (curMixer==mixer_max-1)
+ curMixer--;
+ else
+ memmove(&mixer_order[curMixer],
+ &mixer_order[curMixer+1],
+ sizeof(int)*(mixer_max-curMixer));
+ mixer_max--;
+ force_disp=1;
+ }
+ break;
+ }
}
else
- cd_doEject(cd);
+ {
+ switch (Event.xbutton.button)
+ {
+ case 1:
+ curMixer++;
+ mixup:
+ while (!mixer_isdevice(mixer,mixer_order[curMixer])
+ && curMixer<mixer_max)
+ curMixer++;
+ if (curMixer==mixer_max)
+ {
+ curMixer=0;
+ goto mixup;
+ }
+ break;
+ case 2:
+ curMixer=0;
+ break;
+ case 3:
+ curMixer--;
+ mixdown:
+ while (!mixer_isdevice(mixer,mixer_order[curMixer])
+ && curMixer>=0)
+ curMixer--;
+ if (curMixer<0)
+ {
+ curMixer=mixer_max-1;
+ goto mixdown;
+ }
+ break;
+ }
+ }
}
- }
- 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;
+ else if (Event.xbutton.y>15 && Event.xbutton.y<32
+ && Event.xbutton.x>13 && Event.xbutton.x<34)
+ {
+ if (Event.xbutton.button==3
+ && (Event.xbutton.state&ControlMask))
+ shutDown(0);
+ WMRack_Mode=MODE_CDPLAYER;
+ force_win=1;
+ }
+ else if (mixer_isrecdev(mixer,mixer_order[curMixer])
+ && Event.xbutton.y>32
+ && Event.xbutton.x>13 && Event.xbutton.x<34)
+ {
+ switch (Event.xbutton.button)
+ {
+ case 1:
+ mixer_setrecsrc(mixer,mixer_order[curMixer],
+ mixer_isrecsrc(mixer,mixer_order[curMixer])
+ ? 0
+ : 1,0);
+ break;
+ case 2:
+ mixer_setrecsrc(mixer,mixer_order[curMixer],1,1);
+ break;
+ }
+ }
+ else if (Event.xbutton.x<11 || Event.xbutton.x>36)
+ {
+ int change;
+ /* change volume */
+ change_volume=Event.xbutton.button;
+ vol_y=Event.xbutton.y_root;
+ vol_side=Event.xbutton.x<24;
+ switch (change_volume)
+ {
+ case 1:
+ if (vol_side)
+ mixer_setvols(mixer,mixer_order[curMixer],
+ ((47-Event.xbutton.y)/4)*10,
+ mixer_volright(mixer,mixer_order[curMixer]));
+ else
+ mixer_setvols(mixer,mixer_order[curMixer],
+ mixer_volleft(mixer,mixer_order[curMixer]),
+ ((47-Event.xbutton.y)/4)*10);
+ break;
+ case 2:
+ mixer_setvol(mixer,mixer_order[curMixer],
+ ((47-Event.xbutton.y)/4)*10);
+ break;
+ case 3:
+ change=(((47-Event.xbutton.y)/4)*10-
+ (vol_side
+ ? mixer_volleft(mixer,mixer_order[curMixer])
+ : mixer_volright(mixer,mixer_order[curMixer])));
+ if (vol_side)
+ mixer_changebal(mixer,mixer_order[curMixer],-change);
+ else
+ mixer_changebal(mixer,mixer_order[curMixer],change);
+ break;
+ }
+ }
+ break;
}
break;
- case ButtonRelease:
- if (Event.xbutton.time-press_time<200 && Event.xbutton.y>32)
+ case MotionNotify:
+ switch (WMRack_Mode)
{
- if (curMode(cd)==CDM_PLAY || curMode(cd)==CDM_PAUSE)
+ case MODE_MIXER:
+ if (change_volume)
{
- if (Event.xbutton.x<17)
+ if ((Event.xmotion.y_root-vol_y)/8)
{
- 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);
+ int change=((vol_y-Event.xmotion.y_root)/8)*10;
+ switch (change_volume)
+ {
+ case 1:
+ if (vol_side)
+ mixer_changeleft(mixer,mixer_order[curMixer],change);
+ else
+ mixer_changeright(mixer,mixer_order[curMixer],change);
+ break;
+ case 2:
+ mixer_changevol(mixer,mixer_order[curMixer],change);
+ break;
+ case 3:
+ if (vol_side)
+ mixer_changebal(mixer,mixer_order[curMixer],-change);
+ else
+ mixer_changebal(mixer,mixer_order[curMixer],change);
+ }
+ vol_y=Event.xmotion.y_root;
}
- else if (Event.xbutton.x>34)
- cd_doPlay(cd,cd->info->current.track+1,99);
}
- else if (curMode(cd)==CDM_STOP)
+ }
+ break;
+ case ButtonRelease:
+ switch (WMRack_Mode)
+ {
+ case MODE_CDPLAYER:
+ if (press_time==-1) break;
+ if (Event.xbutton.time-press_time<200 && Event.xbutton.y>32)
{
- if (Event.xbutton.x<17)
+ if (cd_cur(cd,mode)==CDM_PLAY || cd_cur(cd,mode)==CDM_PAUSE)
{
- 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;
+ if (Event.xbutton.x<13)
+ {
+ if (cd_cur(cd,relmsf.minute) ||
+ cd_cur(cd,relmsf.second>2))
+ cd_doPlay(cd,cd_cur(cd,track));
+ else
+ cd_doPlay(cd,cd_cur(cd,track)-1);
+ }
+ else if (Event.xbutton.x>34
+ && cd_cur(cd,track)<cd_list(cd,tracks)-1)
+ cd_doPlay(cd,cd_cur(cd,track)+1);
}
- else if (Event.xbutton.x>34)
+ else if (cd_cur(cd,mode)==CDM_STOP)
{
- 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;
+ if (Event.xbutton.x<13)
+ {
+ if (start_track>0)
+ start_track--;
+ else
+ start_track=cd_list(cd,tracks)-1;
+ }
+ else if (Event.xbutton.x>34)
+ {
+ if (start_track<cd_list(cd,tracks)-1)
+ start_track++;
+ else
+ start_track=0;
+ }
}
+ else
+ ;
+ }
+ break;
+ case MODE_MIXER:
+ if (change_volume)
+ {
+ change_volume=0;
}
- else
- ;
+ break;
}
press_time=-1;
+ change_volume=0;
break;
case DestroyNotify:
shutDown(SIGTERM);
@@ -498,11 +855,13 @@ void mainLoop()
/* now check for a pressed button */
if (press_time!=-1)
{
- if (curMode(cd)==CDM_PLAY)
+ if (cd_cur(cd,mode)==CDM_PLAY)
{
when=getTime();
if (when-press_time>500)
{
+ /* this is needed because of the faster pace */
+ cd_getStatus(cd,0,1);
skip_count++;
if (skip_count%skip_delay==0)
{
@@ -513,9 +872,9 @@ void mainLoop()
}
switch (skip_count)
{
+ case 5:
case 10:
- case 25:
- case 50:
+ case 20:
skip_delay>>=1;
break;
}
@@ -523,8 +882,9 @@ void mainLoop()
}
}
/* do a redraw of the LED display */
- redrawDisplay(0);
- usleep(1000L);
+ redrawDisplay(force_win,force_disp);
+ usleep(5000L);
+ force_win=force_disp=0;
}
}
@@ -564,12 +924,230 @@ void redrawWindow()
}
/*
+ * paint_cd_led(flash,track,cdtime)
+ *
+ * draws the digital numbers to the pixmaps
+ */
+void paint_cd_led(int flash, int track[], int cdtime[])
+{
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ (track[0]?8*track[0]:80),0, 8,11, 16,35);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ (track[0]?8*track[0]:80),0, 8,11, 16,35);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ 8*track[1],0, 8,11, 24,35);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ 8*track[1],0, 8,11, 24,35);
+
+ if (flash || cd_cur(cd,mode)!=CDM_PAUSE)
+ {
+ if (cd_cur(cd,mode)==CDM_PLAY || cd_cur(cd,mode)==CDM_PAUSE)
+ {
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ ((displaymode&2)?94:98),0, 4,5, 3,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ ((displaymode&2)?94:98),0, 4,5, 3,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ ((displaymode&1)?94:98),5, 4,1, 3,7);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ ((displaymode&1)?94:98),5, 4,1, 3,7);
+ }
+ else
+ {
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ 98,0, 4,6, 3,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ 98,0, 4,6, 3,2);
+ }
+
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ ((playlist!=NULL)?94:98),6, 4,5, 3,8);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ ((playlist!=NULL)?94:98),6, 4,5, 3,8);
+
+ if (popup_display==NULL)
+ {
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ (cdtime[0]?8*cdtime[0]:80),0, 8,11, 7,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ (cdtime[0]?8*cdtime[0]:80),0, 8,11, 7,2);
+
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ 8*cdtime[1],0, 8,11, 15,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ 8*cdtime[1],0, 8,11, 15,2);
+
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ 88,0, 3,11, 23,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ 88,0, 3,11, 23,2);
+
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ 8*cdtime[2],0, 8,11, 26,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ 8*cdtime[2],0, 8,11, 26,2);
+
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ 8*cdtime[3],0, 8,11, 34,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ 8*cdtime[3],0, 8,11, 34,2);
+
+ }
+
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ (cd_play(cd,repeat_mode)!=CDR_NONE?102:106),0, 4,5, 42,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ (cd_play(cd,repeat_mode)!=CDR_NONE?102:106),0, 4,5, 42,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ (cd_play(cd,repeat_mode)==CDR_ONE?102:106),6, 4,5, 42,8);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ (cd_play(cd,repeat_mode)==CDR_ONE?102:106),6, 4,5, 42,8);
+ }
+ else
+ {
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ 98,0, 4,11, 3,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ 98,0, 4,11, 3,2);
+
+ if (popup_display==NULL)
+ {
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ 80,0, 8,11, 7,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ 80,0, 8,11, 7,2);
+
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ 80,0, 8,11, 15,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ 80,0, 8,11, 15,2);
+
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ 91,0, 3,11, 23,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ 91,0, 3,11, 23,2);
+
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ 80,0, 8,11, 26,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ 80,0, 8,11, 26,2);
+
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ 80,0, 8,11, 34,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ 80,0, 8,11, 34,2);
+ }
+
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Win, WinGC,
+ 106,0, 4,11, 42,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_PLAYER,pixmap), Iconwin, WinGC,
+ 106,0, 4,11, 42,2);
+ }
+
+ if (popup_display!=NULL)
+ {
+ int disp_pos[4]={7,15,26,34};
+ char *d;
+ int i, j;
+
+ /*
+ if (!popup_done)
+ {
+ XFillRectangle(Disp, Win, WinGC, 7, 2, 35, 11);
+ XFillRectangle(Disp, Iconwin, WinGC, 7, 2, 35, 11);
+ popup_done=1;
+ }
+ */
+
+ for (j=0, d=popup_display; *d; d++, j++)
+ {
+ for (i=0; ledAlphabet[i]; i++)
+ if (toupper(*d)==ledAlphabet[i])
+ {
+ XCopyArea(Disp, ledXpm(RACK_LED_ALPHA,pixmap), Win, WinGC,
+ i*8,0, 8,11, disp_pos[j],2);
+ XCopyArea(Disp, ledXpm(RACK_LED_ALPHA,pixmap), Iconwin, WinGC,
+ i*8,0, 8,11, disp_pos[j],2);
+ break;
+ }
+ }
+ }
+
+}
+
+/*
+ * paint_mixer_led()
+ *
+ * draws the digital scales and signs to the pixmaps
+ */
+void paint_mixer_led()
+{
+ int i;
+
+ /* the device name */
+ for (i=0; ledAlphabet[i]; i++)
+ if (toupper(mixer_shortnames[mixer_order[curMixer]][0])==ledAlphabet[i])
+ {
+ XCopyArea(Disp, ledXpm(RACK_LED_ALPHA,pixmap), Win, WinGC,
+ i*8,0, 8,11, 16,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_ALPHA,pixmap), Iconwin, WinGC,
+ i*8,0, 8,11, 16,2);
+ break;
+ }
+ for (i=0; ledAlphabet[i]; i++)
+ if (toupper(mixer_shortnames[mixer_order[curMixer]][1])==ledAlphabet[i])
+ {
+ XCopyArea(Disp, ledXpm(RACK_LED_ALPHA,pixmap), Win, WinGC,
+ i*8,0, 8,11, 24,2);
+ XCopyArea(Disp, ledXpm(RACK_LED_ALPHA,pixmap), Iconwin, WinGC,
+ i*8,0, 8,11, 24,2);
+ break;
+ }
+
+ /* the recsrc button */
+ if (mixer_isrecdev(mixer,mixer_order[curMixer]))
+ {
+ if (mixer_isrecsrc(mixer,mixer_order[curMixer]))
+ i=13;
+ else
+ i=0;
+ }
+ else
+ i=26;
+ XCopyArea(Disp, ledXpm(RACK_LED_MIXER,pixmap), Win, WinGC,
+ 44,i, 14,13, 17,34);
+ XCopyArea(Disp, ledXpm(RACK_LED_MIXER,pixmap), Iconwin, WinGC,
+ 44,i, 14,13, 17,34);
+
+ /* the volume displays */
+ /* left */
+ i=(mixer_volleft(mixer,mixer_order[curMixer])/10);
+ if (i<0) i=0;
+ if (i>10) i=10;
+ i*=4;
+ XCopyArea(Disp, ledXpm(RACK_LED_MIXER,pixmap), Win, WinGC,
+ i,0, 3,39, 4,4);
+ XCopyArea(Disp, ledXpm(RACK_LED_MIXER,pixmap), Iconwin, WinGC,
+ i,0, 3,39, 4,4);
+ /* right */
+ i=(mixer_volright(mixer,mixer_order[curMixer])/10);
+ if (i<0) i=0;
+ if (i>10) i=10;
+ i*=4;
+ XCopyArea(Disp, ledXpm(RACK_LED_MIXER,pixmap), Win, WinGC,
+ i,0, 3,39, 41,4);
+ XCopyArea(Disp, ledXpm(RACK_LED_MIXER,pixmap), Iconwin, WinGC,
+ i,0, 3,39, 41,4);
+
+}
+
+/*
* 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)
+void redrawDisplay(int force_win, int force_disp)
{
int track[2]={0,0};
int cdtime[4]={0,0,0,0};
@@ -578,52 +1156,48 @@ void redrawDisplay(int force_win)
int st=0, newRack=RACK_NODISC, im_stop=0;
MSF pos;
- st=cd_getStatus(cd,0);
+ st=cd_getStatus(cd,0,0);
- if (st>0 && cd->info->current.track>cd->info->tracks &&
- curMode(cd)!=CDM_EJECT)
+ if (!force_win && !force_disp && popup_display==NULL)
{
- cd_doStop(cd);
- im_stop=1;
+ /* test if something has changed */
+ switch (WMRack_Mode)
+ {
+ case MODE_CDPLAYER:
+ if (cd_cur(cd,mode)!=CDM_PAUSE
+ && last_cdmode==cd_cur(cd,mode)
+ && (st<1 ||
+ (last_time.minute==cd_cur(cd,relmsf.minute)
+ && last_time.second==cd_cur(cd,relmsf.second)
+ && last_track==start_track)))
+ return;
+ break;
+ case MODE_MIXER:
+ mixer_readvol(mixer,mixer_order[curMixer]);
+ if (curMixer==lastMixer
+ && !mixer_volchanged(mixer,mixer_order[curMixer])
+ && !mixer_srcchanged(mixer,mixer_order[curMixer]))
+ return;
+ break;
+ }
}
- 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));
+ if (last_cdmode!=cd_cur(cd,mode)) {
+ fprintf(stderr,"wmrack: cur_cdmode %d\n",cd_cur(cd,mode));
}
#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 (cd_cur(cd,mode)==CDM_STOP && cd_play(cd,last_action)==CDA_PLAY)
+ start_track=0;
+
+ lastMixer=curMixer;
+
+ last_cdmode=cd_cur(cd,mode);
if (st>0)
{
- last_time=cd->info->current.relmsf;
- last_track=cd->info->play.start_track;
+ last_time=cd_cur(cd,relmsf);
+ last_track=start_track;
}
else
{
@@ -631,7 +1205,7 @@ void redrawDisplay(int force_win)
last_track=-1;
}
- if (curMode(cd)==CDM_PAUSE)
+ if (cd_cur(cd,mode)==CDM_PAUSE)
{
time_t flash_time=time(NULL);
if (flash_time==last_flash_time && !force_win)
@@ -644,69 +1218,102 @@ void redrawDisplay(int force_win)
last_flash_time=0;
flash=1;
}
+
+ if (popup_display!=NULL)
+ {
+ if (popup_time==0)
+ popup_time=time(NULL);
+ else
+ {
+ time_t now=time(NULL);
+ if (now>popup_time+1)
+ {
+ free(popup_display);
+ popup_display=NULL;
+ popup_time=0;
+ popup_done=0;
+ }
+ }
+ }
newRack=RACK_PLAY;
- switch (curMode(cd))
+
+ if (WMRack_Mode==MODE_MIXER)
+ newRack=RACK_MIXER;
+ else
{
- 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)
+ switch (cd_cur(cd,mode))
{
- case 0:
- pos=cd->info->current.relmsf;
- break;
- case 1:
- pos=subMSF(cd->info->track[cd->info->current.track].toc,
- cd->info->current.absmsf);
+ case CDM_PAUSE:
+ newRack=RACK_PAUSE;
+ case CDM_PLAY:
+ track[0]=cd_list(cd,track)[cd_cur(cd,track)].num/10;
+ track[1]=cd_list(cd,track)[cd_cur(cd,track)].num%10;
+ switch (displaymode)
+ {
+ case 0:
+ pos=cd_cur(cd,relmsf);
+ break;
+ case 1:
+ pos=subMSF(cd_list(cd,track)[cd_cur(cd,track)].length,
+ cd_cur(cd,relmsf));
+ break;
+ case 2:
+ pos=subMSF(cd_cur(cd,absmsf),
+ cd_info(cd,track)[0].start);
+ break;
+ case 3:
+ pos=subMSF(cd_info(cd,track)[cd_info(cd,tracks)-1].end,
+ cd_cur(cd,absmsf));
+ break;
+ }
+ cdtime[0]=pos.minute/10;
+ cdtime[1]=pos.minute%10;
+ cdtime[2]=pos.second/10;
+ cdtime[3]=pos.second%10;
break;
- case 2: /* this does not work */
- pos=subMSF(cd->info->current.absmsf,
- cd->info->track[0].toc);
+ case CDM_STOP:
+ newRack=RACK_STOP;
+ if (newdisc)
+ {
+ track[0]=cd_list(cd,tracks)/10;
+ track[1]=cd_list(cd,tracks)%10;
+ }
+ else
+ {
+ track[0]=cd_list(cd,track)[start_track].num/10;
+ track[1]=cd_list(cd,track)[start_track].num%10;
+ }
+ if (playlist==NULL)
+ {
+ cdtime[0]=cd_list(cd,length).minute/10;
+ cdtime[1]=cd_list(cd,length).minute%10;
+ cdtime[2]=cd_list(cd,length).second/10;
+ cdtime[3]=cd_list(cd,length).second%10;
+ }
+ else
+ {
+ cdtime[0]=playlist->length.minute/10;
+ cdtime[1]=playlist->length.minute%10;
+ cdtime[2]=playlist->length.second/10;
+ cdtime[3]=playlist->length.second%10;
+ }
break;
- case 3:
- pos=subMSF(cd->info->track[cd->info->tracks].toc,
- cd->info->current.absmsf);
+ 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;
}
- 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)
@@ -716,106 +1323,14 @@ void redrawDisplay(int force_win)
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
+ switch (curRack)
{
- 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);
+ case RACK_MIXER:
+ paint_mixer_led();
+ break;
+ default:
+ paint_cd_led(flash,track,cdtime);
+ break;
}
}
@@ -852,3 +1367,137 @@ Time getTime()
gettimeofday(&tv,NULL);
return (tv.tv_sec*1000)+(tv.tv_usec/1000);
}
+
+/*
+ * loadMixerRC()
+ *
+ * loads the mixer defaults
+ */
+int loadMixerRC()
+{
+ char line[1024], dev[50], src[10], *d;
+ int i, l, r, n, j, err=0;
+
+ mixer_max=0;
+ mixer_lib=lib_open("mixer",LIB_READ);
+ if (mixer_lib==NULL)
+ {
+ fprintf(stderr,"wmrack: can't read mixer file\n");
+ err=-1;
+ goto endload;
+ }
+
+ while ((lib_gets(mixer_lib,line,1024))!=NULL)
+ {
+ for (i=0; i<mixer_devices; i++)
+ if (strncmp(line,mixer_names[i],strlen(mixer_names[i]))==0)
+ break;
+ if (i<mixer_devices)
+ {
+ n=sscanf(line,"%s %d:%d %s",&dev,&l,&r,&src);
+ if (n>1)
+ {
+ mixer_setvols(mixer,i,l,r);
+ if (strcmp(src,"src")==0)
+ mixer_setrecsrc(mixer,i,1,0);
+ }
+ *dev=*src=0;
+ }
+ else if (strncmp(line,"ORDER ",6)==0)
+ {
+ for (d=strchr(line,32); d!=NULL; d=strchr(d,32))
+ {
+ while (*d==32) *d++;
+ if (*d==0 || *d=='\n' || *d=='\r') break;
+ for (i=0; i<mixer_devices; i++)
+ if (strncmp(d,mixer_names[i],strlen(mixer_names[i]))==0)
+ break;
+ if (i<mixer_devices && mixer_isdevice(mixer,i))
+ {
+ mixer_order[mixer_max++]=i;
+#ifdef DEBUG
+ fprintf(stderr,"wmrack: mixer_order %d=%s\n",mixer_max,mixer_names[i]);
+#endif
+ }
+#ifdef DEBUG
+ else
+ fprintf(stderr,"wmrack: unsupported device '%s'\n",d);
+#endif
+ }
+ }
+ }
+
+ lib_free(mixer_lib);
+
+ endload:
+ if (mixer_max==0)
+ {
+#ifdef DEBUG
+ fprintf(stderr,"wmrack: setting default mixer_order\n");
+#endif
+ for (j=i=0; i<mixer_devices; i++)
+ if (mixer_isdevice(mixer,i))
+ mixer_order[j++]=i;
+ mixer_max=j;
+ }
+
+ mixer_readvols(mixer);
+
+ return err;
+}
+
+/*
+ * saveMixerRC()
+ *
+ * writes the mixer defaults
+ */
+int saveMixerRC()
+{
+ int i;
+
+ mixer_lib=lib_open("mixer",LIB_WRITE);
+ if (mixer_lib==NULL)
+ {
+ fprintf(stderr,"wmrack: can't write mixer file\n");
+ return -1;
+ }
+
+ for (i=0; i<mixer_devices; i++)
+ {
+ if (mixer_isdevice(mixer,i))
+ {
+ if (mixer_isstereo(mixer,i))
+ lib_printf(mixer_lib,"%s %d:%d%s\n",
+ mixer_names[i],
+ mixer_volleft(mixer,i),
+ mixer_volright(mixer,i),
+ mixer_isrecsrc(mixer,i)?" src":"");
+ else
+ lib_printf(mixer_lib,"%s %d:%d%s\n",
+ mixer_names[i],
+ mixer_volmono(mixer,i),
+ mixer_volmono(mixer,i),
+ mixer_isrecsrc(mixer,i)?" src":"");
+ }
+ }
+ if (mixer_max>0)
+ {
+ lib_printf(mixer_lib,"ORDER ");
+ for (i=0; i<mixer_max; i++)
+ {
+ lib_printf(mixer_lib,"%s ",mixer_names[mixer_order[i]]);
+ }
+ lib_printf(mixer_lib,"\n");
+ }
+ lib_close(mixer_lib);
+
+ return 0;
+}
+
+void rack_popup(char *msg)
+{
+ if (popup_display!=NULL)
+ free(popup_display);
+ popup_display=strdup(msg);
+ popup_done=0;
+}
diff --git a/wmrack.man b/wmrack.man
index b5c073a..165affe 100644
--- a/wmrack.man
+++ b/wmrack.man
@@ -11,12 +11,26 @@
.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.
+The \fBwmrack\fP is CD player and Audio Mixer written to be
+docked to WindowMaker's dock. It can also be used swallowed into
+the button bars of most fvwm compatible window managers.
\fBwmrack\fP handles mounted volumes, opens and closes the tray, can
display the current position in various ways and skips also data tracks.
+It gives you access to all your mixer devices, so that you may change
+volume or balance and set the record source.
.SH OPTIONS
.TP
+\fB\-b\fP \fBCOLSPEC\fP or \fB\*=background\fP \fBCOLSPEC\fP
+Specifies the background color of the LED. It is avaiable through the symbolic
+XPM colorname
+.I led_color_black.
+.SP
+The other colors of the LED can be changed using the \fB-l\fP option.
+.Sp
+To find out what colors are available, try
+.I showrgb
+(part of X11).
+.TP
\fB\-d\fP \fBDEVICE\fP or \fB\*=device\fP \fBDEVICE\fP
Sets the CD-ROM device. This defaults to /dev/cdrom.
.TP
@@ -35,12 +49,16 @@ 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.
+to get the default background color of the led\-display. It can be changed
+using the \fB-l\fP option.
.Sp
To find out what colors are available, try
.I showrgb
(part of X11).
.TP
+\fB\-m\fP \fBDEVICE\fP or \fB\*=mixer\fP \fBDEVICE\fP
+Sets the MIXER device. This defaults to /dev/mixer.
+.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).
@@ -65,6 +83,15 @@ Starts the
.B wmrack
in withdrawn window state. This is useful to dock the window to
.B WindowMaker.
+.TP
+\fB\-M\fP \fBMODESTRING\fP or \fB\*=mode\fP \fBMODESTRING\fP
+By default
+.B wmrack
+will startup showing the CDROM controls. With this option you can specify what
+controls should be shown. Valid \fBMODESTRINGS\FP are
+.I cdrom,
+and
+.I mixer.
.SH INVOCATION
\fBwmrack\fP can be called using different ways. The most common invocation
is from your dock file:
@@ -83,16 +110,26 @@ Another way to call \fBwmrack\fP is to swallow it into the \fBafterstep (1)\fP
.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
+.SH GENERAL 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
+You can always change the controls shown by clicking the middle button (this
+is the one which shows a disc or a speaker) of the controls. This button will
+show a symbol of the controls you can change to by pressing it (the disc and
+the speaker).
+.Sp
+If you click this button with Control-Button-3, \fBWMrack\fP will exit.
+.SH CDROM USAGE
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 open tray
+Clicking an open/eject button with button-3 will always open the tray.
+.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.
@@ -107,6 +144,78 @@ A button-2 click into the time display switches between track and total time.
.B repeat
A button-3 click into the time display cycles through normal mode, repeat all,
and repeat one play mode.
+.PP
+The cd player also offers a play list functionality. By default it will map
+out all data tracks of the current cdrom, but you can also randomize the list
+or program it to the tracks you want to hear. These functions are only
+avaiable while a cdrom is in the drive and the drive is \fIstopped\fP.
+.TP
+.B randomize
+Clicking Control-Button-3 to the track display causes the playlist to be
+randomized. No track will repeat, the tracks are just mixed up.
+.Sp
+You will see the short message \fIRA:ND\fP in the time display.
+.TP
+.B start programming
+Click Control-Button-1 into the track display to start programing a new
+playlist. You will see a short \fIPR:OG\fP message in the time display and a
+\fIM\fP will show up in the lower left corner of the display.
+.TP
+.B add track to list
+Use the prev-/next-track buttons to select a track and click Mod1-Button-1
+into the track display to add it to the playlist. The time display will show
+the number of the tracks in the list and the number of the selected track for
+a short time and will than switch back and display the total ength of the
+playlist.
+.TP
+.B clear list
+To abort the programing of a playlist click Control-Button-1 into the
+track-display.
+.TP
+.B start playing the list
+Simply press the PLAY button to play the list.
+.SH MIXER USAGE
+Main controls of the mixer are the two volume scales at the left and the right
+side of the display. Using the mouse the scales can be modified.
+.TP
+.B button-1
+change volume of clicked scale
+.TP
+.B button-2
+change volume of both scales
+.TP
+.B button-3
+change the balance of the volume
+.PP
+Clicking into the alphanumeric display changes the currently shown mixer
+device. Valid devices are VOlume, BAss, TReble, SYnth, PCm, SPeaker, LIne,
+MIc, CD, MiXer, Pcm2, REcord, IGain, OGain, Line1, Line2, and Line3.
+You can also remove devices from this list.
+.TP
+.B button-1
+go to the next device
+.TP
+.B button-2
+go to the main volume (first device)
+.TP
+.B button-3
+go to the previous device
+.TP
+.B control-button-1
+show all devices
+.TP
+.B control-button-3
+remove current device
+.PP
+Below the change-controls button is the record source button. It show either
+a 'X' and is inactive, or it show a speaker or a recording sign and is active.
+By pressing this button you can change the source of your recordings.
+.TP
+.B button-1
+toggle record source button
+.TP
+.B button-2
+set as record source and clear all other
.SH COPYRIGHTS
Copyright 1997, Oliver Graf <ograf at fga.de>.
Most styles copyright 1997, Heiko Wagner <hwagner at fga.de>.
diff --git a/xpmicon.c b/xpmicon.c
index 02a072f..4f404f8 100644
--- a/xpmicon.c
+++ b/xpmicon.c
@@ -1,9 +1,11 @@
/*
- * $Id: xpmicon.c,v 1.3 1997/06/12 16:27:28 ograf Exp $
+ * $Id: xpmicon.c,v 1.7 1997/10/18 14:39:20 ograf Exp $
*
* part of WMRack
*
* handles the whole pixmap stuff (styles)
+ *
+ * Copyright (c) 1997 by Oliver Graf <ograf at fga.de>
*/
#include <stdio.h>
#include <stdlib.h>
@@ -13,6 +15,7 @@
#include <X11/xpm.h>
#include <X11/extensions/shape.h>
+#include "library.h"
#include "xpmicon.h"
/* include the default xpms */
@@ -22,21 +25,24 @@
* first some requires variables
*/
XpmAttributes rackDefaultAttr;
-XpmIcon rackXpm[7]={{"cdnodisc",cdnodisc},
- {"cdstopped",cdstopped},
- {"cdplaying",cdplaying},
- {"cdpaused",cdpaused},
- {"mixer",NULL},
- {"cdled",cdled},
- {"mixled",NULL}};
+XpmIcon rackXpm[]={{"cdnodisc",cdnodisc},
+ {"cdstopped",cdstopped},
+ {"cdplaying",cdplaying},
+ {"cdpaused",cdpaused},
+ {"mixer",mixer},
+ {"cdled",cdled},
+ {"mixled",mixled},
+ {"alphaled",alphaled}};
-int curRack=RACK_NODISC, curLed=RACK_LED_PLAYER;
+int curRack=RACK_NODISC;
XpmColorSymbol LedColorSymbols[4]={{"led_color_back", "#000000000000", 0},
{"led_color_high", "#0000FFFF0000", 0},
{"led_color_med", "#00009CE60000", 0},
{"led_color_low", "#000063180000", 0}};
+char *ledAlphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ";
+
/*
* some internal functions
*/
@@ -134,7 +140,7 @@ int parseXpm(Display *disp, Drawable draw, char *buffer)
* 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)
+int xpm_setDefaultAttr(Display *disp, Drawable draw, char *color, char *back)
{
rackDefaultAttr.valuemask=XpmReturnPixels | XpmReturnExtensions | XpmColorSymbols;
rackDefaultAttr.numsymbols=4;
@@ -147,6 +153,11 @@ int xpm_setDefaultAttr(Display *disp, Drawable draw, char *color)
LedColorSymbols[3].value=NULL;
LedColorSymbols[3].pixel=xpm_getDimColor(disp,draw,color,2.6);
}
+ if (back!=NULL)
+ {
+ LedColorSymbols[0].value=NULL;
+ LedColorSymbols[0].pixel=xpm_getDimColor(disp,draw,back,1);
+ }
rackDefaultAttr.colorsymbols=LedColorSymbols;
return 0;
}
@@ -159,10 +170,22 @@ int xpm_setDefaultAttr(Display *disp, Drawable draw, char *color)
int xpm_loadSet(Display *disp, Drawable draw, char *filename)
{
FILE *f;
- char *buffer=NULL, line[4096];
+ char *buffer=NULL, line[4096], path[4096];
int bufpos=0, bufalloc=0, i;
- f=fopen(filename,"r");
+ buffer=lib_findfile(filename,1);
+ if (buffer==NULL)
+ {
+ fprintf(stderr,"xpm_loadSet: can't find file\n");
+ return 1;
+ }
+ strcpy(path,buffer);
+ buffer=NULL;
+#ifdef DEBUG
+ fprintf(stderr,"xpm_loadSet: loading %s\n",path);
+#endif
+
+ f=fopen(path,"r");
if (f==NULL)
{
perror("xpm_loadSet");
@@ -256,7 +279,7 @@ int xpm_loadSet(Display *disp, Drawable draw, char *filename)
*/
int xpm_setDefaultSet(Display *disp, Drawable draw, int num)
{
- int i, ret=0;
+ int i, ret=0, x;
if (num==RACK_MAX)
for (i=0; i<RACK_MAX; i++)
@@ -264,10 +287,15 @@ int xpm_setDefaultSet(Display *disp, Drawable draw, int num)
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;
+ x=XpmCreatePixmapFromData(disp, draw, rackXpm[i].standart,
+ &rackXpm[i].pixmap,
+ &rackXpm[i].mask,
+ &rackXpm[i].attributes)!=XpmSuccess;
+ ret|=x;
+#ifdef DEBUG
+ if (x)
+ fprintf(stderr,"xpm_setDefaultSet: failure to load %d (XpmErrNo %d)\n",i,x);
+#endif
}
else
{
@@ -278,6 +306,10 @@ int xpm_setDefaultSet(Display *disp, Drawable draw, int num)
&rackXpm[num].pixmap,
&rackXpm[num].mask,
&rackXpm[num].attributes)!=XpmSuccess;
+#ifdef DEBUG
+ if (ret)
+ fprintf(stderr,"xpm_setDefaultSet: failure to load %d (XpmErrNo %d)\n",i,x);
+#endif
}
return ret;
}
diff --git a/xpmicon.h b/xpmicon.h
index d38c60a..0b3fd35 100644
--- a/xpmicon.h
+++ b/xpmicon.h
@@ -1,9 +1,11 @@
/*
- * $Id: xpmicon.h,v 1.2 1997/06/04 19:41:38 ograf Exp $
+ * $Id: xpmicon.h,v 1.4 1997/07/12 14:11:37 ograf Exp $
*
* part of wmrack
*
* handles the whole pixmap stuff
+ *
+ * Copyright (c) 1997 by Oliver Graf <ograf at fga.de>
*/
#ifndef _XPMICON_H
#define _XPMICON_H
@@ -26,15 +28,17 @@ typedef struct {
#define RACK_MIXER 4
#define RACK_LED_PLAYER 5
#define RACK_LED_MIXER 6
-#define RACK_MAX 7
+#define RACK_LED_ALPHA 7
+#define RACK_MAX 8
extern XpmIcon rackXpm[];
-extern int curRack, curLed;
+extern int curRack;
+extern char *ledAlphabet;
#define currentXpm(w) rackXpm[curRack].##w
-#define currentLed(w) rackXpm[curLed].##w
+#define ledXpm(x,w) rackXpm[x].##w
-int xpm_setDefaultAttr(Display *disp, Drawable draw, char *color);
+int xpm_setDefaultAttr(Display *disp, Drawable draw, char *color, char *back);
int xpm_loadSet(Display *disp, Drawable draw, char *filename);
int xpm_setDefaultSet(Display *disp, Drawable draw, int num);
void xpm_freeSet(Display *disp);
--
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