[Pkg-wmaker-commits] [wmclock] 03/66: wmclock: Add version 1.0.14 to repository.
Doug Torrance
dtorrance-guest at moszumanska.debian.org
Thu Aug 20 10:52:47 UTC 2015
This is an automated email from the git hooks/post-receive script.
dtorrance-guest pushed a commit to branch master
in repository wmclock.
commit 13f836d3f73eff61017217fa5025229c8cf2d1dd
Author: Doug Torrance <dtorrance at monmouthcollege.edu>
Date: Thu Dec 11 09:18:03 2014 -0600
wmclock: Add version 1.0.14 to repository.
Obtained from:
http://www.bluestop.org/wmclock/wmclock-1.0.14.tar.gz
---
.depend | 21 +
COPYING | 367 +++++++++++++++
ChangeLog | 114 +++++
INSTALL | 57 +++
Imakefile | 87 ++++
README | 141 ++++++
configure | 74 +++
dynlist.c | 107 +++++
dynlist.h | 35 ++
lang.breton/month.xpm | 80 ++++
lang.breton/weekday.xpm | 48 ++
lang.croatian/month.xpm | 82 ++++
lang.croatian/weekday.xpm | 48 ++
lang.czech/month.xpm | 79 ++++
lang.czech/weekday.xpm | 47 ++
lang.danish/month.xpm | 79 ++++
lang.danish/weekday.xpm | 47 ++
lang.dutch/month.xpm | 83 ++++
lang.dutch/weekday.xpm | 47 ++
lang.english/month.xpm | 83 ++++
lang.english/weekday.xpm | 53 +++
lang.french/month.xpm | 79 ++++
lang.french/weekday.xpm | 47 ++
lang.french2/month.xpm | 79 ++++
lang.french2/weekday.xpm | 51 ++
lang.german/month.xpm | 83 ++++
lang.german/weekday.xpm | 51 ++
lang.hungarian/month.xpm | 79 ++++
lang.hungarian/weekday.xpm | 48 ++
lang.indonesian/month.xpm | 83 ++++
lang.indonesian/weekday.xpm | 47 ++
lang.italian/month.xpm | 79 ++++
lang.italian/weekday.xpm | 47 ++
lang.norwegian/month.xpm | 79 ++++
lang.norwegian/weekday.xpm | 47 ++
lang.polish/month.txt | 12 +
lang.polish/month.xpm | 79 ++++
lang.polish/weekday.txt | 7 +
lang.polish/weekday.xpm | 48 ++
lang.portuguese/month.xpm | 79 ++++
lang.portuguese/weekday.xpm | 47 ++
lang.russian/month.xpm | 79 ++++
lang.russian/weekday.xpm | 48 ++
lang.slovene/month.xpm | 81 ++++
lang.slovene/weekday.xpm | 51 ++
lang.spanish/month.xpm | 79 ++++
lang.spanish/weekday.xpm | 47 ++
lang.swedish/month.xpm | 79 ++++
lang.swedish/weekday.xpm | 47 ++
lang.ukrainian/month.xpm | 79 ++++
lang.ukrainian/weekday.xpm | 49 ++
month.xpm | 1 +
weekday.xpm | 1 +
wmclock.c | 1093 +++++++++++++++++++++++++++++++++++++++++++
wmclock.man | 232 +++++++++
wmclock.man.in | 232 +++++++++
wmclock.spec.in | 128 +++++
xpm/date.xpm | 25 +
xpm/led.xpm | 18 +
xpm/mask.xbm | 30 ++
xpm/mask.xpm | 65 +++
61 files changed, 5414 insertions(+)
diff --git a/.depend b/.depend
new file mode 100644
index 0000000..0c6b329
--- /dev/null
+++ b/.depend
@@ -0,0 +1,21 @@
+dynlist.o: dynlist.c /usr/include/stdio.h /usr/include/sys/cdefs.h \
+ /usr/include/sys/_null.h /usr/include/sys/_types.h \
+ /usr/include/machine/_types.h /usr/include/stdlib.h \
+ /usr/include/string.h /usr/include/strings.h dynlist.h
+wmclock.o: wmclock.c /usr/include/sys/select.h /usr/include/sys/cdefs.h \
+ /usr/include/sys/_types.h /usr/include/machine/_types.h \
+ /usr/include/sys/_sigset.h /usr/include/sys/_timeval.h \
+ /usr/include/sys/timespec.h /usr/include/sys/_timespec.h \
+ /usr/include/sys/types.h /usr/include/machine/endian.h \
+ /usr/include/sys/_pthreadtypes.h /usr/include/sys/wait.h \
+ /usr/include/sys/time.h /usr/include/time.h /usr/include/sys/_null.h \
+ /usr/include/stdio.h /usr/include/stdlib.h /usr/include/string.h \
+ /usr/include/strings.h /usr/include/unistd.h /usr/include/sys/unistd.h \
+ /usr/local/include/X11/Xatom.h /usr/local/include/X11/Xlib.h \
+ /usr/local/include/X11/X.h /usr/local/include/X11/Xfuncproto.h \
+ /usr/local/include/X11/Xosdefs.h /usr/include/stddef.h \
+ /usr/local/include/X11/xpm.h /usr/local/include/X11/Xutil.h \
+ /usr/local/include/X11/keysym.h /usr/local/include/X11/keysymdef.h \
+ /usr/local/include/X11/extensions/shape.h \
+ /usr/local/include/X11/extensions/shapeconst.h dynlist.h month.xpm \
+ weekday.xpm xpm/date.xpm xpm/led.xpm xpm/mask.xbm xpm/mask.xpm
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..981c51d
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,367 @@
+*******************************************************************************
+
+ NO WARRANTY
+
+ BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+
+*******************************************************************************
+
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..f6a457f
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,114 @@
+2010-12-22 11:53 brucec
+ * Updated documentation to show new maintainer.
+ * Simplified Imakefile.
+
+2010-12-03 20:28 brucec
+ * Imakefile: Bumped version to 1.0.13, add warning flags.
+
+ * INSTALL: Updated compiler and flags example.
+
+ * wmclock.c, weekday.xpm: Integrated Debian nopolling patch and
+ FreeBSD's weekday and year patches. Added function prototypes.
+
+ * wmclock.spec.in: Bumped version to 1.0.13, changed ExecPrefix to
+ /usr/local since /usr/X11R6 is obsolete.
+
+ * lang.polish: Added Polish language files, contributed by
+ oyd11 at softhome.net
+
+ * lang.croatian: Added Croatian language files, contributed by Josip
+ Deanovic <djosip at croadria.com>
+
+2000-04-13 07:49 jmknoble
+
+ * wmclock.spec.in: Add ChangeLog to %%doc directory.
+
+ * Imakefile: Bump version to 1.0.12.2. Release.
+
+ * Imakefile: Generate changelog from CVS comments with 'make
+ changelog'. Add generated changelog to distribution tarball.
+
+2000-03-08 07:59 jmknoble
+
+ * Imakefile: `tar' target was copying CVS directories.
+ Restructured it a bit to avoid that.
+
+ * Imakefile: `distclean' target could prove troublesome by
+ destroying irreproducible work.
+
+ * wmclock.spec.in: Oops. Missed an obsolete %%{ReleaseNum} macro.
+
+2000-03-08 07:35 jmknoble
+
+ * Imakefile, wmclock.spec.in: Added template from which to generate
+ spec file (wmclock.spec.in). Added targets in Imakefile to handle
+ generating the spec file. Revised `tar' target to rebuild on
+ sourcefile change. Added distclean target. Removed symlinks from
+ tarball. Updated version to 1.0.12.1.
+
+ * .cvsignore: Added .cvsignore file for convenience of the
+ developer.
+
+ * Makefile: Makefile is automagically generated; it shouldn't be
+ stored in CVS.
+
+ * wmclock.c, xpm/mask.xbm: Compiling with gcc -Wall -ansi -pedantic
+ revealed that the mask bitmap should be declared as unsigned char.
+ XCreateBitmapFromData() expects char *, though, so we cast the mask
+ bitmap data explicitly.
+
+ * dynlist.c, dynlist.h: Fixed possible memory leak.
+
+2000-03-08 06:56 jmknoble
+
+ * COPYING, INSTALL, Imakefile, Makefile, README, configure,
+ dynlist.c, dynlist.h, wmclock.c, wmclock.man.in,
+ asclock-orig/INSTALL, asclock-orig/Imakefile, asclock-orig/README,
+ asclock-orig/asclock.c, asclock-orig/asclock.man,
+ asclock-orig/configure, asclock-orig/mask.xpm,
+ lang.breton/month.xpm, lang.breton/weekday.xpm,
+ lang.czech/month.xpm, lang.czech/weekday.xpm,
+ lang.danish/month.xpm, lang.danish/weekday.xpm,
+ lang.dutch/month.xpm, lang.dutch/weekday.xpm,
+ lang.english/month.xpm, lang.english/weekday.xpm,
+ lang.french/month.xpm, lang.french/weekday.xpm,
+ lang.french2/month.xpm, lang.french2/weekday.xpm,
+ lang.german/month.xpm, lang.german/weekday.xpm,
+ lang.hungarian/month.xpm, lang.hungarian/weekday.xpm,
+ lang.indonesian/month.xpm, lang.indonesian/weekday.xpm,
+ lang.italian/month.xpm, lang.italian/weekday.xpm,
+ lang.norwegian/month.xpm, lang.norwegian/weekday.xpm,
+ lang.portuguese/month.xpm, lang.portuguese/weekday.xpm,
+ lang.russian/month.xpm, lang.russian/weekday.xpm,
+ lang.slovene/month.xpm, lang.slovene/weekday.xpm,
+ lang.spanish/month.xpm, lang.spanish/weekday.xpm,
+ lang.swedish/month.xpm, lang.swedish/weekday.xpm,
+ lang.ukrainian/month.xpm, lang.ukrainian/weekday.xpm, xpm/date.xpm,
+ xpm/led.xpm, xpm/mask.xbm, xpm/mask.xpm: Begin CVS revision control
+
+ * COPYING, INSTALL, Imakefile, Makefile, README, configure,
+ dynlist.c, dynlist.h, wmclock.c, wmclock.man.in,
+ asclock-orig/INSTALL, asclock-orig/Imakefile, asclock-orig/README,
+ asclock-orig/asclock.c, asclock-orig/asclock.man,
+ asclock-orig/configure, asclock-orig/mask.xpm,
+ lang.breton/month.xpm, lang.breton/weekday.xpm,
+ lang.czech/month.xpm, lang.czech/weekday.xpm,
+ lang.danish/month.xpm, lang.danish/weekday.xpm,
+ lang.dutch/month.xpm, lang.dutch/weekday.xpm,
+ lang.english/month.xpm, lang.english/weekday.xpm,
+ lang.french/month.xpm, lang.french/weekday.xpm,
+ lang.french2/month.xpm, lang.french2/weekday.xpm,
+ lang.german/month.xpm, lang.german/weekday.xpm,
+ lang.hungarian/month.xpm, lang.hungarian/weekday.xpm,
+ lang.indonesian/month.xpm, lang.indonesian/weekday.xpm,
+ lang.italian/month.xpm, lang.italian/weekday.xpm,
+ lang.norwegian/month.xpm, lang.norwegian/weekday.xpm,
+ lang.portuguese/month.xpm, lang.portuguese/weekday.xpm,
+ lang.russian/month.xpm, lang.russian/weekday.xpm,
+ lang.slovene/month.xpm, lang.slovene/weekday.xpm,
+ lang.spanish/month.xpm, lang.spanish/weekday.xpm,
+ lang.swedish/month.xpm, lang.swedish/weekday.xpm,
+ lang.ukrainian/month.xpm, lang.ukrainian/weekday.xpm, xpm/date.xpm,
+ xpm/led.xpm, xpm/mask.xbm, xpm/mask.xpm: branches: 1.1.1; Initial
+ revision
+
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..76ae434
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,57 @@
+# INSTALL: how to install wmclock
+# created 1999-Apr-10 jmk
+
+____________________________
+|O| Installing wmclock |X|
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The procedure for installing wmclock is relatively simple; it depends
+on imake, which ships with most systems which include the X Window
+System.
+
+ (1) Run the `configure' script to configure the language support that
+ is built into wmclock. For example:
+
+ ./configure --lang english
+
+ For a list of the available languages, use:
+
+ ./configure --help
+
+ The configure script also creates a Makefile out of the Imakefile
+ using xmkmf.
+
+ (2) Compile:
+
+ make
+
+ You may specify the C compiler to use and additional command-line
+ options for the C compiler using the `CC' and `CDEBUGFLAGS'
+ variables, respectively. For example:
+
+ make CC=clang CDEBUGFLAGS='-O4 -march=pentium2'
+
+
+ (3) Test wmclock:
+
+ ./wmclock
+
+ (If it appears to work as expected, *don't dock it*. Wait until
+ after you've installed it).
+
+ (4) Install:
+
+ su
+ make install
+ make install.man
+
+ Optionally, install all the month and weekday pixmaps for use
+ with the `-monthxpm' and `-weekdayxpm' options:
+
+ make install.share
+
+ (5) You're done. See the README file accompanying this one for
+ instructions on installing wmclock into Window Maker's dock.
+
+--
+Bruce Cran <bruce at bluestop.org>
diff --git a/Imakefile b/Imakefile
new file mode 100644
index 0000000..b71e7e3
--- /dev/null
+++ b/Imakefile
@@ -0,0 +1,87 @@
+NAME = wmclock
+VERSION = 1.0.14
+DATE = 2010-Dec-22
+
+DEFINES = -DVERSION=\"$(VERSION)\"
+CFLAGS += -Wall -pedantic -Wshadow -Wmissing-prototypes -Wcast-align
+CFLAGS += -Wcast-qual -Wchar-subscripts -Wpointer-arith
+CFLAGS += -Wredundant-decls -Wstrict-prototypes
+
+XPMLIB = -L$(PREFIX)/lib/X11 -lXpm
+DEPLIBS = $(DEPXLIB)
+
+LOCAL_LIBRARIES = $(XPMLIB) $(XLIB)
+
+LINTLIBS = $(LINTXLIB)
+
+SHAREDIR = $(PREFIX)/share/$(NAME)
+
+IMAKEFILE = Imakefile
+MAKEFILE = Makefile
+
+CHANGELOG = ChangeLog
+
+SPEC_SRC = $(NAME).spec.in
+SPEC_OBJ = $(NAME).spec
+SPECS = $(SPEC_SRC) $(SPEC_OBJ)
+
+EXTRA_FILES = \@@\
+ $(SPECS) \@@\
+ $(IMAKEFILE) \@@\
+ $(CHANGELOG) \@@\
+ COPYING \@@\
+ INSTALL \@@\
+ README \@@\
+ configure
+
+MANSRC = wmclock.man.in
+MANOBJ = wmclock.man
+
+SYMLINKS = month.xpm weekday.xpm
+
+HDRS = dynlist.h
+SRCS = dynlist.c wmclock.c
+OBJS = dynlist.o wmclock.o
+
+TARDIR = $(NAME)-$(VERSION)
+TARBALL = $(TARDIR).tar.gz
+
+ComplexProgramTarget($(NAME))
+
+depend::
+ cat $(MANSRC) |sed \@@\
+ -e 's/@VERSION@/$(VERSION)/g' \@@\
+ -e 's/@DATE@/$(DATE)/g' \@@\
+ >$(MANOBJ)
+
+.PHONY: depends tar
+
+spec: $(SPEC_OBJ)
+
+$(SPEC_OBJ): $(SPEC_SRC) $(IMAKEFILE)
+ cat $(SPEC_SRC) |sed -e 's/@VERSION@/$(VERSION)/g' >$@
+
+install.share::
+ @if [ -d $(DESTDIR)$(SHAREDIR) ]; then set +x; \@@\
+ else (set -x; $(MKDIRHIER) $(DESTDIR)$(SHAREDIR)); fi
+ @set -x; \@@\
+ for i in lang.*; do \@@\
+ $(MKDIRHIER) $(DESTDIR)$(SHAREDIR)/$${i}; \@@\
+ $(INSTALL) $(INSTALLFLAGS) $(INSTDATFLAGS) ./$${i}//**/* \@@\
+ $(DESTDIR)$(SHAREDIR)/$${i}/; \@@\
+ done
+
+tar: $(TARBALL)
+
+$(TARBALL): $(EXTRA_FILES) $(EXTRA_DIRS) $(MANSRC) $(HDRS) $(SRCS)
+ $(RM) -r $(TARDIR)
+ $(MKDIRHIER) $(TARDIR)
+ $(CP) -p $(EXTRA_FILES) $(MANSRC) $(HDRS) $(SRCS) $(TARDIR)/
+ -for i in $(EXTRA_DIRS); do \@@\
+ $(MKDIRHIER) $(TARDIR)/$${i}; \@@\
+ $(CP) -p $${i}//**/* $(TARDIR)/$${i}/; \@@\
+ done >/dev/null 2>&1
+ chmod -Rc ug+rwX,o+rX,o-w $(TARDIR)
+ tar -cvf - $(TARDIR) |gzip -9 >$(TARBALL)
+ $(RM) -r $(TARDIR)
+
diff --git a/README b/README
new file mode 100644
index 0000000..27e0b4b
--- /dev/null
+++ b/README
@@ -0,0 +1,141 @@
+# README: notes about wmclock
+# created 1999-Apr-10 jmk
+
+_______________________
+|O| About wmclock |X|
+^^^^^^^^^^^^^^^^^^^^^^^
+
+Wmclock is an applet which displays the date and time in a dockable
+tile in the same style as the clock from the NEXTSTEP(tm) operating
+system. Wmclock is specially designed for the Window Maker window
+manager, by Alfredo Kojima, and features multiple language support,
+twenty-four-hour and twelve-hour (am/pm) time display, and, optionally,
+can run a user-specified program on a mouse click. Wmclock is derived
+from asclock, a similar clock for the AfterStep window manager.
+
+____________________________
+|O| Installing wmclock |X|
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Please see the INSTALL file accompanying the wmclock source for
+instructions on installing wmclock.
+
+_________________________
+|O| Getting Started |X|
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Wmclock is designed especially for Window Maker; hence, putting wmclock
+into your Window Maker dock is quick and easy. After you've installed
+wmclock according to the instructions, there are three steps:
+
+ (1) Start wmclock. The easiest way to accomplish this is to accept
+ the defaults for things such as led color, blinking, etc, and
+ just start the clock:
+
+ wmclock
+
+ (2) Drag the resulting wmclock appicon to an empty slot in your dock.
+ You can do this in one of two fashions:
+
+ (a) Position the mouse pointer over a portion of the appicon tile
+ that is not covered by wmclock's LED display or calendar
+ display. Press the primary mouse button (usually the left
+ one) and drag to the dock. This requires a little bit of
+ precision in aiming the mouse, but requires no keyboard
+ action.
+
+ (b) Hold down the [Alt] or [Meta] key (whichever one you have
+ configured Window Maker to use), position the mouse pointer
+ over any part of the wmlock appicon, press the primary mouse
+ button (usually the left one), and drag to the dock. This
+ method requires less precision, but requires you to press and
+ hold a key while dragging.
+
+ (3) Set wmclock to launch when Window Maker starts. Press the menu
+ mouse button (usually the right one) on the portion of the docked
+ wmclock tile that is not covered by wmclock's LED display or
+ calendar display to bring up the dock icon menu, and choose
+ `Settings...'. In the resulting dialog, check the box labelled
+ `Start when Window Maker is started' and press `OK'. That's it!
+
+_________________________
+|O| Troubleshooting |X|
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+As with any dockable applet, there are a few possible `gotchas' with
+wmclock and Window Maker:
+
+ - If you have the Clip set to `AutoAttract Icons', the wmclock
+ appicon will appear in the Clip instead of on the desktop. If your
+ Clip is collapsed, you won't be able to see the wmclock appicon,
+ even though it's running. Make sure you uncollapse your Clip and
+ look for wmclock there if it doesn't appear on your desktop.
+
+ - If your Clip is too close to your dock, you may have difficulty
+ docking wmclock, because the Clip may grab the wmclock appicon
+ instead. Try moving your Clip farther away from your dock before
+ docking wmclock.
+
+_________________________________________________
+|O| Differences Between asclock and wmclock |X|
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Wmclock is derived from asclock version 1.0.12 by Beat Christen.
+The major differences between asclock and wmclock are:
+
+ (1) Asclock is designed for use with the AfterStep window manager.
+ To use asclock with Window Maker, a patch is required. Wmclock
+ is better behaved with Window Maker and requires no patch or
+ special command-line options; it `just works'.
+
+ (2) Wmclock corrects a few of asclock's aesthetic defects. Most
+ notably, the `off-by-one-pixel' defect at the lefthand side of
+ the LED display is corrected.
+
+ (3) Asclock use a simple system() call to execute the command
+ specified using the `-exe' command-line option; this method could
+ create lots of unwanted zombie processes. Wmclock cleans up its
+ chiled processes every so often to eliminate the zombies.
+
+ Also, if no command was specified when asclock was started, it
+ would output a message warning that no command was specified each
+ time you click the mouse on asclock window area. Wmclock does not
+ output that message; if no command was specified, wmclock simply
+ does nothing when you click on it.
+
+Other minor differences include:
+
+ (1) The `-shape' and `-iconic' command-line options are no longer
+ needed with wmclock. Wmclock recognizes them for backwards
+ compatibility with asclock, but they have no effect.
+
+ (2) Asclock contained an arbitrary limitation on the length of the
+ command (approximately 50 characters) that you could specify with
+ the `-exe' option. Wmclock removes that arbitrary limitation and
+ cleans up the code significantly in the process.
+
+_______________________________________________________
+|O| Authors, Copyright, License, Disclaimer, etc. |X|
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Wmclock is Copyright (C) 1999 by Jim Knoble <jmknoble at pobox.com>.
+Significant portions of wmclock are directly derived from asclock by
+Beat Christen <spiff at longstreet.ch>, who, along with asclock's other
+authors, owns the copyright to those portions of wmclock.
+
+Wmclock is licensed under the GNU General Public License, version 2, or
+(at your option) any later version. See <http://www.gnu.org/> for more
+information.
+
+The software is provided ``as is'', without warranty of any kind,
+express or implied, including but not limited to the warranties of
+merchantability, fitness for a particular purpose and noninfringement.
+In no event shall the author(s) be liable for any claim, damages or
+other liability, whether in an action of contract, tort or otherwise,
+arising from, out of or in connection with the software or the use or
+other dealings in the software.
+
+Your mileage may vary. Eat your vegetables.
+
+--
+Bruce Cran <bruce at bluestop.org>
diff --git a/configure b/configure
new file mode 100755
index 0000000..b20a265
--- /dev/null
+++ b/configure
@@ -0,0 +1,74 @@
+#!/bin/sh
+#
+# configure: prepare wmclock to be built using imake and make
+# created 1999-Mar-30 03:40 jmk
+
+DefLanguage=english
+Language=''
+LangDir=''
+Me=`basename $0`
+
+GetLanguages() {
+ ls -1d lang.* | awk -F . '{
+ print " " $2
+ }'
+}
+
+PrintHelp() {
+ langlist="`GetLanguages`"
+ cat <<EOF
+
+ Usage: ${0} [--lang <language>]
+
+ Options:
+ --lang <language>
+ Configure wmclock to use day and month names for the specified
+ language. Defaults to 'english'. Choices are:
+
+${langlist}
+EOF
+}
+
+Die() {
+ echo "$*"
+ echo "wmclock is NOT successfully configured!"
+ exit 1
+}
+
+while [ $# -gt 0 ]; do
+ case "$1" in
+ --lang|--language)
+ shift
+ Language="$1"
+ ;;
+ --help)
+ PrintHelp
+ exit 1
+ ;;
+ esac
+ shift
+done
+
+if [ -z "${Language}" ]; then
+ Language="${DefLanguage}"
+fi
+
+LangDir="lang.${Language}"
+if [ ! -d "${LangDir}" ]; then
+ Die "${Me}: error: cannot find language directory '${LangDir}'"
+fi
+
+echo "Configuring for ${Language} day-of-week and month names ..."
+rm -f month.xpm weekday.xpm
+ln -s "./${LangDir}/month.xpm" .
+ln -s "./${LangDir}/weekday.xpm" .
+
+echo "Building Makefile from Imakefile ..."
+echo "----------------------------------------------------------------"
+xmkmf -a
+
+echo "----------------------------------------------------------------"
+echo "Finished configuring. To build wmclock, type 'make'."
+echo
+
+exit 0
diff --git a/dynlist.c b/dynlist.c
new file mode 100644
index 0000000..18672db
--- /dev/null
+++ b/dynlist.c
@@ -0,0 +1,107 @@
+/* dynlist.c: Dynamic lists and buffers in C.
+ * created 1999-Jan-06 15:34 jmk
+ * autodate: 2000-Mar-08 02:25
+ *
+ * by Jim Knoble <jmknoble at pobox.com>
+ * Copyright (C) 1999 Jim Knoble
+ *
+ * Disclaimer:
+ *
+ * The software is provided "as is", without warranty of any kind,
+ * express or implied, including but not limited to the warranties of
+ * merchantability, fitness for a particular purpose and
+ * noninfringement. In no event shall the author(s) be liable for any
+ * claim, damages or other liability, whether in an action of
+ * contract, tort or otherwise, arising from, out of or in connection
+ * with the software or the use or other dealings in the software.
+ *
+ * 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.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "dynlist.h"
+
+#define LIST_CHUNK_SIZE 512
+#define BUF_CHUNK_SIZE 512
+
+/* For lists of pointers cast to char *. */
+int append_to_list(char ***list_ptr, int *list_len, int *i, char *item)
+{
+ char **tmp_ptr;
+
+ if (*i >= *list_len)
+ {
+ *list_len += LIST_CHUNK_SIZE;
+ tmp_ptr = realloc(*list_ptr, (sizeof(**list_ptr) * *list_len));
+ if (NULL == tmp_ptr)
+ {
+ return(APPEND_FAILURE);
+ }
+ *list_ptr = tmp_ptr;
+ }
+ (*list_ptr)[*i] = item;
+ (*i)++;
+ return(APPEND_SUCCESS);
+}
+
+/* For single-dimensional buffers. */
+int append_to_buf(char **buf, int *buflen, int *i, int c)
+{
+ char *tmp_buf;
+
+ if (*i >= *buflen)
+ {
+ *buflen += BUF_CHUNK_SIZE;
+ tmp_buf = realloc(*buf, (sizeof(**buf) * *buflen));
+ if (NULL == tmp_buf)
+ {
+ return(APPEND_FAILURE);
+ }
+ *buf = tmp_buf;
+#ifdef DEBUG
+ printf("-->Allocated buffer of size %d\n", *buflen);
+#endif /* DEBUG */
+ }
+ (*buf)[*i] = (char) c;
+ (*i)++;
+ return(APPEND_SUCCESS);
+}
+
+int append_string_to_buf(char **buf, int *buflen, int *i, char *s)
+{
+ int addlen;
+ int n;
+ char *tmp_buf;
+
+ n = strlen(s);
+ if (*i >= *buflen)
+ {
+ addlen = BUF_CHUNK_SIZE;
+ if (addlen <= n)
+ {
+ addlen = n + 1;
+ }
+ *buflen += addlen;
+ tmp_buf = realloc(*buf, (sizeof(**buf) * *buflen));
+ if (NULL == tmp_buf)
+ {
+ return(APPEND_FAILURE);
+ }
+ *buf = tmp_buf;
+#ifdef DEBUG
+ printf("-->Allocated buffer of size %d\n", *buflen);
+#endif /* DEBUG */
+ }
+ (*buf)[*i] = '\0';
+ strncat(*buf, s, n);
+ *i += n;
+ return(APPEND_SUCCESS);
+}
+
diff --git a/dynlist.h b/dynlist.h
new file mode 100644
index 0000000..1d009af
--- /dev/null
+++ b/dynlist.h
@@ -0,0 +1,35 @@
+/* dynlist.h: Dynamic lists and buffers in C
+ * created 1999-Jan-06 15:04 jmk
+ * autodate: 2000-Mar-08 02:26
+ *
+ * by Jim Knoble <jmknoble at pobox.com>
+ * Copyright (C) 1999 Jim Knoble
+ *
+ * Disclaimer:
+ *
+ * The software is provided "as is", without warranty of any kind,
+ * express or implied, including but not limited to the warranties of
+ * merchantability, fitness for a particular purpose and
+ * noninfringement. In no event shall the author(s) be liable for any
+ * claim, damages or other liability, whether in an action of
+ * contract, tort or otherwise, arising from, out of or in connection
+ * with the software or the use or other dealings in the software.
+ *
+ * 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.
+ */
+
+#ifndef H_DYNLIST
+#define H_DYNLIST 1
+
+#define APPEND_SUCCESS 1
+#define APPEND_FAILURE 0
+
+int append_to_list(char ***list_ptr, int *list_len, int *i, char *item);
+int append_to_buf(char **buf, int *buflen, int *i, int c);
+int append_string_to_buf(char **buf, int *buflen, int *i, char *s);
+
+#endif /* H_DYNLIST */
diff --git a/lang.breton/month.xpm b/lang.breton/month.xpm
new file mode 100644
index 0000000..1e9fec4
--- /dev/null
+++ b/lang.breton/month.xpm
@@ -0,0 +1,80 @@
+/* XPM */
+static char * month_xpm[] = {
+"22 72 4 1",
+" c #FFFFFFFFFFFF",
+". c #AAAAAAAAAAAA",
+"X c #000000000000",
+"o c #555555555555",
+" ",
+" .XXXX XXXXX X X ",
+" X .X .XX .X ",
+".X XXX XXXXX X. X X. ",
+"X. X X .X XX ",
+" XXX oXXXX X X ",
+" ",
+" XXX X X X X X ",
+" X X .X .X X X X. ",
+" X X XXXXX X.XX.X ",
+"X X X XX X. ",
+"XXXXX .X X X X ",
+" ",
+" X X XXXXX X .X",
+" .X XX .X .X X ",
+" X.X X X XXXXX X. .X ",
+".X X X X X X ",
+"X X oXXXX oXX ",
+" ",
+" XXXXX XXXXo XXXXX ",
+" .X .X X X .X ",
+" XXXXX XXXXX XXXXX ",
+" X X X X X ",
+"oXXXX oXXXX X X ",
+" ",
+" X X X XXXXX",
+" .X XX X. .X ",
+" X.X X X X X XXXXX ",
+".X X X XXXX X ",
+"X X X X oXXXX ",
+" ",
+" XXXXX X X XXXXX ",
+" .X X. X. .X ",
+" XXXXX .X X XXXXX ",
+" X XX X ",
+" oXXXX X oXXXX ",
+" ",
+" .XXXX .XXX X .X ",
+" X X X .X X ",
+" .X XXX .X X. X. .X ",
+" X. X X X X X ",
+" XXX XXXX oXX ",
+" ",
+" XXXXX .XXX .XXXX ",
+" .X X X X ",
+" XXXXX .X X. .XX. ",
+" X X X X ",
+"oXXXX .XXX XXXX. ",
+" ",
+" .XXXX X X XXXXX",
+" X X X X. .X ",
+" .X XXX X.XX.X XXXXX ",
+" X. X XX X. X ",
+" XXX X X oXXXX ",
+" ",
+" X X XXXXX XXXXX ",
+" .X .X .X X .X ",
+" XXXXX XXXXX XXXXX ",
+" X X X X X ",
+".X X oXXXX X X ",
+" ",
+" oXXX X .X ",
+" .X X .X X ",
+" X X X. .X ",
+" X X X X ",
+" oXXXX oXX ",
+" ",
+" X X XXXXX XXXXX ",
+" .X X .X X .X ",
+" XXX XXXXX XXXXX ",
+" oX X X X X ",
+".X X oXXXX X X "};
+
diff --git a/lang.breton/weekday.xpm b/lang.breton/weekday.xpm
new file mode 100644
index 0000000..6f2c32b
--- /dev/null
+++ b/lang.breton/weekday.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char * weekday_xpm[] = {
+"20 42 2 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+" ",
+" . . . . . ",
+" . . . .. . ",
+" . . . . . . ",
+" . . . . .. ",
+" ..... .... . . ",
+" ",
+" . . ..... . . ",
+" .. .. . . . ",
+" . . . .... . . ",
+" . . . . . ",
+" . . ..... .... ",
+" ",
+" . . ..... ..... ",
+" .. .. . . . ",
+" . . . .... ..... ",
+" . . . . . ",
+" . . ..... . . ",
+" ",
+" . . .. ... ",
+" . . . . . . ",
+" . . . . . ",
+" . ...... . . ",
+" . . . ... ",
+" ",
+" .... . . ..... ",
+" . . . . ",
+" . .. . .. . .... ",
+" . . .. .. . ",
+" ... . . ..... ",
+" ",
+" .... .. .... ",
+" . . . . . ",
+" ... . . . . ",
+" . ...... . . ",
+" .... . . .... ",
+" ",
+" .... . . . ",
+" . . . . ",
+" ... . . . ",
+" . . . . ",
+" .... .... ..... "};
+
diff --git a/lang.croatian/month.xpm b/lang.croatian/month.xpm
new file mode 100644
index 0000000..18ee155
--- /dev/null
+++ b/lang.croatian/month.xpm
@@ -0,0 +1,82 @@
+/* XPM */
+static char * month_xpm[] = {
+"22 72 7 1",
+" c None",
+". c #FFFFFF",
+"+ c #AAAAAA",
+"@ c #000000",
+"# c #555555",
+"$ c #AEAAAE",
+"% c #515551",
+"......................",
+"...+@@@@.... at ......@..",
+"... at .......+@.....+ at ..",
+"...+@@+.... at +.....@+..",
+"...... at ...@@... at ..@...",
+"..@@@@+... at .....@@....",
+"......................",
+". at ...@..@@@@@.. at .....@",
+". at +.@+.+ at .....+@....+@",
+".+ at .@..@@@@... at +....@+",
+"..@@... at .....@+.. at ..@.",
+".. at ...#@@@@..@@@..@@..",
+"..........@@..........",
+"..+@@@..@@@@@@.. at ..$@.",
+".. at ...@....$@..$@.. at ..",
+".+ at ..@+...@$...@$.$@..",
+". at ...@..$@$.... at ..@...",
+".@@@@..$@@@@@@.%@@....",
+"......................",
+"..@@@@@..@@@@@.... at ...",
+"...+ at ....@... at ....@...",
+"... at +...@@@@@.... at .@..",
+"..+ at ....@... at ...@@@@..",
+".. at ....@.... at ..@... at ..",
+"......................",
+"...+@@@@.. at ...@.... at ..",
+"... at ......@+. at +...+@..",
+"...+@@+...+ at .@.... at +..",
+"...... at ....@@....@@...",
+"..@@@@+.... at .....@....",
+"......................",
+".... at .....@....@@@@@..",
+"...+ at ....+@...+ at ...@..",
+"... at +....@+...@@@@@...",
+".. at +....@@.... at .......",
+"..@@@... at ....@........",
+"......................",
+"..+@@@@..@@@@@..@@@@@.",
+".. at ......@... at .+@... at .",
+"..+@@+..@@@@@..@@@@@..",
+"..... at ..@... at ..@......",
+".@@@@+. at ....@. at .......",
+"......................",
+"..... at ..@..+@@@.... at ..",
+"....+ at .@... at ...@..+ at ..",
+"....@@@...+ at ..@+.. at +..",
+"...#@.. at ..@... at ..@+...",
+"..+ at ...@..@@@@...@@@..",
+"......................",
+"....@@@@@.. at ..$@.... at .",
+".... at ...@.$@.. at ....+@.",
+"...@@@@@..@$.$@.... at +.",
+"... at ...@.. at ..@.. at ..@..",
+".. at ....@..%@@....@@...",
+"......................",
+"..... at .....@...+@@@@..",
+"....+ at ....+@... at ......",
+".... at +....@+...+@@+...",
+"... at +....@@....... at ...",
+"...@@@... at ....@@@@+...",
+"......................",
+"...+@@@@.@@@@@.. at ..$@.",
+"... at ......+@...$@.. at ..",
+"...+@@+... at +...@$.$@..",
+"...... at ..+@.... at ..@...",
+"..@@@@+.. at .....%@@....",
+"......................",
+"...@@@@@..@@@@@..+@@@.",
+"..+ at ...@.. at ...@.. at ...@",
+"..@@@@@..@@@@@..+ at ..@+",
+".. at ......@... at ..@... at .",
+". at ......@.... at ..@@@@.."};
diff --git a/lang.croatian/weekday.xpm b/lang.croatian/weekday.xpm
new file mode 100644
index 0000000..ab92c6c
--- /dev/null
+++ b/lang.croatian/weekday.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char * weekday_xpm[] = {
+"20 42 3 1",
+" c None",
+". c #FFFFFF",
+"+ c #000000",
+"....................",
+".++++...++++..+...+.",
+".+...+.+....+.++..+.",
+".++++..+....+.+.+.+.",
+".+.....+....+.+..++.",
+".+......++++..+...+.",
+"....................",
+".+...+.+++++..++++..",
+".+...+...+...+....+.",
+".+...+...+...+....+.",
+".+...+...+...+....+.",
+"..+++....+....++++..",
+"....................",
+"..++++.+++++..+++++.",
+".+.....+....+...+...",
+"..+++..+++++....+...",
+".....+.+...+....+...",
+".++++..+....+.+++++.",
+"...++...............",
+"..++++.+++++.+++++..",
+".+.....+.......+....",
+".+.....++++....+....",
+".+.....+.......+....",
+"..++++.+++++...+....",
+"....................",
+".++++..+++++.+++++..",
+".+...+.+.......+....",
+".++++..++++....+....",
+".+.....+.......+....",
+".+.....+++++...+....",
+"....................",
+"..++++.+....+.++++..",
+".+.....+....+.+...+.",
+"..+++..+....+.++++..",
+".....+.+....+.+...+.",
+".++++...++++..++++..",
+"....................",
+".+...+.+++++.++++...",
+".++..+.+.....+...+..",
+".+.+.+.++++..+...+..",
+".+..++.+.....+...+..",
+".+...+.+++++.++++..."};
diff --git a/lang.czech/month.xpm b/lang.czech/month.xpm
new file mode 100644
index 0000000..d7cdc06
--- /dev/null
+++ b/lang.czech/month.xpm
@@ -0,0 +1,79 @@
+/* XPM */
+static char * month_xpm[] = {
+"22 72 4 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+"X c #514455555144",
+"o c #AEBAAAAAAEBA",
+" ",
+" . ..... X... ",
+" o. o. o. . ",
+" .o ..... . . ",
+" . . . . ",
+" X.... X.... X..... ",
+" ",
+" . o. . . ... ",
+" o. . o.. o. . .",
+" .o o. . . .o . . ",
+" . .o o. .. . o. ",
+" X... . . .... ",
+" ",
+" ....X ....X .....",
+" o. . o. . o. ",
+" ..... ..... ..... ",
+" . . . . . ",
+" X.... X . X.... ",
+" ",
+" X... . o. ....X",
+" o. . o. . o. .",
+" . . .o o. ..... ",
+" . . . . . . ",
+" X.... X.. X.... ",
+" ",
+" .o . . . ..... ",
+" o. .o .o .o o. ",
+" . . o. . .... ",
+" o. o. .. . ",
+" . .o . X.... ",
+" ",
+" ... ..... ....X ",
+" . o. o. . ",
+" . .... ..... ",
+" . . . . ",
+" ..... X.... X . ",
+" ",
+" ... .... ... ",
+" . o. . ",
+" . .... . ",
+" . . . ",
+" ..... X.... ..... ",
+" ",
+" o.... ....X X...X ",
+" . o. . o. . ",
+" o..o ..... ..... ",
+" . . . o. ",
+" ....o X . . ",
+" ",
+" ..... . ....X ",
+" o. . o. . ",
+" .o . . ..... ",
+" o.o .... . . ",
+" o..... . . X . ",
+" ",
+" ....X . . ",
+" o. . o. o. ",
+" ..... . .o ",
+" . . o. . . ",
+" X . . .. ",
+" ",
+" . . o.... ",
+" o. o. . ",
+" .o . o..o ",
+" . o. . ",
+" X.... . ....o ",
+" ",
+" X...X ....X ... ",
+" o. . o. . . .",
+" ..... ..... . . ",
+" o. . . . o. ",
+" . X . .... "};
diff --git a/lang.czech/weekday.xpm b/lang.czech/weekday.xpm
new file mode 100644
index 0000000..a75d0d4
--- /dev/null
+++ b/lang.czech/weekday.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static char * weekday_xpm[] = {
+"20 42 2 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+" ",
+" .... ... ",
+" . . . . ",
+" .... . . ",
+" . . . ",
+" . ... ",
+" ",
+" . . ..... ",
+" . . . ",
+" . . . ",
+" . . . ",
+" ... . ",
+" ",
+" .... ..... ",
+" . . ",
+" ... . ",
+" . . ",
+" .... . ",
+" ",
+" ... ..... ",
+" . . . ",
+" . . ",
+" . . . ",
+" ... . ",
+" ",
+" .... . ",
+" . . . . ",
+" .... . . ",
+" . ..... ",
+" . . . ",
+" ",
+" .... ... ",
+" . . . ",
+" ... . . ",
+" . . . ",
+" .... ... ",
+" ",
+" . . ..... ",
+" .. . . ",
+" . . . .... ",
+" . .. . ",
+" . . ..... "};
diff --git a/lang.danish/month.xpm b/lang.danish/month.xpm
new file mode 100644
index 0000000..606bdf5
--- /dev/null
+++ b/lang.danish/month.xpm
@@ -0,0 +1,79 @@
+/* XPM */
+static char * month_xpm[] = {
+"22 72 4 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+"X c #AAAAAAAAAAAA",
+"o c #555555555555",
+" ",
+" . . . . ",
+" X. . X.. X. ",
+" .X . . .X . .X ",
+" . . .... X. .. ",
+" .. . . . . ",
+" ",
+" o..... ..... ....o",
+" . X. X. .",
+" X..... ..... ..... ",
+" . . . . ",
+". o.... 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 ",
+" . . . . . ",
+" .. o.. o.... ",
+" ",
+" . . X. X.... ",
+" .X X. . . ",
+" . . .X X. X. ... ",
+" .... . .X .X . ",
+" . . o.. ... ",
+" ",
+" X.... ..... o...o ",
+" . X. X. . ",
+" X..X .... ..... ",
+" . . X. ",
+"....X o.... . ",
+" ",
+" ... . . ..... ",
+" . . . .X X. ",
+" . . .. .X ",
+" . X. .X . X. ",
+" .... .X . . ",
+" ",
+" . . X... . . ",
+" X.. X. . . .X .X ",
+" . . .X X. .X X. . ",
+"X. .. . . .. ",
+". . .... . ",
+" ",
+" o... .... ... ",
+" X. . X. . ",
+" . . .... . ",
+" . . . . ",
+" o.... o.... ..... "};
diff --git a/lang.danish/weekday.xpm b/lang.danish/weekday.xpm
new file mode 100644
index 0000000..227e6ec
--- /dev/null
+++ b/lang.danish/weekday.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static char * weekday_xpm[] = {
+"20 42 2 1",
+" c #FEFEFEFEFEFE",
+". c #000000000000",
+" ",
+" . . .. . . ",
+" .. .. . . .. . ",
+" . . . . . . . . ",
+" . . ...... . .. ",
+" . . . . . . ",
+" ",
+" ..... ..... ..... ",
+" . . . . ",
+" . . ..... ",
+" . . . . ",
+" . ..... . . ",
+" ",
+" .... . . .... ",
+" . . .. . . ",
+" . . . . . ... ",
+" . . . .. . ",
+" .... . . .... ",
+" ",
+" ..... ... ..... ",
+" . . . . . ",
+" . . . ..... ",
+" . . . . . ",
+" . ... . . ",
+" ",
+" ..... ..... ..... ",
+" . . . . ",
+" .... ..... ... ",
+" . . . . ",
+" . . . ..... ",
+" ",
+" . ..... ..... ",
+" . . .. . . ",
+" . . .. . ..... ",
+" . .. . . . ",
+" .... ..... . . ",
+" ",
+" .... ..... . . ",
+" . . .. .. . ",
+" ... . .. . . . . ",
+" . .. . . .. ",
+" .... ..... . . "};
diff --git a/lang.dutch/month.xpm b/lang.dutch/month.xpm
new file mode 100644
index 0000000..3de6128
--- /dev/null
+++ b/lang.dutch/month.xpm
@@ -0,0 +1,83 @@
+/* XPM */
+static char *month_xpm[] = {
+/* width height num_colors chars_per_pixel */
+" 22 72 4 1",
+/* colors */
+". c #ffffff",
+"# c #000000",
+"a c #aeaaae",
+"b c #515551",
+/* pixels */
+"......................",
+".....#...#....#....#..",
+"....a#...#...a##..a#..",
+"....#a..#.#..#a.#.#a..",
+".#..#..####.a#...##...",
+"..##..#...#.#.....#...",
+"......................",
+"..b#####..#####..####b",
+"..#......a#.....a#...#",
+".a#####..#####..#####.",
+".#.......#......#...#.",
+"#.......b####..b####..",
+"......................",
+"..#....#....#...#####b",
+"..#...##....#a..#...#.",
+".#.#.#.#...#.#.#####..",
+".#..#..#..####.#...#..",
+"#......#.#...##....#..",
+"......................",
+"....#....#####..#####.",
+"....#a..a#...#..#...#.",
+"...#.#..#####..#####..",
+"..####..#......#...#..",
+".#...#.#......#....#..",
+"......................",
+"....#....#..#####..#..",
+"...a#...##.a#.....a#..",
+"...#a#.#.#.#####..#...",
+"..a#..#..#.#.....a#...",
+"..#......#b####..#....",
+"......................",
+".....#..#..a#..#....#.",
+"....a#.a#..#..a##..a#.",
+"....#a.#a.a#..#..#.#a.",
+".#..#..#..#a.a#...##..",
+"..##...b###..#.....#..",
+"......................",
+"......#..#..a#..#.....",
+".....a#.a#..#..a#.....",
+".....#a.#a.a#..#a.....",
+"..#..#..#..#...#......",
+"...##...b##...b####...",
+"......................",
+".....#...#..a#.a####..",
+".....#a.a#..#..#......",
+"....#.#.#a.a#.a#.###..",
+"...####.#..#a.#a..#...",
+"..#...#.b##....###....",
+"......................",
+"..a####..#####..b###b.",
+"..#.....a#.....a#...#.",
+"..a##a..####...#####..",
+".....#..#.....a#......",
+".####a.b####..#.......",
+"......................",
+"....###...#a.#.#####..",
+"...#...#.a#.#a..a#....",
+"...#..#..#.#....#a....",
+"..#..a#.a#.a#..a#.....",
+"..####..#...#a.#......",
+"......................",
+"..#....#..a###..#...#.",
+".a##..a#..#...#.#a.#a.",
+".#..#.#a.a#..#a.a#.#..",
+"a#...##..#...#...##...",
+"#.....#..####....#....",
+"......................",
+"...b###...####..####..",
+"..a#...#.a#....a#.....",
+"..#....#.####..#a.....",
+"..#...#..#....a#......",
+".b####..b####.#####..."
+};
diff --git a/lang.dutch/weekday.xpm b/lang.dutch/weekday.xpm
new file mode 100644
index 0000000..4e5b757
--- /dev/null
+++ b/lang.dutch/weekday.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static char *weekday_xpm[] = {
+"20 42 2 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+" ",
+" . . . ",
+" .. .. . . ",
+" . . . . . . ",
+" . . . ..... ",
+" . . . . ",
+" ",
+" .... . ",
+" . . . ",
+" . . . ",
+" . . . ",
+" .... . ",
+" ",
+" . . ... ",
+" . . . . . ",
+" . . . . . . ",
+" .. .. . . ",
+" . . ... ",
+" ",
+" .... ... ",
+" . . . . ",
+" . . . . ",
+" . . . . ",
+" .... ... ",
+" ",
+" . . .... ",
+" . . . . ",
+" . . .... ",
+" .. . . ",
+" .. . . ",
+" ",
+" ..... . ",
+" . . . ",
+" . . . ",
+" . ..... ",
+" ..... . . ",
+" ",
+" ..... ... ",
+" . . . ",
+" . . . ",
+" . . . ",
+" ..... ... "};
diff --git a/lang.english/month.xpm b/lang.english/month.xpm
new file mode 100644
index 0000000..049e54f
--- /dev/null
+++ b/lang.english/month.xpm
@@ -0,0 +1,83 @@
+/* XPM */
+static char *month_xpm[] = {
+/* width height num_colors chars_per_pixel */
+" 22 72 4 1",
+/* colors */
+". c #000000",
+"# c #555555",
+"a c #aaaaaa",
+"b c #ffffff",
+/* pixels */
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbbb.bbb.bbbb.bbbb.bb",
+"bbbba.bbb.bbba..bba.bb",
+"bbbb.abb.b.bb.ab.b.abb",
+"b.bb.bb....ba.bbb..bbb",
+"bb..bb.bbb.b.bbbbb.bbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bb#.....bb.....bb....#",
+"bb.bbbbbba.bbbbba.bbb.",
+"ba.....bb.....bb.....b",
+"b.bbbbbbb.bbbbbb.bbb.b",
+".bbbbbbb#....bb#....bb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bb.bbbb.bbbb.bbbb.....",
+"bb.bbb..bbbb.abbb.bbb.",
+"b.b.b.b.bbb.b.bb.....b",
+"b.bb.bb.bb....bb.bbb.b",
+".bbbbbb.b.bbb.b.bbbb.b",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbb.bbbb.....bb.....b",
+"bbbb.abba.bbb.bb.bbb.b",
+"bbb.b.bb.....bb.....bb",
+"bb....bb.bbbbbb.bbb.bb",
+"b.bbb.b.bbbbbb.bbbb.bb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbb.bbbb.bbbb.bb.bbb.b",
+"bba.bbb..bbbb.bbb.b.bb",
+"bb.a.b.b.bbb.b.bba.bbb",
+"ba.bb.bb.bb....bb.bbbb",
+"b.bbbbbb.b.bbb.bb.bbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbbb.bb.bba.bb.bbbb.b",
+"bbbba.ba.bb.bba..bba.b",
+"bbbb.ab.aba.bb.bb.b.ab",
+"b.bb.bb.bb.aba.bbb..bb",
+"bb..bbb#...bb.bbbbb.bb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbb.bb.bba.bb.bbbbb",
+"bbbbba.ba.bb.bba.bbbbb",
+"bbbbb.ab.aba.bb.abbbbb",
+"bb.bb.bb.bb.bbb.bbbbbb",
+"bbb..bbb#..bbb#....bbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbb.bbb.bba.ba....bbb",
+"bbbb.aba.bb.bb.bbbbbbb",
+"bbb.b.b.aba.ba.b...bbb",
+"bb....b.bb.ab.abb.bbbb",
+"b.bbb.b#..bbbb...bbbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"ba....bb.....bb#...#bb",
+"b.bbbbba.bbbbba.bbb.bb",
+"ba..abb....bbb.....bbb",
+"bbbb.bb.bbbbba.bbbbbbb",
+"....ab#....bb.bbbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbb...bbb...b.....bbbb",
+"bb.bbb.b.bbbbba.bbbbbb",
+"bb.bb.bb.bbbbb.abbbbbb",
+"b.bba.b.bbbbba.bbbbbbb",
+"b....bb....bb.bbbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bb.bbbb.bba...bb.bbb.b",
+"ba..bba.bb.bbb.b.ab.ab",
+"b.bb.b.aba.bb.aba.b.bb",
+"a.bbb..bb.bbb.bbb..bbb",
+".bbbbb.bb....bbbb.bbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbb#...bbb....bb...bbb",
+"bba.bbb.ba.bbbb.bbbbbb",
+"bb.bbbb.b....bb.bbbbbb",
+"bb.bbb.bb.bbbb.bbbbbbb",
+"b#....bb#....b.....bbb"
+};
diff --git a/lang.english/weekday.xpm b/lang.english/weekday.xpm
new file mode 100644
index 0000000..ae49bb5
--- /dev/null
+++ b/lang.english/weekday.xpm
@@ -0,0 +1,53 @@
+/* XPM */
+static char *weekday_xpm[] = {
+/* width height num_colors chars_per_pixel */
+" 20 42 4 1",
+/* colors */
+". c #000000",
+"# c #555555",
+"a c #aaaaaa",
+"b c #ffffff",
+/* pixels */
+"bbbbbbbbbbbbbbbbbbbb",
+"b.bbb.bb....bb.bbb.b",
+"b..b..b.bbbb.b..bb.b",
+"b.b.b.b.bbbb.b.b.b.b",
+"b.bbb.b.bbbb.b.bb..b",
+"b.bbb.bb....bb.bbb.b",
+"bbbbbbbbbbbbbbbbbbbb",
+"b.....b.bbbb.b.....b",
+"bbb.bbb.bbbb.b.bbbbb",
+"bbb.bbb.bbbb.b....bb",
+"bbb.bbb.bbbb.b.bbbbb",
+"bbb.bbbb....bb.....b",
+"bbbbbbbbbbbbbbbbbbbb",
+"b.bbbb.b.....b....bb",
+"b.bbbb.b.bbbbb.bbb.b",
+"b.b..b.b....bb.bbb.b",
+"b..bb..b.bbbbb.bbb.b",
+"b.bbbb.b.....b....bb",
+"bbbbbbbbbbbbbbbbbbbb",
+"b.....b.bbb.b.bbbb.b",
+"bbb.bbb.bbb.b.bbbb.b",
+"bbb.bbb.....b.bbbb.b",
+"bbb.bbb.bbb.b.bbbb.b",
+"bbb.bbb.bbb.bb....bb",
+"bbbbbbbbbbbbbbbbbbbb",
+"b.....b.....bb.....b",
+"b.bbbbb.bbbb.bbb.bbb",
+"b....bb.....bbbb.bbb",
+"b.bbbbb.bbb.bbbb.bbb",
+"b.bbbbb.bbbb.b.....b",
+"bbbbbbbbbbbbbbbbbbbb",
+"bb....bbb..bbb.....b",
+"b.bbbbbb.bb.bbbb.bbb",
+"bb...bbb.bb.bbbb.bbb",
+"bbbbb.b......bbb.bbb",
+"b....bb.bbbb.bbb.bbb",
+"bbbbbbbbbbbbbbbbbbbb",
+"bb....b.bbbb.b.bbb.b",
+"b.bbbbb.bbbb.b..bb.b",
+"bb...bb.bbbb.b.b.b.b",
+"bbbbb.b.bbbb.b.bb..b",
+"b....bbb....bb.bbb.b"
+};
diff --git a/lang.french/month.xpm b/lang.french/month.xpm
new file mode 100644
index 0000000..f92eadd
--- /dev/null
+++ b/lang.french/month.xpm
@@ -0,0 +1,79 @@
+/* XPM */
+static char * month_xpm[] = {
+"22 72 4 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+"X c #AEBAAAAAAEBA",
+"o c #514455555144",
+" ",
+" . . . . ",
+" X. . X.. X. ",
+" .X . . .X . .X ",
+" . . .... X. .. ",
+" .. . . . . ",
+" ",
+" o..... ..... . . ",
+" . X. .X .X ",
+" X..... ..... X. . ",
+" . . .. ",
+". o.... . ",
+" ",
+" . . . .....",
+" . .. .X . .",
+" . . . . . . ..... ",
+" . . . .... . . ",
+". . . . . . ",
+" ",
+" . . . ..... ",
+" .X .X .X . . ",
+" . . X. . ..... ",
+" .... .. . . ",
+" . . . . . ",
+" ",
+" . . . . ",
+" X. .. . X. ",
+" .X. . . . . .X ",
+" X. . . .... . ",
+" . . . . o. ",
+" ",
+" . . X. . . ",
+" X. X. . X.. X. ",
+" .X .X X. . . .X ",
+" . . . .X X. .. ",
+" .. o... . . ",
+" ",
+" . . X. . ",
+" X. X. . X. ",
+" .X .X X. .X ",
+" . . . . . ",
+" .. o.. o.... ",
+" ",
+" . ... . X. ",
+" .X . . X. . ",
+" . . . . .X X. ",
+" .... . X. . .X ",
+" . . .... o.. ",
+" ",
+" X.... ..... o...o ",
+" . X. X. . ",
+" X..X .... ..... ",
+" . . X. ",
+"....X o.... . ",
+" ",
+" ... ... ..... ",
+" . . . X. ",
+" . . . .X ",
+" . X. . X. ",
+" .... .... . ",
+" ",
+" . . X... . . ",
+" X.. X. . . .X .X ",
+" . . .X X. .X X. . ",
+"X. .. . . .. ",
+". . .... . ",
+" ",
+" o... .... ... ",
+" X. . X. . ",
+" . . .... . ",
+" . . . . ",
+" o.... o.... ..... "};
diff --git a/lang.french/weekday.xpm b/lang.french/weekday.xpm
new file mode 100644
index 0000000..fc0c069
--- /dev/null
+++ b/lang.french/weekday.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static char * weekday_xpm[] = {
+"20 42 2 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+" ",
+" . . . . . ",
+" . . . .. . ",
+" . . . . . . ",
+" . . . . .. ",
+" .... .... . . ",
+" ",
+" . . .. ..... ",
+" .. .. . . . .",
+" . . . . . ..... ",
+" . . ...... . . ",
+" . . . . . .",
+" ",
+" . . ..... ..... ",
+" .. .. . . .",
+" . . . .... ..... ",
+" . . . . . ",
+" . . ..... . .",
+" ",
+" ... ..... . .",
+" . . . .",
+" . . .... . .",
+" . . . . .",
+" ... ..... .... ",
+" ",
+" . . ..... . . ",
+" . .. . .. . ",
+" . . .... . . . ",
+" . . . . .. ",
+" .. ..... . . ",
+" ",
+" .... .. . . ",
+" . . . .. .. ",
+" ... . . . . . ",
+" . ...... . . ",
+" .... . . . . ",
+" ",
+" .... ..... . . ",
+" . . . .. .. ",
+" . . . . . . ",
+" . . . . . ",
+" .... ..... . . "};
diff --git a/lang.french2/month.xpm b/lang.french2/month.xpm
new file mode 100644
index 0000000..d2e06d7
--- /dev/null
+++ b/lang.french2/month.xpm
@@ -0,0 +1,79 @@
+/* XPM */
+static char * mois_xpm[] = {
+"22 72 4 1",
+" c #FFFFFF",
+". c #000000",
+"X c #AAAAAA",
+"o c #555555",
+" ",
+" . . . . ",
+" X. . X.. X. ",
+" .X . . .X . .X ",
+" . . .... X. .. ",
+" .. . . . . ",
+" ",
+" o..... ..... . . ",
+" . X. .X .X ",
+" X..... ..... X. . ",
+" . . .. ",
+". o.... . ",
+" ",
+" . . . ....o",
+" . .. .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. .. ",
+" .. o... . . . ",
+" ",
+" . . X. X. . ",
+" X. X. . .X X. ",
+" .X .X X. X. .X ",
+" . . . . .X . ",
+" .. o.. . o.... ",
+" ",
+" . X.. . X. ",
+" .X . . X. . ",
+" . . X. .X .X X. ",
+" .... . . . .X ",
+" . . X... o.. ",
+" ",
+" X.... ..... o...o ",
+" . X. X. . ",
+" X..X .... ..... ",
+" . . X. ",
+" ....X o.... . ",
+" ",
+" o.. ... ..... ",
+" . . . X. ",
+" X. .X . .X ",
+" . X. . X. ",
+" X... .... . ",
+" ",
+" . . X... . . ",
+" X.. X. . . .X .X ",
+" . . .X X. .X X. . ",
+"X. .. . . .. ",
+". . .... . ",
+" ",
+" o... .... ... ",
+" X. . X. . ",
+" . . .... . ",
+" . . . . ",
+" o.... o.... ..... "};
diff --git a/lang.french2/weekday.xpm b/lang.french2/weekday.xpm
new file mode 100644
index 0000000..750685c
--- /dev/null
+++ b/lang.french2/weekday.xpm
@@ -0,0 +1,51 @@
+/* XPM */
+static char *jours[] = {
+/* width height num_colors chars_per_pixel */
+" 20 42 2 1",
+/* colors */
+". c #ffffff",
+"# c #000000",
+/* pixels */
+"....................",
+".#.....#....#.#...#.",
+".#.....#....#.##..#.",
+".#.....#....#.#.#.#.",
+".#.....#....#.#..##.",
+".#####..####..#...#.",
+"....................",
+".#...#...##...####..",
+".##.##..#..#..#...#.",
+".#.#.#..#..#..####..",
+".#...#.######.#..#..",
+".#...#.#....#.#...#.",
+"....................",
+".#...#.######.####..",
+".##.##.#......#...#.",
+".#.#.#.#####..####..",
+".#...#.#......#..#..",
+".#...#.######.#...#.",
+"....................",
+"..#####.#####.#...#.",
+"....#...#.....#...#.",
+"....#...####..#...#.",
+".#..#...#.....#...#.",
+"..##....#####..###..",
+"....................",
+".#...#.######.#...#.",
+".#...#.#......##..#.",
+"..#.#..#####..#.#.#.",
+"..#.#..#......#..##.",
+"...#...######.#...#.",
+"....................",
+"..####...##...#...#.",
+".#......#..#..##.##.",
+"..###...#..#..#.#.#.",
+".....#.######.#...#.",
+".####..#....#.#...#.",
+"....................",
+".#####..#####.#...#.",
+".#....#...#...##.##.",
+".#....#...#...#.#.#.",
+".#....#...#...#...#.",
+".#####..#####.#...#."
+};
diff --git a/lang.german/month.xpm b/lang.german/month.xpm
new file mode 100644
index 0000000..dcc5807
--- /dev/null
+++ b/lang.german/month.xpm
@@ -0,0 +1,83 @@
+/* XPM */
+static char *month_xpm[] = {
+/* width height num_colors chars_per_pixel */
+" 22 72 4 1",
+/* colors */
+". c #000000",
+"# c #555555",
+"a c #aaaaaa",
+"b c #ffffff",
+/* pixels */
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbbb.bbb.bbbb.bbbb.bb",
+"bbbba.bbb.bbba..bba.bb",
+"bbbb.abb.b.bb.ab.b.abb",
+"b.bb.bb....ba.bbb..bbb",
+"bb..bb.bbb.b.bbbbb.bbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bb#.....bb.....bb....#",
+"bb.bbbbbba.bbbbba.bbb.",
+"ba.....bb.....bb.....b",
+"b.bbbbbbb.bbbbbb.bbb.b",
+".bbbbbbb#....bb#....bb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bb.bbbb.bb....#bb....#",
+"bb.bbb..ba.bbb.bbbba.b",
+"b.b.b.b.b......bbb.abb",
+"b.bb.bb.b.bbb.bba.abbb",
+".bbbbbb.#bbbb.ba.....b",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbb.bbbb.....bb.....b",
+"bbbb.abba.bbb.bb.bbb.b",
+"bbb.b.bb.....bb.....bb",
+"bb....bb.bbbbbb.bbb.bb",
+"b.bbb.b.bbbbbb.bbbb.bb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbb.bbbb.bbbb.bbbb.bbb",
+"bba.bbb..bbbb.bbba.bbb",
+"bb.a.b.b.bbb.b.bb.bbbb",
+"ba.bb.bb.bb....ba.bbbb",
+"b.bbbbbb.b.bbb.b.bbbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbbb.bb.bba.bb.bbbb.b",
+"bbbba.ba.bb.bba..bba.b",
+"bbbb.ab.aba.bb.bb.b.ab",
+"b.bb.bb.bb.aba.bbb..bb",
+"bb..bbb#...bb.bbbbb.bb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbb.bb.bba.bb.bbbbb",
+"bbbbba.ba.bb.bba.bbbbb",
+"bbbbb.ab.aba.bb.abbbbb",
+"bb.bb.bb.bb.bbb.bbbbbb",
+"bbb..bbb#..bbb#....bbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbb.bbb.bba.ba....bbb",
+"bbbb.aba.bb.bb.bbbbbbb",
+"bbb.b.b.aba.ba.b...bbb",
+"bb....b.bb.ab.abb.bbbb",
+"b.bbb.b#..bbbb...bbbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"ba....bb.....bb#...#bb",
+"b.bbbbba.bbbbba.bbb.bb",
+"ba..abb....bbb.....bbb",
+"bbbb.bb.bbbbba.bbbbbbb",
+"....ab#....bb.bbbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbb...bbb.ab.b.....bbb",
+"bb.bbb.ba.b.abba.bbbbb",
+"bb.bb.bb.b.bbbb.abbbbb",
+"b.bba.ba.ba.bba.bbbbbb",
+"b....bb.bbb.ab.bbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bb.bbbb.bba...bb.bbb.b",
+"ba..bba.bb.bbb.b.ab.ab",
+"b.bb.b.aba.bb.aba.b.bb",
+"a.bbb..bb.bbb.bbb..bbb",
+".bbbbb.bb....bbbb.bbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbb#...bbb....bb.....b",
+"bba.bbb.ba.bbbbbbba.bb",
+"bb.bbbb.b....bbbb.abbb",
+"bb.bbb.bb.bbbbba.abbbb",
+"b#....bb#....ba.....bb"
+};
diff --git a/lang.german/weekday.xpm b/lang.german/weekday.xpm
new file mode 100644
index 0000000..9ae2cbd
--- /dev/null
+++ b/lang.german/weekday.xpm
@@ -0,0 +1,51 @@
+/* XPM */
+static char *weekday_xpm[] = {
+/* width height num_colors chars_per_pixel */
+" 20 42 2 1",
+/* colors */
+". c #000000",
+"# c #ffffff",
+/* pixels */
+"####################",
+"####.#####.##...####",
+"####..###..#.###.###",
+"####.#.#.#.#.###.###",
+"####.##.##.#.###.###",
+"####.#####.##...####",
+"####################",
+"#######....##.######",
+"#######.###.#.######",
+"#######.###.#.######",
+"#######.###.#.######",
+"#######....##.######",
+"####################",
+"######.#####.#.#####",
+"######..###..#.#####",
+"######.#.#.#.#.#####",
+"######.##.##.#.#####",
+"######.#####.#.#####",
+"####################",
+"#####....###...#####",
+"#####.###.#.###.####",
+"#####.###.#.###.####",
+"#####.###.#.###.####",
+"#####....###...#####",
+"####################",
+"#####.....#....#####",
+"#####.#####.###.####",
+"#####....##....#####",
+"#####.#####.##.#####",
+"#####.#####.###.####",
+"####################",
+"######....###.######",
+"#####.######.#.#####",
+"######...###.#.#####",
+"#########.#.....####",
+"#####....##.###.####",
+"####################",
+"######....##...#####",
+"#####.#####.###.####",
+"######...##.###.####",
+"#########.#.###.####",
+"#####....###...#####"
+};
diff --git a/lang.hungarian/month.xpm b/lang.hungarian/month.xpm
new file mode 100644
index 0000000..6ef42bc
--- /dev/null
+++ b/lang.hungarian/month.xpm
@@ -0,0 +1,79 @@
+/* XPM */
+static char * month_xpm[] = {
+"22 72 4 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+"X c #AEBAAAAAAEBA",
+"o c #514455555144",
+" ",
+" . . . . ",
+" X. . X.. X. ",
+" .X . . .X . .X ",
+" . . .... X. .. ",
+" .. . . . . ",
+" ",
+" o..... ..... ....o",
+" . X. X. .",
+" X..... ..... ..... ",
+" . . . . ",
+". o.... o.... ",
+" . ",
+" . . . . .....",
+" . .. . . .",
+" . . . . . . ..... ",
+" . . . .... . . ",
+". . . . . . ",
+" . ",
+" . . ..... ..... ",
+" .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 . ",
+" .. o.. o.... ",
+" ",
+" . . X. X.... ",
+" .X X. . . ",
+" . . .X X. X. ... ",
+" .... . .X .X . ",
+" . . o.. ... ",
+" ",
+" X....X...oo.... o...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. . ",
+"X. .. . . .. ",
+". . .... . ",
+" ",
+" o... .... X... ",
+" X. . X. . ",
+" . . .... . ",
+" . . . . ",
+" o.... o.... ..... "};
diff --git a/lang.hungarian/weekday.xpm b/lang.hungarian/weekday.xpm
new file mode 100644
index 0000000..ea8a2b8
--- /dev/null
+++ b/lang.hungarian/weekday.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char * weekday_xpm[] = {
+"20 42 2 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+" . ",
+" . . ..... ",
+" . . . ",
+" ..... .... ",
+" . . . ",
+" . . ..... ",
+" ",
+" . . ..... ",
+" . . . ",
+" . . ... ",
+" .. . . ",
+" . . ..... ",
+" ",
+" .... ..... ..... ",
+" . . . ",
+" ... . ... ",
+" . . . ",
+" .... ..... ..... ",
+" . . ",
+" .... .... . . ",
+" . . . . ",
+" . ... . . ",
+" . . . . ",
+" .... .... ... ",
+" . ",
+" ..... ..... ",
+" . . . ",
+" ..... .... ",
+" . . ",
+" . ..... ",
+" ",
+" .... ..... ... ",
+" . . . . ",
+" ... . . . ",
+" . . . . ",
+" .... ..... ... ",
+" ",
+" . . . .... ",
+" . . . . . ",
+" . . . . ... ",
+" . . ..... . ",
+" . . . .... "};
+
diff --git a/lang.indonesian/month.xpm b/lang.indonesian/month.xpm
new file mode 100644
index 0000000..d0f38ab
--- /dev/null
+++ b/lang.indonesian/month.xpm
@@ -0,0 +1,83 @@
+/* XPM */
+static char *month_xpm[] = {
+/* width height num_colors chars_per_pixel */
+" 22 72 4 1",
+/* colors */
+". c #000000",
+"# c #555555",
+"a c #aaaaaa",
+"b c #ffffff",
+/* pixels */
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbbb.bbb.bbbb.bbbb.bb",
+"bbbba.bbb.bbba..bba.bb",
+"bbbb.abb.b.bb.ab.b.abb",
+"b.bb.bb....ba.bbb..bbb",
+"bb..bb.bbb.b.bbbbb.bbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bb#.....bb.....bb....#",
+"bb.bbbbbba.bbbbba.bbb.",
+"ba.....bb.....bb.....b",
+"b.bbbbbbb.bbbbbb.bbb.b",
+".bbbbbbb#....bb#....bb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bb.bbbb.bbbb.bbbb.....",
+"bb.bbb..bbbb.abbb.bbb.",
+"b.b.b.b.bbb.b.bb.....b",
+"b.bb.bb.bb....bb.bbb.b",
+".bbbbbb.b.bbb.b.bbbb.b",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbb.bbbb.....bb.....b",
+"bbbb.abba.bbb.bb.bbb.b",
+"bbb.b.bb.....bb.....bb",
+"bb....bb.bbbbbb.bbb.bb",
+"b.bbb.b.bbbbbb.bbbb.bb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbb.bbbb.bbb.....bb.bb",
+"bba.bbb..bba.bbbbba.bb",
+"bb.a.b.b.bb.....bb.bbb",
+"ba.bb.bb.bb.bbbbba.bbb",
+"b.bbbbbb.b#....bb.bbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbbb.bb.bba.bb.bbbb.b",
+"bbbba.ba.bb.bba..bba.b",
+"bbbb.ab.aba.bb.bb.b.ab",
+"b.bb.bb.bb.aba.bbb..bb",
+"bb..bbb#...bb.bbbbb.bb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbb.bb.bba.bb.bbbbb",
+"bbbbba.ba.bb.bba.bbbbb",
+"bbbbb.ab.aba.bb.abbbbb",
+"bb.bb.bb.bb.bbb.bbbbbb",
+"bbb..bbb#..bbb#....bbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbb.bbbba....bb.bba.b",
+"bbbb.abb.bbbbbba.bb.bb",
+"bbb.b.ba.b...bb.aba.bb",
+"bb....b.abb.bbb.bb.abb",
+"b.bbb.bb...bbbb#..bbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"ba....bb.....bb#...#bb",
+"b.bbbbba.bbbbba.bbb.bb",
+"ba..abb....bbb.....bbb",
+"bbbb.bb.bbbbba.bbbbbbb",
+"....ab#....bb.bbbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbb...bbb.ab.b.....bbb",
+"bb.bbb.ba.b.abba.bbbbb",
+"bb.bb.bb.b.bbbb.abbbbb",
+"b.bba.ba.ba.bba.bbbbbb",
+"b....bb.bbb.ab.bbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bb.bbbb.bba...bb.bbb.b",
+"ba..bba.bb.bbb.b.ab.ab",
+"b.bb.b.aba.bb.aba.b.bb",
+"a.bbb..bb.bbb.bbb..bbb",
+".bbbbb.bb....bbbb.bbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbb#...bbb....bba....b",
+"bba.bbb.ba.bbbbbb.bbbb",
+"bb.bbbb.b....bbba..abb",
+"bb.bbb.bb.bbbbbbbbb.bb",
+"b#....bb#....bb....abb"
+};
diff --git a/lang.indonesian/weekday.xpm b/lang.indonesian/weekday.xpm
new file mode 100644
index 0000000..1a2e3da
--- /dev/null
+++ b/lang.indonesian/weekday.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static char * weekday_xpm[] = {
+"20 42 2 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+" ",
+" .... ..... . . ",
+" . . .. . ",
+" ... .... . . . ",
+" . . . .. ",
+" .... ..... . . ",
+" ",
+" .... ..... . ",
+" . . . ",
+" ... .... . ",
+" . . . ",
+" .... ..... ..... ",
+" ",
+" .... .. .... ",
+" . . . . . . ",
+" .... . . .... ",
+" . . ...... . . ",
+" . . . . .... ",
+" ",
+" . . .. . . ",
+" . . . . .. .. ",
+" ... . . . . . ",
+" . . ...... . . ",
+" . . . . . . ",
+" ",
+" . . . . . ",
+" . . . .. .. ",
+" . . . . . . ",
+" . . . . . . ",
+" ... ... . . ",
+" ",
+" .... .. .... ",
+" . . . . . ",
+" ... . . .... ",
+" . ...... . . ",
+" .... . . .... ",
+" ",
+" . . ..... . . ",
+" .. .. . .. . ",
+" . . . . . . . ",
+" . . . . .. ",
+" . . ..... . . "};
diff --git a/lang.italian/month.xpm b/lang.italian/month.xpm
new file mode 100644
index 0000000..1ef5fa7
--- /dev/null
+++ b/lang.italian/month.xpm
@@ -0,0 +1,79 @@
+/* XPM */
+static char * month_xpm[] = {
+"22 72 4 1",
+" c #FFFFFFFFFFFF",
+". c #AEBAAAAAAEBA",
+"X c #000000000000",
+"o c #514455555144",
+" ",
+" .XXXX XXXXX X X ",
+" X .X .XX .X ",
+".X XXX XXXXX X. X X. ",
+"X. X X .X XX ",
+" XXX oXXXX X X ",
+" ",
+" oXXXXX XXXXX XXXXo",
+" X .X .X X",
+" .XXXXX XXXXX XXXXX ",
+" X X X X ",
+"X oXXXX oXXXX ",
+" ",
+" X X X XXXXo ",
+" X XX X. .X X ",
+" X X X X X X XXXXXX ",
+" X X X XXXX X X ",
+"X X X Xo X ",
+" ",
+" X XXXXo XXXXo ",
+" X. .X X .X X ",
+" X X XXXXX XXXXXX ",
+" XXXX X X X ",
+" X X X X X ",
+" ",
+" X X X .XXXX",
+" .X XX X X ",
+" X.X X X X X .X XXX",
+" .X X X XXXX X. X ",
+" X X X X XXX ",
+" ",
+" .XXXX X X .X ",
+" X XX .X X ",
+" .X XXX XX X. .X ",
+" X. X XX X X. ",
+" XXX X oXXX ",
+" ",
+" X X .X .XXXX ",
+" .X .X X X ",
+" X. X. .X .X XXX ",
+" X X X X. X ",
+" oXXXX oXX XXX ",
+" ",
+" X .XXXX XXX ",
+" X. X X X ",
+" X X .X XXX X X ",
+" XXXX X. X X .X ",
+" X X XXX XXXX ",
+" ",
+" .XXXX XXXXX XXXXX ",
+" X .X .X ",
+" .XX. XXXX X. ",
+" X X .X ",
+"XXXX. oXXXX X ",
+" ",
+" XXX XXXXX XXXXX ",
+" X X .X .X ",
+" X X X. X. ",
+" X .X .X .X ",
+" XXXX X X ",
+" ",
+" X X .XXX X X ",
+" .XX .X X X X. X. ",
+" X X X. .X X. .X X ",
+".X XX X X XX ",
+"X X XXXX X ",
+" ",
+" oXXX X XXX ",
+" .X X XX X ",
+" X X XX X ",
+" X X XX X ",
+" oXXXX X XXXXX "};
diff --git a/lang.italian/weekday.xpm b/lang.italian/weekday.xpm
new file mode 100644
index 0000000..5bf6a03
--- /dev/null
+++ b/lang.italian/weekday.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static char * weekday_xpm[] = {
+"20 42 2 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+" ",
+" . . . . . ",
+" . . . .. . ",
+" . . . . . . ",
+" . . . . .. ",
+" ..... ... . . ",
+" ",
+" . . .. .... ",
+" .. .. . . . . ",
+" . . . . . .... ",
+" . . ...... . . ",
+" . . . . . . ",
+" ",
+" . . ..... ..... ",
+" .. .. . . . ",
+" . . . .... ..... ",
+" . . . . . ",
+" . . ..... . . ",
+" ",
+" .... ..... .... ",
+" . . . . ",
+" . .. . . . ",
+" . . . . . ",
+" ... ..... .... ",
+" ",
+" . . ..... . . ",
+" . . . .. . ",
+" . . .... . . . ",
+" .. . . .. ",
+" .. ..... . . ",
+" ",
+" .... .. .... ",
+" . . . . . ",
+" ... . . .... ",
+" . ...... . . ",
+" .... . . .... ",
+" ",
+" .... ... . . ",
+" . . . . .. .. ",
+" . . . . . . . ",
+" . . . . . . ",
+" .... ... . . "};
diff --git a/lang.norwegian/month.xpm b/lang.norwegian/month.xpm
new file mode 100644
index 0000000..5f85112
--- /dev/null
+++ b/lang.norwegian/month.xpm
@@ -0,0 +1,79 @@
+/* XPM */
+static char * month_xpm[] = {
+"22 72 4 1",
+" c #FEFEFEFEFEFE",
+". c #000000000000",
+"X c #A9A9A9A9A9A9",
+"o c #555555555555",
+" ",
+" . . . . ",
+" X. . X.. X. ",
+" .X . . .X . .X ",
+" . . .... X. .. ",
+" .. . . . . ",
+" ",
+" o..... ..... ....o",
+" . X. X. .",
+" X..... ..... ..... ",
+" . . . . ",
+". o.... 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 ",
+" . . . . . ",
+" .. o.. o.... ",
+" ",
+" . . X. X.... ",
+" .X X. . . ",
+" . . .X X. X. ... ",
+" .... . .X .X . ",
+" . . o.. ... ",
+" ",
+" X.... ..... o...o ",
+" . X. X. . ",
+" X..X .... ..... ",
+" . . X. ",
+"....X o.... . ",
+" ",
+" ... . . ..... ",
+" . . . .X X. ",
+" . . .. .X ",
+" . X. .X . X. ",
+" .... .X . . ",
+" ",
+" . . X... . . ",
+" X.. X. . . .X .X ",
+" . . .X X. .X X. . ",
+"X. .. . . .. ",
+". . .... . ",
+" ",
+" o... .... X.... ",
+" X. . X. . ",
+" . . .... X..X ",
+" . . . . ",
+" o.... o.... ....X "};
diff --git a/lang.norwegian/weekday.xpm b/lang.norwegian/weekday.xpm
new file mode 100644
index 0000000..227e6ec
--- /dev/null
+++ b/lang.norwegian/weekday.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static char * weekday_xpm[] = {
+"20 42 2 1",
+" c #FEFEFEFEFEFE",
+". c #000000000000",
+" ",
+" . . .. . . ",
+" .. .. . . .. . ",
+" . . . . . . . . ",
+" . . ...... . .. ",
+" . . . . . . ",
+" ",
+" ..... ..... ..... ",
+" . . . . ",
+" . . ..... ",
+" . . . . ",
+" . ..... . . ",
+" ",
+" .... . . .... ",
+" . . .. . . ",
+" . . . . . ... ",
+" . . . .. . ",
+" .... . . .... ",
+" ",
+" ..... ... ..... ",
+" . . . . . ",
+" . . . ..... ",
+" . . . . . ",
+" . ... . . ",
+" ",
+" ..... ..... ..... ",
+" . . . . ",
+" .... ..... ... ",
+" . . . . ",
+" . . . ..... ",
+" ",
+" . ..... ..... ",
+" . . .. . . ",
+" . . .. . ..... ",
+" . .. . . . ",
+" .... ..... . . ",
+" ",
+" .... ..... . . ",
+" . . .. .. . ",
+" ... . .. . . . . ",
+" . .. . . .. ",
+" .... ..... . . "};
diff --git a/lang.polish/month.txt b/lang.polish/month.txt
new file mode 100644
index 0000000..5ea18f9
--- /dev/null
+++ b/lang.polish/month.txt
@@ -0,0 +1,12 @@
+styczeń (january)
+luty
+marzec
+kwiecień
+maj
+czerwiec
+lipiec
+sierpień
+wrzesień
+październik
+listopad
+grudzień
diff --git a/lang.polish/month.xpm b/lang.polish/month.xpm
new file mode 100644
index 0000000..efc646a
--- /dev/null
+++ b/lang.polish/month.xpm
@@ -0,0 +1,79 @@
+/* XPM */
+static char * month_xpm[] = {
+"22 72 4 1",
+" c #FFFFFFFFFFFF",
+"X c #000000000000",
+". c #AEBAAAAAAEBA",
+"o c #514455555144",
+" ",
+" .XXX. XXXXX X X ",
+" X X X X. X. ",
+" XXX X. X. ",
+" X X X. X ",
+" .XXX. X. .X ",
+" ",
+" XX .X .X XXXXX. ",
+" XX X X. X. ",
+" XX X .X X. ",
+" XX. X .X X. ",
+" XXXXXX XXXX. X. ",
+" ",
+" X X X .XX .XXXXX",
+" X.XX X X X .X ",
+"X X.X X X .XX. .X ",
+"X X X XXX X X .X ",
+"X X X X X X XXXXX.",
+" ",
+" .X X. .X X .X .X ",
+" X XX X X X XX ",
+" .XX. .X oX X .X. ",
+".X X. X o.X X XX ",
+"XX X. .X X .X ",
+" ",
+" X X X X ",
+" X. .XX X X ",
+" X X X X X X X ",
+" X X X XXXX . X. ",
+"X X X X .XXX ",
+" ",
+" .XXXX XXXXo .XXX .XXo",
+" X oX X X X",
+".X oX XXX XXo ",
+"X oX X. X X ",
+"XXXXX XXXXo XXX X X",
+" ",
+" XX X .XXX. ",
+" XX X X X ",
+" X. XX XXXX. ",
+".XX X X ",
+"XXXXXX X. .X ",
+" ",
+" .XXX. X XXX XXX.",
+" X X X X. X X",
+" XXX X. XXXX .XXX.",
+" X X X. X X. X ",
+" .XXX. X. XXXX. X X",
+" ",
+" .X X .X .XX .XXXXXo",
+" X X X X X oX ",
+".X oX X .XXX. oX ",
+"X o X X X. X oX ",
+".X X X X oXXXXX.",
+" oX. ",
+" XXXX X . ",
+" X X X XXXXo ",
+" XXXX. X X oX ",
+"XX XXXX oXX ",
+"X. X X XXXXXX ",
+" ",
+" XX oX oXXX XXXXXX",
+" X X Xo o Xo ",
+" XX oX oX XX ",
+" X X o X XX ",
+"XXXXX X XXXo XX ",
+" ",
+" XXXXXo .XXXo X X ",
+" X X X X X ",
+"X. oXX .XXXo .X X ",
+"X X X. X X X. ",
+"XXXXXX X X oXXX "};
diff --git a/lang.polish/weekday.txt b/lang.polish/weekday.txt
new file mode 100644
index 0000000..582398e
--- /dev/null
+++ b/lang.polish/weekday.txt
@@ -0,0 +1,7 @@
+niedziela (sunday)
+poniedziałek
+wtorek
+środa
+czwartek
+piątek
+sobota
diff --git a/lang.polish/weekday.xpm b/lang.polish/weekday.xpm
new file mode 100644
index 0000000..d484ae4
--- /dev/null
+++ b/lang.polish/weekday.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char * weekday_xpm[] = {
+"20 42 3 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+"X c #BEFBBEFBBEFB",
+" ",
+" .... .... . . ",
+" . . .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. .X . X. ",
+" . .. .... ..... "};
diff --git a/lang.portuguese/month.xpm b/lang.portuguese/month.xpm
new file mode 100644
index 0000000..d8f1db1
--- /dev/null
+++ b/lang.portuguese/month.xpm
@@ -0,0 +1,79 @@
+/* XPM */
+static char * month_xpm[] = {
+"22 72 4 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+"X c #AAAAAAAAAAAA",
+"o c #555555555555",
+" ",
+" . . . . ",
+" X. . X.. X. ",
+" .X . . .X . .X ",
+" . . .... X. .. ",
+" .. . . . . ",
+" ",
+" o..... ..... . . ",
+" . X. .X .X ",
+" X..... ..... X. . ",
+" . . .. ",
+". o.... . ",
+" ",
+" . . . ....o ",
+" . .. .X X. . ",
+" . . . . . . ...... ",
+" . . . .... . . ",
+". . . .o . ",
+" ",
+" . ....o ....o ",
+" .X X. . X. . ",
+" . . ..... ...... ",
+" .... . . . . ",
+" . . o.... o . ",
+" ",
+" . . . . ",
+" 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 ",
+" . . . . . ",
+" .. o.. o.... ",
+" ",
+" . X.... ... ",
+" .X . . . ",
+" . . X. ... . . ",
+" .... .X . . X. ",
+" . . ... .... ",
+" ",
+" X.... ..... ..... ",
+" . X. X. ",
+" X..X .... .X ",
+" . . X. ",
+"....X o.... . ",
+" ",
+" ... . X. ..... ",
+" . . X. . X. ",
+" . . .X X. .X ",
+" . X. . . X. ",
+" .... o.. . ",
+" ",
+" . . X... . . ",
+" X.. X. . . .X .X ",
+" . . .X X. .X X. . ",
+"X. .. . . .. ",
+". . .... . ",
+" ",
+" o... .... ..... ",
+" X. . X. X. ",
+" . . .... .X ",
+" . . . X.X ",
+" o.... o.... X..... "};
diff --git a/lang.portuguese/weekday.xpm b/lang.portuguese/weekday.xpm
new file mode 100644
index 0000000..a56a9fd
--- /dev/null
+++ b/lang.portuguese/weekday.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static char * weekday_xpm[] = {
+"20 42 2 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+" ",
+" .... ..... ..... ",
+" . . . ",
+" ... .... . ... ",
+" . . . . ",
+" .... ..... .... ",
+" ",
+" ..... ..... ..... ",
+" . . . . ",
+" . ... ..... ",
+" . . . . ",
+" . ..... . . ",
+" ",
+" .... . . .. ",
+" . . . . . . ",
+" . . . . . . . ",
+" . ... . . ...... ",
+" ..... .. . . ",
+" ",
+" .... . . ..... ",
+" . . . . . ",
+" . . . . . . ",
+" . ... . . . ",
+" ..... ... ..... ",
+" ",
+" .... ..... . . ",
+" . . . . ",
+" ... .... .. ",
+" . . . . ",
+" .... ..... . . ",
+" ",
+" .... .. .... ",
+" . . . . . ",
+" ... . . .... ",
+" . ...... . . ",
+" .... . . .... ",
+" ",
+" .... ... . . ",
+" . . . . .. .. ",
+" . . . . . . . ",
+" . . . . . . ",
+" .... ... . . "};
diff --git a/lang.russian/month.xpm b/lang.russian/month.xpm
new file mode 100644
index 0000000..644a72c
--- /dev/null
+++ b/lang.russian/month.xpm
@@ -0,0 +1,79 @@
+/* XPM */
+static char * month_xpm[] = {
+"22 72 4 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+"X c #AEBAAAAAAEBA",
+"o c #514455555144",
+" ",
+" .... . . ... ",
+" . . . . . . ",
+" .... ..... .... ",
+" . . . . . . ",
+" . . . . ..... ",
+" ",
+" ... .... ... ",
+" . . . . . . ",
+" . . . ... .... ",
+" ... . . . ",
+" . ..... ..... ",
+" ",
+" . . . .....",
+" . .. .X . .",
+" . . . . . . ..... ",
+" . . . .... . ",
+". . . . . ",
+" ",
+" . ..... ..... ",
+" .X . . . . ",
+" . . . . ..... ",
+" .... . . . ",
+" . . . . . ",
+" ",
+" . . . . . .",
+" X. .. . . . ",
+" .X. . . . . . ... ",
+"X. . . .... .. . ",
+". . . . . . ",
+" ",
+" . . . .. . .",
+" . . . . . . .",
+" . ... ... . ..... ",
+" .. . . . . . . ",
+". . . ... . . ",
+" ",
+" . . . .. ... ",
+" . . . . . . . ",
+" . ... ... . . . ",
+" .. . . . . . . ",
+". . . ... .. . ",
+" ",
+" . ... ... ",
+" .X . . . ",
+" . . .... . ",
+" .... . . . ",
+" . . ..... . ",
+" ",
+" ... ..... . . ",
+" . . X. . . ",
+" .. .... ..... ",
+" . . . . . ",
+" ...X o.... . . ",
+" ",
+" ... . . ..... ",
+" . . . . X. ",
+" . . .. .X ",
+" . X. . . X. ",
+" .... . . . ",
+" ",
+" . . ... .... ",
+" . . . . . . ",
+" ..... . . .... ",
+" . . . X. . . ",
+". . .... . . ",
+" ",
+" ... .... . . ",
+" . . X. . . ",
+" . . .... .. ",
+" . . . . . ",
+" o..... o.... . . "};
diff --git a/lang.russian/weekday.xpm b/lang.russian/weekday.xpm
new file mode 100644
index 0000000..89d8522
--- /dev/null
+++ b/lang.russian/weekday.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char * weekday_xpm[] = {
+"20 42 3 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+"X c #BEFBBEFBBEFB",
+" ",
+" ..... .... . . ",
+" . . .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/lang.slovene/month.xpm b/lang.slovene/month.xpm
new file mode 100644
index 0000000..020a5ec
--- /dev/null
+++ b/lang.slovene/month.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char *month_xpm[] = {
+/* width height num_colors chars_per_pixel */
+" 22 72 2 1",
+/* colors */
+". c #000000",
+"b c #ffffff",
+/* pixels */
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbb.bb....bb..bbb.b",
+"bbbbbb.b.bbbb.b.b.bb.b",
+"bbbbbb.b......b.bb.b.b",
+"b.bbbb.b.bbbb.b.bbb..b",
+"bb....bb.bbbb.b.bbbb.b",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bb.....bb.....b.....bb",
+"b.bbbbbb.bbbbbb.bbbb.b",
+"b.....bb....bbb.....bb",
+"b.bbbbbb.bbbbbb.bbbb.b",
+"b.bbbbbbb.....b.....bb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"b.bbbb.bb....bb.....bb",
+"b..bb..b.bbbb.b.bbbb.b",
+"b.b..b.b......b.....bb",
+"b.bbbb.b.bbbb.b.bbbb.b",
+"b.bbbb.b.bbbb.b.bbbb.b",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bb....bb.....bb.....bb",
+"b.bbbb.b.bbbb.b.bbbb.b",
+"b......b.....bb.....bb",
+"b.bbbb.b.bbbbbb.bbbb.b",
+"b.bbbb.b.bbbbbb.bbbb.b",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"b.bbbb.bb....bbbbbbb.b",
+"b..bb..b.bbbb.bbbbbb.b",
+"b.b..b.b......bbbbbb.b",
+"b.bbbb.b.bbbb.b.bbbb.b",
+"b.bbbb.b.bbbb.bb....bb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbb.b.bbbb.b..bbb.b",
+"bbbbbb.b.bbbb.b.b.bb.b",
+"bbbbbb.b.bbbb.b.bb.b.b",
+"b.bbbb.b.bbbb.b.bbb..b",
+"bb....bbb....bb.bbbb.b",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbb.b.bbbb.b.bbbbbb",
+"bbbbbb.b.bbbb.b.bbbbbb",
+"bbbbbb.b.bbbb.b.bbbbbb",
+"b.bbbb.b.bbbb.b.bbbbbb",
+"bb....bbb....bbb.....b",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bb....bb.bbbb.bb....bb",
+"b.bbbb.b.bbbb.b.bbbbbb",
+"b......b.bbbb.b.bb...b",
+"b.bbbb.bb.bb.bb.bbbb.b",
+"b.bbbb.bbb..bbbb....bb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bb.....bb.....b.....bb",
+"b.bbbbbb.bbbbbb.bbbb.b",
+"bb....bb.....bb.....bb",
+"bbbbbb.b.bbbbbb.bbbbbb",
+"b.....bbb.....b.bbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"bb....bb.bbbb.b......b",
+"b.bbbb.b.bbb.bbbb.bbbb",
+"b.bbbb.b....bbbbb.bbbb",
+"b.bbbb.b.bbb.bbbb.bbbb",
+"bb....bb.bbbb.bbb.bbbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"b..bbb.bb....bb.bbbb.b",
+"b.b.bb.b.bbbb.b.bbbb.b",
+"b.bb.b.b.bbbb.b.bbbb.b",
+"b.bbb..b.bbbb.bb.bb.bb",
+"b.bbbb.bb....bbbb..bbb",
+"bbbbbbbbbbbbbbbbbbbbbb",
+"b.....bbb.....bb.....b",
+"b.bbbb.b.bbbbbb.bbbbbb",
+"b.bbbb.b.....bb.bbbbbb",
+"b.bbbb.b.bbbbbb.bbbbbb",
+"b.....bbb.....bb.....b"
+};
diff --git a/lang.slovene/weekday.xpm b/lang.slovene/weekday.xpm
new file mode 100644
index 0000000..8aefdbb
--- /dev/null
+++ b/lang.slovene/weekday.xpm
@@ -0,0 +1,51 @@
+/* XPM */
+static char *weekday_xpm[] = {
+/* width height num_colors chars_per_pixel */
+" 20 42 2 1",
+/* colors */
+". c #000000",
+"b c #ffffff",
+/* pixels */
+"bbbbbbbbbbbbbbbbbbbb",
+"bb....bbb...bb.bbb.b",
+"bb.bbb.b.bbb.b..bb.b",
+"bb....bb.bbb.b.b.b.b",
+"bb.bbbbb.bbb.b.bb..b",
+"bb.bbbbbb...bb.bbb.b",
+"bbbbbbbbbbbbbbbbbbbb",
+"bb.....bb...bb....bb",
+"bbbb.bbb.bbb.b.bbb.b",
+"bbbb.bbb.bbb.b....bb",
+"bbbb.bbb.bbb.b.bbb.b",
+"bbbb.bbbb...bb.bbb.b",
+"bbbbbbbbbbbbbbbbbbbb",
+"bbb....b....bbb....b",
+"bb.bbbbb.bbb.b.bbbbb",
+"bbb...bb....bb....bb",
+"bbbbbb.b.bbb.b.bbbbb",
+"bb....bb.bbb.bb....b",
+"bbbbbbbbbbbbbbbbbbbb",
+"bbbb..bbb....b.....b",
+"bbb....b.bbbbbbb.bbb",
+"bb.bbbbb....bbbb.bbb",
+"bb.bbbbb.bbbbbbb.bbb",
+"bbb....bb....bbb.bbb",
+"bbbbbbbbbbbbbbbbbbbb",
+"bb....bbb....b.....b",
+"bb.bbb.b.bbbbbbb.bbb",
+"bb....bb....bbbb.bbb",
+"bb.bbbbb.bbbbbbb.bbb",
+"bb.bbbbbb....bbb.bbb",
+"bbbbbbbbbbbbbbbbbbbb",
+"bbb....bb...bb....bb",
+"bb.bbbbb.bbb.b.bbb.b",
+"bbb...bb.bbb.b....bb",
+"bbbbbb.b.bbb.b.bbb.b",
+"bb....bbb...bb....bb",
+"bbbbbbbbbbbbbbbbbbbb",
+"bb.bbb.bb....b....bb",
+"bb..bb.b.bbbbb.bbb.b",
+"bb.b.b.b....bb.bbb.b",
+"bb.bb..b.bbbbb.bbb.b",
+"bb.bbb.bb....b....bb"
+};
diff --git a/lang.spanish/month.xpm b/lang.spanish/month.xpm
new file mode 100644
index 0000000..6a6741a
--- /dev/null
+++ b/lang.spanish/month.xpm
@@ -0,0 +1,79 @@
+/* XPM */
+static char * month_xpm[] = {
+"22 72 4 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+"X c #AEBAAAAAAEBA",
+"o c #514455555144",
+" ",
+" ..... . . .....",
+" X. X.. X. X. ",
+" ..... .X . .X ..... ",
+" . X. .. . ",
+"o.... . . o.... ",
+" ",
+" o..... ..... ....o",
+" . X. X. .",
+" X..... ..... ..... ",
+" . . . . ",
+". o.... o.... ",
+" ",
+" . . . ....o ",
+" . .. .X X. . ",
+" . . . . . . ...... ",
+" . . . .... . . ",
+". . . .o . ",
+" ",
+" . ....o ....o ",
+" .X X. . X. . ",
+" . . ..... ...... ",
+" .... . . . . ",
+" . . o.... . . ",
+" ",
+" . . . . . ",
+" X. .. . . . ",
+" .X. . . . . X. ",
+" X. . . .... . ",
+" . . . . . ",
+" ",
+" . . X. . . ",
+" X. X. . X.. X. ",
+" .X .X X. . . .X ",
+" . . . .X X. .. ",
+" .. o... . . ",
+" ",
+" . . X. . ",
+" X. X. . X. ",
+" .X .X X. .X ",
+" . . . . . ",
+" .. o.. o.... ",
+" ",
+" . X.... ... ",
+" .X . . . ",
+" . . X. ... . . ",
+" .... .X . . X. ",
+" . . ... .... ",
+" ",
+" X.... ..... o...o ",
+" . X. X. . ",
+" X..X .... ..... ",
+" . . X. ",
+"....X o.... . ",
+" ",
+" ... ... ..... ",
+" . . . X. ",
+" . . . .X ",
+" . X. . X. ",
+" .... .... . ",
+" ",
+" . . X... . . ",
+" X.. X. . . .X .X ",
+" . . .X X. .X X. . ",
+"X. .. . . .. ",
+". . .... . ",
+" ",
+" o... . ... ",
+" X. . .. . ",
+" . . .. . ",
+" . . .. . ",
+" o.... . ..... "};
diff --git a/lang.spanish/weekday.xpm b/lang.spanish/weekday.xpm
new file mode 100644
index 0000000..cfe4057
--- /dev/null
+++ b/lang.spanish/weekday.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static char * weekday_xpm[] = {
+"20 42 2 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+" ",
+" . . . . . ",
+" . . . .. . ",
+" . . . . . . ",
+" . . . . .. ",
+" ..... ... . . ",
+" ",
+" . . .. .... ",
+" .. .. . . . . ",
+" . . . . . .... ",
+" . . ...... . . ",
+" . . . . . . ",
+" ",
+" . . ..... ..... ",
+" .. .. . . ",
+" . . . . .... ",
+" . . . . ",
+" . . ..... ..... ",
+" ",
+" . . . ..... ",
+" . . . . ",
+" . . . .... ",
+" . . . . . ",
+" ... ... ..... ",
+" ",
+" . . ..... ..... ",
+" . . . . ",
+" . . . .... ",
+" .. . . ",
+" .. ..... ..... ",
+" ",
+" .... .. .... ",
+" . . . . . ",
+" ... . . .... ",
+" . ...... . . ",
+" .... . . .... ",
+" ",
+" .... ... . . ",
+" . . . . .. .. ",
+" . . . . . . . ",
+" . . . . . . ",
+" .... ... . . "};
diff --git a/lang.swedish/month.xpm b/lang.swedish/month.xpm
new file mode 100644
index 0000000..606bdf5
--- /dev/null
+++ b/lang.swedish/month.xpm
@@ -0,0 +1,79 @@
+/* XPM */
+static char * month_xpm[] = {
+"22 72 4 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+"X c #AAAAAAAAAAAA",
+"o c #555555555555",
+" ",
+" . . . . ",
+" X. . X.. X. ",
+" .X . . .X . .X ",
+" . . .... X. .. ",
+" .. . . . . ",
+" ",
+" o..... ..... ....o",
+" . X. X. .",
+" X..... ..... ..... ",
+" . . . . ",
+". o.... 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 ",
+" . . . . . ",
+" .. o.. o.... ",
+" ",
+" . . X. X.... ",
+" .X X. . . ",
+" . . .X X. X. ... ",
+" .... . .X .X . ",
+" . . o.. ... ",
+" ",
+" X.... ..... o...o ",
+" . X. X. . ",
+" X..X .... ..... ",
+" . . X. ",
+"....X o.... . ",
+" ",
+" ... . . ..... ",
+" . . . .X X. ",
+" . . .. .X ",
+" . X. .X . X. ",
+" .... .X . . ",
+" ",
+" . . X... . . ",
+" X.. X. . . .X .X ",
+" . . .X X. .X X. . ",
+"X. .. . . .. ",
+". . .... . ",
+" ",
+" o... .... ... ",
+" X. . X. . ",
+" . . .... . ",
+" . . . . ",
+" o.... o.... ..... "};
diff --git a/lang.swedish/weekday.xpm b/lang.swedish/weekday.xpm
new file mode 100644
index 0000000..9563ed2
--- /dev/null
+++ b/lang.swedish/weekday.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static char * weekday_xpm[] = {
+"20 42 2 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+" ",
+" . . .. . . ",
+" .. .. .. .. . ",
+" . . . . . . . . ",
+" . . ...... . .. ",
+" . . . . . . ",
+" ",
+" ..... ..... ..... ",
+" . . . ",
+" . . .... ",
+" . . . ",
+" . ..... ..... ",
+" ",
+" .... . . .... ",
+" . . .. . . ",
+" . . . . . ... ",
+" . . . .. . ",
+" .... . . .... ",
+" ",
+" ..... ... ..... ",
+" . . . . . ",
+" . . . ..... ",
+" . . . . . ",
+" . ... . . ",
+" ",
+" ..... ..... ..... ",
+" . . . . ",
+" .... ..... ... ",
+" . . . . ",
+" . . . ..... ",
+" ",
+" . .. .. ..... ",
+" . .... . . ",
+" . . . ..... ",
+" . . . . . ",
+" .... .... . . ",
+" ",
+" .... .. .. . . ",
+" . .... .. . ",
+" ... . . . . . ",
+" . . . . .. ",
+" .... .... . . "};
diff --git a/lang.ukrainian/month.xpm b/lang.ukrainian/month.xpm
new file mode 100644
index 0000000..3d7a0db
--- /dev/null
+++ b/lang.ukrainian/month.xpm
@@ -0,0 +1,79 @@
+/* XPM */
+static char * month_xpm[] = {
+"22 72 4 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+"X c #AAAAAAAAAAAA",
+"o c #555555555555",
+" ",
+" ... . . . ",
+" X. X. X. X. ",
+" . . .. . ",
+" . . . ",
+" .. o o ",
+" ",
+" . . ..X .... ",
+" X.X X. . . X. ",
+" X. . ... . . ",
+" X. . . . . . ",
+" . . . X.. o ",
+" ",
+" .... .... .....",
+" X. X. X. .",
+" ..... .... .....X",
+" . . . . ",
+" o.... o... . ",
+" ",
+" . .o .... . ",
+" X. . X. . X. ",
+" ... ..... . ",
+" ..o . . . ",
+" o .o o.... o ",
+" ",
+" ..... ..... . ",
+" X. X. . . ",
+" . .....X . . ",
+" . . .... ",
+" o . . . ",
+" ",
+" . . .... ..... ",
+" . X. X. X. . ",
+" ... .... .....X ",
+" . . . ",
+" o o... . ",
+" ",
+" . . . .... ",
+" X.X . .. X. X. ",
+" X. . . X.. . . ",
+" X. . .. . . . ",
+" . . . . o o ",
+" ",
+" o...o ..... ..... ",
+" . X. X. . ",
+" . .... .....X ",
+" . . . ",
+" o...o o.... . ",
+" ",
+" .... ..... ..... ",
+" X. . X. X. . ",
+" ..... .... .....X ",
+" . . . . ",
+"o.... .... . ",
+" ",
+" . . . ... .... ",
+" o.X. . . . X. . ",
+" ....o . . ..... ",
+"o. . . . X. . . ",
+". o o. .... o.... ",
+" ",
+" . . . o...o ",
+" X.X . .. . ",
+" X. . . X.. . ",
+" X. . .. . . ",
+" . . . . o...o ",
+" ",
+" .... ..... . . ",
+" X. X. . . X. ",
+" . .....X o... ",
+" . . . ",
+" o . ...o "};
diff --git a/lang.ukrainian/weekday.xpm b/lang.ukrainian/weekday.xpm
new file mode 100644
index 0000000..d6daf68
--- /dev/null
+++ b/lang.ukrainian/weekday.xpm
@@ -0,0 +1,49 @@
+/* XPM */
+static char * weekday_xpm[] = {
+"20 42 4 1",
+" c #FFFFFFFFFFFF",
+". c #000000000000",
+"X c #00000000FFFF",
+"o c #FFFF00000000",
+" ",
+"..... ... . . ",
+". . . . . . ",
+". . . . ..... ",
+". . . . . . ",
+". . ... . . . ",
+" ",
+".... ... .... ",
+". . . . . ",
+".... . .... ",
+". . . . . ",
+".... ... .... . ",
+" ",
+" ... ..... .... ",
+". . . . . ",
+". .... .... ",
+". . . . ",
+" ... ..... . . ",
+" ",
+". . ..... ..... ",
+". . . . ",
+" .... .... . ",
+" . . . ",
+" . ..... . . ",
+" ",
+"..... . ... ..... ",
+". . . . . . ",
+". . ... . ",
+". . . . . ",
+". . . . . .",
+" ",
+" XXX X X XXXX ",
+"X X X X X ",
+"X XXXX XXXX ",
+"X X X X X ",
+" XXX XXX XXXX X ",
+" ",
+"o o ooooo oo ",
+"o o o o o ",
+"ooooo oooo o o ",
+"o o o ooooo ",
+"o o ooooo o o o "};
diff --git a/month.xpm b/month.xpm
new file mode 120000
index 0000000..9d65086
--- /dev/null
+++ b/month.xpm
@@ -0,0 +1 @@
+./lang.english/month.xpm
\ No newline at end of file
diff --git a/weekday.xpm b/weekday.xpm
new file mode 120000
index 0000000..f7e9add
--- /dev/null
+++ b/weekday.xpm
@@ -0,0 +1 @@
+./lang.english/weekday.xpm
\ No newline at end of file
diff --git a/wmclock.c b/wmclock.c
new file mode 100644
index 0000000..9dfd287
--- /dev/null
+++ b/wmclock.c
@@ -0,0 +1,1093 @@
+/* wmclock.c: a dockable clock applet for Window Maker
+ * created 1999-Apr-09 jmk
+ *
+ * by Jim Knoble <jmknoble at pobox.com>
+ * Copyright (C) 1999 Jim Knoble
+ *
+ * Significant portions of this software are derived from asclock by
+ * Beat Christen <spiff at longstreet.ch>. Such portions are copyright
+ * by Beat Christen and the other authors of asclock.
+ *
+ * Disclaimer:
+ *
+ * The software is provided "as is", without warranty of any kind,
+ * express or implied, including but not limited to the warranties of
+ * merchantability, fitness for a particular purpose and
+ * noninfringement. In no event shall the author(s) be liable for any
+ * claim, damages or other liability, whether in an action of
+ * contract, tort or otherwise, arising from, out of or in connection
+ * with the software or the use or other dealings in the software.
+ */
+
+#include <sys/select.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include <X11/Xatom.h>
+#include <X11/Xlib.h>
+#include <X11/xpm.h>
+#include <X11/extensions/shape.h>
+
+#include "dynlist.h"
+
+/**********************************************************************/
+#define ONLY_SHAPED_WINDOW 1
+
+#define NUM_TIME_POSITIONS 5
+#define NUM_X_POSITIONS 11
+#define NUM_Y_POSITIONS 4
+
+#define DIGIT_1_X_POS 0
+#define DIGIT_2_X_POS 1
+#define DIGIT_3_X_POS 3
+#define DIGIT_4_X_POS 4
+#define DIGIT_Y_POS 0
+#define LED_NUM_Y_OFFSET 0
+#define LED_THIN_1_X_OFFSET 13
+#define LED_NUM_WIDTH 9
+#define LED_NUM_HEIGHT 11
+#define LED_THIN_1_WIDTH 5
+
+#define COLON_X_POS 2
+#define COLON_Y_POS DIGIT_Y_POS
+#define COLON_X_OFFSET 90
+#define COLON_Y_OFFSET 0
+#define BLANK_X_OFFSET 119
+#define BLANK_Y_OFFSET COLON_Y_OFFSET
+#define COLON_WIDTH 3
+#define COLON_HEIGHT 11
+
+#define AMPM_X_POS 5
+#define AM_X_OFFSET 94
+#define AM_Y_OFFSET 5
+#define PM_X_OFFSET 107
+#define PM_Y_OFFSET 5
+#define AM_WIDTH 12
+#define AM_HEIGHT 6
+#define PM_WIDTH 11
+#define PM_HEIGHT 6
+
+#define MONTH_X_POS 10
+#define MONTH_Y_POS 3
+#define MONTH_X_OFFSET 0
+#define MONTH_WIDTH 22
+#define MONTH_HEIGHT 6
+
+#define DATE_LEFT_X_POS 7
+#define DATE_CENTER_X_POS 8
+#define DATE_RIGHT_X_POS 9
+#define DATE_Y_POS 2
+#define DATE_Y_OFFSET 0
+#define DATE_NUM_WIDTH 9
+#define DATE_NUM_HEIGHT 13
+
+#define WEEKDAY_X_POS 6
+#define WEEKDAY_Y_POS 1
+#define WEEKDAY_X_OFFSET 0
+#define WEEKDAY_WIDTH 21
+#define WEEKDAY_HEIGHT 6
+
+#define OUR_WINDOW_EVENTS (ExposureMask | ButtonPressMask | StructureNotifyMask)
+
+#define LED_XPM_BRIGHT_LINE_INDEX 3
+#define LED_XPM_BRIGHT_CHAR '+'
+#define LED_XPM_DIM_LINE_INDEX 4
+#define LED_XPM_DIM_CHAR '@'
+
+#define DEFAULT_XPM_CLOSENESS 40000
+
+#define DIM_NUMERATOR 5
+#define DIM_DENOMINATOR 10
+#define makeDimColor(c) (((c) * DIM_NUMERATOR) / DIM_DENOMINATOR)
+
+/**********************************************************************/
+#ifndef ONLY_SHAPED_WINDOW
+# include "clk.xpm"
+#endif /* !ONLY_SHAPED_WINDOW */
+#include "month.xpm"
+#include "weekday.xpm"
+#include "xpm/date.xpm"
+#include "xpm/led.xpm"
+#include "xpm/mask.xbm"
+#include "xpm/mask.xpm"
+
+typedef struct _XpmIcon {
+ Pixmap pixmap;
+ Pixmap mask;
+ XpmAttributes attributes;
+} XpmIcon;
+
+void showUsage(void);
+void showVersion(void);
+int buildCommand(char *, char **, int *, int *);
+void executeCommand(char *);
+void showError(const char *, const char*);
+void showFatalError(const char *, const char*);
+void GetXpms(void);
+int flushExposeEvents(Window);
+void redrawWindow(XpmIcon *);
+Pixel GetColor(const char *);
+int mytime(void);
+void showYear(void);
+void showTime12(void);
+void showTime24(void);
+void showTime(void);
+char* extractProgName(char *);
+int processArgs(int, char **);
+
+/**********************************************************************/
+int enable12HourClock = 0; /* default value is 24h format */
+int enableShapedWindow = 1; /* default value is noshape */
+int enableBlinking = 1; /* default is blinking */
+int startIconified = 0; /* default is not iconified */
+int enableYearDisplay = 0; /* default is to show time, not year */
+
+int timePos12[NUM_TIME_POSITIONS] = { 5, 14, 24, 28, 37 };
+int timePos24[NUM_TIME_POSITIONS] = { 4, 8, 17, 22, 31 };
+/* with shape */
+int xPosShaped[NUM_X_POSITIONS] = { 0, 0, 0, 0, 0, 40, 17, 17, 22, 27, 15 };
+int yPosShaped[NUM_Y_POSITIONS] = { 3, 21, 30, 45 };
+
+#ifndef ONLY_SHAPED_WINDOW
+/* no shape */
+int xPosUnshaped[NUM_X_POSITIONS] = { 5, 5, 5, 5, 5, 45, 21, 21, 26, 31, 19 };
+int yPosUnshaped[NUM_Y_POSITIONS] = { 7, 25, 34, 49 };
+#endif /* !ONLY_SHAPED_WINDOW */
+
+int xPos[NUM_X_POSITIONS];
+int yPos[NUM_Y_POSITIONS];
+
+Display *dpy;
+Window rootWindow;
+int screen;
+int xFd;
+fd_set xFdSet;
+int displayDepth;
+XSizeHints sizeHints;
+XWMHints wmHints;
+Pixel bgPixel, fgPixel;
+GC normalGC;
+Window iconWin, win;
+
+char *progName;
+char *className = "WMClock";
+char *geometry = "";
+char *ledColor = "LightSeaGreen";
+
+char *commandToExec = NULL;
+char *commandBuf = NULL;
+int commandLength = 0;
+int commandIndex = 0;
+
+char *errColorCells = "not enough free color cells or xpm not found\n";
+
+char *userClockXpm;
+char *userMonthXpm;
+char *userWeekdayXpm;
+int useUserClockXpm = 0;
+int useUserMonthXpm = 0;
+int useUserWeekdayXpm = 0;
+
+XpmIcon clockBg, led, months, dateNums, weekdays;
+XpmIcon visible;
+
+time_t actualTime;
+long actualMinutes;
+
+static struct tm *localTime;
+
+char *usageText[] = {
+"Options:",
+" -12 show 12-hour time (am/pm)",
+" -24 show 24-hour time",
+" -year show year instead of time",
+" -noblink don't blink",
+" -exe <command> start <command> on mouse click",
+" -led <color> use <color> as color of led",
+#ifndef ONLY_SHAPED_WINDOW
+" -clockxpm <filename> get clock background from pixmap in <filename>",
+#endif /* !ONLY_SHAPED_WINDOW */
+" -monthxpm <filename> get month names from pixmap in <filename>",
+" -weekdayxpm <filename> get weekday names from pixmap in <filename>",
+" -version display the version",
+NULL
+};
+
+char *version = VERSION;
+
+/**********************************************************************/
+/* Display usage information */
+void showUsage(void)
+{
+ char **cpp;
+
+ fprintf(stderr, "Usage: %s [option [option ...]]\n\n", progName);
+ for (cpp = usageText; *cpp; cpp++)
+ {
+ fprintf(stderr, "%s\n", *cpp);
+ }
+ fprintf(stderr,"\n");
+ exit(1);
+}
+
+/* Display the program version */
+void showVersion()
+{
+ fprintf(stderr, "%s version %s\n", progName, version);
+ exit(1);
+}
+
+/* Build the shell command to execute */
+int buildCommand(char *command, char **buf, int *buf_len, int *i)
+{
+ int status;
+
+ status = append_string_to_buf(buf, buf_len, i, command);
+ if (APPEND_FAILURE == status)
+ {
+ return (0);
+ }
+ status = append_string_to_buf(buf, buf_len, i, " &");
+ return ((APPEND_FAILURE == status) ? 0 : 1);
+}
+
+/* Execute the given shell command */
+void executeCommand(char *command)
+{
+ int status;
+
+ if (NULL == command)
+ {
+ return;
+ }
+ status = system(command);
+
+ if (-1 == status)
+ {
+ perror("system");
+ }
+}
+
+/* Display an error message */
+void showError(const char *message, const char *data)
+{
+ fprintf(stderr,"%s: can't %s %s\n", progName, message, data);
+}
+
+/* Display an error message and exit */
+void showFatalError(const char *message, const char *data)
+{
+ showError(message, data);
+ exit(1);
+}
+
+/* Konvertiere XPMIcons nach Pixmaps */
+void GetXpms(void)
+{
+ static char **clock_xpm;
+ XColor color;
+ XWindowAttributes attributes;
+ char ledBright[64];
+ char ledDim[64];
+ int status;
+
+#ifdef ONLY_SHAPED_WINDOW
+ clock_xpm = mask_xpm;
+#else /* !ONLY_SHAPED_WINDOW */
+ clock_xpm = enableShapedWindow ? mask_xpm : clk_xpm;
+#endif /* ONLY_SHAPED_WINDOW */
+
+ /* for the colormap */
+ XGetWindowAttributes(dpy, rootWindow, &attributes);
+
+ /* get user-defined color */
+ if (!XParseColor(dpy, attributes.colormap, ledColor, &color))
+ {
+ showError("parse color", ledColor);
+ }
+
+ sprintf(ledBright, "%c c #%04X%04X%04X", LED_XPM_BRIGHT_CHAR,
+ color.red, color.green, color.blue);
+ led_xpm[LED_XPM_BRIGHT_LINE_INDEX] = &ledBright[0];
+
+ color.red = makeDimColor(color.red);
+ color.green = makeDimColor(color.green);
+ color.blue = makeDimColor(color.blue);
+ sprintf(&ledDim[0], "%c c #%04X%04X%04X", LED_XPM_DIM_CHAR,
+ color.red, color.green, color.blue);
+ led_xpm[LED_XPM_DIM_LINE_INDEX] = &ledDim[0];
+
+ clockBg.attributes.closeness = DEFAULT_XPM_CLOSENESS;
+ clockBg.attributes.valuemask |=
+ (XpmReturnPixels | XpmReturnExtensions | XpmCloseness);
+
+ if (useUserClockXpm)
+ {
+ status = XpmReadFileToPixmap(dpy, rootWindow, userClockXpm,
+ &clockBg.pixmap, &clockBg.mask,
+ &clockBg.attributes);
+ }
+ else
+ {
+ status = XpmCreatePixmapFromData(dpy, rootWindow, clock_xpm,
+ &clockBg.pixmap, &clockBg.mask,
+ &clockBg.attributes);
+ }
+ if (XpmSuccess != status)
+ {
+ showFatalError("create clock pixmap:", errColorCells);
+ }
+
+#ifdef ONLY_SHAPED_WINDOW
+ visible.attributes.depth = displayDepth;
+ visible.attributes.width = clockBg.attributes.width;
+ visible.attributes.height = clockBg.attributes.height;
+ visible.pixmap = XCreatePixmap(dpy, rootWindow, visible.attributes.width,
+ visible.attributes.height,
+ visible.attributes.depth);
+#else /* !ONLY_SHAPED_WINDOW */
+ visible.attributes.closeness = DEFAULT_XPM_CLOSENESS;
+ visible.attributes.valuemask |=
+ (XpmReturnPixels | XpmReturnExtensions | XpmCloseness);
+ status = XpmCreatePixmapFromData(dpy, rootWindow, clk_xpm,
+ &visible.pixmap, &visible.mask,
+ &visible.attributes);
+#endif /* ONLY_SHAPED_WINDOW */
+
+ led.attributes.closeness = DEFAULT_XPM_CLOSENESS;
+ led.attributes.valuemask |=
+ (XpmReturnPixels | XpmReturnExtensions | XpmCloseness);
+ status = XpmCreatePixmapFromData(dpy, rootWindow, led_xpm,
+ &led.pixmap, &led.mask,
+ &led.attributes);
+ if (XpmSuccess != status)
+ {
+ showFatalError("create led pixmap:", errColorCells);
+ }
+
+ months.attributes.closeness = DEFAULT_XPM_CLOSENESS;
+ months.attributes.valuemask |=
+ (XpmReturnPixels | XpmReturnExtensions | XpmCloseness);
+ if (useUserMonthXpm)
+ {
+ status = XpmReadFileToPixmap(dpy, rootWindow, userMonthXpm,
+ &months.pixmap, &months.mask,
+ &months.attributes);
+ }
+ else
+ {
+ status = XpmCreatePixmapFromData(dpy, rootWindow, month_xpm,
+ &months.pixmap, &months.mask,
+ &months.attributes);
+ }
+ if (XpmSuccess != status)
+ {
+ showFatalError("create month pixmap:", errColorCells);
+ }
+
+ dateNums.attributes.closeness = DEFAULT_XPM_CLOSENESS;
+ dateNums.attributes.valuemask |=
+ (XpmReturnPixels | XpmReturnExtensions | XpmCloseness);
+ status = XpmCreatePixmapFromData(dpy, rootWindow, date_xpm,
+ &dateNums.pixmap, &dateNums.mask,
+ &dateNums.attributes);
+ if (XpmSuccess != status)
+ {
+ showFatalError("create date pixmap:", errColorCells);
+ }
+
+ weekdays.attributes.closeness = DEFAULT_XPM_CLOSENESS;
+ weekdays.attributes.valuemask |=
+ (XpmReturnPixels | XpmReturnExtensions | XpmCloseness);
+ if (useUserWeekdayXpm)
+ {
+ status = XpmReadFileToPixmap(dpy, rootWindow, userWeekdayXpm,
+ &weekdays.pixmap, &weekdays.mask,
+ &weekdays.attributes);
+ }
+ else
+ {
+ status = XpmCreatePixmapFromData(dpy, rootWindow, weekday_xpm,
+ &weekdays.pixmap, &weekdays.mask,
+ &weekdays.attributes);
+ }
+ if (XpmSuccess != status)
+ {
+ showFatalError("create weekday pixmap:", errColorCells);
+ }
+}
+
+/* Remove expose events for a specific window from the queue */
+int flushExposeEvents(Window w)
+{
+ XEvent dummy;
+ int i = 0;
+
+ while (XCheckTypedWindowEvent(dpy, w, Expose, &dummy))
+ {
+ i++;
+ }
+ return(i);
+}
+
+/* (Re-)Draw the main window and the icon window */
+void redrawWindow(XpmIcon *v)
+{
+ flushExposeEvents(iconWin);
+ XCopyArea(dpy, v->pixmap, iconWin, normalGC,
+ 0, 0, v->attributes.width, v->attributes.height, 0, 0);
+ flushExposeEvents(win);
+ XCopyArea(dpy, v->pixmap, win, normalGC,
+ 0, 0, v->attributes.width, v->attributes.height, 0, 0);
+}
+
+/* Get a Pixel for the given color name */
+Pixel GetColor(const char *colorName)
+{
+ XColor color;
+ XWindowAttributes attributes;
+
+ XGetWindowAttributes(dpy, rootWindow, &attributes);
+ color.pixel = 0;
+ if (!XParseColor(dpy, attributes.colormap, colorName, &color))
+ {
+ showError("parse color", colorName);
+ }
+ else if (!XAllocColor(dpy, attributes.colormap, &color))
+ {
+ showError("allocate color", colorName);
+ }
+ return(color.pixel);
+}
+
+/* Fetch the system time and time zone */
+int mytime(void)
+{
+ struct timeval tv;
+ struct timezone tz;
+
+ gettimeofday(&tv, &tz);
+
+ return(tv.tv_sec);
+}
+
+/* Display the current year in the LED display */
+void showYear(void)
+{
+ int year;
+ int digitXOffset;
+ int digitYOffset;
+
+ year = localTime->tm_year + 1900;
+
+ digitYOffset = LED_NUM_Y_OFFSET;
+ digitXOffset = LED_NUM_WIDTH * (year / 1000);
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ digitXOffset , digitYOffset, LED_NUM_WIDTH, LED_NUM_HEIGHT,
+ xPos[DIGIT_1_X_POS], yPos[DIGIT_Y_POS]);
+ digitXOffset = LED_NUM_WIDTH * ((year % 100) % 10);
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ digitXOffset , digitYOffset, LED_NUM_WIDTH, LED_NUM_HEIGHT,
+ xPos[DIGIT_2_X_POS], yPos[DIGIT_Y_POS]);
+ digitXOffset = LED_NUM_WIDTH * ((year / 10) % 10);
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ digitXOffset , digitYOffset, LED_NUM_WIDTH, LED_NUM_HEIGHT,
+ xPos[DIGIT_3_X_POS], yPos[DIGIT_Y_POS]);
+ digitXOffset = LED_NUM_WIDTH * (year % 10);
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ digitXOffset , digitYOffset, LED_NUM_WIDTH, LED_NUM_HEIGHT,
+ xPos[DIGIT_4_X_POS], yPos[DIGIT_Y_POS]);
+}
+
+/* Display time in twelve-hour mode, with am/pm indicator */
+void showTime12(void)
+{
+ int digitXOffset;
+ int digitYOffset;
+ int localHour = localTime->tm_hour % 12;
+
+ if (0 == localHour)
+ {
+ localHour = 12;
+ }
+ if (localTime->tm_hour < 12)
+ {
+ /* AM */
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ AM_X_OFFSET, AM_Y_OFFSET, AM_WIDTH, AM_HEIGHT,
+ xPos[AMPM_X_POS], yPos[DIGIT_Y_POS] + AM_Y_OFFSET);
+ }
+ else
+ {
+ /* PM */
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ PM_X_OFFSET, PM_Y_OFFSET, PM_WIDTH, PM_HEIGHT,
+ xPos[AMPM_X_POS], yPos[DIGIT_Y_POS] + PM_Y_OFFSET);
+ }
+
+ digitYOffset = LED_NUM_Y_OFFSET;
+ if (localHour > 9)
+ {
+ digitXOffset = LED_THIN_1_X_OFFSET;
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ digitXOffset, digitYOffset, LED_THIN_1_WIDTH, LED_NUM_HEIGHT,
+ xPos[DIGIT_1_X_POS], yPos[DIGIT_Y_POS]);
+ }
+ digitXOffset = LED_NUM_WIDTH * (localHour % 10);
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ digitXOffset, digitYOffset, LED_NUM_WIDTH, LED_NUM_HEIGHT,
+ xPos[DIGIT_2_X_POS], yPos[DIGIT_Y_POS]);
+ digitXOffset = LED_NUM_WIDTH * (localTime->tm_min / 10);
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ digitXOffset, digitYOffset, LED_NUM_WIDTH, LED_NUM_HEIGHT,
+ xPos[DIGIT_3_X_POS], yPos[DIGIT_Y_POS]);
+ digitXOffset = LED_NUM_WIDTH * (localTime->tm_min % 10);
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ digitXOffset, digitYOffset, LED_NUM_WIDTH, LED_NUM_HEIGHT,
+ xPos[DIGIT_4_X_POS], yPos[DIGIT_Y_POS]);
+}
+
+/* Display time in 24-hour mode, without am/pm indicator */
+void showTime24(void)
+{
+ int digitXOffset;
+ int digitYOffset;
+
+ digitYOffset = LED_NUM_Y_OFFSET;
+ digitXOffset = LED_NUM_WIDTH * (localTime->tm_hour / 10);
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ digitXOffset, digitYOffset, LED_NUM_WIDTH, LED_NUM_HEIGHT,
+ xPos[DIGIT_1_X_POS], yPos[DIGIT_Y_POS]);
+ digitXOffset = LED_NUM_WIDTH * (localTime->tm_hour % 10);
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ digitXOffset, digitYOffset, LED_NUM_WIDTH, LED_NUM_HEIGHT,
+ xPos[DIGIT_2_X_POS], yPos[DIGIT_Y_POS]);
+ digitXOffset = LED_NUM_WIDTH * (localTime->tm_min / 10);
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ digitXOffset, digitYOffset, LED_NUM_WIDTH, LED_NUM_HEIGHT,
+ xPos[DIGIT_3_X_POS], yPos[DIGIT_Y_POS]);
+ digitXOffset = LED_NUM_WIDTH * (localTime->tm_min % 10);
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ digitXOffset, digitYOffset, LED_NUM_WIDTH, LED_NUM_HEIGHT,
+ xPos[DIGIT_4_X_POS], yPos[DIGIT_Y_POS]);
+}
+
+void showTime(void)
+{
+ int xOffset;
+ int yOffset;
+
+ /* Zeit auslesen */
+ actualTime = mytime();
+ actualMinutes = actualTime / 60;
+
+ localTime = localtime(&actualTime);
+
+ /* leere clock holen */
+ XCopyArea(dpy, clockBg.pixmap, visible.pixmap, normalGC,
+ 0, 0, sizeHints.width, sizeHints.height, 0, 0);
+
+ if (enableYearDisplay)
+ {
+ showYear();
+ }
+ else if (enable12HourClock)
+ {
+ showTime12();
+ }
+ else
+ {
+ showTime24();
+ }
+
+ /* Monat */
+ xOffset = MONTH_X_OFFSET;
+ yOffset = MONTH_HEIGHT * (localTime->tm_mon);
+ XCopyArea(dpy, months.pixmap, visible.pixmap, normalGC,
+ xOffset, yOffset, MONTH_WIDTH, MONTH_HEIGHT,
+ xPos[MONTH_X_POS], yPos[MONTH_Y_POS]);
+
+ /* Datum */
+ yOffset = DATE_Y_OFFSET;
+ if (localTime->tm_mday > 9)
+ {
+ xOffset = DATE_NUM_WIDTH * (((localTime->tm_mday / 10) + 9) % 10);
+ XCopyArea(dpy, dateNums.pixmap, visible.pixmap, normalGC,
+ xOffset, yOffset, DATE_NUM_WIDTH, DATE_NUM_HEIGHT,
+ xPos[DATE_LEFT_X_POS], yPos[DATE_Y_POS]);
+ xOffset = DATE_NUM_WIDTH * (((localTime->tm_mday % 10) + 9) % 10);
+ XCopyArea(dpy, dateNums.pixmap, visible.pixmap, normalGC,
+ xOffset, yOffset, DATE_NUM_WIDTH, DATE_NUM_HEIGHT,
+ xPos[DATE_RIGHT_X_POS], yPos[DATE_Y_POS]);
+ }
+ else
+ {
+ xOffset = DATE_NUM_WIDTH * (localTime->tm_mday - 1);
+ XCopyArea(dpy, dateNums.pixmap, visible.pixmap, normalGC,
+ xOffset, yOffset, DATE_NUM_WIDTH, DATE_NUM_HEIGHT,
+ xPos[DATE_CENTER_X_POS], yPos[DATE_Y_POS]);
+ }
+
+ /* Wochentag */
+ xOffset = WEEKDAY_X_OFFSET;
+ yOffset = WEEKDAY_HEIGHT * ((localTime->tm_wday + 6) % 7);
+ XCopyArea(dpy, weekdays.pixmap, visible.pixmap, normalGC,
+ xOffset, yOffset, WEEKDAY_WIDTH, WEEKDAY_HEIGHT,
+ xPos[WEEKDAY_X_POS], yPos[WEEKDAY_Y_POS]);
+
+ if ((!enableBlinking) && (!enableYearDisplay))
+ {
+ /* Sekunden Doppelpunkt ein */
+ xOffset = COLON_X_OFFSET;
+ yOffset = COLON_Y_OFFSET;
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ xOffset, yOffset, COLON_WIDTH, COLON_HEIGHT,
+ xPos[COLON_X_POS], yPos[COLON_Y_POS]);
+ }
+}
+
+/* Extract program name from the zeroth program argument */
+char *extractProgName(char *argv0)
+{
+ char *prog_name = NULL;
+
+ if (NULL != argv0)
+ {
+ prog_name = strrchr(argv0, '/');
+ if (NULL == prog_name)
+ {
+ prog_name = argv0;
+ }
+ else
+ {
+ prog_name++;
+ }
+ }
+ return (prog_name);
+}
+
+/* Process program arguments and set corresponding options */
+int processArgs(int argc, char **argv)
+{
+ int i;
+
+ for (i = 1; i < argc; i++)
+ {
+ if (0 == strcmp(argv[i], "--"))
+ {
+ break;
+ }
+ else if ((0 == strcmp(argv[i], "-12")) ||
+ (0 == strcmp(argv[i], "-1")) ||
+ (0 == strcmp(argv[i], "--12")))
+ {
+ enable12HourClock = 1;
+ }
+ else if ((0 == strcmp(argv[i], "-24")) ||
+ (0 == strcmp(argv[i], "-2")) ||
+ (0 == strcmp(argv[i], "--24")))
+ {
+ enable12HourClock = 0;
+ }
+ else if ((0 == strcmp(argv[i], "-exe")) ||
+ (0 == strcmp(argv[i], "-e")) ||
+ (0 == strcmp(argv[i], "--exe")))
+ {
+ if (++i >= argc)
+ {
+ showUsage();
+ }
+ commandToExec = argv[i];
+ }
+ else if ((0 == strcmp(argv[i], "-led")) ||
+ (0 == strcmp(argv[i], "-l")) ||
+ (0 == strcmp(argv[i], "--led")))
+ {
+ if (++i >= argc)
+ {
+ showUsage();
+ }
+ ledColor = argv[i];
+ }
+ else if ((0 == strcmp(argv[i], "-clockxpm")) ||
+ (0 == strcmp(argv[i], "-c")) ||
+ (0 == strcmp(argv[i], "--clockxpm")))
+ {
+#ifndef ONLY_SHAPED_WINDOW
+ if (++i >= argc)
+ {
+ showUsage();
+ }
+ userClockXpm = argv[i];
+ useUserClockXpm = 1;
+#endif /* !ONLY_SHAPED_WINDOW */
+ }
+ else if ((0 == strcmp(argv[i], "-monthxpm")) ||
+ (0 == strcmp(argv[i], "-m")) ||
+ (0 == strcmp(argv[i], "--monthxpm")))
+ {
+ if (++i >= argc)
+ {
+ showUsage();
+ }
+ userMonthXpm = argv[i];
+ useUserMonthXpm = 1;
+ }
+ else if ((0 == strcmp(argv[i], "-weekdayxpm")) ||
+ (0 == strcmp(argv[i], "-w")) ||
+ (0 == strcmp(argv[i], "--weekdayxpm")))
+ {
+ if (++i >= argc)
+ {
+ showUsage();
+ }
+ userWeekdayXpm = argv[i];
+ useUserWeekdayXpm = 1;
+ }
+ else if ((0 == strcmp(argv[i], "-noblink")) ||
+ (0 == strcmp(argv[i], "-n")) ||
+ (0 == strcmp(argv[i], "--noblink")))
+ {
+ enableBlinking = 0;
+ }
+ else if ((0 == strcmp(argv[i], "-year")) ||
+ (0 == strcmp(argv[i], "-y")) ||
+ (0 == strcmp(argv[i], "--year")))
+ {
+ enableYearDisplay = 1;
+ }
+ else if ((0 == strcmp(argv[i], "-position")) ||
+ (0 == strcmp(argv[i], "-p")) ||
+ (0 == strcmp(argv[i], "--position")))
+ {
+#ifndef ONLY_SHAPED_WINDOW
+ if (++i >= argc)
+ {
+ showUsage();
+ }
+ geometry = argv[i];
+#endif /* !ONLY_SHAPED_WINDOW */
+ }
+ else if ((0 == strcmp(argv[i], "-shape")) ||
+ (0 == strcmp(argv[i], "-s")) ||
+ (0 == strcmp(argv[i], "--shape")))
+ {
+ enableShapedWindow = 1;
+ }
+ else if ((0 == strcmp(argv[i], "-iconic")) ||
+ (0 == strcmp(argv[i], "-i")) ||
+ (0 == strcmp(argv[i], "--iconic")))
+ {
+#ifndef ONLY_SHAPED_WINDOW
+ startIconified = 1;
+#endif /* !ONLY_SHAPED_WINDOW */
+ }
+ else if ((0 == strcmp(argv[i], "-version")) ||
+ (0 == strcmp(argv[i], "-V")) ||
+ (0 == strcmp(argv[i], "--version")))
+ {
+ showVersion();
+ }
+ else if ((0 == strcmp(argv[i], "-help")) ||
+ (0 == strcmp(argv[i], "-h")) ||
+ (0 == strcmp(argv[i], "--help")))
+ {
+ showUsage();
+ }
+ else
+ {
+ fprintf(stderr, "%s: unrecognized option `%s'\n",
+ progName, argv[i]);
+ showUsage();
+ }
+ }
+ return (i);
+}
+
+/**********************************************************************/
+int main(int argc, char **argv)
+{
+ int i;
+ unsigned int borderWidth = 0;
+ char *displayName = NULL;
+ XGCValues gcValues;
+ unsigned long gcMask;
+ XEvent event;
+ XTextProperty wmName;
+ XClassHint classHint;
+ Pixmap shapeMask;
+ struct timeval nextEvent;
+
+ /* Parse command line options */
+ progName = extractProgName(argv[0]);
+ processArgs(argc, argv);
+
+ /* init led position */
+#ifndef ONLY_SHAPED_WINDOW
+ for (i = 0; i < NUM_Y_POSITIONS; i++)
+ {
+ yPos[i] = enableShapedWindow ? yPosShaped[i] : yPosUnshaped[i];
+ }
+ for (i = 0; i < NUM_X_POSITIONS; i++)
+ {
+ xPos[i] = enableShapedWindow ? xPosShaped[i] : xPosUnshaped[i];
+ }
+#else /* ONLY_SHAPED_WINDOW */
+ for (i = 0; i < NUM_Y_POSITIONS; i++)
+ {
+ yPos[i] = yPosShaped[i];
+ }
+ for (i = 0; i < NUM_X_POSITIONS; i++)
+ {
+ xPos[i] = xPosShaped[i];
+ }
+#endif /* !ONLY_SHAPED_WINDOW */
+ for (i = 0; i < NUM_TIME_POSITIONS; i++)
+ {
+ xPos[i] += enable12HourClock ? timePos24[i] : timePos12[i];
+ }
+
+ /* Open the display */
+ dpy = XOpenDisplay(displayName);
+ if (NULL == dpy)
+ {
+ fprintf(stderr, "%s: can't open display %s\n", progName,
+ XDisplayName(displayName));
+ exit(1);
+ }
+ screen = DefaultScreen(dpy);
+ rootWindow = RootWindow(dpy, screen);
+ displayDepth = DefaultDepth(dpy, screen);
+ xFd = XConnectionNumber(dpy);
+
+ /* Icon Daten nach XImage konvertieren */
+ GetXpms();
+
+ /* Create a window to hold the banner */
+ sizeHints.x = 0;
+ sizeHints.y = 0;
+ sizeHints.min_width = clockBg.attributes.width;
+ sizeHints.min_height = clockBg.attributes.height;
+ sizeHints.max_width = clockBg.attributes.width;
+ sizeHints.max_height = clockBg.attributes.height;
+ sizeHints.base_width = clockBg.attributes.width;
+ sizeHints.base_height = clockBg.attributes.height;
+ sizeHints.flags = USSize | USPosition | PMinSize | PMaxSize | PBaseSize;
+
+ bgPixel = GetColor("white");
+ fgPixel = GetColor("black");
+
+ XWMGeometry(dpy, screen, geometry, NULL, borderWidth, &sizeHints,
+ &sizeHints.x, &sizeHints.y, &sizeHints.width, &sizeHints.height,
+ &sizeHints.win_gravity);
+ sizeHints.width = clockBg.attributes.width;
+ sizeHints.height = clockBg.attributes.height;
+
+ win = XCreateSimpleWindow(dpy, rootWindow, sizeHints.x, sizeHints.y,
+ sizeHints.width, sizeHints.height,
+ borderWidth, fgPixel, bgPixel);
+ iconWin = XCreateSimpleWindow(dpy, win, sizeHints.x, sizeHints.y,
+ sizeHints.width, sizeHints.height,
+ borderWidth, fgPixel, bgPixel);
+
+ /* Hints aktivieren */
+ XSetWMNormalHints(dpy, win, &sizeHints);
+ classHint.res_name = progName;
+ classHint.res_class = className;
+ XSetClassHint(dpy, win, &classHint);
+
+ XSelectInput(dpy, win, OUR_WINDOW_EVENTS);
+ XSelectInput(dpy, iconWin, OUR_WINDOW_EVENTS);
+
+ if (0 == XStringListToTextProperty(&progName, 1, &wmName))
+ {
+ fprintf(stderr, "%s: can't allocate window name text property\n",
+ progName);
+ exit(-1);
+ }
+ XSetWMName(dpy, win, &wmName);
+
+ /* Create a GC for drawing */
+ gcMask = GCForeground | GCBackground | GCGraphicsExposures;
+ gcValues.foreground = fgPixel;
+ gcValues.background = bgPixel;
+ gcValues.graphics_exposures = False;
+ normalGC = XCreateGC(dpy, rootWindow, gcMask, &gcValues);
+
+ if (enableShapedWindow)
+ {
+ shapeMask = XCreateBitmapFromData(dpy, win, (char *)mask_bits,
+ mask_width, mask_height);
+ XShapeCombineMask(dpy, win, ShapeBounding, 0, 0, shapeMask, ShapeSet);
+ XShapeCombineMask(dpy, iconWin, ShapeBounding, 0, 0, shapeMask,
+ ShapeSet);
+ }
+
+ wmHints.initial_state = WithdrawnState;
+ wmHints.icon_window = iconWin;
+ wmHints.icon_x = sizeHints.x;
+ wmHints.icon_y = sizeHints.y;
+ wmHints.window_group = win;
+ wmHints.flags = StateHint | IconWindowHint | IconPositionHint |
+ WindowGroupHint;
+ XSetWMHints(dpy, win, &wmHints);
+
+ XSetCommand(dpy, win, argv, argc);
+ XMapWindow(dpy,win);
+
+ showTime();
+ redrawWindow(&visible);
+ while (1)
+ {
+ if (actualTime != mytime())
+ {
+ actualTime = mytime();
+ if (actualMinutes != (actualTime / 60))
+ {
+ showTime();
+ if (!enableBlinking)
+ {
+ redrawWindow(&visible);
+ }
+ }
+ if (enableBlinking && (!enableYearDisplay))
+ {
+ if (actualTime % 2)
+ {
+ /* Sekunden Doppelpunkt ein */
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ COLON_X_OFFSET, COLON_Y_OFFSET,
+ COLON_WIDTH, COLON_HEIGHT,
+ xPos[COLON_X_POS], yPos[COLON_Y_POS]);
+ }
+ else
+ {
+ /* Sekunden Doppelpunkt aus */
+ XCopyArea(dpy, led.pixmap, visible.pixmap, normalGC,
+ BLANK_X_OFFSET, BLANK_Y_OFFSET,
+ COLON_WIDTH, COLON_HEIGHT,
+ xPos[COLON_X_POS], yPos[COLON_Y_POS]);
+ }
+ redrawWindow(&visible);
+ }
+ if (0 == (actualTime % 2))
+ {
+ /* Clean up zombie processes */
+#ifdef DEBUG
+ fprintf(stderr, "%s: cleaning up zombies (time %ld)\n",
+ progName, actualTime);
+#endif /* DEBUG */
+ if (NULL != commandToExec)
+ {
+ waitpid(0, NULL, WNOHANG);
+ }
+ }
+ }
+
+ /* read a packet */
+ while (XPending(dpy))
+ {
+ XNextEvent(dpy, &event);
+ switch(event.type)
+ {
+ case Expose:
+ if (0 == event.xexpose.count)
+ {
+ redrawWindow(&visible);
+ }
+ break;
+ case ButtonPress:
+ if (NULL != commandToExec)
+ {
+ pid_t fork_pid;
+
+ if ((NULL == commandBuf) &&
+ (!buildCommand(commandToExec, &commandBuf,
+ &commandLength, &commandIndex)))
+ {
+ break;
+ }
+ fork_pid = fork();
+ switch (fork_pid)
+ {
+ case 0:
+ /* We're the child process;
+ * run the command and exit.
+ */
+ executeCommand(commandBuf);
+ /* When the system() call finishes, we're done. */
+ exit(0);
+ break;
+ case -1:
+ /* We're the parent process, but
+ * fork() gave an error.
+ */
+ perror("fork");
+ break;
+ default:
+ /* We're the parent process;
+ * keep on doing what we normally do.
+ */
+ break;
+ }
+ }
+ break;
+ case DestroyNotify:
+#if 0
+ XFreeGC(dpy, normalGC);
+ XDestroyWindow(dpy, win);
+ XDestroyWindow(dpy, iconWin);
+#endif /* 0 */
+#ifdef ONLY_SHAPED_WINDOW
+ XFreePixmap(dpy, visible.pixmap);
+#endif /* ONLY_SHAPED_WINDOW */
+ XCloseDisplay(dpy);
+ exit(0);
+ default:
+ break;
+ }
+ }
+ XFlush(dpy);
+#ifdef SYSV
+ if (enableYearDisplay)
+ {
+ poll((struct poll *) 0, (size_t) 0, 200); /* 1/5 sec */
+ }
+ else
+ {
+ poll((struct poll *) 0, (size_t) 0, 50); /* 5/100 sec */
+ }
+#else
+ /* We compute the date of next event, in order to avoid polling */
+ if (enableBlinking)
+ {
+ gettimeofday(&nextEvent,NULL);
+ nextEvent.tv_sec = 0;
+ nextEvent.tv_usec = 1000000-nextEvent.tv_usec;
+ }
+ else
+ {
+ if (enableYearDisplay)
+ {
+ nextEvent.tv_sec = 86400-actualTime%86400;
+ nextEvent.tv_usec = 0;
+ }
+ else
+ {
+ nextEvent.tv_sec = 60-actualTime%60;
+ nextEvent.tv_usec = 0;
+ }
+ }
+ FD_ZERO(&xFdSet);
+ FD_SET(xFd,&xFdSet);
+ select(FD_SETSIZE,&xFdSet,NULL,NULL,&nextEvent);
+#endif
+ }
+ return (0);
+}
+
diff --git a/wmclock.man b/wmclock.man
new file mode 100644
index 0000000..899584e
--- /dev/null
+++ b/wmclock.man
@@ -0,0 +1,232 @@
+.\" wmclock.man: manual page for wmclock -*- nroff -*-
+.\" created 1999-Apr-09 jmk
+.\"
+.\" by Jim Knoble <jmknoble at pobox.com>
+.\" Copyright (C) 1999 Jim Knoble
+.\" Based on asclock.man by Dan Weeks.
+.\"
+.\" Disclaimer:
+.\"
+.\" The software is provided "as is", without warranty of any kind,
+.\" express or implied, including but not limited to the warranties of
+.\" merchantability, fitness for a particular purpose and
+.\" noninfringement. In no event shall the author(s) be liable for any
+.\" claim, damages or other liability, whether in an action of
+.\" contract, tort or otherwise, arising from, out of or in connection
+.\" with the software or the use or other dealings in the software.
+.\"
+.de TQ
+.br
+.ns
+.TP \\$1
+..
+.\" ----------------------------------------------------------------
+.TH wmclock 1x "2010-Dec-22" "Version 1.0.14"
+.\" ----------------------------------------------------------------
+.SH NAME
+.PP
+.BR wmclock :
+a dockable clock for the Window Maker window manager
+.\" ----------------------------------------------------------------
+.SH SYNOPSIS
+.HP
+\fBwmclock\fP [{\-12|\-24|\-year}] [\-noblink] [\-version] [\-exe \fIprogram\fP]
+[\-led \fIcolor\fP] [\-monthxpm \fIfilename\fP] [\-weekdayxpm
+\fIfilename\fP]
+.\" ----------------------------------------------------------------
+.SH DESCRIPTION
+.PP
+.B Wmclock
+is an applet which displays the date and time in a dockable tile in the
+same style as the clock from the NEXTSTEP(tm) operating system.
+.B Wmclock
+is specially designed for the Window Maker window manager, by Alfredo
+Kojima, and features multiple language support, twenty-four-hour and
+twelve-hour (am/pm) time display, and, optionally, can run a
+user-specified program on a mouse click.
+.B Wmclock
+is derived from
+.BR asclock ,
+a similar clock for the AfterStep window manager.
+.\" ----------------------------------------------------------------
+.SH OPTIONS
+.TP
+\fB\-12\fR or \fB\-24\fR
+Display the time in either twelve-hour format (with am/pm) or
+twenty-four-hour format. Defaults to twenty-four-hour display.
+.TP
+\fB\-year\fR
+Display the current year in the LED display instead of the time.
+.TP
+\fB\-noblink\fR
+The separator between the hours and minutes in the time display blinks
+by default. This option turns off the blinking and displays a steadily
+lit separator instead.
+.TP
+\fB\-version\fB
+Displays the version of Wmclock.
+.TP
+\fB\-exe\fR \fIcommand\fR
+Run
+.I command
+in the background when a mouse button is pressed over
+.BR wmclock .
+See below for details.
+.TP
+\fB\-led\fR \fIcolor\fR
+Use
+.I color
+as the foreground color of the LED display.
+.I Color
+may be either a named color from the rgb.txt database (for example,
+`red' or `chartreuse') or a numeric color specification in any of the usual
+X11 formats (for example, `#ff0000' or `rgb:7f/ff/00'). See the
+.BR X (1)
+man page for more information.
+.TP
+\fB\-monthxpm\fR \fIfilename\fR
+Get month abbreviations from
+.IR filename ,
+which is expected to be in the XPM format. See below for details.
+.TP
+\fB\-weekdayxpm\fR \fIfilename\fR
+Get weekday abbreviations from
+.IR filename ,
+which is expected to be in the XPM format. See below for details.
+.\" ----------------------------------------------------------------
+.SH INVOCATION AND EXAMPLES
+.PP
+The simplest way to start
+.B wmclock
+is:
+.PP
+.RS
+.TQ
+wmclock
+.RE
+.PP
+.B Wmclock
+displays in its own appicon, which you can place in Window Maker's dock
+by holding down the [Alt] or [Meta] key and dragging
+.B wmclock
+to the dock with the primary mouse button (usually the left one).
+.PP
+For a more complicated example:
+.PP
+.RS
+.TQ
+wmclock \-12 \-led gold \-exe /usr/GNUstep/Apps/WPrefs.app/WPrefs
+.RE
+.PP
+This displays 12-hour time in an amber-colored LED display, and starts
+Window Maker's preferences utility when you click on
+.BR wmclock .
+.\" ----------------------------------------------------------------
+.SH DETAILS
+.SS Running Commands
+.PP
+When you use
+.B wmclock
+with the
+.B \-exe
+option,
+.B wmclock
+will run the command you specify whenever you press a mouse button
+while the mouse cursor is over
+.BR wmclock .
+.B Wmclock
+uses the
+.BR system (3)
+function from the C library (and ultimately
+.BR /bin/sh )
+to run the command; hence, the command must be in Bourne-shell syntax.
+.SS Using Alternate Month and Weekday Abbreviations
+.PP
+You can use the
+.B \-monthxpm
+and
+.B \-weekdayxpm
+options to convince
+.B wmclock
+to display month and day-of-week abbreviations in a language besides
+the one it was compiled with, or to display them in a language that
+.B wmclock
+does not yet support. The files you specify must be in the XPM format,
+and they must follow the same strict size and placement as the month
+and weekday XPMs that come in the
+.B wmclock
+source package. Each weekday abbreviation must be 21 pixels wide and 6
+pixels high; each month abbreviation must be 22 pixels wide and 6
+pixels high. The month abbreviations must be arranged vertically,
+beginning with January at the top and continuing down to December at
+the bottom. The weekday abbreviations must also be arranged
+vertically, beginning with Monday at the top and continuing to Sunday
+at the bottom.
+.SS Obsolete Options
+.PP
+In order to maintain command-line compatibility (mostly) with
+.BR asclock ,
+.B wmclock
+accepts a few options on the command line without complaining, even
+though they don't have any effect. The options which
+.B wmclock
+accepts in this manner are
+.B \-shape
+and
+.BR \-iconic .
+Some dockable versions of
+.B asclock
+required one or both of these options to become properly dockable.
+However, Since
+.B wmclock
+is designed for Window Maker's dock, it already displays in a shaped
+window in its own dockable appicon.
+.\" ----------------------------------------------------------------
+.SH BUGS
+.PP
+.B Wmclock
+shouldn't run a command on a single click; should use a double click
+instead.
+.PP
+.B Wmclock
+should use Alfredo Kojima's libdockapp library instead of inventing its
+own wheel.
+.\" ----------------------------------------------------------------
+.SH SEE ALSO
+.PP
+X(1), asclock(1x), wmaker(1x), system(3)
+.\" ----------------------------------------------------------------
+.SH COPYRIGHT AND LICENSE
+.PP
+Copyright (C) 1999 by Jim Knoble <jmknoble at pobox.com>. Significant
+portions of
+.B wmclock
+are directly derived from
+.B asclock
+by Beat Christen, who, along with
+.BR asclock 's
+other authors, owns the copyright to those portions of
+.BR wmclock .
+.PP
+.B Wmclock
+is licensed under the GNU General Public License, version 2, or (at
+your option) any later version. See <http://www.gnu.org/> for more
+information.
+.SH AUTHORS
+.TQ
+Jim Knoble <jmknoble at pobox.com>
+.TQ
+Beat Christen <spiff at longstreet.ch>, author of \fBasclock\fI
+.\" ----------------------------------------------------------------
+.SH DISCLAIMER
+.PP
+The software is provided ``as is'', without warranty of any kind,
+express or implied, including but not limited to the warranties of
+merchantability, fitness for a particular purpose and noninfringement.
+In no event shall the author(s) be liable for any claim, damages or
+other liability, whether in an action of contract, tort or otherwise,
+arising from, out of or in connection with the software or the use or
+other dealings in the software.
+.PP
+Your mileage may vary. Eat your vegetables.
+
diff --git a/wmclock.man.in b/wmclock.man.in
new file mode 100644
index 0000000..0cda9c3
--- /dev/null
+++ b/wmclock.man.in
@@ -0,0 +1,232 @@
+.\" wmclock.man: manual page for wmclock -*- nroff -*-
+.\" created 1999-Apr-09 jmk
+.\"
+.\" by Jim Knoble <jmknoble at pobox.com>
+.\" Copyright (C) 1999 Jim Knoble
+.\" Based on asclock.man by Dan Weeks.
+.\"
+.\" Disclaimer:
+.\"
+.\" The software is provided "as is", without warranty of any kind,
+.\" express or implied, including but not limited to the warranties of
+.\" merchantability, fitness for a particular purpose and
+.\" noninfringement. In no event shall the author(s) be liable for any
+.\" claim, damages or other liability, whether in an action of
+.\" contract, tort or otherwise, arising from, out of or in connection
+.\" with the software or the use or other dealings in the software.
+.\"
+.de TQ
+.br
+.ns
+.TP \\$1
+..
+.\" ----------------------------------------------------------------
+.TH wmclock 1x "@DATE@" "Version @VERSION@"
+.\" ----------------------------------------------------------------
+.SH NAME
+.PP
+.BR wmclock :
+a dockable clock for the Window Maker window manager
+.\" ----------------------------------------------------------------
+.SH SYNOPSIS
+.HP
+\fBwmclock\fP [{\-12|\-24|\-year}] [\-noblink] [\-version] [\-exe \fIprogram\fP]
+[\-led \fIcolor\fP] [\-monthxpm \fIfilename\fP] [\-weekdayxpm
+\fIfilename\fP]
+.\" ----------------------------------------------------------------
+.SH DESCRIPTION
+.PP
+.B Wmclock
+is an applet which displays the date and time in a dockable tile in the
+same style as the clock from the NEXTSTEP(tm) operating system.
+.B Wmclock
+is specially designed for the Window Maker window manager, by Alfredo
+Kojima, and features multiple language support, twenty-four-hour and
+twelve-hour (am/pm) time display, and, optionally, can run a
+user-specified program on a mouse click.
+.B Wmclock
+is derived from
+.BR asclock ,
+a similar clock for the AfterStep window manager.
+.\" ----------------------------------------------------------------
+.SH OPTIONS
+.TP
+\fB\-12\fR or \fB\-24\fR
+Display the time in either twelve-hour format (with am/pm) or
+twenty-four-hour format. Defaults to twenty-four-hour display.
+.TP
+\fB\-year\fR
+Display the current year in the LED display instead of the time.
+.TP
+\fB\-noblink\fR
+The separator between the hours and minutes in the time display blinks
+by default. This option turns off the blinking and displays a steadily
+lit separator instead.
+.TP
+\fB\-version\fB
+Displays the version of Wmclock.
+.TP
+\fB\-exe\fR \fIcommand\fR
+Run
+.I command
+in the background when a mouse button is pressed over
+.BR wmclock .
+See below for details.
+.TP
+\fB\-led\fR \fIcolor\fR
+Use
+.I color
+as the foreground color of the LED display.
+.I Color
+may be either a named color from the rgb.txt database (for example,
+`red' or `chartreuse') or a numeric color specification in any of the usual
+X11 formats (for example, `#ff0000' or `rgb:7f/ff/00'). See the
+.BR X (1)
+man page for more information.
+.TP
+\fB\-monthxpm\fR \fIfilename\fR
+Get month abbreviations from
+.IR filename ,
+which is expected to be in the XPM format. See below for details.
+.TP
+\fB\-weekdayxpm\fR \fIfilename\fR
+Get weekday abbreviations from
+.IR filename ,
+which is expected to be in the XPM format. See below for details.
+.\" ----------------------------------------------------------------
+.SH INVOCATION AND EXAMPLES
+.PP
+The simplest way to start
+.B wmclock
+is:
+.PP
+.RS
+.TQ
+wmclock
+.RE
+.PP
+.B Wmclock
+displays in its own appicon, which you can place in Window Maker's dock
+by holding down the [Alt] or [Meta] key and dragging
+.B wmclock
+to the dock with the primary mouse button (usually the left one).
+.PP
+For a more complicated example:
+.PP
+.RS
+.TQ
+wmclock \-12 \-led gold \-exe /usr/GNUstep/Apps/WPrefs.app/WPrefs
+.RE
+.PP
+This displays 12-hour time in an amber-colored LED display, and starts
+Window Maker's preferences utility when you click on
+.BR wmclock .
+.\" ----------------------------------------------------------------
+.SH DETAILS
+.SS Running Commands
+.PP
+When you use
+.B wmclock
+with the
+.B \-exe
+option,
+.B wmclock
+will run the command you specify whenever you press a mouse button
+while the mouse cursor is over
+.BR wmclock .
+.B Wmclock
+uses the
+.BR system (3)
+function from the C library (and ultimately
+.BR /bin/sh )
+to run the command; hence, the command must be in Bourne-shell syntax.
+.SS Using Alternate Month and Weekday Abbreviations
+.PP
+You can use the
+.B \-monthxpm
+and
+.B \-weekdayxpm
+options to convince
+.B wmclock
+to display month and day-of-week abbreviations in a language besides
+the one it was compiled with, or to display them in a language that
+.B wmclock
+does not yet support. The files you specify must be in the XPM format,
+and they must follow the same strict size and placement as the month
+and weekday XPMs that come in the
+.B wmclock
+source package. Each weekday abbreviation must be 21 pixels wide and 6
+pixels high; each month abbreviation must be 22 pixels wide and 6
+pixels high. The month abbreviations must be arranged vertically,
+beginning with January at the top and continuing down to December at
+the bottom. The weekday abbreviations must also be arranged
+vertically, beginning with Monday at the top and continuing to Sunday
+at the bottom.
+.SS Obsolete Options
+.PP
+In order to maintain command-line compatibility (mostly) with
+.BR asclock ,
+.B wmclock
+accepts a few options on the command line without complaining, even
+though they don't have any effect. The options which
+.B wmclock
+accepts in this manner are
+.B \-shape
+and
+.BR \-iconic .
+Some dockable versions of
+.B asclock
+required one or both of these options to become properly dockable.
+However, Since
+.B wmclock
+is designed for Window Maker's dock, it already displays in a shaped
+window in its own dockable appicon.
+.\" ----------------------------------------------------------------
+.SH BUGS
+.PP
+.B Wmclock
+shouldn't run a command on a single click; should use a double click
+instead.
+.PP
+.B Wmclock
+should use Alfredo Kojima's libdockapp library instead of inventing its
+own wheel.
+.\" ----------------------------------------------------------------
+.SH SEE ALSO
+.PP
+X(1), asclock(1x), wmaker(1x), system(3)
+.\" ----------------------------------------------------------------
+.SH COPYRIGHT AND LICENSE
+.PP
+Copyright (C) 1999 by Jim Knoble <jmknoble at pobox.com>. Significant
+portions of
+.B wmclock
+are directly derived from
+.B asclock
+by Beat Christen, who, along with
+.BR asclock 's
+other authors, owns the copyright to those portions of
+.BR wmclock .
+.PP
+.B Wmclock
+is licensed under the GNU General Public License, version 2, or (at
+your option) any later version. See <http://www.gnu.org/> for more
+information.
+.SH AUTHORS
+.TQ
+Jim Knoble <jmknoble at pobox.com>
+.TQ
+Beat Christen <spiff at longstreet.ch>, author of \fBasclock\fI
+.\" ----------------------------------------------------------------
+.SH DISCLAIMER
+.PP
+The software is provided ``as is'', without warranty of any kind,
+express or implied, including but not limited to the warranties of
+merchantability, fitness for a particular purpose and noninfringement.
+In no event shall the author(s) be liable for any claim, damages or
+other liability, whether in an action of contract, tort or otherwise,
+arising from, out of or in connection with the software or the use or
+other dealings in the software.
+.PP
+Your mileage may vary. Eat your vegetables.
+
diff --git a/wmclock.spec.in b/wmclock.spec.in
new file mode 100644
index 0000000..b8c90a0
--- /dev/null
+++ b/wmclock.spec.in
@@ -0,0 +1,128 @@
+# User-Defined Macros:
+# %%define <name> <expansion>
+%define Name wmclock
+%define Version @VERSION@
+%define Release 1
+%define Prefix /usr/local
+%define ExecPrefix /usr/local
+Summary: dockable clock applet for Window Maker
+Name: %{Name}
+Version: %{Version}
+Release: %{Release}
+#Epoch:
+Copyright: GPL
+Group: User Interface/X
+URL: http://www.bluestop.org/wmclock/
+Source0: http://www.bluestop.org/wmclock/%{Name}-%{Version}.tar.gz
+#Patch0:
+#Prefix: %{Prefix}
+BuildRoot: /tmp/%{Name}-%{Version}-%{Release}-root
+#Provides:
+#Requires:
+#Obsoletes:
+
+%description
+Wmclock is an applet which displays the date and time in a dockable
+tile in the same style as the clock from the NEXTSTEP(tm) operating
+system. Wmclock is specially designed for the Window Maker window
+manager, by Alfredo Kojima, and features multiple language support,
+twenty-four-hour and twelve-hour (am/pm) time display, and, optionally,
+can run a user-specified program on a mouse click. Wmclock is derived
+from asclock, a similar clock for the AfterStep window manager.
+
+%prep
+%setup
+#%patch0 -b .orig
+
+#function Replace() {
+# local fil="$1"
+# local sep="$2"
+# local old="$3"
+# local new="$4"
+# local suf="$5"
+# [ -z "${suf}" ] && suf='~'
+# mv -f ${fil} ${fil}${suf}
+# cat ${fil}${suf} | sed -e "s${sep}${old}${sep}${new}${sep}g" >$fil
+#}
+
+%build
+if [ -z "${CC}" ]; then
+ if [ -n "`which gcc`" ]; then
+ CC="gcc"
+ else
+ CC="cc"
+ fi
+fi
+export CC
+
+./configure --lang english
+make CC="${CC}" CDEBUGFLAGS="${RPM_OPT_FLAGS}"
+
+%install
+function CheckBuildRoot() {
+ # do a few sanity checks on the BuildRoot
+ # to make sure we don't damage a system
+ case "${RPM_BUILD_ROOT}" in
+ ''|' '|/|/bin|/boot|/dev|/etc|/home|/lib|/mnt|/root|/sbin|/tmp|/usr|/var)
+ echo "Yikes! Don't use '${RPM_BUILD_ROOT}' for a BuildRoot!"
+ echo "The BuildRoot gets deleted when this package is rebuilt;"
+ echo "something like '/tmp/build-blah' is a better choice."
+ return 1
+ ;;
+ *) return 0
+ ;;
+ esac
+}
+function CleanBuildRoot() {
+ if CheckBuildRoot; then
+ rm -rf "${RPM_BUILD_ROOT}"
+ else
+ exit 1
+ fi
+}
+CleanBuildRoot
+
+for i in \
+ %{Prefix} \
+ %{Prefix}/share \
+ %{Prefix}/share/%{Name} \
+ %{ExecPrefix} \
+; do
+ mkdir -p "${RPM_BUILD_ROOT}${i}"
+done
+
+make DESTDIR="${RPM_BUILD_ROOT}" install
+make DESTDIR="${RPM_BUILD_ROOT}" install.man
+make DESTDIR="${RPM_BUILD_ROOT}" install.share
+
+%clean
+function CheckBuildRoot() {
+ # do a few sanity checks on the BuildRoot
+ # to make sure we don't damage a system
+ case "${RPM_BUILD_ROOT}" in
+ ''|' '|/|/bin|/boot|/dev|/etc|/home|/lib|/mnt|/root|/sbin|/tmp|/usr|/var)
+ echo "Yikes! Don't use '${RPM_BUILD_ROOT}' for a BuildRoot!"
+ echo "The BuildRoot gets deleted when this package is rebuilt;"
+ echo "something like '/tmp/build-blah' is a better choice."
+ return 1
+ ;;
+ *) return 0
+ ;;
+ esac
+}
+function CleanBuildRoot() {
+ if CheckBuildRoot; then
+ rm -rf "${RPM_BUILD_ROOT}"
+ else
+ exit 1
+ fi
+}
+CleanBuildRoot
+
+%files
+%attr(- ,root,root) %doc COPYING ChangeLog INSTALL README
+%attr(0755,root,root) %{ExecPrefix}/bin/wmclock
+%attr(0755,root,root) %{ExecPrefix}/man/man1/wmclock.1*
+%attr(0755,root,root) %dir %{Prefix}/share/wmclock
+%attr(- ,root,root) %{Prefix}/share/wmclock/*
+
diff --git a/xpm/date.xpm b/xpm/date.xpm
new file mode 100644
index 0000000..2186f52
--- /dev/null
+++ b/xpm/date.xpm
@@ -0,0 +1,25 @@
+/* XPM */
+static char *date_xpm[] = {
+/* width height num_colors chars_per_pixel */
+" 95 13 4 1",
+/* colors */
+". c #000000",
+"# c #555555",
+"a c #aaaaaa",
+"b c #ffffff",
+/* pixels */
+"bbbb..bbbbbba..abbbb....abbbbbbb..bbbb......bbbbba...bbb......bbba..abbbbb...abbbbb....bbbbbbbb",
+"bbb#..bbbbb.....abb..bb..abbbbba..bbba.....bbbba...bbbb.......bba.bb.abbb..a...bbb..aa..bbbbbbb",
+"bb....bbbb..bba..bb.bbbb..bbbba...bbba.bbbbbbba..bbbbbb.bbba.abb..bb..bba.abb..abb.abba.bbbbbbb",
+"bbbb..bbbb.bbbb..bbbbbba.abbbb....bbb..bbbbbbb..bbbbbbbbbbb..bbb..bb..bb..bbbb..ba.bbbb.abbb.bb",
+"bbbb..bbbbbbbbb..bbbbba..bbbba.b..bbb....abbba..bbbbbbbbbba.abbba..b.abb..bbbb..b..bbbb..bbb.bb",
+"bbbb..bbbbbbbbb..bbbb...bbbba.ab..bbbaaa...bb......abbbbbb..bbbbb....bbb..bbbb..b..bbbb..bbbbbb",
+"bbbb..bbbbbbbba.abbbb....bbb..bb..bbbbbbb..ab..bbb..abbbbb.abbbbb....bbba..bbb..b..bbbb..bbbbbb",
+"bbbb..bbbbbbbb..bbbbbbb..aba.bbb..bbbbbbbb..b..bbbb..bbbba.bbbbb..b...bbb.......b..bbbb..bbbbbb",
+"bbbb..bbbbbbb..bbbbbbbbb..b.aaaa..abbbbbbb..b..bbbb..bbbb..bbbba.abb..abbba.a..ab..bbbb..bbbbbb",
+"bbbb..bbbbbb..bbbbbbbbbb..b........bbbbbbb..b..bbbb..bbbb.abbbb..bbbb..bbbbba..bba.bbbb.abbb.bb",
+"bbbb..bbbbb..bbbabbbbbba.abbbbbb..bbbabbba.ab..abbb.abbba.bbbbba.bbbb.abbbba..abbb.abba.bbbb.bb",
+"bbba..abbba.aaaa.bb.aba..bbbbbbb..bbb.aaa..bbb...a..bbbb..bbbbbb..aa..bbba...bbbbb..aa..bbbbbbb",
+"bb......bb.......bb....abbbbbbbb..bbb....abbbbb....bbbbb..bbbbbbba..abbb...abbbbbbb....bbbbbbbb"
+};
+
diff --git a/xpm/led.xpm b/xpm/led.xpm
new file mode 100644
index 0000000..c24e4e2
--- /dev/null
+++ b/xpm/led.xpm
@@ -0,0 +1,18 @@
+/* XPM */
+static char * led_xpm[] = {
+"122 11 4 1",
+" c None",
+". c #000000",
+"+ c #00DF00",
+"@ c #004300",
+"....++++........ at ....@++++.... at ++++....@.... at ....++++@....++++ at ...@++++.....++++.....++++.................................",
+"...+....+.......+.........+........+...+....+...+........+.............+...+....+...+....+................................",
+".. at +...@+...... at +........@+....... at +..@+... at +..@+....... at +............@+.. at +...@+.. at +...@+................................",
+"..+ at ...+@......+ at ........+@.......+ at ..+@...+ at ..+@.......+ at ............+@..+ at ...+@..+ at ...+@..+.............................",
+"..+....+.......+.........+........+...+....+...+........+.............+...+....+...+....+...+.............................",
+"..+...+........+....+++++.... at ++++....@++++.... at +++@....++++ at .........+...+++++....@++++.........+...+...+..+++..+...+....",
+".+....+.......+....+.............+........+........+...+....+........+...+....+........+........ at +...++.++..+..+.++.++....",
+"@+... at +......@+... at +............@+....... at +.......@+.. at +...@+....... at +..@+... at +.......@+..+.....+.+..+.+.+..+..+.+.+.+....",
+"+ at ...+@......+ at ...+@............+ at .......+@.......+ at ..+@...+ at .......+@..+ at ...+@.......+ at ..+....+..+.@+.. at +.@+++. at +..@+....",
+"+....+.......+....+.............+........+........+...+....+........+...+....+........+........++++.+ at ..+@.+ at ...+@..+ at ....",
+".++++........ at .....++++@... at ++++.........@... at ++++.....++++.........@....++++.... at ++++........+...+.+...+..+....+...+....."};
diff --git a/xpm/mask.xbm b/xpm/mask.xbm
new file mode 100644
index 0000000..479760c
--- /dev/null
+++ b/xpm/mask.xbm
@@ -0,0 +1,30 @@
+#define mask_width 55
+#define mask_height 57
+static unsigned char mask_bits[] = {
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0x07,0x00,0x00,0xfc,0xff,
+ 0xff,0xff,0x0f,0x00,0x00,0xfc,0xff,0xff,0xff,0x1f,0x00,0x00,0xfc,0xff,0xff,
+ 0xff,0x3f,0x00,0x00,0xfc,0xff,0xff,0xff,0x7f,0x00,0x00,0xfc,0xff,0xff,0xff,
+ 0xff,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0x01,0x00,0xfc,0xff,0xff,0xff,0xff,
+ 0x03,0x00,0xfc,0xff,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0xff,0x03,
+ 0x00,0xfc,0xff,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0xff,0x03,0x00,
+ 0xfc,0xff,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0xff,0x03,0x00,0xfc,
+ 0xff,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,
+ 0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,
+ 0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,
+ 0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0xff,
+ 0x03,0x00,0xfc,0xff,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0xff,0x03,
+ 0x00,0xfc,0xff,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0xff,0x03,0x00,
+ 0xfe,0xff,0xff,0xff,0xff,0x03,0x00,0xfe,0xff,0xff,0xff,0xff,0x03,0x00,0xfe,
+ 0xff,0xff,0xff,0xff,0x03,0x00,0xff,0xff,0xff,0xff,0xff,0x03,0x80,0xff,0xff,
+ 0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0xff,0x03,0x00,0xfc,0xff,0xff,
+ 0xff,0xff,0x03,0x00,0xfc,0xff,0xff,0xff,0xff,0x03,0x00,0xf8,0xff,0xff,0xff,
+ 0xff,0x03,0x00,0xf0,0xff,0xff,0xff,0xff,0x03};
diff --git a/xpm/mask.xpm b/xpm/mask.xpm
new file mode 100644
index 0000000..b46d1f5
--- /dev/null
+++ b/xpm/mask.xpm
@@ -0,0 +1,65 @@
+/* XPM */
+static char * mask_xpm[] = {
+"54 57 5 1",
+" c None",
+". c #404040",
+"+ c #A8A8A8",
+"@ c #000000",
+"# c #FFFFFF",
+".....................................................+",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#",
+".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#",
+"+#####################################################",
+" ",
+" ",
+" ################################# ",
+" #################################@ ",
+" #################################@@ ",
+" #################################@@@ ",
+" #################################@@@. ",
+" #################################@@@.. ",
+" #################################@@@... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" #################################@@@.... ",
+" ##################################@@@.... ",
+" ##################################@@@.... ",
+" #################################.@@@.... ",
+" ##################################.@@@.... ",
+" ##################################..@@@.... ",
+" .................................@@@.... ",
+" +++++++++++++++++++++++++++++++++@@@.... ",
+" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.... ",
+" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.... ",
+" ...................................... "};
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-wmaker/wmclock.git
More information about the Pkg-wmaker-commits
mailing list